mirror of https://gitlab.com/QEF/q-e.git
1323 lines
52 KiB
Fortran
1323 lines
52 KiB
Fortran
!
|
|
! Copyright (C) 2002-2003 FPMD & PWSCF 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 input_parameters
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
!
|
|
! this module contains the definitions of all input parameters for CP, FPMD &
|
|
! PWSCF codes.
|
|
! Originally written by Carlo Cavazzoni for FPMD
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
!
|
|
USE kinds
|
|
USE parameters, ONLY : nsx, natx, npkx, nbndxx, nspinx, lqmax
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
SAVE
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
! BEGIN manual
|
|
!
|
|
!
|
|
! * DESCRIPTION OF THE INPUT FILE
|
|
! (to be given as standard input)
|
|
!
|
|
! The input file has the following layout:
|
|
!
|
|
! &CONTROL
|
|
! control_parameter_1,
|
|
! control_parameter_2,
|
|
! .......
|
|
! control_parameter_Lastone
|
|
! /
|
|
! &SYSTEM
|
|
! sistem_parameter_1,
|
|
! sistem_parameter_2,
|
|
! .......
|
|
! sistem_parameter_Lastone
|
|
! /
|
|
! &ELECTRONS
|
|
! electrons_parameter_1,
|
|
! electrons_parameter_2,
|
|
! .......
|
|
! electrons_parameter_Lastone
|
|
! /
|
|
! &IONS
|
|
! ions_parameter_1,
|
|
! ions_parameter_2,
|
|
! .......
|
|
! ions_parameter_Lastone
|
|
! /
|
|
! &CELL
|
|
! cell_parameter_1,
|
|
! cell_parameter_2,
|
|
! .......
|
|
! cell_parameter_Lastone
|
|
! /
|
|
! &PHONON
|
|
! phonon_parameter_1,
|
|
! phonon_parameter_Lastone
|
|
! /
|
|
! ATOMIC_SPECIES
|
|
! slabel_1 mass_1 pseudo_file_1
|
|
! slabel_2 mass_2 pseudo_file_2
|
|
! .....
|
|
! ATOMIC_POSITIONS
|
|
! alabel_1 px_1 py_1 pz_1
|
|
! alabel_2 px_2 py_2 pz_2
|
|
! .....
|
|
! CARD_3
|
|
! ....
|
|
! CARD_N
|
|
!
|
|
! -- end of input file --
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
! CONTROL Namelist Input Parameters
|
|
!=----------------------------------------------------------------------------=!
|
|
!
|
|
! ( when appropriate default values are marked with a "*" )
|
|
!
|
|
|
|
CHARACTER(LEN=80) :: title = ' '
|
|
! title = 'title for this simulation'
|
|
|
|
CHARACTER(LEN=80) :: calculation = 'none'
|
|
! calculation = 'scf', 'relax', 'md', 'cp'*, 'vc-relax', 'vc-md',
|
|
! 'vc-cp', 'neb', 'smd', 'cp-wf'
|
|
! Specify the type of the simulation
|
|
! 'scf' = electron minimization
|
|
! 'relax' = ionic minimization
|
|
! 'cp' = Car-Parrinello MD
|
|
! 'md' = Car-Parrinello MD
|
|
! 'vc-relax' = ionic + cell minimization
|
|
! 'vc-cp' = variable-cell Car-Parrinello (-Rahman) dynamics
|
|
! 'vc-md' = variable-cell Car-Parrinello (-Rahman) dynamics
|
|
! 'neb' = NEB Method search of the Minimum Energy Path (MEP)
|
|
! 'smd' = String Method search of the Minimum Energy Path (MEP)
|
|
! 'cp-wf' = Car-Parrinello with wannier functions
|
|
|
|
|
|
CHARACTER(LEN=80) :: calculation_allowed(13)
|
|
DATA calculation_allowed / 'scf', 'nscf', 'relax', 'md', 'cp', &
|
|
'vc-relax', 'vc-md', 'vc-cp', 'phonon', 'raman', 'neb', 'smd', &
|
|
'cp-wf' /
|
|
! Allowed value for calculation parameters
|
|
|
|
|
|
CHARACTER(LEN=80) :: verbosity = 'default'
|
|
! verbosity = 'high' | 'default'* | 'low' | 'minimal'
|
|
! define the verbosity of the code output
|
|
|
|
CHARACTER(LEN=80) :: restart_mode = 'restart'
|
|
! restart_mode = 'from_scratch' | 'restart'* | 'reset_counters'
|
|
! specify how to start/restart the simulation
|
|
! 'from_scratch' start a new simulation from scratch,
|
|
! with random wave functions
|
|
! for path only : a simulation is started
|
|
! from scratch and the initial guess for the
|
|
! path is the linear interpolation between
|
|
! the initial and the final images
|
|
! 'restart' continue a previous simulation,
|
|
! and performs "nstep" new steps,
|
|
! 'reset_counters' continue a previous simulation,
|
|
! performs "nstep" new steps, resetting
|
|
! the counter and averages
|
|
|
|
INTEGER :: nstep = 10
|
|
! number of simulation steps, see "restart_mode"
|
|
|
|
INTEGER :: iprint = 10
|
|
! number of steps between successive writings of relevant physical
|
|
! quantities to standard output and to files "fort.3?" or "prefix.???"
|
|
! depending on "prefix" parameter.
|
|
! In PW iprint is compared also with convergence iterations, and
|
|
! physical quantities are written every iprint iterations
|
|
|
|
INTEGER :: isave = 100
|
|
! number of steps between successive savings of
|
|
! information needed to restart the run (see "ndr", "ndw")
|
|
! relevant only for CP and FPMD
|
|
|
|
LOGICAL :: tstress = .TRUE.
|
|
! This flag controls the printing of the stress, its value is overwritten
|
|
! and set to ".TRUE." when the cell is moving
|
|
! .TRUE. write the stress tensor to standard output every "iprint" steps
|
|
! .FALSE. do not write the stress tensor stdout
|
|
|
|
LOGICAL :: tprnfor = .TRUE.
|
|
! This flag controls the printing of the interatomic forces,
|
|
! its value is overwritten and set to ".TRUE." the ions are moving
|
|
! .TRUE. write the atomic forces to standard output every "iprint" steps
|
|
! .FALSE. do not write atomic forces to stdout
|
|
|
|
REAL(dbl) :: dt = 1.0d0
|
|
! time step of the CP molecular dynamics simulation,
|
|
! in atomic units ( 1 a.u. of time = 2.4189 * 10^-17 s ),
|
|
! for non CP calculations, this represents the time advancing parameter.
|
|
! Note: typical values for CP simulations are between 1 and 10 a.u.
|
|
! In PW dt is used for Born-Oppenheimer molecular dynamics, and
|
|
! its value is usually larger than for CP dynamics, since it is related
|
|
! only to the mass of ions.
|
|
|
|
INTEGER :: ndr = 50
|
|
! Fortran unit from which the code read the restart file
|
|
! at the beginning of the simulation, its value should be greather than 50
|
|
! and it is opened in the running directory.
|
|
|
|
INTEGER :: ndw = 50
|
|
! Fortran unit to which the code writes the restart file
|
|
! at the end of the simulation, its value should be greather than 50
|
|
! and it is opened in the running directory.
|
|
|
|
CHARACTER(LEN=256) :: outdir = './'
|
|
! specify the directory where the code opens output files
|
|
! _NOT_ for restart file
|
|
|
|
CHARACTER(LEN=256) :: prefix = 'prefix'
|
|
! specify the prefix for the output file, if not specified the
|
|
! files are opened as standard fortran units.
|
|
! The prefix does _NOT_ apply to restart file
|
|
|
|
CHARACTER(LEN=256) :: pseudo_dir = './'
|
|
! specify the directory containing the pseudopotentials
|
|
|
|
REAL(dbl) :: max_seconds = 1.0d+6
|
|
! smootly terminate program after the specified number of seconds
|
|
! this parameter is typically used to prevent an hard kill from
|
|
! the queuing system.
|
|
|
|
REAL(dbl) :: ekin_conv_thr = 1.0d-5
|
|
! convergence criterion, minimizing the electrons this criterion is met
|
|
! when "ekin < ekin_conv_thr"
|
|
! convergence is achieved when all criteria are met
|
|
|
|
REAL(dbl) :: etot_conv_thr = 1.0d-4
|
|
! convergence criterion, minimizing the ions this criterion is met
|
|
! when "etot(n+1)-etot(n) < etot_conv_thr", where "n" is the step index,
|
|
! and "etot" the DFT energy
|
|
! convergence is achieved when all criteria are met
|
|
|
|
REAL(dbl) :: forc_conv_thr = 1.0d-3
|
|
! convergence criterion, minimizing the ions this criterion is met
|
|
! when "MAXVAL(fion) < forc_conv_thr", where fion are the atomic forces
|
|
! convergence is achieved when all criteria are met
|
|
|
|
CHARACTER(LEN=80) :: disk_io = 'default'
|
|
! disk_io = 'high', 'default', 'low', 'minimal'
|
|
! Specify the amount of I/O activities ( not used in FPMD )
|
|
|
|
LOGICAL :: tefield = .FALSE.
|
|
! if .TRUE. a finite electric field is added to the local potential
|
|
! only used in PW
|
|
|
|
LOGICAL :: dipfield = .FALSE.
|
|
! if .TRUE. the dipole field is subtracted
|
|
! only used in PW
|
|
|
|
LOGICAL :: lberry = .FALSE.
|
|
! if .TRUE., calculate polarization
|
|
|
|
INTEGER :: gdir = 0
|
|
! G-vector for polarization calculation ( related to lberry )
|
|
! only used in PW
|
|
|
|
INTEGER :: nppstr = 0
|
|
! number of k-points (parallel vector) ( related to lberry )
|
|
! only used in PW
|
|
|
|
LOGICAL :: wf_collect = .FALSE.
|
|
! This flag is effective only with PW code, and controls the way
|
|
! in which wave functions are stored to disk,
|
|
! .TRUE. collect all wave functions and store them in restart file
|
|
! ( .save )
|
|
! .FALSE. do not collect wave function they are left in temporary
|
|
! local file
|
|
|
|
NAMELIST / control / title, calculation, verbosity, restart_mode, &
|
|
nstep, iprint, isave, tstress, tprnfor, dt, ndr, ndw, outdir, prefix, &
|
|
max_seconds, ekin_conv_thr, etot_conv_thr, forc_conv_thr, &
|
|
pseudo_dir, disk_io, tefield, dipfield, lberry, gdir, nppstr, &
|
|
wf_collect
|
|
|
|
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
! SYSTEM Namelist Input Parameters
|
|
!=----------------------------------------------------------------------------=!
|
|
!
|
|
INTEGER :: ibrav = 14
|
|
! index the Bravais lattice:
|
|
! ibrav structure point groups
|
|
! --- -------------- -------------------
|
|
! 1 cubic P (sc) m3m, 432, m3, <4>3m, 23
|
|
! 2 cubic F (fcc) m3m, 432, m3, <4>3m, 23
|
|
! 3 cubic I (bcc) m3m, 432, m3, <4>3m, 23
|
|
! 4 Hexagonal P 6, 6mm, 6/m, <6>, 622, 6/mmm, <6>2m
|
|
! 4 Trigonal P 3, 3m, <3>, 32, <3>m
|
|
! 5 Trigonal R 3, 3m, <3>, 32, <3>m
|
|
! 6 Tetragonal P (st) 4, 4mm, 4/m, <4>, 422, 4/mmm, <4>2m
|
|
! 7 Tetragonal I (bct) 4, 4mm, 4/m, <4>, 422, 4/mmm, <4>2m
|
|
! 8 Orthorhombic P 2mm, 222, mmm
|
|
! 12 Monoclinic P 2, 2/m, m
|
|
! 14 Triclinic P 1, <1>
|
|
!
|
|
! Note: in variable cell CP molecular dynamics, usually one do not want
|
|
! to put constraints on the cell symmetries, therefore an
|
|
! ibrav = 14 is used
|
|
|
|
REAL(dbl) :: celldm(6) = 0.0d0
|
|
! dimensions of the cell
|
|
! celldm(1) = a
|
|
! celldm(2) = b/a
|
|
! celldm(3) = c/a
|
|
! celldm(4) = cos(bc)
|
|
! celldm(5) = cos(ac)
|
|
! celldm(6) = cos(ab)
|
|
! only the celldm's that are meaningful for the Bravais lattice
|
|
! considered need be specified (others are ignored):
|
|
! ibrav = 1,2,3 : celldm(1)
|
|
! ibrav = 4,6,7 : celldm(1,3)
|
|
! ibrav = 5 : celldm(1,4)
|
|
! ibrav = 8 : celldm(1,2,3)
|
|
! ibrav = 12 : celldm(1,2,3,4)
|
|
! ibrav = 14 : celldm(1,2,3,4,5,6)
|
|
|
|
INTEGER :: nat = 0
|
|
! total number of atoms
|
|
|
|
INTEGER :: ntyp = 0
|
|
! number of atomic species
|
|
|
|
INTEGER :: nbnd = 0
|
|
! number of electronic states, this parameter is MANDATORY in FPMD
|
|
|
|
REAL(dbl):: nelec = 0.d0
|
|
! number of electrons, this parameter is MANDATORY in FPMD
|
|
! may be fractionary in PW, but not in CP and FPMD !
|
|
|
|
REAL(dbl) :: ecutwfc = 0.0d0
|
|
! energy cutoff for wave functions in k-space ( in Rydbergs )
|
|
! this parameter is MANDATORY in FPMD
|
|
|
|
REAL(dbl) :: ecutrho = 0.0d0
|
|
! energy cutoff for charge density in k-space ( in Rydbergs )
|
|
! by default its value is "4 * ecutwfc"
|
|
|
|
INTEGER :: nr1 = 0
|
|
INTEGER :: nr2 = 0
|
|
INTEGER :: nr3 = 0
|
|
! dimensions of the real space grid for charge and potentials
|
|
! presently NOT used in FPMD-N
|
|
|
|
INTEGER :: nr1s = 0
|
|
INTEGER :: nr2s = 0
|
|
INTEGER :: nr3s = 0
|
|
! dimensions of the real space grid for wavefunctions
|
|
! presently NOT used in FPMD-N
|
|
|
|
INTEGER :: nr1b = 0
|
|
INTEGER :: nr2b = 0
|
|
INTEGER :: nr3b = 0
|
|
! dimensions of the "box" grid for Ultrasoft pseudopotentials
|
|
! presently NOT used in FPMD-N
|
|
|
|
CHARACTER(LEN=80) :: occupations = 'fixed'
|
|
! occupations = 'smearing' | 'tetrahedra' | 'fixed'* | 'from_input'
|
|
! select the electronic states filling mode
|
|
! 'smearing' smearing function is used around Fermi Level
|
|
! (see "ngauss" and "dgauss")
|
|
! NOT used in FPMD-N
|
|
! 'tetrahedra' tetrahedron method
|
|
! NOT used in FPMD-N
|
|
! 'fixed' fixed occupations automatically calculated
|
|
! 'from_input' fixed occupations given in the input
|
|
! ( see card 'OCCUPATIONS' )
|
|
|
|
CHARACTER(LEN=80) :: smearing = 'gaussian'
|
|
! smearing = 'gaussian', 'methfessel-paxton', 'marzari-vanderbilt', 'fermi-dirac'
|
|
|
|
REAL(dbl) :: degauss = 0.0d0
|
|
! parameter for the smearing functions
|
|
! NOT used in FPMD-N
|
|
|
|
INTEGER :: nspin = 1
|
|
! number of spinors
|
|
! "nspin = 1" for LDA simulations
|
|
! "nspin = 2" for LSD simulations
|
|
! "nspin = 4" for NON COLLINEAR simulations
|
|
|
|
REAL(dbl) :: nelup = 0.d0, neldw = 0.d0
|
|
! meaningful only if "nspin = 2",
|
|
! "nelup" is the number of electrons with spin up
|
|
! "neldw" is the number of electrons with spin down
|
|
! Remember the following relation hold "nelec = nelup + neldw"
|
|
|
|
LOGICAL :: nosym = .TRUE.
|
|
! do not use symmetry
|
|
! NOT used in FPMD-N
|
|
|
|
REAL(dbl) :: ecfixed = 0.0d0, qcutz = 0.0d0, q2sigma = 0.0d0
|
|
! parameters for constant cut-off simulations
|
|
! "ecfixed" is the value (in Rydbergs) of the constant-cutoff
|
|
! "qcutz" and "q2sigma" are the height and the width (in Rydbergs)
|
|
! of the energy step for reciprocal vector whose square modulus
|
|
! is greater than "ecfixed"
|
|
|
|
CHARACTER(LEN=80) :: xc_type = 'PZ'
|
|
! xc_type = 'BLYP' | 'BP' | 'PBE' | 'PZ' | 'PW' | 'LDA'
|
|
! select the exchange and correlation functionals
|
|
! 'BLYP' use Becke-Lee-Yang-Parr GCC-XC Functional
|
|
! 'BP' use Becke-Perdew GCC-XC Functionals
|
|
! 'PBE' use Perdew-Burke-Ernzerhof GCC-XC Functionals
|
|
! 'PZ' use Slater X, and Perdew-Zunger C Functionals
|
|
! 'PW' use Slater X, and Perdew-Wang C Functionals
|
|
! 'LDA' use LDA xc functional: the xc potential is
|
|
! calculated through an interpolation table
|
|
|
|
REAL(dbl) :: starting_magnetization( nsx ) = 0.0d0
|
|
! ONLY PWSCF
|
|
|
|
LOGICAL :: lda_plus_u = .FALSE.
|
|
! ONLY PWSCF
|
|
|
|
REAL(dbl) :: starting_ns_eigenvalue(lqmax,nspinx,nsx)=-1.0
|
|
! ONLY PWSCF
|
|
|
|
REAL(dbl) :: hubbard_u(nsx) = 0.0d0
|
|
! ONLY PWSCF
|
|
|
|
REAL(dbl) :: hubbard_alpha(nsx) = 0.0d0
|
|
! ONLY PWSCF
|
|
|
|
CHARACTER(LEN=80) :: U_projection_type = 'atomic'
|
|
! ONLY PWSCF
|
|
|
|
REAL(dbl) :: a = 0.0d0
|
|
|
|
REAL(dbl) :: c = 0.0d0
|
|
|
|
REAL(dbl) :: b = 0.0d0
|
|
|
|
REAL(dbl) :: cosab = 0.0d0
|
|
|
|
REAL(dbl) :: cosac = 0.0d0
|
|
|
|
REAL(dbl) :: cosbc = 0.0d0
|
|
|
|
INTEGER :: edir = 0
|
|
|
|
REAL(dbl) :: emaxpos = 0.0d0
|
|
|
|
REAL(dbl) :: eopreg = 0.0d0
|
|
|
|
REAL(dbl) :: eamp = 0.0d0
|
|
|
|
LOGICAL :: noncolin = .FALSE.
|
|
|
|
LOGICAL :: lspinorb = .FALSE.
|
|
|
|
REAL(dbl) :: lambda = 1.0D0
|
|
|
|
INTEGER :: i_cons = 0
|
|
|
|
REAL(dbl) :: mcons(3,nsx) = 0.0D0
|
|
|
|
REAL(dbl) :: angle1(nsx) = 0.0D0
|
|
|
|
REAL(dbl) :: angle2(nsx) = 0.0D0
|
|
|
|
INTEGER :: report = 1
|
|
|
|
CHARACTER(LEN=80) :: sic = 'none'
|
|
! sic = 'none' | 'sic_pz' | 'sic_mac' | 'only_sich' | 'only_sicxc_pz' | 'only_sicxc_mac' |
|
|
|
|
! Where:
|
|
! 'none' => self_interaction == 0 -> no USIC
|
|
! 'sic_pz' => self_interaction == 1 -> USIC = Exc[rhoup-rhodown,0] + Uhartree[rhoup-rhodown]
|
|
!! proposed by Perdew, Zunger, PRB 23 (1981) 5048
|
|
! 'sic_mac' => self_interaction == 2 -> USIC = Exc[rhoup,rhodown] - Exc[rhopaired, rhopaired] + Uhartree[rhoup-rhodown]
|
|
!! proposed by Lundin-Eriksson, IJQC 81 (2003) 247
|
|
!! implemented by Mauri-Calandra-d'Avezac (2003/04) for one electron/hole
|
|
! 'only_sich' => self_interaction == 3 -> USIC = Uhartree[rhoup-rhodown]
|
|
!!SIcorrection only on hartree part )
|
|
! 'only_sich_pz' => self_interaction == -1 -> USIC = Exc[rhoup-rhodown,0]
|
|
!!SIcorrection only on xc by PZ
|
|
! 'only_sich_mac' => self_interaction == -2 -> USIC = Exc[rhoup,rhodown] - Exc[rhopaired, rhopaired]
|
|
!!sIcorrection only on xc by MAC:
|
|
!!rhopaired==rhodown since that the charge more is defined in the highest level and up
|
|
!!rhounpaired==rhoup-rhodown
|
|
REAL(dbl) :: sic_epsilon = 1.0d0
|
|
|
|
LOGICAL :: force_pairing = .FALSE.
|
|
! FORCEPAIRING
|
|
! paires electrons forcedly in two spin channels calculation
|
|
! works for stuctures with at most one unpaired eletron
|
|
! just a comment: nelu is the number of el with spin up
|
|
! while neld== number of el with spin down
|
|
! define the unpaired el with spin up
|
|
|
|
|
|
|
|
NAMELIST / system / ibrav, celldm, a, b, c, cosab, cosac, cosbc, nat,&
|
|
ntyp, nbnd, nelec, ecutwfc, ecutrho, nr1, nr2, nr3, nr1s, nr2s, &
|
|
nr3s, nr1b, nr2b, nr3b, nosym, starting_magnetization, &
|
|
occupations, degauss, nelup, neldw, nspin, ecfixed, &
|
|
qcutz, q2sigma, xc_type, lda_plus_U, Hubbard_U, Hubbard_alpha, &
|
|
edir, emaxpos, eopreg, eamp, smearing, starting_ns_eigenvalue, &
|
|
U_projection_type, noncolin, &
|
|
lspinorb, mcons, lambda, i_cons, angle1, angle2, report, &
|
|
sic, sic_epsilon, force_pairing
|
|
|
|
|
|
!=----------------------------------------------------------------------------=!
|
|
! ELECTRONS Namelist Input Parameters
|
|
!=----------------------------------------------------------------------------=!
|
|
|
|
REAL(dbl) :: emass = 0.0d0
|
|
! effective electron mass in the CP Lagrangian,
|
|
! in atomic units ( 1 a.u. of mass = 1/1822.9 a.m.u. = 9.10939 * 10^-31 kg )
|
|
! Typical values in CP simulation are between 100. and 1000.
|
|
|
|
REAL(dbl) :: emass_cutoff = 0.0d0
|
|
! mass cut-off (in Rydbergs) for the Fourier acceleration
|
|
! effective mass is rescaled for "G" vector components with kinetic
|
|
! energy above "emass_cutoff"
|
|
! Use a value grether than "ecutwfc" to disable Fourier acceleration.
|
|
|
|
CHARACTER(LEN=80) :: orthogonalization = 'ortho'
|
|
! orthogonalization = 'Gram-Schmidt' | 'ortho'*
|
|
! selects the orthonormalization method for electronic wave functions
|
|
! 'Gram-Schmidt' use Gram-Schmidt algorithm
|
|
! 'ortho' use iterative algorithm
|
|
|
|
REAL(dbl) :: ortho_eps = 1.d-8
|
|
! meaningful only if orthogonalization = 'ortho'
|
|
! tolerance for iterative orthonormalization,
|
|
! a value of 1.d-8 is usually sufficent
|
|
|
|
INTEGER :: ortho_max = 20
|
|
! meaningful only if orthogonalization = 'ortho'
|
|
! maximum number of iterations for orthonormalization
|
|
! usually between 15 and 30.
|
|
|
|
INTEGER :: electron_maxstep = 1000
|
|
! maximum number of steps in electronic minimization
|
|
! This parameter apply only when using 'cg' electronic or
|
|
! ionic dynamics
|
|
|
|
CHARACTER(LEN=80) :: electron_dynamics = 'none'
|
|
! electron_dynamics = 'default' | 'sd' | 'cg' | 'damp' | 'md' | 'none' | 'diis'
|
|
! set how electrons shold be moved
|
|
! 'none' electronic degrees of fredom (d.o.f.) are kept fixed
|
|
! 'sd' steepest descent algorithm is used to minimize electronic d.o.f.
|
|
! 'cg' conjugate gradient algorithm is used to minimize electronic d.o.f.
|
|
! 'diis' DIIS algorithm is used to minimize electronic d.o.f.
|
|
! 'damp' damped dynamics is used to propagate electronic d.o.f.
|
|
! 'verlet' standard Verlet algorithm is used to propagate electronic d.o.f.
|
|
! 'default' the value depends on variable "calculation"
|
|
|
|
CHARACTER(LEN=80) :: electron_dynamics_allowed(7)
|
|
DATA electron_dynamics_allowed &
|
|
/ 'default', 'sd', 'cg', 'damp', 'verlet', 'none', 'diis' /
|
|
|
|
REAL(dbl) :: electron_damping = 0.0d0
|
|
! meaningful only if " electron_dynamics = 'damp' "
|
|
! damping frequency times delta t, optimal values could be
|
|
! calculated with the formula
|
|
! sqrt(0.5*log((E1-E2)/(E2-E3)))
|
|
! where E1 E2 E3 are successive values of the DFT total energy
|
|
! in a steepest descent simulations
|
|
|
|
CHARACTER(LEN=80) :: electron_velocities = 'default'
|
|
! electron_velocities = 'zero' | 'default'*
|
|
! 'zero' restart setting electronic velocities to zero
|
|
! 'default' restart using electronic velocities of the previous run
|
|
|
|
CHARACTER(LEN=80) :: electron_temperature = 'not_controlled'
|
|
! electron_temperature = 'nose' | 'not_controlled'* | 'rescaling'
|
|
! 'nose' control electronic temperature using Nose thermostat
|
|
! see parameter "fnosee" and "ekincw"
|
|
! 'rescaling' control electronic temperature via velocities rescaling
|
|
! 'not_controlled' electronic temperature is not controlled
|
|
|
|
REAL(dbl) :: ekincw = 0.0d0
|
|
! meaningful only with "electron_temperature /= 'not_controlled' "
|
|
! value of the average kinetic energy (in atomic units) forced
|
|
! by the temperature control
|
|
|
|
REAL(dbl) :: fnosee = 0.0d0
|
|
! meaningful only with "electron_temperature = 'nose' "
|
|
! oscillation frequency of the nose thermostat (in terahertz)
|
|
|
|
CHARACTER(LEN=80) :: startingwfc = 'random'
|
|
! startingwfc = 'atomic' | 'random'* | 'none'
|
|
! define how the code should initialize the wave function
|
|
! 'atomic' start from superposition of atomic wave functions
|
|
! 'random' start from random wave functions
|
|
|
|
REAL(dbl) :: ampre = 0.0d0
|
|
! meaningful only if "startingwfc = 'random'", amplitude of the
|
|
! randomization ( allowed values: 0.0 - 1.0 )
|
|
|
|
REAL(dbl) :: grease = 0.0d0
|
|
! a number <= 1, very close to 1: the damping in electronic
|
|
! damped dynamics is multiplied at each time step by "grease"
|
|
! (avoids overdamping close to convergence: Obsolete ?)
|
|
! grease = 1 : normal damped dynamics
|
|
! NOT used in FPMD
|
|
|
|
INTEGER :: empty_states_nbnd = 0
|
|
! number of empty states to be calculated every iprint steps
|
|
! default value is zero
|
|
|
|
INTEGER :: empty_states_maxstep = 100
|
|
! meaningful only with "empty_states_nbnd > 0 "
|
|
! maximum number of iteration in the empty states calculation
|
|
! default is 100
|
|
|
|
REAL(dbl) :: empty_states_delt = 1.0d0
|
|
! meaningful only with "empty_states_nbnd > 0 "
|
|
! fictitious time step to be used in the empty states iteration
|
|
! default value is "dt"
|
|
|
|
REAL(dbl) :: empty_states_emass = 500.0d0
|
|
! meaningful only with "empty_states_nbnd > 0 "
|
|
! fictitious electronic mass to be used in the empty states iteration
|
|
! default value is "emass"
|
|
|
|
REAL(dbl) :: empty_states_ethr = 1.d-4
|
|
! meaningful only with "empty_states_nbnd > 0 "
|
|
! wave function gradient threshold, for convergence of empty states
|
|
! default value is ekin_conv_thr
|
|
|
|
INTEGER :: diis_size = 0
|
|
! meaningful only with " electron_dynamics = 'diis' "
|
|
! size of the matrix used for the inversion in the iterative subspace
|
|
! default is 4, allowed value 1-5
|
|
|
|
INTEGER :: diis_nreset = 0
|
|
! meaningful only with " electron_dynamics = 'diis' "
|
|
! number of steepest descendent step after a reset of the diis
|
|
! iteration, default value is 3
|
|
|
|
REAL(dbl) :: diis_hcut = 0.d0
|
|
! meaningful only with " electron_dynamics = 'diis' "
|
|
! energy cutoff (a.u.), above which an approximate diagonal
|
|
! hamiltonian is used in finding the direction to the minimum
|
|
! default is "1.0"
|
|
|
|
REAL(dbl) :: diis_wthr = 1.d-4
|
|
! meaningful only with " electron_dynamics = 'diis' "
|
|
! convergence threshold for wave function
|
|
! this criterion is satisfied when the maximum change
|
|
! in the wave functions component between two diis steps
|
|
! is less than this threshold
|
|
! default value is ekin_conv_thr
|
|
|
|
REAL(dbl) :: diis_delt = 1.0d0
|
|
! meaningful only with " electron_dynamics = 'diis' "
|
|
! electronic time step used in the steepest descendent step
|
|
! default is "dt"
|
|
|
|
INTEGER :: diis_maxstep = 100
|
|
! meaningful only with " electron_dynamics = 'diis' "
|
|
! maximum number of iteration in the diis minimization
|
|
! default is electron_maxstep
|
|
|
|
LOGICAL :: diis_rot = .FALSE.
|
|
! meaningful only with " electron_dynamics = 'diis' "
|
|
! if "diis_rot = .TRUE." enable diis with charge mixing and rotations
|
|
! default is "diis_rot = .FALSE."
|
|
|
|
REAL(dbl) :: diis_fthr = 1.d-3
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! convergence threshold for ionic force
|
|
! this criterion is satisfied when the maximum change
|
|
! in the atomic force between two diis steps
|
|
! is less than this threshold
|
|
! default value is "0.0"
|
|
|
|
REAL(dbl) :: diis_temp = 0.0d0
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! electronic temperature, significant only if ???
|
|
|
|
REAL(dbl) :: diis_achmix = 0.0d0
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! "A" parameter in the charge mixing formula
|
|
! chmix = A * G^2 / (G^2 + G0^2) , G represents reciprocal lattice vectors
|
|
|
|
REAL(dbl) :: diis_g0chmix = 0.0d0
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! "G0^2" parameter in the charge mixing formula
|
|
|
|
INTEGER :: diis_nchmix = 0
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! dimension of the charge mixing
|
|
|
|
REAL(dbl) :: diis_g1chmix = 0.0d0
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! "G1^2" parameter in the charge mixing formula
|
|
! metric = (G^2 + G1^2) / G^2 , G represents reciprocal lattice vectors
|
|
|
|
INTEGER :: diis_nrot(3) = 0
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! start upgrading the charge density every "diis_nrot(1)" steps,
|
|
! then every "diis_nrot(2)", and at the end every "diis_nrot(3)",
|
|
! depending on "diis_rothr"
|
|
|
|
REAL(dbl) :: diis_rothr(3) = 1.d-4
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! threshold on the charge difference between two diis step
|
|
! when max charge difference is less than "diis_rothr(1)", switch
|
|
! between the "diis_nrot(1)" upgrade frequency to "diis_nrot(2)",
|
|
! then when the max charge difference is less than "diis_rothr(2)",
|
|
! switch between "diis_nrot(2)" and "diis_nrot(3)", upgrade frequency,
|
|
! finally when the max charge difference is less than "diis_nrot(3)"
|
|
! convergence is achieved
|
|
|
|
REAL(dbl) :: diis_ethr = 1.d-4
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! convergence threshold for energy
|
|
! this criterion is satisfied when the change
|
|
! in the energy between two diis steps
|
|
! is less than this threshold
|
|
! default value is etot_conv_thr
|
|
|
|
LOGICAL :: diis_chguess = .FALSE.
|
|
! meaningful only with "electron_dynamics='diis' " and "diis_rot=.TRUE."
|
|
! if "diis_chguess = .TRUE." enable charge density guess
|
|
! between two diis step, defaut value is "diis_chguess = .FALSE."
|
|
|
|
CHARACTER(LEN=80) :: mixing_mode = 'default'
|
|
! mixing = ????
|
|
! define how to mix wave functions
|
|
! NOT used in FPMD
|
|
|
|
REAL(dbl) :: mixing_beta = 0.0d0
|
|
! parameter for wave function mixing
|
|
! NOT used in FPMD
|
|
|
|
INTEGER :: mixing_ndim = 0
|
|
! dimension of wave function mixing
|
|
! NOT used in FPMD
|
|
|
|
CHARACTER(LEN=80) :: diagonalization = 'cg'
|
|
! diagonalization = 'cg' | 'david' | 'david_overlap' | 'diis'
|
|
! NOTA: 'david' e 'david_overlap' per eliminare la variabile "loverlap"
|
|
! NOT used in FPMD
|
|
|
|
REAL(dbl) :: diago_thr_init = 0.D0
|
|
! convergence threshold for the firts iterative diagonalization.
|
|
! NOT used in FPMD
|
|
|
|
INTEGER :: diago_cg_maxiter = 100
|
|
! NOT used in FPMD
|
|
|
|
INTEGER :: diago_david_ndim = 10
|
|
! NOT used in FPMD
|
|
|
|
INTEGER :: diago_diis_ndim = 10
|
|
! NOT used in FPMD
|
|
|
|
REAL(dbl) :: conv_thr = 1.d-6
|
|
! convergence threshold in electronic ONLY minimizations
|
|
! NOT used in FPMD
|
|
|
|
INTEGER :: mixing_fixed_ns = 0
|
|
! PWSCF only
|
|
! NOT used in FPMD
|
|
|
|
CHARACTER(LEN=80) :: startingpot = 'potfile'
|
|
! specify the file containing the DFT potential of the system
|
|
! NOT used in FPMD
|
|
|
|
NAMELIST / electrons / emass, emass_cutoff, orthogonalization, &
|
|
electron_maxstep, ortho_eps, ortho_max, electron_dynamics, &
|
|
electron_damping, electron_velocities, electron_temperature, &
|
|
ekincw, fnosee, ampre, grease, empty_states_nbnd, &
|
|
empty_states_maxstep, empty_states_delt, empty_states_emass, &
|
|
empty_states_ethr, diis_size, diis_nreset, diis_hcut, &
|
|
diis_wthr, diis_delt, diis_maxstep, diis_rot, diis_fthr, &
|
|
diis_temp, diis_achmix, diis_g0chmix, diis_g1chmix, &
|
|
diis_nchmix, diis_nrot, diis_rothr, diis_ethr, diis_chguess, &
|
|
mixing_mode, mixing_beta, mixing_ndim, mixing_fixed_ns, &
|
|
diago_cg_maxiter, diago_david_ndim, diagonalization, &
|
|
startingpot, startingwfc , conv_thr, diago_diis_ndim, &
|
|
diago_thr_init
|
|
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
! IONS Namelist Input Parameters
|
|
!=----------------------------------------------------------------------------=!
|
|
!
|
|
|
|
CHARACTER(LEN=80) :: ion_dynamics = 'none'
|
|
! ion_dynamics = 'sd' | 'cg' | 'damp' | 'verlet' | 'bfgs' |
|
|
! 'old-bfgs' | 'none'*
|
|
! set how ions shold be moved
|
|
! 'none' ions are kept fixed
|
|
! 'bfgs' a new BFGS algorithm is used to minimize ionic configuration
|
|
! 'old-bfgs' old BFGS algorithm is used to minimize ionic configuration
|
|
! 'sd' steepest descent algorithm is used to minimize ionic configuration
|
|
! 'cg' conjugate gradient algorithm is used to minimize ionic configuration
|
|
! 'damp' damped dynamics is used to propagate ions
|
|
! 'verlet' standard Verlet algorithm is used to propagate ions
|
|
|
|
CHARACTER(LEN=80) :: ion_dynamics_allowed(10)
|
|
DATA ion_dynamics_allowed / 'sd', 'cg', 'damp', 'verlet', 'none', &
|
|
'bfgs', 'old-bfgs', 'constrained-damp', &
|
|
'constrained-verlet', 'beeman' /
|
|
|
|
REAL(dbl) :: ion_radius(nsx) = 0.5d0
|
|
! pseudo-atomic radius of the i-th atomic species
|
|
! (for Ewald summation), values between 0.5 and 2.0 are usually used.
|
|
|
|
REAL(dbl) :: ion_damping = 0.2d0
|
|
! meaningful only if " ion_dynamics = 'damp' "
|
|
! damping frequency times delta t, optimal values could be
|
|
! calculated with the formula
|
|
! sqrt(0.5*log((E1-E2)/(E2-E3)))
|
|
! where E1 E2 E3 are successive values of the DFT total energy
|
|
! in a ionic steepest descent simulation
|
|
|
|
CHARACTER(LEN=80) :: ion_positions = 'default'
|
|
! ion_positions = 'default'* | 'from_input'
|
|
! 'default' restart the simulation with atomic positions read
|
|
! from the restart file
|
|
! 'from_input' restart the simulation with atomic positions read
|
|
! from standard input ( see the card 'ATOMIC_POSITIONS' )
|
|
|
|
CHARACTER(LEN=80) :: ion_velocities = 'default'
|
|
! ion_velocities = 'zero' | 'default'* | 'random' | 'from_input'
|
|
! 'default' restart the simulation with atomic velocities read
|
|
! from the restart file
|
|
! 'random' start the simulation with random atomic velocities
|
|
! 'from_input' restart the simulation with atomic velocities read
|
|
! from standard input (see the card 'ATOMIC_VELOCITIES' )
|
|
! 'zero' restart the simulation with atomic velocities set to zero
|
|
|
|
CHARACTER(LEN=80) :: ion_temperature = 'not_controlled'
|
|
! ion_temperature = 'nose' | 'not_controlled'* | 'rescaling'
|
|
! 'nose' control ionic temperature using Nose thermostat
|
|
! see parameters "fnosep" and "tempw"
|
|
! 'rescaling' control ionic temperature via velocities rescaling
|
|
! see parameter "tolp"
|
|
! 'not_controlled' ionic temperature is not controlled
|
|
|
|
REAL(dbl) :: tempw = 300.0d0
|
|
! meaningful only with "ion_temperature /= 'not_controlled' "
|
|
! value of the ionic temperature (in Kelvin) forced
|
|
! by the temperature control
|
|
|
|
REAL(dbl) :: fnosep = 50.0d0
|
|
! meaningful only with "ion_temperature = 'nose' "
|
|
! oscillation frequency of the nose thermostat (in terahertz)
|
|
|
|
REAL(dbl) :: tolp = 50.0d0
|
|
! meaningful only with "ion_temperature = 'rescaling' "
|
|
! tolerance (in Kelvin) of the rescaling. When ionic temperature
|
|
! differs from "tempw" more than "tolp" apply rescaling.
|
|
|
|
LOGICAL :: tranp(nsx) = .FALSE.
|
|
! tranp(i) control the randomization of the i-th atomic specie
|
|
! .TRUE. randomize ionic positions ( see "amprp" )
|
|
! .FALSE. do nothing
|
|
|
|
REAL(dbl) :: amprp(nsx) = 0.0d0
|
|
! amprp(i) meaningful only if "tranp(i) = .TRUE.", amplitude of the
|
|
! randomization ( allowed values: 0.0 - 1.0 ) for the i-th atomic specie.
|
|
! Add to the positions a random displacements vector ( in bohr radius )
|
|
! defined as: amprp( i ) * ( X, Y, Z )
|
|
! where X, Y, Z are pseudo random number in the interval [ -0.5 , 0.5 ]
|
|
|
|
REAL(dbl) :: greasp = 0.0d0
|
|
! same as "grease", for ionic damped dynamics
|
|
! NOT used in FPMD
|
|
|
|
INTEGER :: ion_nstepe = 1
|
|
! number of electronic steps for each ionic step
|
|
|
|
INTEGER :: ion_maxstep = 1000
|
|
! maximum number of step in ionic minimization
|
|
|
|
REAL(dbl) :: upscale = 0.0d0
|
|
! This variable is NOT used in FPMD
|
|
|
|
CHARACTER(LEN=80) :: potential_extrapolation = 'default'
|
|
! This variable is used only by PWSCF
|
|
! NOT used in FPMD
|
|
|
|
!
|
|
! ... variables added for "path" calculations
|
|
!
|
|
|
|
INTEGER :: input_images = 0
|
|
|
|
INTEGER :: num_of_images = 0
|
|
|
|
CHARACTER(LEN=80) :: CI_scheme = 'no-CI'
|
|
! CI_scheme = 'no-CI' | 'highest-TS' | 'all-SP' | 'manual'
|
|
! set the Climbing Image scheme
|
|
! 'no-CI' Climbing Image is not used
|
|
! 'highest-TS' Standard Climbing Image
|
|
! 'all-SP' not implemented
|
|
! 'manual' not implemented
|
|
|
|
CHARACTER(LEN=80) :: CI_scheme_allowed(4)
|
|
DATA CI_scheme_allowed / 'no-CI', 'highest-TS', 'all-SP', 'manual' /
|
|
|
|
LOGICAL :: first_last_opt = .FALSE.
|
|
|
|
LOGICAL :: reset_vel = .FALSE.
|
|
|
|
LOGICAL :: write_save = .FALSE.
|
|
|
|
CHARACTER(LEN=80) :: minimization_scheme = 'quick-min'
|
|
! minimization_scheme = 'quick-min' | 'damped-dyn' |
|
|
! 'mol-dyn' | 'sd'
|
|
! set the minimization algorithm
|
|
! 'quick-min' projected molecular dynamics
|
|
! 'damped-dyn' damped molecular dynamics
|
|
! 'mol-dyn' constant temperature molecular dynamics
|
|
! 'sd' steepest descent
|
|
|
|
CHARACTER(LEN=80) :: minimization_scheme_allowed(4)
|
|
DATA minimization_scheme_allowed / 'quick-min', 'damped-dyn', &
|
|
'mol-dyn', 'sd' /
|
|
|
|
REAL (KIND=DP) :: damp = 1.D0
|
|
! meaningful only when minimization_scheme = 'damped-verlet'
|
|
|
|
REAL (KIND=DP) :: temp_req = 0.D0
|
|
! meaningful only when minimization_scheme = 'sim-annealing'
|
|
|
|
REAL (KIND=DP) :: ds = 1.5D0
|
|
|
|
REAL (KIND=DP) :: k_max = 0.1D0, k_min = 0.1D0
|
|
|
|
REAL (KIND=DP) :: path_thr = 0.05D0
|
|
|
|
!
|
|
! ... variables added for new BFGS algorithm
|
|
!
|
|
|
|
INTEGER :: lbfgs_ndim = 1
|
|
|
|
REAL(KIND=DP) :: trust_radius_max = 0.5D0
|
|
REAL(KIND=DP) :: trust_radius_min = 1.D-5
|
|
REAL(KIND=DP) :: trust_radius_ini = 0.5D0
|
|
REAL(KIND=DP) :: trust_radius_end = 1.D-7
|
|
|
|
REAL(KIND=DP) :: w_1 = 0.5D-1
|
|
REAL(KIND=DP) :: w_2 = 0.5D0
|
|
|
|
REAL(KIND=DP) :: sic_rloc = 0.0d0
|
|
|
|
!
|
|
! ... variable added for SMD ( Y.K. 04/15/2004 )
|
|
!
|
|
|
|
LOGICAL :: smd_polm = .FALSE.
|
|
! polynomial interpolation for the initial path.
|
|
|
|
INTEGER :: smd_kwnp = 2
|
|
! # of known points for polm. interp.
|
|
|
|
LOGICAL :: smd_linr = .FALSE.
|
|
! linear interpolation for the initial path.
|
|
|
|
LOGICAL :: smd_stcd = .FALSE.
|
|
! for molecular reactions, make the 6 degrees of
|
|
! the same to prevent rotation and translation
|
|
! at the initial state.
|
|
|
|
INTEGER :: smd_stcd1, smd_stcd2, smd_stcd3
|
|
! for STCD = .true.
|
|
|
|
INTEGER :: smd_codf = 50, smd_forf = 50, smd_smwf = 1
|
|
! Frequency of writing coord, force, replica
|
|
! files
|
|
|
|
INTEGER :: smd_lmfreq = 1
|
|
! Frequencey of computing the Lag. mul.
|
|
|
|
REAL (KIND=DP) :: smd_tol = 0.0001
|
|
! Tolerance in constraints in units of
|
|
! [alpha(k)-alpha(k-1)] - 1/SM_P
|
|
!
|
|
|
|
INTEGER :: smd_maxlm = 10
|
|
! Max number of iterations for calculating
|
|
! Lag. mul.
|
|
|
|
LOGICAL :: smd_smcp = .TRUE.
|
|
LOGICAL :: smd_smopt = .FALSE.
|
|
LOGICAL :: smd_smlm = .FALSE.
|
|
LOGICAL :: smd_splc = .FALSE.
|
|
! smcp for regular elec min.
|
|
! smopt for the minimization of initial & final
|
|
! state
|
|
! smlm for SMD.
|
|
! splc for future sp locater using SMD.
|
|
|
|
REAL (KIND=DP) :: smd_ene_ini = 1.d0
|
|
REAL (KIND=DP) :: smd_ene_fin = 1.d0
|
|
!
|
|
REAL (KIND=DP) :: smd_spal = 1.d0
|
|
|
|
|
|
|
|
|
|
NAMELIST / ions / ion_dynamics, ion_radius, ion_damping, ion_positions, &
|
|
ion_velocities, ion_temperature, tempw, fnosep, tranp, amprp, greasp, &
|
|
tolp, ion_nstepe, ion_maxstep, upscale, potential_extrapolation, &
|
|
num_of_images, CI_scheme, minimization_scheme, first_last_opt, &
|
|
reset_vel, write_save, damp, temp_req, ds, k_max, k_min, path_thr, &
|
|
trust_radius_max, trust_radius_min, trust_radius_ini, trust_radius_end, &
|
|
w_1, w_2, lbfgs_ndim, sic_rloc, &
|
|
smd_polm, smd_kwnp, smd_linr, smd_stcd, smd_stcd1, smd_stcd2, smd_stcd3, &
|
|
smd_codf, smd_forf, smd_smwf, smd_lmfreq, smd_tol, smd_maxlm, smd_smcp, &
|
|
smd_smopt, smd_smlm, smd_ene_ini, smd_ene_fin
|
|
|
|
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
! CELL Namelist Input Parameters
|
|
!=----------------------------------------------------------------------------=!
|
|
!
|
|
|
|
CHARACTER(LEN=80) :: cell_parameters = 'default'
|
|
! cell_parameters = 'default'* | 'from_input'
|
|
! 'default' restart the simulation with cell parameters read
|
|
! from the restart file or "celldm" if "restart = 'from_scratch'"
|
|
! 'from_input' restart the simulation with cell parameters
|
|
! from standard input ( see the card 'CELL_PARAMETERS' )
|
|
|
|
CHARACTER(LEN=80) :: cell_dynamics = 'none'
|
|
! cell_dynamics = 'sd' | 'pr' | 'none'*
|
|
! set how cell shold be moved
|
|
! 'none' cell is kept fixed
|
|
! 'sd' steepest descent algorithm is used to minimize the cell
|
|
! 'pr' standard Verlet algorithm is used to propagate the cell
|
|
|
|
CHARACTER(LEN=80) :: cell_dynamics_allowed(6)
|
|
DATA cell_dynamics_allowed / 'sd', 'pr', 'none', 'w', 'damp-pr', 'damp-w' /
|
|
|
|
CHARACTER(LEN=80) :: cell_velocities = 'default'
|
|
! cell_velocities = 'zero' | 'default'*
|
|
! 'zero' restart setting cell velocitiy to zero
|
|
! 'default' restart using cell velocity of the previous run
|
|
|
|
REAL(dbl) :: press = 0.0d0
|
|
! external pressure (in GPa, remember 1 kbar = 10^8 Pa)
|
|
|
|
REAL(dbl) :: wmass = 0.0d0
|
|
! effective cell mass in the Parrinello-Rahman Lagrangian (in atomic units)
|
|
! of the order of magnitude of the total atomic mass
|
|
! (sum of the mass of the atoms) within the simulation cell.
|
|
! if you do not specify this parameters, the code will compute
|
|
! its value based on some physical consideration
|
|
|
|
CHARACTER(LEN=80) :: cell_temperature = 'not_controlled'
|
|
! cell_temperature = 'nose' | 'not_controlled'* | 'rescaling'
|
|
! 'nose' control cell temperature using Nose thermostat
|
|
! see parameters "fnoseh" and "temph"
|
|
! 'rescaling' control cell temperature via velocities rescaling
|
|
! 'not_controlled' cell temperature is not controlled
|
|
! NOT used in FPMD
|
|
|
|
REAL(dbl) :: temph = 0.0d0
|
|
! meaningful only with "cell_temperature /= 'not_controlled' "
|
|
! value of the cell temperature (in Kelvin) forced
|
|
! by the temperature control
|
|
|
|
REAL(dbl) :: fnoseh = 1.0d0
|
|
! meaningful only with "cell_temperature = 'nose' "
|
|
! oscillation frequency of the nose thermostat (in terahertz)
|
|
|
|
REAL(dbl) :: greash = 0.0d0
|
|
! same as "grease", for cell damped dynamics
|
|
|
|
CHARACTER(LEN=80) :: cell_dofree = 'all'
|
|
! cell_dofree = 'all'* | 'volume' | 'x' | 'y' | 'z' | 'xy' | 'xz' | 'yz' | 'xyz'
|
|
! select which of the cell parameters should be moved
|
|
! 'all' all axis and angles are propagated (default)
|
|
! 'volume' the cell is simply rescaled, without changing the shape
|
|
! 'x' only the "x" axis is moved
|
|
! 'y' only the "y" axis is moved
|
|
! 'z' only the "z" axis is moved
|
|
! 'xy' only the "x" and "y" axis are moved, angles are unchanged
|
|
! 'xz' only the "x" and "z" axis are moved, angles are unchanged
|
|
! 'yz' only the "y" and "z" axis are moved, angles are unchanged
|
|
! 'xyz' "x", "y" and "z" axis are moved, angles are unchanged
|
|
|
|
REAL(dbl) :: cell_factor = 0.0d0
|
|
! NOT used in FPMD
|
|
|
|
INTEGER :: cell_nstepe = 1
|
|
! number of electronic steps for each cell step
|
|
|
|
REAL(dbl) :: cell_damping = 0.0d0
|
|
! meaningful only if " cell_dynamics = 'damp' "
|
|
! damping frequency times delta t, optimal values could be
|
|
! calculated with the formula
|
|
! sqrt(0.5*log((E1-E2)/(E2-E3)))
|
|
! where E1 E2 E3 are successive values of the DFT total energy
|
|
! in a ionic steepest descent simulation
|
|
|
|
NAMELIST / cell / cell_parameters, cell_dynamics, cell_velocities, press, &
|
|
wmass, cell_temperature, temph, fnoseh, cell_dofree, greash, cell_factor, &
|
|
cell_nstepe, cell_damping
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
! PHONON Namelist Input Parameters
|
|
!=----------------------------------------------------------------------------=!
|
|
!
|
|
|
|
INTEGER :: modenum = 0
|
|
|
|
integer :: nq1, nq2, nq3
|
|
! number of q points in each direction
|
|
|
|
REAL(dbl) :: xqq(3) = 0.0d0
|
|
! coordinates of q point for phonon calculation
|
|
|
|
real(dbl) :: tr2_ph
|
|
|
|
NAMELIST / phonon / modenum, xqq, nq1, nq2, nq3, tr2_ph
|
|
|
|
!=----------------------------------------------------------------------------=!
|
|
! RAMAN Namelist Input Parameters
|
|
!=----------------------------------------------------------------------------=!
|
|
|
|
real(dbl) :: b_length
|
|
! length of the b-vector
|
|
logical :: lcart
|
|
! cartesian directions
|
|
|
|
NAMELIST / raman / b_length, lcart
|
|
|
|
! END manual
|
|
! ----------------------------------------------------------------------
|
|
|
|
|
|
! ----------------------------------------------------------------
|
|
! BEGIN manual
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
! CARDS parameters
|
|
!=----------------------------------------------------------------------------=!
|
|
!
|
|
! Note: See file read_cards.f90 for card syntax and usage
|
|
!
|
|
! ATOMIC_SPECIES
|
|
!
|
|
CHARACTER(LEN=4) :: atom_label(nsx) = 'XX' ! label of the atomic species being read
|
|
CHARACTER(LEN=80) :: atom_pfile(nsx) = 'YY' ! pseudopotential file name
|
|
REAL(dbl) :: atom_mass(nsx) = 0.0d0 ! atomic mass of the i-th atomic species
|
|
! in atomic mass units: 1 a.m.u. = 1822.9 a.u. = 1.6605 * 10^-27 kg
|
|
LOGICAL :: taspc = .FALSE.
|
|
|
|
!
|
|
! ATOMIC_POSITIONS
|
|
!
|
|
REAL(dbl) :: rd_pos(3,natx) = 0.0d0 ! unsorted position from input
|
|
INTEGER :: sp_pos(natx) = 0
|
|
INTEGER :: if_pos(3,natx) = 1
|
|
INTEGER :: id_loc(natx) = 0
|
|
INTEGER :: na_inp(nsx) = 0 ! number of atom for each specie
|
|
LOGICAL :: tapos = .FALSE.
|
|
CHARACTER(LEN=80) :: atomic_positions = 'crystal'
|
|
! atomic_positions = 'bohr' | 'angstrong' | 'crystal' | 'alat'
|
|
! select the units for the atomic positions being read from stdin
|
|
|
|
!
|
|
! ... variable added for NEB ( C.S. 17/10/2003 )
|
|
!
|
|
|
|
REAL (KIND=DP), ALLOCATABLE :: pos(:,:)
|
|
|
|
|
|
|
|
!
|
|
! ION_VELOCITIES
|
|
!
|
|
REAL(dbl) :: rd_vel(3,natx) = 0.0d0 ! unsorted velocities from input
|
|
INTEGER :: sp_vel(natx) = 0
|
|
LOGICAL :: tavel = .FALSE.
|
|
|
|
!
|
|
! KPOINTS
|
|
!
|
|
! ... k-points inputs
|
|
LOGICAL :: tk_inp = .FALSE.
|
|
REAL(dbl) :: xk(3,npkx) = 0.0d0, wk(npkx) = 0.0d0
|
|
INTEGER :: nkstot = 0, nk1 = 0, nk2 = 0, nk3 = 0, k1 = 0, k2 = 0, k3 = 0
|
|
CHARACTER(LEN=80) :: k_points = 'gamma'
|
|
! k_points = 'automatic' | 'crystal' | 'tpiba' | 'gamma'*
|
|
! select the k points mesh
|
|
! 'automatic' k points mesh is generated automatically
|
|
! with Monkhorst-Pack algorithm
|
|
! 'crystal' k points mesh is given in stdin in scaled units
|
|
! 'tpiba' k points mesh is given in stdin in units of ( 2 PI / alat )
|
|
! 'gamma' only gamma point is used ( default in CPMD simulation )
|
|
|
|
|
|
!
|
|
! NEWNFI
|
|
!
|
|
LOGICAL :: tnewnfi_card = .FALSE.
|
|
INTEGER :: newnfi_card = 0
|
|
|
|
!
|
|
! 2DPROCMESH
|
|
!
|
|
LOGICAL :: t2dpegrid_inp = .FALSE.
|
|
|
|
!
|
|
! OCCUPATIONS
|
|
!
|
|
REAL(dbl) :: f_inp(nbndxx, nspinx) = 0.0d0
|
|
LOGICAL :: tf_inp = .FALSE.
|
|
|
|
!
|
|
! VHMEAN
|
|
!
|
|
! ... card planar mean of the Hartree potential
|
|
LOGICAL :: tvhmean_inp = .FALSE.
|
|
INTEGER :: vhnr_inp = 0, vhiunit_inp = 0
|
|
REAL(dbl) :: vhrmin_inp = 0.0d0, vhrmax_inp = 0.0d0
|
|
CHARACTER :: vhasse_inp = 'X'
|
|
|
|
!
|
|
! OPTICAL
|
|
!
|
|
LOGICAL :: toptical_card = .FALSE.
|
|
REAL(dbl) :: woptical = 0.0d0, boptical = 0.0d0
|
|
INTEGER :: noptical = 0
|
|
|
|
!
|
|
! DIPOLE
|
|
!
|
|
LOGICAL :: tdipole_card = .FALSE.
|
|
|
|
!
|
|
! ESR
|
|
!
|
|
INTEGER :: iesr_inp = 1
|
|
|
|
!
|
|
! NEIGHBOURS
|
|
!
|
|
LOGICAL :: tneighbo = .FALSE.
|
|
REAL(dbl) :: neighbo_radius = 0.0d0
|
|
|
|
!
|
|
! PSTAB
|
|
!
|
|
LOGICAL :: tpstab_inp = .FALSE.
|
|
INTEGER :: pstab_size_inp = 10000
|
|
|
|
!
|
|
! CELL_PARAMETERS
|
|
!
|
|
REAL(dbl) :: rd_ht(3,3) = 0.0d0
|
|
CHARACTER(len=80) :: cell_symmetry = 'none'
|
|
CHARACTER(LEN=80) :: cell_units = 'alat'
|
|
LOGICAL :: trd_ht = .FALSE.
|
|
|
|
!
|
|
! TURBO
|
|
!
|
|
LOGICAL :: tturbo_inp = .FALSE.
|
|
INTEGER :: nturbo_inp = 0
|
|
|
|
!
|
|
! CONSTRAINTS
|
|
!
|
|
INTEGER :: nconstr_inp = 0
|
|
REAL(dbl) :: constr_tol_inp = 0.0d0
|
|
INTEGER :: constr_type_inp(natx) = 0
|
|
INTEGER :: constr_inp(2,natx) = 0
|
|
REAL(dbl) :: constr_dist_inp(natx) = 0.0d0
|
|
|
|
!
|
|
! KOHN_SHAM
|
|
!
|
|
LOGICAL :: tprnks( nbndxx, nspinx ) = .FALSE.
|
|
! logical mask used to specify which kohn sham orbital should be
|
|
! written to files 'KS.'
|
|
LOGICAL :: tprnks_empty( nbndxx, nspinx ) = .FALSE.
|
|
! logical mask used to specify which empty kohn sham orbital should be
|
|
! written to files 'KS_EMP.'
|
|
CHARACTER(LEN=256) :: ks_path = './'
|
|
!
|
|
! CHI2
|
|
!
|
|
LOGICAL :: tchi2_inp = .FALSE.
|
|
!
|
|
! ELECTRONIC ANNEALING (obsolete)
|
|
!
|
|
LOGICAL :: anne_inp = .FALSE.
|
|
REAL(dbl) :: anner_inp = 0.0d0
|
|
|
|
!
|
|
! EXCHANGE AND CORRELATION
|
|
!
|
|
INTEGER :: narray_inp = 50000
|
|
REAL(dbl) :: rmxxc_inp = 5.0d0
|
|
!
|
|
! SCRATCH DIRECTORY
|
|
!
|
|
LOGICAL :: tscra_inp = .FALSE.
|
|
CHARACTER(LEN=256) :: scradir = './'
|
|
|
|
!
|
|
! RHOOUT
|
|
!
|
|
|
|
LOGICAL :: tprnrho = .FALSE.
|
|
|
|
|
|
!
|
|
! CLIMBING_IMAGES
|
|
!
|
|
|
|
!
|
|
! ... variable added for NEB ( C.S. 20/11/2003 )
|
|
!
|
|
LOGICAL, ALLOCATABLE :: climbing(:)
|
|
|
|
|
|
! END manual
|
|
! ----------------------------------------------------------------------
|
|
!
|
|
CONTAINS
|
|
!
|
|
SUBROUTINE deallocate_input_parameters()
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
!
|
|
IF ( ALLOCATED( pos ) ) DEALLOCATE( pos )
|
|
IF ( ALLOCATED( climbing ) ) DEALLOCATE( climbing )
|
|
!
|
|
END SUBROUTINE deallocate_input_parameters
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|
|
!
|
|
END MODULE input_parameters
|
|
!
|
|
!=----------------------------------------------------------------------------=!
|