mirror of https://gitlab.com/QEF/q-e.git
566 lines
20 KiB
Modula-2
566 lines
20 KiB
Modula-2
input_description -distribution {Quantum Espresso} -package PWscf -program pp.x {
|
|
|
|
toc {}
|
|
|
|
intro {
|
|
@b {Purpose of pp.x:} data analysis and plotting.
|
|
|
|
The code performs two steps:
|
|
|
|
(1) reads the output produced by @b pw.x, extracts and calculates
|
|
the desired quantity/quantities (rho, V, ...)
|
|
|
|
(2) writes the desired quantity to file in a suitable format for
|
|
various types of plotting and various plotting programs
|
|
|
|
The input data of this program is read from standard input
|
|
or from file and has the following format:
|
|
|
|
NAMELIST @b &INPUTPP
|
|
containing the variables for step (1), followed by
|
|
|
|
NAMELIST @b &PLOT
|
|
containing the variables for step (2)
|
|
|
|
The two steps can be performed independently. In order to perform
|
|
only step (2), leave namelist @b &INPUTPP blank. In order to perform
|
|
only step (1), do not specify namelist @b &PLOT
|
|
|
|
Intermediate results from step 1 can be saved to disk (see
|
|
variable @ref filplot in @b &INPUTPP) and later read in step 2.
|
|
Since the file with intermediate results is formatted, it
|
|
can be safely transferred to a different machine. This
|
|
also allows plotting of a linear combination (for instance,
|
|
charge differences) by saving two intermediate files and
|
|
combining them (see variables @ref weight and @ref filepp in @b &PLOT)
|
|
|
|
All output quantities are in ATOMIC (RYDBERG) UNITS unless
|
|
otherwise explicitly specified.
|
|
}
|
|
|
|
namelist INPUTPP {
|
|
|
|
var prefix -type CHARACTER {
|
|
info {
|
|
prefix of files saved by program pw.x
|
|
}
|
|
}
|
|
|
|
var outdir -type CHARACTER {
|
|
info {
|
|
directory containing the input data, i.e. the same as in pw.x
|
|
}
|
|
default {
|
|
value of the @tt ESPRESSO_TMPDIR environment variable if set;
|
|
current directory ('./') otherwise
|
|
}
|
|
}
|
|
|
|
var filplot -type CHARACTER {
|
|
info {
|
|
file "filplot" contains the quantity selected by plot_num
|
|
(can be saved for further processing)
|
|
}
|
|
}
|
|
|
|
var plot_num -type INTEGER {
|
|
info {
|
|
Selects what to save in filplot:
|
|
|
|
0 = electron (pseudo-)charge density
|
|
|
|
1 = total potential V_bare + V_H + V_xc
|
|
|
|
2 = local ionic potential V_bare
|
|
|
|
3 = local density of states at specific energy or grid of energies
|
|
(number of states per volume, in bohr^3, per energy unit, in Ry)
|
|
|
|
4 = local density of electronic entropy
|
|
|
|
5 = STM images
|
|
Tersoff and Hamann, PRB 31, 805 (1985)
|
|
|
|
6 = spin polarization (rho(up)-rho(down))
|
|
|
|
7 = contribution of selected wavefunction(s) to the
|
|
(pseudo-)charge density. For norm-conserving PPs,
|
|
|psi|^2 (psi=selected wavefunction). Noncollinear case:
|
|
contribution of the given state to the charge or
|
|
to the magnetization along the direction indicated
|
|
by spin_component (0 = charge, 1 = x, 2 = y, 3 = z )
|
|
|
|
8 = electron localization function (ELF)
|
|
|
|
9 = charge density minus superposition of atomic densities
|
|
|
|
10 = integrated local density of states (ILDOS)
|
|
from @ref emin to @ref emax (emin, emax in eV)
|
|
if @ref emax is not specified, @ref emax=E_fermi
|
|
|
|
11 = the V_bare + V_H potential
|
|
|
|
12 = the sawtooth electric field potential (if present)
|
|
|
|
13 = the noncollinear magnetization.
|
|
|
|
17 = all-electron valence charge density
|
|
can be performed for PAW calculations only
|
|
requires a very dense real-space grid!
|
|
|
|
18 = The exchange and correlation magnetic field in the noncollinear case
|
|
|
|
19 = Reduced density gradient
|
|
( J. Chem. Theory Comput. 7, 625 (2011), doi:10.1021/ct100641a )
|
|
Set the isosurface between 0.3 and 0.6 to plot the
|
|
non-covalent interactions (see also plot_num = 20)
|
|
|
|
20 = Product of the electron density (charge) and the second
|
|
eigenvalue of the electron-density Hessian matrix;
|
|
used to colorize the RDG plot (plot_num = 19)
|
|
|
|
21 = all-electron charge density (valence+core).
|
|
For PAW calculations only; requires a very dense real-space grid.
|
|
|
|
}
|
|
}
|
|
|
|
choose {
|
|
when -test "plot_num=0" {
|
|
label {
|
|
Options for total charge (plot_num=0):
|
|
}
|
|
|
|
var spin_component -type INTEGER {
|
|
default 0
|
|
info {
|
|
0 = total charge (default value),
|
|
1 = spin up charge,
|
|
2 = spin down charge.
|
|
}
|
|
}
|
|
}
|
|
|
|
elsewhen -test "plot_num=1" {
|
|
label {
|
|
Options for total potential (plot_num=1):
|
|
}
|
|
|
|
var spin_component -type INTEGER {
|
|
default 0
|
|
info {
|
|
0 = spin averaged potential (default value),
|
|
1 = spin up potential,
|
|
2 = spin down potential.
|
|
}
|
|
}
|
|
}
|
|
|
|
elsewhen -test "plot_num=3" {
|
|
label {
|
|
Options for LDOS (plot_num=3):
|
|
LDOS is plotted on grid [emin, emax] with spacing delta_e.
|
|
}
|
|
|
|
var emin -type REAL {
|
|
default e_fermi
|
|
info {
|
|
lower boundary of energy grid (in eV).
|
|
|
|
Defaults to Fermi energy.
|
|
}
|
|
}
|
|
|
|
var emax -type REAL {
|
|
status OPTIONAL
|
|
info {
|
|
upper boundary of energy grid (in eV).
|
|
|
|
If not specified, LDOS is computed just for energy @ref emin
|
|
}
|
|
}
|
|
|
|
var delta_e -type REAL {
|
|
default 0.1
|
|
status OPTIONAL
|
|
info {
|
|
spacing of energy grid (in eV).
|
|
}
|
|
}
|
|
|
|
var degauss_ldos -type REAL {
|
|
default {degauss (converted to eV)}
|
|
status OPTIONAL
|
|
info {
|
|
broadening of energy levels for LDOS (in eV).
|
|
|
|
Defaults to broadening degauss specified for electronic smearing
|
|
in pw.x calculation.
|
|
}
|
|
}
|
|
}
|
|
|
|
elsewhen -test "plot_num=5" {
|
|
label {
|
|
Options for STM images (plot_num=5):
|
|
}
|
|
|
|
var sample_bias -type REAL {
|
|
info {
|
|
the bias of the sample (Ry) in stm images
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
elsewhen -test "plot_num=7" {
|
|
label {
|
|
Options for |psi|^2 (plot_num=7):
|
|
}
|
|
|
|
dimension kpoint -start 1 -end 2 -type INTEGER {
|
|
info {
|
|
Unpolarized and noncollinear case:
|
|
k-point(s) to be plotted
|
|
LSDA:
|
|
k-point(s) and spin polarization to be plotted
|
|
(spin-up and spin-down correspond to different k-points!)
|
|
|
|
To plot a single kpoint ikpt, specify kpoint=ikpt or kpoint(1)=ikpt
|
|
To plot a range of kpoints [imin, imax], specify kpoint(1)=imin and kpoint(2)=imax
|
|
}
|
|
}
|
|
|
|
dimension kband -start 1 -end 2 -type INTEGER {
|
|
info {
|
|
Band(s) to be plotted.
|
|
|
|
To plot a single band ibnd, specify kband=ibnd or kband(1)=ibnd
|
|
To plot a range of bands [imin, imax], specify kband(1)=imin and kband(2)=imax
|
|
}
|
|
}
|
|
|
|
var lsign -type LOGICAL {
|
|
info {
|
|
if true and k point is Gamma, plot |psi|^2 sign(psi)
|
|
}
|
|
}
|
|
|
|
dimension spin_component -start 1 -end 2 -type INTEGER {
|
|
default 0
|
|
status OPTIONAL
|
|
info {
|
|
@b {Noncollinear case only:}
|
|
plot the contribution of the given state(s) to the charge
|
|
or to the magnetization along the direction(s) indicated
|
|
by spin_component:
|
|
0 = charge (default),
|
|
1 = x,
|
|
2 = y,
|
|
3 = z.
|
|
|
|
Ignored in unpolarized or LSDA case
|
|
|
|
To plot a single component ispin, specify spin_component=ispin or spin_component(1)=ispin
|
|
To plot a range of components [imin, imax], specify spin_component(1)=imin and spin_component(2)=imax
|
|
}
|
|
}
|
|
}
|
|
|
|
elsewhen -test "plot_num=10" {
|
|
label {
|
|
Options for ILDOS (plot_num=10):
|
|
}
|
|
|
|
var emin -type REAL {
|
|
info {
|
|
lower energy boundary (in eV)
|
|
}
|
|
}
|
|
|
|
var emax -type REAL {
|
|
info {
|
|
upper energy boundary (in eV),
|
|
i.e. compute ILDOS from @ref emin to @ref emax
|
|
}
|
|
}
|
|
|
|
var spin_component -type INTEGER {
|
|
default 0
|
|
info {
|
|
for LSDA case only: plot the contribution to ILDOS of
|
|
0 = spin-up + spin-down (default)
|
|
1 = spin-up only
|
|
2 = spin-down only
|
|
}
|
|
}
|
|
}
|
|
|
|
elsewhen -test "plot_num=13" {
|
|
label {
|
|
Options for noncollinear magnetization (plot_num=13):
|
|
}
|
|
|
|
var spin_component -type INTEGER {
|
|
default 0
|
|
info {
|
|
0 = absolute value (default value)
|
|
1 = x component of the magnetization
|
|
2 = y component of the magnetization
|
|
3 = z component of the magnetization
|
|
}
|
|
}
|
|
}
|
|
|
|
elsewhen -test "plot_num=17" {
|
|
label {
|
|
Options for reconstructed charge density (plot_num=17):
|
|
}
|
|
|
|
var spin_component -type INTEGER {
|
|
default 0
|
|
info {
|
|
0 = total charge (default value),
|
|
1 = spin up charge,
|
|
2 = spin down charge.
|
|
}
|
|
}
|
|
}
|
|
|
|
#message {
|
|
# Unfinished and untested option:
|
|
#
|
|
# plot_num = 14, 15, 16 polarisation along x, y, z respectively.
|
|
# epsilon = macroscopic dielectric constant
|
|
#}
|
|
}
|
|
}
|
|
# END of namelist &INPUTPP
|
|
|
|
|
|
# namelist PLOT
|
|
|
|
namelist PLOT {
|
|
|
|
var nfile -type INTEGER {
|
|
default 1
|
|
status OPTIONAL
|
|
info {
|
|
the number of data files to read
|
|
}
|
|
}
|
|
|
|
group {
|
|
|
|
dimension filepp -start 1 -end nfile -type CHARACTER {
|
|
default { filepp(1)=filplot }
|
|
info {
|
|
nfile = 1 : file containing the quantity to be plotted
|
|
nfile > 1 : see @ref weight
|
|
}
|
|
}
|
|
|
|
dimension weight -start 1 -end nfile -type REAL {
|
|
default { weight(1)=1.0 }
|
|
info {
|
|
weighing factors: assuming that rho(i) is the quantity
|
|
read from filepp(i), the quantity that will be plotted is:
|
|
|
|
weight(1)*rho(1) + weight(2)*rho(2) + weight(3)*rho(3) + ...
|
|
}
|
|
}
|
|
|
|
message {
|
|
@b BEWARE: atomic coordinates are read from the first file;
|
|
if their number is different for different files,
|
|
the first file must have the largest number of atoms
|
|
}
|
|
}
|
|
|
|
var iflag -type INTEGER {
|
|
info {
|
|
0 = 1D plot of the spherical average
|
|
1 = 1D plot
|
|
2 = 2D plot
|
|
3 = 3D plot
|
|
4 = 2D polar plot on a sphere
|
|
}
|
|
}
|
|
|
|
var output_format -type INTEGER {
|
|
info {
|
|
(ignored on 1D plot)
|
|
|
|
0 = format suitable for gnuplot (1D)
|
|
|
|
1 = obsolete format no longer supported
|
|
|
|
2 = format suitable for plotrho (2D)
|
|
|
|
3 = format suitable for XCRYSDEN (2D or user-supplied 3D region)
|
|
|
|
4 = obsolete format no longer supported
|
|
|
|
5 = format suitable for XCRYSDEN (3D, using entire FFT grid)
|
|
|
|
6 = format as gaussian cube file (3D)
|
|
(can be read by many programs)
|
|
|
|
7 = format suitable for gnuplot (2D) x, y, f(x,y)
|
|
}
|
|
}
|
|
|
|
var fileout -type CHARACTER {
|
|
default { standard output }
|
|
info {
|
|
name of the file to which the plot is written
|
|
}
|
|
}
|
|
|
|
var interpolation -type CHARACTER {
|
|
default { 'fourier' }
|
|
options {
|
|
info {
|
|
Type of interpolation:
|
|
}
|
|
opt -val 'fourier' {}
|
|
opt -val 'bspline' { (EXPERIMENTAL) }
|
|
}
|
|
}
|
|
|
|
choose {
|
|
when -test "iflag = 0 or 1" {
|
|
label { the following variables are REQUIRED: }
|
|
|
|
dimension e1 -start 1 -end 3 -type REAL {
|
|
info {
|
|
3D vector which determines the plotting line (in alat units)
|
|
}
|
|
}
|
|
|
|
dimension x0 -start 1 -end 3 -type REAL {
|
|
info {
|
|
3D vector, origin of the line (in alat units)
|
|
}
|
|
}
|
|
|
|
var nx -type INTEGER {
|
|
info {
|
|
number of points in the line:
|
|
|
|
rho(i) = rho( x0 + e1 * (i-1)/(nx-1) ), i=1, nx
|
|
}
|
|
}
|
|
}
|
|
|
|
elsewhen -test "iflag = 2" {
|
|
label { the following variables are REQUIRED: }
|
|
|
|
dimensiongroup -start 1 -end 3 -type REAL {
|
|
dimension e1
|
|
dimension e2
|
|
info {
|
|
3D vectors which determine the plotting plane (in alat units)
|
|
|
|
BEWARE: @b e1 and @b e2 must be orthogonal
|
|
}
|
|
}
|
|
|
|
dimension x0 -start 1 -end 3 -type REAL {
|
|
info {
|
|
3D vector, origin of the plane (in alat units)
|
|
}
|
|
}
|
|
|
|
vargroup -type INTEGER {
|
|
var nx
|
|
var ny
|
|
info {
|
|
Number of points in the plane:
|
|
|
|
rho(i,j) = rho( x0 + e1 * (i-1)/(nx-1)
|
|
+ e2 * (j-1)/(ny-1) ), i=1,nx ; j=1,ny
|
|
}
|
|
}
|
|
}
|
|
|
|
elsewhen -test "iflag = 3" {
|
|
label { the following variables are OPTIONAL: }
|
|
|
|
dimensiongroup -start 1 -end 3 -type REAL {
|
|
dimension e1
|
|
dimension e2
|
|
dimension e3
|
|
info {
|
|
3D vectors which determine the plotting parallelepiped
|
|
(if present, must be orthogonal)
|
|
|
|
@ref e1, @ref e2, and @ref e3 are in alat units !
|
|
}
|
|
}
|
|
|
|
dimension x0 -start 1 -end 3 -type REAL {
|
|
info {
|
|
3D vector, origin of the parallelepiped
|
|
|
|
@ref x0 is in alat units !
|
|
}
|
|
}
|
|
|
|
vargroup -type INTEGER {
|
|
var nx
|
|
var ny
|
|
var nz
|
|
info {
|
|
Number of points in the parallelepiped:
|
|
|
|
rho(i,j,k) = rho( x0 + e1 * (i-1)/nx
|
|
+ e2 * (j-1)/ny
|
|
+ e3 * (k-1)/nz ),
|
|
i = 1, nx ; j = 1, ny ; k = 1, nz
|
|
|
|
- If @ref output_format = 3 (XCRYSDEN), the above variables
|
|
are used to determine the grid to plot.
|
|
|
|
- If @ref output_format = 5 (XCRYSDEN), the above variables
|
|
are ignored, the entire FFT grid is written in the
|
|
XCRYSDEN format - works for any crystal axis (VERY FAST)
|
|
|
|
- If @ref e1, @ref e2, @ref e3, @ref x0 are present,
|
|
and @ref e1, @ref e2, @ref e3 are parallel to xyz
|
|
and parallel to crystal axis, a subset of the FFT
|
|
grid that approximately covers the parallelepiped
|
|
defined by @ref e1, @ref e2, @ref e3, @ref x0, is
|
|
written - untested, might be obsolete
|
|
|
|
- Otherwise, the required 3D grid is generated from the
|
|
Fourier components (may be VERY slow)
|
|
}
|
|
}
|
|
}
|
|
|
|
elsewhen -test "iflag = 4" {
|
|
label { the following variables are REQUIRED: }
|
|
|
|
var radius -type REAL {
|
|
info {
|
|
Radius of the sphere (alat units), centered at (0,0,0)
|
|
}
|
|
}
|
|
|
|
vargroup -type INTEGER {
|
|
var nx
|
|
var ny
|
|
info {
|
|
Number of points in the polar plane:
|
|
|
|
phi(i) = 2 pi * (i - 1)/(nx-1), i=1, nx
|
|
theta(j) = pi * (j - 1)/(ny-1), j=1, ny
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
# END of namelist PLOT
|
|
}
|