! ! Copyright (C) 2004-2007 Quantum ESPRESSO group ! This file is distributed under the terms of the ! GNU General Public License. See the file `License' ! in the root directory of the present distribution, ! or http://www.gnu.org/copyleft/gpl.txt . ! MODULE ld1inc USE kinds, ONLY : dp USE ld1_parameters USE radial_grids, ONLY: radial_grid_type, ndmx USE paw_type, ONLY : paw_t IMPLICIT NONE SAVE PRIVATE :: nwfx, nwfsx, ncmax1 INTEGER, PARAMETER :: lmx=3, lmx2=2*lmx ! ! variables for the all-electron calculation ! INTEGER :: & nn(nwfx), & ! the main quantum number ll(nwfx), & ! the orbital angular momentum nwf, & ! the number of wavefunctions isw(nwfx), & ! spin of the wfc. if(.not.lsd) all 1 (default) nspin ! 1 (default) or 2 (if lsd=true) CHARACTER(len=2) ::& el(nwfx) ! the label of the states real(DP) :: & jj(nwfx), & ! the total angular momentum oc(nwfx), & ! the occupations of the all-electron atom zed, & ! the ionic charge enne, & ! the number of electrons sl3(0:lmx2,0:lmx2,0:lmx2) ! what is this, documented somewhere? real(DP):: & enl(nwfx), & ! the energies of the all-electron atom psi(ndmx,2,nwfx), & ! the all-electron (dirac) wavefunctions ! psi(:,1,n) = major component for state n ! psi(:,2,n) = minor component for state n rho(ndmx,2), & ! the all-electron density ! rho(:,1) = spin-up, rho(:,2) = spin-down zeta(ndmx), & ! the all-electron magnetization ! relativistic perturbative terms evel(nwfx), & ! p^4 ("velocity") correction edar(nwfx), & ! Darwin term eso(nwfx) ! spin-orbit splitting LOGICAL :: & core_state(nwfx) ! if true the state is in the core ! ! the parameters of the logarithmic mesh ! TYPE(radial_grid_type) :: grid ! ! the variables for computing logarithmic derivatives ! INTEGER :: & nld, & ! computes the log der of the last nld wavefunctions npte ! number of energy points real(DP) :: & rlderiv, & ! the radius of logarithmic derivatives eminld, & ! the minimum energy emaxld, & ! the maximum energy deld, & ! the deltae of energy rpwe ! the radius of the partial wave expansion ! ! the variables which define the pseudopotential ! INTEGER :: & nns(nwfsx), & ! the main quantum number of pseudopotential lls(nwfsx), & ! the angular momentum of pseudopotential isws(nwfsx),& ! the spin of each pseudo-wavefunctions (not used) ikk(nwfsx), & ! the maximum ik of each beta functions ik(nwfsx), & ! the ik that correspond to rcut ikus(nwfsx), & ! the ik that corresponds to rcutus nwfs, & ! the number of pseudo wavefunctions nbeta, & ! the number of projectors nsloc, & ! the wavefunction which correspond to the loc pot lloc, & ! the l component considered as local pseudotype, & ! the type of pseudopotential nstoae(nwfsx) ! for each pseudo the all-electron CHARACTER(len=2) :: & els(nwfsx) ! the label of the states real(DP) :: & enls(nwfsx), & ! the energies of the pseudo atom jjs(nwfsx), & ! the j of each wavefunction (only rel=2) ocs(nwfsx), & ! the occupations of the pseudo atom rcut(nwfsx), & ! the cut-off radius for pseudowavefunctions rcutus(nwfsx), & ! the cut-off radius for us-pseudowavefunctions rcloc, & ! cut-off for local potential ecutrho, & ! suggested cut-off for the charge ecutwfc, & ! suggested cut-off for the wavefunctions zval, & ! the ionic pseudo charge phis(ndmx,nwfsx), & ! the pseudo wavefunctions psipsus(ndmx,nwfx),& ! the all-electron wavefunctions for us pseudo rhos(ndmx,2), & ! the pseudo density zetas(ndmx), & ! the pseudo magnetization vnl(ndmx,0:3,2), & ! the pseudopotential in semilocal form betas(ndmx,nwfsx), & ! the projector functions chis(ndmx,nwfsx), & ! auxiliary functions rho0, & ! value of the charge at the origin bmat(nwfsx,nwfsx), &! the pseudo coefficients (unscreened D) ddd(nwfsx,nwfsx,2),&! the screened D qq(nwfsx,nwfsx), &! the integrals of the qvan qvan(ndmx,nwfsx,nwfsx), & ! the augmentation functions qvanl(ndmx,nwfsx,nwfsx,0:lmx2) ! the augmentation functions, l dependent LOGICAL :: & tm, &! if true use Troullier-Martins for norm-conserving PP new(nwfsx) ! if true the fit is on arbitrary energy ! ! the variable for multiconfigurations ! INTEGER :: & nconf, & ! number of configuration nstoaec(nwfsx,ncmax1),& ! correspondence all-electron test lsdts(ncmax1), & ! for each configuration the lsd nwftsc(ncmax1), & ! number of wavefunctions for each config. nntsc(nwfsx,ncmax1),lltsc(nwfsx,ncmax1),& ! the quantum numbers of ! each configuration iswtsc(nwfsx,ncmax1) ! the spin index CHARACTER(len=2) :: & eltsc(nwfsx,ncmax1) ! the labels for each configuration real(DP) :: & rcuttsc(nwfsx,ncmax1), & ! the cut-off radius of each configuration rcutustsc(nwfsx,ncmax1), & ! cut-off radius for us jjtsc(nwfsx,ncmax1), & ! the j of a configuration octsc(nwfsx,ncmax1), & ! the occupations of each configuration enltsc(nwfsx,ncmax1) ! the energies of each configuration ! ! for tests ! INTEGER :: & nnts(nwfsx), & ! the main quantum number of pseudopotential llts(nwfsx), & ! the angular momentum of pseudopotential iswts(nwfsx), & ! spin of the wfc. if(.not.lsd) all 1 (default) nstoaets(nwfsx), & ! for each test wavefunction the all-electron nwfts ! the number of pseudo wavefunctions real(DP) :: & enlts(nwfsx), & ! the energies for the test configuration phits(ndmx,nwfsx), & ! the pseudo wavefunctions rcutts(nwfsx), & ! cut-off radius for test wavefunction rcutusts(nwfsx), & ! us cut-off radii for test wavefunct. jjts(nwfsx), & ! jj of the test function (rel=2) octs(nwfsx) ! the occupation numbers CHARACTER(len=2) :: & elts(nwfsx) ! the label of the states ! ! for LDA-1/2 ! real(DP) :: rcutv ! CUT for LDA-1/2 ! ! The control of the run ! INTEGER :: & iter, & ! iteration conter lsd, & ! if true lsd calculation isic, & ! if true uses self-interaction correction latt, & ! if true Latter's correction is applied iswitch, & ! control the type of run max_out_wfc, & ! maximum number of wavefunctions written on the ! wavefunctions file. rel ! 0 nonrelativistic calculation ! 1 scalar relativistic calculation ! 2 calculation with the full dirac equation LOGICAL :: & lsmall, & ! if true writes the small component on file relpert, & ! compute relativistic perturbative corrections frozen_core, & ! if true the all-electron calculation is frozen core write_coulomb, & ! if true write a fake UPF pseudopotential file named ! X.coul (X=atomic symbol) - for usage in special cases ! when the bare coulomb potential is required noscf ! if true a hydrogenic atom is solved. The charge ! density is not computed. CHARACTER(len=4) :: & verbosity ! if 'high' writes more information on output real(DP) :: & beta, & ! the mixing parameter tr2, & ! the required precision of the scf eps0 ! the reached precision of the scf ! ! parameters for the old type pseudopotential ! INTEGER :: & lmin, & ! the minimum angular momentum lmax, & ! the maximum angular momentum nlc, & ! number of core functions nnl ! number of angular momentum functions real(DP) :: & cc(2), & ! the coeffients of the core part alpc(2), & ! the alpha parameters of the core alc(6,0:3), & ! the coefficients of the pseudopotential alps(3,0:3) ! the alpha parameters ! ! the energy parameters ! real(DP) :: & etot, & ! total energy etot0, & ! saved value of the total energy ekin, & ! kinetic energy encl, & ! nuclear Coulomb energy ehrt, & ! Hartree energy ecxc, & ! exchange-correlation energy ecc, & ! core-only contribution to the energy evxt, & ! external field energy epseu, & ! pseudopotential energy ekinc, & ! core kinetic energy ekinc0, & ! core kinetic energy ekinv, & ! valence kinetic energy enclv, enclc, & ! nuclear Coulomb energy of valence and core ehrtvv, & ! valence-valence Hartree energy ehrtcv, & ! core-valence Hartree energy ehrtcc, & ! core-core Hartree energy ae_fc_energy, & ! frozen core energy calculated with all-electron char dhrsic, & ! Hartree sic energy dxcsic, & ! exchange sic energy etots, & ! total pseudopotential energy etots0 ! saved value of the total pseudopotential energy ! ! variable for nlcc ! real(DP) :: & rcore, & ! the points where core charge is smooth rhoc(ndmx) ! the core charge LOGICAL :: & new_core_ps, & ! if true pseudize the core charge with bessel functions nlcc ! if true nlcc pseudopotential ! ! the potential for the scf ! real(DP) :: & v0(ndmx), & ! the coulomb potential vpot(ndmx,2), & ! the all-electron scf potential vxt(ndmx), & ! the external potential vh(ndmx), & ! the hartree potential vxc(ndmx,2), & ! the exchange and correlation potential exc(ndmx), & ! the exchange and correlation energy excgga(ndmx), & ! the GGA exchange and correlation energy vxcts(ndmx,2), & ! the pseudo exchange and correlation potential excts(ndmx), & ! the pseudo exchange and correlation energy excggats(ndmx),& ! the GGA exchange and correlation energy vpstot(ndmx,2),& ! the total local pseudopotential vpsloc(ndmx) ,& ! the local pseudopotential vx(ndmx,2) ,& ! the OEP-X potential (when needed) enzero(2) real(DP) :: & tau(ndmx,2), & ! kinetic energy density for metaGGA vtau(ndmx) ! potential for metaGGA real(DP), ALLOCATABLE :: & vsic(:,:), vsicnew(:), vhn1(:), egc(:) ! potentials for SIC ! LOGICAL :: lsave_wfc ! if true, wfcs (AE and PS) are saved to the UFP file ! ! variables needed for PAW dataset generation and test ! LOGICAL :: & lpaw, &! if true generate or test a PAW dataset lnc2paw, & ! if true the PAW dataset is generate from the NC one rmatch_augfun_nc, & ! if .true. the norm conserving radii are ! used to pseudize the q functions use_paw_as_gipaw ! if true, PAW data will be used for GIPAW TYPE(paw_t) :: & pawsetup ! the PAW dataset real(DP) :: & rmatch_augfun, & ! define the matching radius for paw aug.fun. psipaw(ndmx,nwfsx),& ! the all-electron wavefunctions for any beta psipaw_rel(ndmx,nwfsx),& ! the all-electron wfc small component aeccharge(ndmx), & ! true, not smoothened, AE core charge for PAW psccharge(ndmx), & ! smoothened core charge for PAW paw_energy(5,3) CHARACTER(len=20) ::& which_augfun ! choose shape of paw fun. (GAUSS, BESSEL..) ! ! conversion factor ! real(DP) :: & rytoev_fact ! Conversion from Ry and eV. A value ! different from default can be used ! to reproduce results of old papers. real(DP) :: & cau_fact ! speed of light in atomic units. ! ! Auxiliary quantities for verbose output ! real(DP) :: & aevcharge(ndmx,2) ! the all-electron valence charge ! ! file names ! CHARACTER(len=75) :: title ! the title of the run CHARACTER(len=75) :: author ! the author of the pseudopotential CHARACTER(len=240) :: prefix ! prefix for file names CHARACTER(len=256) :: & ! file_pseudo, & ! input file containing the pseudopotential file_pseudopw ! output file where the pseudopot is written LOGICAL :: & use_xsd = .FALSE. ! if .true. follow xsd schema else use upf-v2.1 format CHARACTER(len=256) :: & ! output filenames read from input, containing: file_charge, & ! all-electron total charge only file_chi, & ! chi functions file_beta, & ! beta functions file_qvan, & ! qvan functions file_screen, & ! screening potential file_core, & ! core charge file_recon ! information for paw reconstruction ! the following filenames are determined by "prefix", not read from input CHARACTER(len=256) :: & ! output files, containing: file_wfcaegen, & ! all-electron wavefunctions for generation file_wfcncgen, & ! norm-conserving wavefunctions for generation file_wfcusgen, & ! ultra-soft wavefunctions for generation file_potscf, & ! scf potential at each iteration file_wavefunctions, & ! all-electron results for orbitals file_wavefunctionsps, & ! pseudopotential results for orbitals file_logder, & ! all-electron logarithmic derivatives file_logderps, & ! pseudopotential logarithmic derivatives file_pawexp, & ! quality index of partial wave expansion file_tests ! results of pseudopotential tests ! ! vdw calculation ! LOGICAL :: vdw ! optional variable ! real(DP) :: um, & ! maximum frequency du, & ! step of frequency tr_s ! threshold for scf solution of modified Sternheimer equation ! ! test on ghosts and convergences with spherical Bessel functions ! real(DP) :: ecutmin, & ! min kinetic energy cutoff for j_l(qr) ecutmax, & ! max energy cutoff decut, & ! step: ecut = ecutmin, ecutmin+decut, ... , ecutmax rm ! radius of the box ! ! (GI)PAW reconstruction ! LOGICAL :: lgipaw_reconstruction REAL ( dp ) :: wfc_ae_recon(ndmx,nwfx) REAL ( dp ) :: wfc_ps_recon(ndmx,nwfsx) REAL ( dp ) :: wfc_us_recon(ndmx,nwfsx) ! END MODULE ld1inc