mirror of https://gitlab.com/QEF/q-e.git
203 lines
8.7 KiB
Plaintext
203 lines
8.7 KiB
Plaintext
! Program: pp.x
|
|
! Purpose: data analysis and plotting.
|
|
! The code performs two steps:
|
|
! 1) reads the output file produced by pw.x, extract and calculate
|
|
! the desired quantity (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 are read from standard input
|
|
! or from a file and have the following format:
|
|
!
|
|
! Namelist &inputpp
|
|
! containing the variables for step 1), followed by
|
|
! Namelist &plot
|
|
! containing the variables for step 2)
|
|
!
|
|
! The two steps can be performed independently. In order to perform
|
|
! only step 2), leave namelist &inputtpp blank. In order to perform
|
|
! only step 1), do not specify namelist &plot
|
|
!
|
|
! Intermediate results from step 1 can be saved to disk (see
|
|
! (variable "filplot" in &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 "weight" and "filepp" in &plot)
|
|
!
|
|
! DESCRIPTION of the INPUT:
|
|
!
|
|
!-&inputPP Namelist &inputPP; contains
|
|
!
|
|
! prefix prefix of files saved by program pw.x
|
|
! outdir temporary directory where pw.x files resides
|
|
!
|
|
! filplot file "filplot" contains the quantity selected by plot_num
|
|
! (can be saved for further processing)
|
|
!
|
|
! plot_num selects what is saved in filplot:
|
|
! 0=charge
|
|
! 1=total potential V_bare+V_H + V_xc
|
|
! 2=local ionic potential
|
|
! 3=local density of states at e_fermi
|
|
! 4=local density of electronic entropy
|
|
! 5=STM images
|
|
! 6=spin polarization (rho(up)-rho(down))
|
|
! 7=|psi|^2 (See below)
|
|
! 8=electron localization function (ELF)
|
|
! 9=planar average of all |psi|^2
|
|
! 10=integrated local density of states (ILDOS)
|
|
! from emin to emax (emin, emax in eV)
|
|
! if emax is not specified, emax=E_fermi
|
|
! 11=the V_bare + V_H potential
|
|
! 12=the electric field potential
|
|
! 13=the noncolinear magnetization.
|
|
!
|
|
!
|
|
! plot_num=7 in the noncollinear case, plot the 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 ).
|
|
!
|
|
!
|
|
! Options for total charge
|
|
!
|
|
! spin_component 0=total charge (default value),
|
|
! 1=spin up charge,
|
|
! 2=spin down charge.
|
|
!
|
|
! Options for total potential
|
|
!
|
|
! spin_component 0=spin averaged potential (default value),
|
|
! 1=spin up potential,
|
|
! 2=spin down potential.
|
|
!
|
|
! Options for STM images:
|
|
!
|
|
! sample_bias the bias of the sample (Ryd) in stm images
|
|
! stm_wfc_matching if .t. match the wavefunctions to
|
|
! an exponentially vanishing function
|
|
! if .t. specify also (in celldm(1) units):
|
|
! z height of matching
|
|
! dz distance of next stm image calculation
|
|
!
|
|
! Options for |psi|^2:
|
|
!
|
|
! kpoint which k-point
|
|
! kband which band
|
|
! lsign if true and k point is Gamma, save |psi|^2 sign(psi)
|
|
!
|
|
! Options for ILDOS:
|
|
!
|
|
! emin lower energy boundary (in eV)
|
|
! emax upper energy boundary (in eV), i.e. compute
|
|
! ILDOS from emin to emax
|
|
!
|
|
! Options for noncolinear magnetization
|
|
!
|
|
! spin_component 0=absolute value (default value)
|
|
! 1=x component of the magnetization
|
|
! 2=y component of the magnetization
|
|
! 3=z component of the magnetization
|
|
!
|
|
! Unfinished and untested option:
|
|
!
|
|
! plot_num = 14, 15, 16 polarisation along x, y, z resp.
|
|
! epsilon = macroscopic dielectric constant
|
|
!
|
|
!-/ END of namelist &inputpp
|
|
!
|
|
!-&plot Namelist &plot; contains
|
|
!
|
|
! nfile the number of data files (OPTIONAL, default: 1)
|
|
!
|
|
!----FOR i = 1, nfile:
|
|
!
|
|
! filepp(i) nfile=1: file containing the quantity to be plotted
|
|
! nfile>1: see "weight"
|
|
! (default: filepp(1)=filplot)
|
|
! weight(i) 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)+...
|
|
! (OPTIONAL: default weight(1)=1.0)
|
|
!
|
|
! 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
|
|
!
|
|
!----END_FOR
|
|
!
|
|
! iflag 0 1D plot of the spherical average
|
|
! 1 1D plot
|
|
! 2 2D plot
|
|
! 3 3D plot
|
|
! 4 2D polar plot on a sphere
|
|
!
|
|
! output_format (ignored on 1D plot)
|
|
! 0 format suitable for gnuplot (1D)
|
|
! 1 format suitable for contour.x (2D)
|
|
! 2 format suitable for plotrho (2D)
|
|
! 3 format suitable for XCRYSDEN (1D, 2D, 3D)
|
|
! 4 format suitable for gOpenMol (3D)
|
|
! (formatted: convert to unformatted *.plt)
|
|
! 5 format suitable for XCRYSDEN (3D)
|
|
! 6 format as gaussian cube file (3D)
|
|
! (can be read by many programs)
|
|
!
|
|
!-IF iflag = 0 or 1
|
|
! REQUIRED:
|
|
! e1 3D vector which determines the plotting line
|
|
! x0 3D vector, origin of the line
|
|
! nx number of points in the line:
|
|
! rho(i) = rho( x0 + e1 * (i-1)/(nx-1) ), i=1, nx
|
|
!
|
|
!-ELSEIF iflag = 2
|
|
! REQUIRED:
|
|
! e1, e2 3D vectors which determine the plotting plane
|
|
! (must be orthogonal)
|
|
! x0 3D vector, origin of the plane
|
|
! nx, ny 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
|
|
!
|
|
!-ELSEIF iflag = 3
|
|
! OPTIONAL:
|
|
! e1, e2, e3 3D vectors which determine the plotting parallelepiped
|
|
! (if present, must be orthogonal)
|
|
! x0 3D vector, origin of the parallelepiped
|
|
! nx,ny,nz number of points in the parallelepiped:
|
|
! rho(i,j,k) = rho( x0 + e1 * (i-1)/(nx-1)
|
|
! + e2 * (j-1)/(ny-1)
|
|
! + e3 * (k-1)/(nz-1) ),
|
|
! i = 1, nx ; j = 1, ny ; k = 1, nz
|
|
!
|
|
! - If output_format = 3 (XCRYSDEN), the above variables
|
|
! are used to determine the grid to plot.
|
|
! - If 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 e1, e2, e3, x0 are present, e1 e2 e3 are parallel
|
|
! to xyz and parallel to crystal axis, a subset of the
|
|
! FFT grid that approximately covers the parallelepiped
|
|
! defined by e1, e2, e3, x0, is written (presently only
|
|
! if output_format = 4, i.e. gopenmol format) - works only
|
|
! if the crystal axis are parallel to xyz
|
|
! - Otherwise, the required 3D grid is generated from the
|
|
! Fourier components (may be VERY slow)
|
|
!
|
|
!-ELSEIF iflag = 4
|
|
! REQUIRED:
|
|
! radius Radius of the sphere (alat units), centered at (0,0,0)
|
|
! nx, ny 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 IF
|
|
! !!! x0, e1, e2, e3 are in alat units !!!
|
|
!
|
|
! fileout name of the file to which the plot is written
|
|
! (DEFAULT: standard output)
|
|
!
|
|
!-/ END of namelist &plot
|