quantum-espresso/Modules/input_parameters.f90

2038 lines
83 KiB
Fortran

!
! Copyright (C) 2002-2020 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 .
!
!---------------------------------------------
! TB
! included gate related stuff, search 'TB'
!---------------------------------------------
!
!=----------------------------------------------------------------------------=!
MODULE input_parameters
!=----------------------------------------------------------------------------=!
!! This module contains:
!
!! * the definitions of all input parameters (both those read from namelists
!! and those read from cards);
!! * the definitions of all namelists;
!! * routines that allocate data needed in input.
!
!! Note that all values are initialized, but the default values should be
!! set in the appropriate routines contained in module \(\texttt{read_namelists}\).
!! The documentation of input variables can be found in Doc/INPUT_PW.*
!! (for pw.x) or in Doc/INPUT_CP (for cp.x).
!
!! Originally written by Carlo Cavazzoni for FPMD.
!=----------------------------------------------------------------------------=!
!
USE kinds, ONLY : DP
USE parameters, ONLY : nsx, natx, sc_size, nsolx
USE wannier_new,ONLY : wannier_data
USE upf_params, ONLY : 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
! /
! 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
!=----------------------------------------------------------------------------=!
!
CHARACTER(len=80) :: title = ' '
!! a string describing the current job
CHARACTER(len=80) :: calculation = 'none'
!! specify the type of the simulation
CHARACTER(len=80) :: calculation_allowed(15)
!! allowed calculations (names)
DATA calculation_allowed / 'scf', 'nscf', 'relax', 'md', 'cp', &
'vc-relax', 'vc-md', 'vc-cp', 'bands', 'neb', 'smd', 'cp-wf', &
'vc-cp-wf', 'cp-wf-nscf', 'ensemble'/
CHARACTER(len=80) :: verbosity = 'default'
!! define the verbosity of the code output
CHARACTER(len=80) :: verbosity_allowed(6)
!! allowed verbosity options
DATA verbosity_allowed / 'debug', 'high', 'medium', 'default', &
'low', 'minimal' /
CHARACTER(len=80) :: restart_mode = 'restart'
!! specify how to start/restart the simulation
CHARACTER(len=80) :: restart_mode_allowed(3)
!! allowed restart options
DATA restart_mode_allowed / 'from_scratch', 'restart', 'reset_counters' /
INTEGER :: nstep = 10
!! number of simulation steps, see "restart_mode"
INTEGER :: iprint = 10
!! number of steps/scf iterations between successive writings
!! of relevant physical quantities to standard output
INTEGER :: max_xml_steps = 0
!! max number of steps between successive appending of an xml step
!! in the xml data file, default 0 means all steps are printed
INTEGER :: isave = 100
!! number of steps between successive savings of
!! information needed to restart the run (see "ndr", "ndw").
!! Used only in CP
LOGICAL :: tstress = .true.
!! if TRUE calculate the stress tensor
LOGICAL :: tprnfor = .true.
!! if TRUE calculate the atomic forces
REAL(DP) :: dt = 1.0_DP
!! time step for molecular dynamics simulation, in atomic units.
!! CP: 1 a.u. of time = 2.4189 * 10^-17 s, PW: twice that much.
!! Typical values for CP simulations are between 1 and 10 a.u.
!! For Born-Oppenheimer simulations, larger values can be used,
!! since it mostly depends only upon the mass of ions.
INTEGER :: ndr = 50
!! Fortran unit from which the code reads the restart file
INTEGER :: ndw = 50
!! Fortran unit to which the code writes the restart file
CHARACTER(len=256) :: outdir = './'
!! specify the directory where the code opens output and restart
!! files. When possible put this directory in the fastest available
!! filesystem ( not NFS! )
CHARACTER(len=256) :: prefix = 'prefix'
!! specify the prefix for the output file, if not specified the
!! files are opened as standard fortran units.
CHARACTER(len=256) :: pseudo_dir = './'
!! specify the directory containing the pseudopotentials
REAL(DP) :: refg = 0.05_DP
!! Accurancy of the interpolation table, interval between
!! table values in Rydberg
CHARACTER(len=256) :: wfcdir = 'undefined'
!! scratch directory that is hopefully local to the node
!! to store large, usually temporary files.
REAL(DP) :: max_seconds = 1.0E+7_DP
!! smoothly terminate program after the specified number of seconds
!! this parameter is typically used to prevent an hard kill from
!! the queuing system.
REAL(DP) :: ekin_conv_thr = 1.0E-5_DP
!! convergence criterion for electron minimization.
!! This criterion is met when "ekin < ekin_conv_thr",
!! convergence is achieved when all criteria are met.
REAL(DP) :: etot_conv_thr = 1.0E-4_DP
!! convergence criterion for ion minimization.
!! This criterion is met when \(\text{etot}(n+1)-\text{etot}(n)
!! < \text{etot_conv_thr}\), where "n" is the step index,
!! \(\text{etot}\) the DFT energy. Convergence is achieved when
!! all criteria are met.
REAL(DP) :: forc_conv_thr = 1.0E-3_DP
!! convergence criterion for ion minimization-
!! This criterion is met when \(\text{MAXVAL(fion)} <
!! \text{forc_conv_thr}\), where \(\text{fion}\) are the atomic
!! forces. Convergence is achieved when all criteria are met.
CHARACTER(len=80) :: disk_io = 'default'
!! Specify the amount of I/O activities.
LOGICAL :: twochem = .FALSE.
!!if TRUE, the system is simulated using two chemical potentials,
!!one for the electrons and one for the holes (photoexcited system)
LOGICAL :: tefield = .false.
!! if TRUE a sawtooth potential simulating a finite electric field
!! is added to the local potential - only used in PW
! TB - added gate also below to the namelist
LOGICAL :: gate = .FALSE.
!! if TRUE a charged plate in charged systems is added with a
!! total charge which is opposite to the charge of the system
LOGICAL :: tefield2 = .false.
!! if TRUE a second finite electric field is added to the local potential
!! only used in CP
LOGICAL :: lelfield = .false.
!! if TRUE a static homogeneous electric field is present
!! via the modern theory of polarizability - differs from tefield!
LOGICAL :: lorbm = .false.
!! if TRUE an orbital magnetization is computed (Kubo terms)
LOGICAL :: dipfield = .false.
!! if TRUE the dipole field is subtracted only used in PW for
!! surface calculations
LOGICAL :: lberry = .false.
!! if TRUE, use modern theory of the polarization
INTEGER :: gdir = 0
!! G-vector for polarization calculation (related to \(\(\text{lberry}\)).
!! Used in PW only
INTEGER :: nppstr = 0
!! number of k-points (parallel vector) (related to \(\text{lberry}\)).
!! Used in PW only.
INTEGER :: nberrycyc = 1
!! number of covergence cycles on electric field
LOGICAL :: wf_collect = .true.
!! This flag controls the way wavefunctions are stored to disk:
!! TRUE: collect wavefunctions from all processors, store them
!! into a single restart file on a single processors;
!! FALSE: do not collect wavefunctions, store them into distributed
!! files - NO LONGER IMPLEMENTED SINCE v.6.3 .
LOGICAL :: saverho = .true.
!! This flag controls the saving of charge density in CP codes:
!! TRUE: save charge density to restart dir;
!! FALSE: do not save charge density.
LOGICAL :: tabps = .false.
!! for ab-initio pressure and/or surface calculations
LOGICAL :: use_wannier = .false.
!! use or not Wannier functions
LOGICAL :: lecrpa = .FALSE.
!! if TRUE symmetry in scf run is neglected for RPA Ec calculation
!
LOGICAL :: lfcp = .FALSE.
!! FCP calculation. enabled if TRUE
LOGICAL :: tqmmm = .FALSE.
!! QM/MM coupling. enabled if TRUE
LOGICAL :: trism = .FALSE. ! 3D-RISM/KS-DFT coupling. enabled if .true.
CHARACTER(len=256) :: vdw_table_name = ' '
CHARACTER(len=10) :: point_label_type='SC'
CHARACTER(len=80) :: memory = 'default'
!! controls memory usage
CHARACTER(len=80) :: memory_allowed(3)
!! \(\text{small}\): QE tries to use (when implemented) algorithms using less memory,
!! even if they are slower than the default;
!! \(\text{large}\): QE tries to use (when implemented) algorithms using more memory
!! to enhance performance.
DATA memory_allowed / 'small', 'default', 'large' /
!
CHARACTER(len=256) :: input_xml_schema_file = ' '
!! location of xml input according to xsd schema
NAMELIST / control / title, calculation, verbosity, restart_mode, &
nstep, iprint, isave, tstress, tprnfor, dt, ndr, ndw, outdir, &
prefix, wfcdir, max_seconds, ekin_conv_thr, etot_conv_thr, &
forc_conv_thr, pseudo_dir, disk_io, tefield, dipfield, lberry, &
gdir, nppstr, wf_collect, lelfield, nberrycyc, refg, &
tefield2, saverho, tabps, use_wannier, lecrpa, &
lfcp, tqmmm, vdw_table_name, lorbm, memory, point_label_type, &
input_xml_schema_file, gate, trism, twochem
!
!=----------------------------------------------------------------------------=!
! SYSTEM Namelist Input Parameters
!=----------------------------------------------------------------------------=!
!
INTEGER :: ibrav = 14
!! index of the the Bravais lattice.
!! Note: in variable cell CP molecular dynamics, usually one does
!! not want to put constraints on the cell symmetries, thus
!! ibrav = 14 is used
REAL(DP) :: celldm(6) = 0.0_DP
!! dimensions of the cell (lattice parameters and angles)
! Alternate definition of the cell - use either this or celldm
REAL(DP) :: a = 0.0_DP
!! lattice parameters (a,b,c)
REAL(DP) :: c = 0.0_DP
REAL(DP) :: b = 0.0_DP
REAL(DP) :: cosab = 0.0_DP
!! lattice angles (cosab, cosac, cosbc)
REAL(DP) :: cosac = 0.0_DP
REAL(DP) :: cosbc = 0.0_DP
REAL(DP) :: ref_alat = 0.0_DP
!! reference cell alat in a.u. (see REF\_CELL\_PARAMETERS card)
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 CP
REAL(DP):: tot_charge = 0.0_DP
!! total system charge
REAL(DP) :: tot_magnetization = -10000.0_DP
!! majority - minority spin. A value = -10000 means unspecified
REAL(DP) :: ecutwfc = 0.0_DP
!! energy cutoff for wave functions in k-space ( in Rydberg ).
!! this parameter is MANDATORY
REAL(DP) :: ecutrho = 0.0_DP
!! energy cutoff for charge density in k-space (in Rydberg).
!! By default its value is \(4 \text{ecutwfc}\)
INTEGER :: nr1 = 0
!! dimensions of the real space grid for charge and potentials.
!! Presently NOT used in CP.
INTEGER :: nr2 = 0
INTEGER :: nr3 = 0
INTEGER :: nr1s = 0
!! dimensions of the real space grid for wavefunctions.
!! Presently NOT used in CP
INTEGER :: nr2s = 0
INTEGER :: nr3s = 0
INTEGER :: nr1b = 0
!! dimensions of the "box" grid for Ultrasoft pseudopotentials
INTEGER :: nr2b = 0
INTEGER :: nr3b = 0
CHARACTER(len=80) :: occupations = 'fixed'
!! select the way electronic states are filled.
!! See card 'OCCUPATIONS' if \(\text{ocupations}=\text{from_input}\)
CHARACTER(len=80) :: smearing = 'gaussian'
!! select the way electronic states are filled for metalic systems
REAL(DP) :: degauss = 0.0_DP
!! parameter for the smearing functions - NOT used in CP
INTEGER :: nspin = 1
!! number of spinors:
!! \(\text{nspin}=1\) for LDA simulations;
!! \(\text{nspin}=2\) for LSD simulations;
!! \(\text{nspin}=4\) for NON COLLINEAR simulations.
LOGICAL :: nosym = .true.
!! (do not) use symmetry
LOGICAL :: noinv = .false.
!! (do not) use q => -q symmetry in k-point generation
LOGICAL :: nosym_evc = .false.
!! if TRUE use symmetry only to symmetrize k points
LOGICAL :: force_symmorphic = .false.
!! if TRUE disable fractionary translations (nonsymmorphic groups)
LOGICAL :: use_all_frac = .false.
!! if TRUE enable usage of all fractionary translations,
!! disabling check if they are commensurate with FFT grid
REAL(DP) :: ecfixed = 0.0_DP, qcutz = 0.0_DP, q2sigma = 0.0_DP
!! parameters for modified kinetic energy functional to be used
!! in variable-cell constant cut-off simulations
CHARACTER(len=80) :: input_dft = 'none'
!! Variable used to overwrite dft definition contained in
!! pseudopotential files; 'none' means DFT is read from pseudos.
!! Used in PW only - allowed values: any legal DFT value
REAL(DP) :: starting_charge( nsx ) = 0.0_DP
!! PW ONLY
REAL(DP) :: starting_magnetization( nsx ) = 0.0_DP
!! PW ONLY
! PARAMETERS FOR TWO-CHEM-CALCULATIONS
REAL(DP) :: degauss_cond = 0.0_DP
!broadening for conduction band
INTEGER :: nbnd_cond = 0
! n_bands in conduction
REAL(DP) :: nelec_cond =0.0_DP
!number of electrons in the conduction bands
! DFT+Hubbard
! Old input parameters in the SYSTEM naqmelist (removed since v7.1):
CHARACTER(len=80) :: U_projection_type = '' ! obsolete
CHARACTER(len=80) :: Hubbard_parameters = '' ! obsolete
REAL(DP) :: Hubbard_U_back(nsx) = 0.0_DP ! obsolete
!
! the following are the parameters for DFT+Hubbard
LOGICAL :: lda_plus_u = .false.
INTEGER :: lda_plus_u_kind = -1
INTEGER, PARAMETER :: nspinx=2 ! lqmax is taken from upf_params
REAL(DP) :: starting_ns_eigenvalue(lqmax,nspinx,nsx) = -1.0_DP
INTEGER :: Hubbard_l(nsx) = -1
INTEGER :: Hubbard_n(nsx) = -1
INTEGER :: Hubbard_l2(nsx) = -1
INTEGER :: Hubbard_n2(nsx) = -1
INTEGER :: Hubbard_l3(nsx) = -1
INTEGER :: Hubbard_n3(nsx) = -1
REAL(DP) :: Hubbard_U(nsx) = 0.0_DP
REAL(DP) :: Hubbard_U2(nsx) = 0.0_DP
REAL(DP) :: Hubbard_V(natx,natx*(2*sc_size+1)**3,4) = 0.0_DP
REAL(DP) :: Hubbard_J0(nsx) = 0.0_DP
REAL(DP) :: Hubbard_J(3,nsx) = 0.0_DP
REAL(DP) :: Hubbard_alpha(nsx) = 0.0_DP
REAL(DP) :: Hubbard_alpha_back(nsx) = 0.0_DP
REAL(DP) :: Hubbard_beta(nsx) = 0.0_DP
REAL(DP) :: Hubbard_occ(nsx,3) = -1.0_DP
CHARACTER(len=80) :: Hubbard_projectors = ''
LOGICAL :: reserv(nsx) = .FALSE.
LOGICAL :: reserv_back(nsx) = .FALSE.
LOGICAL :: hub_pot_fix = .FALSE.
LOGICAL :: backall(nsx) = .FALSE.
! For linking to DMFT calculations
LOGICAL :: dmft = .FALSE.
CHARACTER(len=256) :: dmft_prefix = 'dmft_prefix'
LOGICAL :: la2F = .false.
! For electron-phonon calculations
!
LOGICAL :: step_pen=.false.
REAL(DP) :: A_pen(10,nspinx) = 0.0_DP
REAL(DP) :: sigma_pen(10) = 0.01_DP
REAL(DP) :: alpha_pen(10) = 0.0_DP
! next group of variables PWSCF ONLY
!
!
REAL(DP) :: exx_fraction = -1.0_DP
!! exact exchange fraction. If negative, use defaults
REAL(DP) :: screening_parameter = -1.0_DP
INTEGER :: nqx1 = 0
!! use the same values as \(\text{nk1, nk2, nk3}\)
INTEGER :: nqx2 = 0, nqx3=0
!
REAL(DP) :: gau_parameter = -1.0_DP
!! gau-pbe
!
CHARACTER(len=80) :: exxdiv_treatment = 'gygi-baldereschi'
!! define how ro cure the Coulomb divergence in EXX.
CHARACTER(len=80) :: exxdiv_treatment_allowed(6)
!! Allowed values for \(\text{exxdiv_treatment}\)
DATA exxdiv_treatment_allowed / 'gygi-baldereschi', 'gygi-bald', 'g-b',&
'vcut_ws', 'vcut_spherical', 'none' /
!
LOGICAL :: x_gamma_extrapolation = .true.
REAL(DP) :: yukawa = 0.0_DP
REAL(DP) :: ecutvcut = 0.0_DP
! auxiliary variables to define exxdiv treatment
LOGICAL :: adaptive_thr = .FALSE.
REAL(DP) :: conv_thr_init = 0.001_DP
REAL(DP) :: conv_thr_multi = 0.1_DP
REAL(DP) :: ecutfock = -1.d0
! variables used in Lin Lin's ACE and SCDM
REAL(DP) :: localization_thr = 0.0_dp, scdmden=1.0d0, scdmgrd=1.0d0
INTEGER :: nscdm = 1
INTEGER :: n_proj = 0
LOGICAL :: scdm=.FALSE.
LOGICAL :: ace=.TRUE.
! parameters for external electric field
INTEGER :: edir = 0
REAL(DP) :: emaxpos = 0.0_DP
REAL(DP) :: eopreg = 0.0_DP
REAL(DP) :: eamp = 0.0_DP
! TB parameters for charged plate representing the gate
! and a possible potential barrier
! added also below to the namelist
REAL(DP) :: zgate = 0.5
LOGICAL :: relaxz = .false.
LOGICAL :: block = .false.
REAL(DP) :: block_1 = 0.45
REAL(DP) :: block_2 = 0.55
REAL(DP) :: block_height = 0.1
! Various parameters for noncollinear calculations
LOGICAL :: noncolin = .false.
LOGICAL :: lspinorb = .false.
LOGICAL :: lforcet=.FALSE.
LOGICAL :: starting_spin_angle=.FALSE.
REAL(DP) :: lambda = 1.0_DP
REAL(DP) :: fixed_magnetization(3) = 0.0_DP
REAL(DP) :: angle1(nsx) = 0.0_DP
REAL(DP) :: angle2(nsx) = 0.0_DP
INTEGER :: report =-1
LOGICAL :: no_t_rev = .FALSE.
CHARACTER(len=80) :: constrained_magnetization = 'none'
REAL(DP) :: B_field(3) = 0.0_DP
!! A fixed magnetic field defined by the vector B_field is added
!! to the exchange and correlation magnetic field.
CHARACTER(len=80) :: sic = 'none'
!! CP only - SIC correction (D'avezac Mauri)
!
! Parameters for SIC calculation
REAL(DP) :: sic_epsilon = 0.0_DP
REAL(DP) :: sic_alpha = 0.0_DP
LOGICAL :: force_pairing = .false.
CHARACTER(len=80) :: pol_type = 'none'
REAL(DP) :: sic_gamma = 0.0_DP
LOGICAL :: sic_energy = .false.
REAL(DP) :: sci_vb = 0.0_DP
REAL(DP) :: sci_cb = 0.0_DP
LOGICAL :: one_atom_occupations=.false.
CHARACTER(len=80) :: assume_isolated = 'none'
!! Possible corrections for isolated systems:
!! 'none', 'makov-payne', 'martyna-tuckerman', 'esm'
!! Plus ENVIRON-specific:
!! 'slabx', 'slaby', 'slabz', 'pcc'
CHARACTER(len=80) :: vdw_corr = 'none'
!! semi-empirical van der Waals corrections (not to be confused with
!! nonlocal functionals, specified in input_dft!). Default is 'none',
!! allowed values:
!! 'dft-d' or 'grimme-d2' [S.Grimme, J.Comp.Chem. 27, 1787 (2006)]
!! 'ts', 'ts-vdW', 'tkatchenko-scheffler'
!! (Tkatchenko & Scheffler, Phys. Rev. Lett. 102, 073005 (2009))
!! 'xdm' (Otero de la Roza and Johnson, J. Chem. Phys. 136 (2012) 174109)
LOGICAL :: london = .false.
!! OBSOLESCENT: same as vdw_corr='grimme-d2'
!
! Other DFT-D parameters ( see Modules/mm_dispersion.f90 )
!
REAL(DP) :: london_s6 = 0.75_DP
!! default global scaling parameter for PBE
REAL(DP) :: london_rcut = 200.00_DP
REAL(DP) :: london_c6( nsx ) = -1.0_DP
!! user specified atomic C6 coefficients
REAL(DP) :: london_rvdw( nsx ) = -1.0_DP
!! user specified atomic vdw radii
! Grimme-D3 (DFT-D3) dispersion correction.
! version=3 is Grimme-D3, version=2 is Grimme-D2,
! version=3 dftd3_threebody = .false. similar to grimme d2 but with
! the two_body parameters of d3
integer :: dftd3_version = 3
logical :: dftd3_threebody = .true.
LOGICAL :: ts_vdw = .false.
!! OBSOLESCENT: same as vdw_corr='Tkatchenko-Scheffler'
LOGICAL :: mbd_vdw = .false.
!! added for consistency with \(\text{ts_vdw}\)
LOGICAL :: ts_vdw_isolated = .FALSE.
!! if TRUE, TS-vdW correction for isolated system;
!! if FALSE, TS-vdW correction for periodic system.
REAL(DP) :: ts_vdw_econv_thr = 1.0E-6_DP
!! convergence criterion for TS-vdW energy for periodic system
!
LOGICAL :: xdm = .FALSE.
!! OBSOLESCENT: same as vdw_corr='xdm'
REAL(DP) :: xdm_a1 = 0.0_DP
REAL(DP) :: xdm_a2 = 0.0_DP
!
CHARACTER(LEN=3) :: esm_bc = 'pbc'
!! 'pbc': ordinary calculation with periodic boundary conditions;
!! 'bc1': vacuum-slab-vacuum;
!! 'bc2': metal-slab-metal;
!! 'bc3': vacuum-slab-metal.
REAL(DP) :: esm_efield = 0.0_DP
!! applied electronic field [Ryd/a.u.] (used only for esm_bc='bc2')
REAL(DP) :: esm_w = 0.0_DP
!! position of effective screening medium from z0=L_z/2 [a.u.]
!! note: z1 is given by \(z1=z0+\text{abs}(\text{esm_w})\)
REAL(DP) :: esm_a = 0.0_DP
!! smoothness parameter for smooth-ESM \(\exp{2a(z-z1)}\)
REAL(DP) :: esm_zb = 0.0_DP
!! smearing width for Ewald summation (RSUM) in smooth-ESM
INTEGER :: esm_nfit = 4
!! number of z-grid points for polynomial fitting at cell edge
LOGICAL :: esm_debug = .FALSE.
!! used to enable debug mode (output \(\text{v_hartree}\) and
!! \(\text{v_local}\))
INTEGER :: esm_debug_gpmax = 0
!! if esm_debug is TRUE, calculate \(\text{v_hartree}\) and \(\text{v_local}\)
!! for \(\text{abs}(gp)\leq\text{esm_debug_gpmax}\) (gp is integer and has
!! \(\text{tpiba}\) unit)
LOGICAL :: lgcscf = .FALSE.
!! if TRUE, GC-SCF is used
LOGICAL :: gcscf_ignore_mun = .FALSE.
!! if TRUE, ignore the term of -mu * N
REAL(DP) :: gcscf_mu = 0.0_DP
!! target Fermi energy of GC-SCF (in eV)
REAL(DP) :: gcscf_conv_thr = 1.0E-2_DP
!! convergence threshold of GC-SCF (in eV)
REAL(DP) :: gcscf_gk = 0.4_DP
!! wavenumber shift for Kerker operator (in 1/bohr)
REAL(DP) :: gcscf_gh = 1.5_DP
!! wavenumber shift for Hartree metric (in 1/bohr)
REAL(DP) :: gcscf_beta = 0.05_DP
!! mixing rate of Fermi energy
INTEGER :: space_group = 0
!! space group number for coordinates given in crystallographic form
!
LOGICAL :: uniqueb=.FALSE.
!! if TRUE for monoclinic lattice choose the b unique primitive
!! vectors
!
INTEGER :: origin_choice = 1
!! for space groups that have more than one origin choice, choose
!! the origin (can be 1 or 2)
!
LOGICAL :: rhombohedral = .TRUE.
!! if TRUE for rhombohedral space groups give the coordinates
!! in rhombohedral axes. If FALSE in hexagonal axes, that are
!! converted internally in rhombohedral axes.
!
INTEGER :: nextffield = 0
!! Number of activated external force fields
!
NAMELIST / system / ibrav, celldm, a, b, c, cosab, cosac, cosbc, nat, &
ntyp, nbnd, ecutwfc, ecutrho, nr1, nr2, nr3, nr1s, nr2s, &
nr3s, nr1b, nr2b, nr3b, nosym, nosym_evc, noinv, use_all_frac, &
force_symmorphic, starting_charge, starting_magnetization, &
occupations, degauss, nspin, ecfixed, qcutz, q2sigma, &
degauss_cond,nbnd_cond,nelec_cond, &
lda_plus_u, lda_plus_u_kind, U_projection_type, Hubbard_parameters, & ! obsolete
Hubbard_U, Hubbard_J0, Hubbard_J, Hubbard_V, Hubbard_U_back, & ! moved to HUBBARD card
Hubbard_alpha, Hubbard_alpha_back, Hubbard_beta, Hubbard_occ, &
hub_pot_fix, reserv, reserv_back, dmft, dmft_prefix, &
edir, emaxpos, eopreg, eamp, smearing, starting_ns_eigenvalue, &
input_dft, la2F, assume_isolated, &
nqx1, nqx2, nqx3, ecutfock, localization_thr, scdm, ace, &
scdmden, scdmgrd, nscdm, n_proj, &
exxdiv_treatment, x_gamma_extrapolation, yukawa, ecutvcut, &
exx_fraction, screening_parameter, ref_alat, &
noncolin, lspinorb, starting_spin_angle, lambda, angle1, angle2, &
report, lforcet, &
constrained_magnetization, B_field, fixed_magnetization, &
sic, sic_epsilon, force_pairing, sic_alpha, &
pol_type, sic_gamma, sic_energy, sci_vb, sci_cb, &
tot_charge, tot_magnetization, one_atom_occupations, &
vdw_corr, london, london_s6, london_rcut, london_c6, london_rvdw,&
dftd3_version, dftd3_threebody, &
ts_vdw, ts_vdw_isolated, ts_vdw_econv_thr, &
xdm, xdm_a1, xdm_a2, &
mbd_vdw, &
step_pen, A_pen, sigma_pen, alpha_pen, no_t_rev, &
esm_bc, esm_efield, esm_w, esm_nfit, esm_debug, esm_debug_gpmax, &
esm_a, esm_zb, &
lgcscf, gcscf_ignore_mun, gcscf_mu, gcscf_conv_thr, &
gcscf_gk, gcscf_gh, gcscf_beta, &
space_group, uniqueb, origin_choice, rhombohedral, &
zgate, relaxz, block, block_1, block_2, block_height, &
nextffield
!=----------------------------------------------------------------------------=!
! ELECTRONS Namelist Input Parameters
!=----------------------------------------------------------------------------=!
REAL(DP) :: emass = 0.0_DP
!! effective electron mass in the CP Lagrangian,
!! in atomic units (\(1 \text{a.u. of mass} = 1/1822.9 \text{a.m.u.} =
!! 9.10939\cdot 10^{-31} kg\)).
!! Typical values in CP simulation are between 100. and 1000.
REAL(DP) :: emass_cutoff = 0.0_DP
!! mass cut-off (in Rydbergs) for the Fourier acceleration.
!! Effective mass is rescaled for "G" vector components with kinetic
!! energy above \(\text{emass_cutoff}\)
!! Use a value greater than \(\text{ecutwfc}\) to disable Fourier
!! acceleration.
CHARACTER(len=80) :: orthogonalization = 'ortho'
!! selects the orthonormalization method for electronic wave functions:
!! -'Gram-Schmidt' uses Gram-Schmidt algorithm;
!! -'ortho' uses iterative algorithm.
REAL(DP) :: ortho_eps = 1.E-9_DP
!! meaningful only if orthogonalization = 'ortho'.
!! Tolerance for iterative orthonormalization,
!! a value of 1.d-8 is usually sufficent.
INTEGER :: ortho_max = 50
!! meaningful only if orthogonalization = 'ortho'.
!! Maximum number of iterations for orthonormalization
!! usually between 20 and 300.
INTEGER :: exx_maxstep = 1000
!! maximum number of steps in the outer loop of electronic minimization
!! when exx is active (hybrid functionals).
INTEGER :: electron_maxstep = 1000
!! maximum number of steps in electronic minimization.
!! This parameter applies only when using 'cg' electronic or
!! ionic dynamics and electron\_dynamics = 'CP-BO'
LOGICAL :: scf_must_converge = .true.
!! stop or continue if SCF does not converge
CHARACTER(len=80) :: electron_dynamics = 'none'
!! set how electrons should be moved
CHARACTER(len=80) :: electron_dynamics_allowed(7)
DATA electron_dynamics_allowed &
/ 'default', 'sd', 'cg', 'damp', 'verlet', 'none', 'cp-bo' /
REAL(DP) :: electron_damping = 0.0_DP
!! 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' 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' 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(DP) :: ekincw = 0.0_DP
!! meaningful only with electron\_temperature different from 'not\_controlled'.
!! Value of the average kinetic energy (in atomic units) forced by the
!! temperature control
REAL(DP) :: fnosee = 0.0_DP
!! meaningful only with "electron\_temperature = 'nose' ".
!! Oscillation frequency of the nose thermostat (in terahertz)
CHARACTER(len=80) :: startingwfc = 'random'
!! define how the code should initialize the wave function:
!! -'atomic' start from superposition of atomic wave functions;
!! -'atomic+random' as above, plus randomization;
!! -'random' start from random wave functions;
!! -'file' read wavefunctions from file.
REAL(DP) :: ampre = 0.0_DP
!! meaningful only if startingwfc='random'. Amplitude of the
!! randomization ( allowed values: 0.0 - 1.0 )
REAL(DP) :: grease = 0.0_DP
!! a number smaller or equal to 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. Used only in CP
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(DP) :: diis_hcut = 0.0_DP
!! 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(DP) :: diis_wthr = 1.E-4_DP
!! 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 \(\text{ekin_conv_thr}\).
REAL(DP) :: diis_delt = 1.0_DP
!! meaningful only with electron\_dynamics='diis'.
!! Electronic time step used in the steepest descendent step.
!! Default is \(\text{dt}\)
INTEGER :: diis_maxstep = 100
!! meaningful only with electron_dynamics='diis'.
!! Maximum number of iteration in the diis minimization.
!! Default is \(\text{electron_maxstep}\).
LOGICAL :: diis_rot = .false.
!! meaningful only with electron\_dynamics='diis'.
!! If TRUE enable diis with charge mixing and rotations.
!! Default value is FALSE.
REAL(DP) :: diis_fthr = 1.E-3_DP
!! 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(DP) :: diis_temp = 0.0_DP
!! meaningful only with electron\_dynamics='diis' and diis\_rot=TRUE.
! Electronic temperature, significant only if ???
REAL(DP) :: diis_achmix = 0.0_DP
!! meaningful only with electron\_dynamics='diis' and diis\_rot=TRUE.
!! "A" parameter in the charge mixing formula:
!! \(\text{chmix}=A\cdot G^2/(G^2 + G0^2)\), where G represents reciprocal
!! lattice vectors.
REAL(DP) :: diis_g0chmix = 0.0_DP
!! meaningful only with electron\_dynamics='diis' and diis\_rot=TRUE.
!! \(G0^2\) is the 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(DP) :: diis_g1chmix = 0.0_DP
!! meaningful only with electron\_dynamics='diis' and "diis\_rot=TRUE.
!! \(G1^2\) parameter in the charge mixing formula.
!! \(\text{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(DP) :: diis_rothr(3) = 1.E-4_DP
!! 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(DP) :: diis_ethr = 1.E-4_DP
!! 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 \(\text{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 FALSE.
CHARACTER(len=80) :: mixing_mode = 'default'
!! type of mixing algorithm for charge self-consistency.
!! Used in PWscf only.
REAL(DP) :: mixing_beta = 0.0_DP
!! parameter for mixing algorithm. Used in PWscf only.
INTEGER :: mixing_ndim = 0
!! dimension of mixing subspace. Used in PWscf only.
CHARACTER(len=80) :: diagonalization = 'david'
!! diagonalization = 'david', 'cg', 'ppcg', 'paro' or 'rmm'
!! algorithm used by PWscf for iterative diagonalization
REAL(DP) :: diago_thr_init = 0.0_DP
!! convergence threshold for the first iterative diagonalization.
!! Used in PWscf only.
INTEGER :: diago_cg_maxiter = 100
!! max number of iterations for the first iterative diagonalization.
!! Using conjugate-gradient algorithm - used in PWscf only.
INTEGER :: diago_ppcg_maxiter = 100
!! max number of iterations for the first iterative diagonalization
!! using projected preconditioned conjugate-gradient algorithm -
!! used in PWscf only.
INTEGER :: diago_david_ndim = 4
!! dimension of the subspace used in Davidson diagonalization
!! used in PWscf only.
INTEGER :: diago_rmm_ndim = 4
! dimension of the subspace used in RMM-DIIS diagonalization
! used only in PWscf
LOGICAL :: diago_rmm_conv = .false.
! if .TRUE., RMM-DIIS is performed up to converge
! if .FALSE., RMM-DIIS is performed only once
! used only in PWscf
INTEGER :: diago_gs_nblock = 16
! blocking size in Gram-Schmidt orthogonalization
! used only in PWscf
LOGICAL :: diago_full_acc = .false.
REAL(DP) :: conv_thr = 1.E-6_DP
!! convergence threshold in electronic ONLY minimizations.
!! Used in PWscf only.
!! Used with electron\_dynamics = 'CP-BO' in CP and PWscf
INTEGER :: mixing_fixed_ns = 0
!! For DFT+U calculations, PWscf only.
CHARACTER(len=80) :: startingpot = 'potfile'
!! specify the file containing the DFT potential of the system.
!! Used in PWscf only.
INTEGER :: n_inner = 2
!! number of inner loop per CG iteration. Used in CP only.
INTEGER :: niter_cold_restart = 1
!! frequency of full cold smearing inner cycle (in iterations).
REAL(DP) :: lambda_cold
!! step for not complete cold smearing inner cycle.
LOGICAL :: tgrand = .false.
!! whether to do grand-canonical calculations.
REAL(DP) :: fermi_energy = 0.0_DP
!! chemical potential of the grand-canonical ensemble.
CHARACTER(len=80) :: rotation_dynamics = "line-minimization"
!! evolution of the rotational degrees of freedom.
CHARACTER(len=80) :: occupation_dynamics = "line-minimization"
!! evolution of the occupational degrees of freedom.
REAL(DP) :: rotmass = 0
!! mass for the rotational degrees of freedom.
REAL(DP) :: occmass = 0
!! mass for the occupational degrees of freedom.
REAL(DP) :: occupation_damping = 0
!! damping for the rotational degrees of freedom.
REAL(DP) :: rotation_damping = 0
!! damping for the occupational degrees of freedom.
LOGICAL :: tcg = .true.
!! if TRUE perform in cpv conjugate gradient minimization of electron energy
LOGICAL :: pre_state = .false.
!! if TRUE, in CP's conjugate gradient routine, precondition each band
!! with its kinetic energy (see CPV/src/cg_sub.f90)
INTEGER :: maxiter = 100
!! max number of conjugate gradient iterations
REAL(DP) :: etresh =1.0E-7_DP
!! treshhold on energy
REAL(DP) :: passop =0.3_DP
!! small step for parabolic interpolation
INTEGER :: niter_cg_restart
!! frequency of restart for the conjugate gradient algorithm in iterations.
INTEGER :: epol = 3
!! electric field direction.
REAL(DP) :: efield =0.0_DP
!! electric field intensity in atomic units.
LOGICAL :: real_space = .false.
!! real_space routines for US pps.
REAL(DP) :: efield_cart(3)
!! electric field vector in cartesian system of reference.
CHARACTER(len=80) :: efield_phase='none'
!! for Berry's phase electric field selection of string phases.
INTEGER :: epol2 = 3
!! electric field direction
REAL(DP) :: efield2 =0.0_DP
!! electric field intensity in atomic units.
LOGICAL :: tqr = .false.
!! US contributions are added in real space.
LOGICAL :: tq_smoothing = .false.
!! US augmentation charge is smoothed before use.
LOGICAL :: tbeta_smoothing = .false.
!! beta function are smoothed before use.
LOGICAL :: occupation_constraints = .false.
!! If TRUE perform CP dynamics with constrained occupations.
!! To be used together with penalty functional ...
!
! ... CP-BO ...
LOGICAL :: tcpbo = .FALSE.
!! if TRUE perform CP-BO minimization of electron energy
REAL(DP) :: emass_emin = 0.0_DP
!! meaningful only if electron_dynamics = 'CP-BO'.
!! Effective electron mass used in CP-BO electron minimization in
!! atomic units (\( 1 \text{a.u. of mass} = 1/1822.9 \text{a.m.u.} =
!! 9.10939\cdot 10^{-31} kg\))
REAL(DP) :: emass_cutoff_emin = 0.0_DP
!! meaningful only if electron_dynamics = 'CP-BO'.
!! Mass cut-off (in Rydbergs) for the Fourier acceleration in CP-BO
!! electron minimization.
REAL(DP) :: electron_damping_emin = 0.0_DP
!! meaningful only if electron_dynamics = 'CP-BO'.
!! Damping parameter utilized in CP-BO electron minimization.
REAL(DP) :: dt_emin = 0.0_DP
!! meaningful only if electron_dynamics = 'CP-BO'.
!! Time step for CP-BO electron minimization dynamics, in atomic units.
!! CP: \(1 \text{a.u. of time} = 2.4189\cdot 10^{-17} s\), PW: twice that much.
NAMELIST / electrons / emass, emass_cutoff, orthogonalization, &
exx_maxstep, electron_maxstep, scf_must_converge, ortho_eps, ortho_max, electron_dynamics, &
electron_damping, electron_velocities, electron_temperature, &
ekincw, fnosee, ampre, grease, &
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, &
tqr, tq_smoothing, tbeta_smoothing, &
diago_cg_maxiter, diago_david_ndim, diago_rmm_ndim, &
diago_rmm_conv, diago_gs_nblock, diagonalization, &
startingpot, startingwfc , conv_thr, &
adaptive_thr, conv_thr_init, conv_thr_multi, &
diago_thr_init, n_inner, fermi_energy, rotmass, occmass, &
rotation_damping, occupation_damping, rotation_dynamics, &
occupation_dynamics, tcg, maxiter, etresh, passop, epol, &
efield, epol2, efield2, diago_full_acc, &
occupation_constraints, niter_cg_restart, &
niter_cold_restart, lambda_cold, efield_cart, real_space, &
tcpbo,emass_emin, emass_cutoff_emin, electron_damping_emin, &
dt_emin, efield_phase, pre_state
!
!=----------------------------------------------------------------------------=!
! IONS Namelist Input Parameters
!=----------------------------------------------------------------------------=!
CHARACTER(len=80) :: ion_dynamics = 'none'
!! set how ions should be moved
CHARACTER(len=80) :: ion_dynamics_allowed(11)
!! allowed options for ion\_dynamics.
DATA ion_dynamics_allowed / 'none', 'sd', 'cg', 'langevin', &
'damp', 'verlet', 'bfgs', 'beeman',&
'langevin-smc', 'ipi', 'fire' /
REAL(DP) :: ion_radius(nsx) = 0.5_DP
!! pseudo-atomic radius of the i-th atomic species (CP only).
!! For Ewald summation: typical values range between 0.5 and 2.0
INTEGER :: iesr = 1
!! perform Ewald summation on \(\text{iesr}^3\) cells - CP only
REAL(DP) :: ion_damping = 0.2_DP
!! meaningful only if ion\_dynamics='damp'. Damping frequency times
!! delta t, optimal values could be calculated with the formula:
!! \( \sqrt(0.5\cdot\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'
!! allowed options:
!! -'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'
!! allowed options:
!! -'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'
!! allowed options:
!! -'nose' control ionic temperature using Nose thermostat,
!! see parameters "fnosep" and "tempw";
!! -'rescaling' control ionic temperature via velocity rescaling,
!! see parameters "tempw" and "tolp";
!! -'rescale-v' control ionic temperature via velocity rescaling,
!! see parameters "tempw" and "nraise";
!! -'rescale-T' control ionic temperature via velocity rescaling,
!! see parameter "delta_t";
!! -'reduce-T' reduce ionic temperature, see parameters "nraise", delta_t";
!! -'berendsen' control ionic temperature using "soft" velocity
!! rescaling, see parameters "tempw" and "nraise";
!! -'andersen' control ionic temperature using Andersen thermostat,
!! see parameters "tempw" and "nraise";
!! -'not_controlled' ionic temperature is not controlled.
REAL(DP) :: tempw = 300.0_DP
!! meaningful only when ion\_temperature different from 'not\_controlled'.
!! Value of the ionic temperature (in Kelvin) forced by the temperature control.
INTEGER, PARAMETER :: nhclm = 4
!! max length for the chain; it can be easily increased
!! since the restart file should be able to handle it,
!! perhaps better to align \(\text{nhclm}\) by 4.
REAL(DP) :: fnosep( nhclm ) = 50.0_DP
!! meaningful only with ion\_temperature='nose'. Oscillation frequency of
!! the nose thermostat (in terahertz).
INTEGER :: nhpcl = 0
!! non-zero only with ion\_temperature = 'nose'.
!! This defines the length of the Nose-Hoover chain.
INTEGER :: nhptyp = 0
!! this parameter set the nose hoover thermostat to more than one
INTEGER :: nhgrp(nsx)=0
!! this is the array to assign thermostats to atomic types.
!! Allows to use various thermostat setups.
INTEGER :: ndega = 0
!! this is the parameter to control active degrees of freedom.
!! Used for temperature control and the Nose-Hoover chains.
REAL(DP) :: tolp = 50.0_DP
!! meaningful only with ion\_temperature='rescaling'.
!! Tolerance (in Kelvin) of the rescaling. When ionic temperature
!! differs from "tempw" more than "tolp" apply rescaling.
REAL(DP) :: fnhscl(nsx)=-1.0_DP
!! this is to scale the target energy, in case there are constraints
!! the dimension is the same as \(\text{nhgrp}\), meaning that atomic
!! type \(i\) with a group \(\text{nhgrp}(i)\) is scaled by \(\text{fnhscl}(i)\)
LOGICAL :: tranp(nsx) = .false.
!! \(\text{tranp}(i)\) controls the randomization of the i-th atomic specie:
!! -TRUE randomize ionic positions ( see "amprp" );
!! -FALSE do nothing.
REAL(DP) :: amprp(nsx) = 0.0_DP
!! \(\text{amprp}(i)\) meaningful only if \(\text{tranp}(i)=\text{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:
!! \(\text{amprp}(i)\cdot (X,Y,Z)\), where X, Y, Z are pseudo random number in the interval
!! \([-0.5, 0.5]\).
REAL(DP) :: greasp = 0.0_DP
!! 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(DP) :: upscale = 100.0_DP
!! Max reduction allowed in scf threshold during optimization
CHARACTER(len=80) :: pot_extrapolation = 'default', &
wfc_extrapolation = 'default'
! These variables are used only by PWSCF
LOGICAL :: refold_pos
LOGICAL :: remove_rigid_rot = .false.
!
! ... delta_T, nraise, tolp are used to change temperature in PWscf
!
REAL(DP) :: delta_t = 1.0_DP
!! used to change temperature in PWscf
INTEGER :: nraise = 1
!! used to change temperature in PWscf
!
! ... variables added for new BFGS algorithm
!
INTEGER :: bfgs_ndim = 1
REAL(DP) :: trust_radius_max = 0.8_DP
REAL(DP) :: trust_radius_min = 1.E-3_DP
REAL(DP) :: trust_radius_ini = 0.5_DP
REAL(DP) :: w_1 = 0.5E-1_DP
REAL(DP) :: w_2 = 0.5_DP
!
! Parameters for minimization with the FIRE algorithm
!
INTEGER :: fire_nmin = 5 ! minimum number of steps for time step increase
REAL(DP) :: fire_f_inc = 1.1_DP ! factor for time step increase
REAL(DP) :: fire_f_dec = 0.5_DP ! factor for time step decrease
REAL(DP) :: fire_alpha_init = 0.2_DP ! initial value of mixing factor
REAL(DP) :: fire_falpha = 0.99_DP ! modify the mixing factor
REAL(DP) :: fire_dtmax = 10.0_DP ! maximum time step; calculated as dtmax = fire_dtmax*dt
!
!
NAMELIST / ions / ion_dynamics, iesr, ion_radius, ion_damping, &
ion_positions, ion_velocities, ion_temperature, &
tempw, fnosep, nhgrp, fnhscl, nhpcl, nhptyp, ndega, tranp, &
amprp, greasp, tolp, ion_nstepe, ion_maxstep, &
refold_pos, upscale, delta_t, pot_extrapolation, &
wfc_extrapolation, nraise, remove_rigid_rot, &
trust_radius_max, trust_radius_min, &
trust_radius_ini, w_1, w_2, bfgs_ndim, &
fire_nmin, fire_f_inc, fire_f_dec, fire_alpha_init, &
fire_falpha, fire_dtmax
!=----------------------------------------------------------------------------=!
! CELL Namelist Input Parameters
!=----------------------------------------------------------------------------=!
!
CHARACTER(len=80) :: cell_parameters = 'default'
!! allowed options:
!! -'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'
!! set how the cell should be moved
CHARACTER(len=80) :: cell_dynamics_allowed(8)
DATA cell_dynamics_allowed / 'sd', 'pr', 'none', 'w', 'damp-pr', &
'damp-w', 'bfgs', 'ipi' /
CHARACTER(len=80) :: cell_velocities = 'default'
!! allowed options:
!! -'zero' restart setting cell velocitiy to zero;
!! -'default' restart using cell velocity of the previous run
REAL(DP) :: press = 0.0_DP
!! external pressure (in GPa, remember \(1\text{kbar}=10^8\text{Pa}\))
REAL(DP) :: wmass = 0.0_DP
!! 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'
!! Allowed options:
!! -'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(DP) :: temph = 0.0_DP
!! meaningful only with cell\_temperature different from 'not_controlled'.
!! Value of the cell temperature (in Kelvin) forced by the temperature control.
REAL(DP) :: fnoseh = 1.0_DP
!! meaningful only with cell\_temperature = 'nose'.
!! Oscillation frequency of the nose thermostat (in terahertz)
REAL(DP) :: greash = 0.0_DP
!! same as "grease", for cell damped dynamics
CHARACTER(len=80) :: cell_dofree = 'all'
!! selects which of the cell parameters should be moved. Allowed options:
!! -'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(DP) :: cell_factor = 0.0_DP
!! NOT used in FPMD
INTEGER :: cell_nstepe = 1
!! number of electronic steps for each cell step
REAL(DP) :: cell_damping = 0.1_DP
!! meaningful only if cell\_dynamics='damp'.
!! Damping frequency times delta t, optimal values could be
!! calculated with the formula:
!! \( \sqrt(0.5\cdot\log{(E1-E2)/(E2-E3))}\),
!! where E1 E2 E3 are successive values of the DFT total energy
!! in a ionic steepest descent simulation.
REAL(DP) :: press_conv_thr = 0.5_DP
LOGICAL :: treinit_gvecs = .FALSE.
!! if TRUE all the quantities related to fft g vectors are updated at
!! step of variable cell structural optimization
NAMELIST / cell / cell_parameters, cell_dynamics, cell_velocities, &
press, wmass, cell_temperature, temph, fnoseh, &
cell_dofree, greash, cell_factor, cell_nstepe, &
cell_damping, press_conv_thr, treinit_gvecs
!
!=----------------------------------------------------------------------------=!!
! PRESS_AI Namelist Input Parameters
!=----------------------------------------------------------------------------=!
!
!
LOGICAL :: abivol = .false.
LOGICAL :: abisur = .false.
LOGICAL :: pvar = .false.
LOGICAL :: fill_vac=.false.
LOGICAL :: scale_at=.false.
LOGICAL :: t_gauss =.false.
LOGICAL :: jellium= .false.
LOGICAL :: cntr(nsx)=.false.
REAL(DP) :: P_ext = 0.0_DP
REAL(DP) :: P_in = 0.0_DP
REAL(DP) :: P_fin = 0.0_DP
REAL(DP) :: rho_thr = 0.0_DP
REAL(DP) :: step_rad(nsx) = 0.0_DP
REAL(DP) :: Surf_t = 0.0_DP
REAL(DP) :: dthr = 0.0_DP
REAL(DP) :: R_j = 0.0_DP
REAL(DP) :: h_j = 0.0_DP
REAL(DP) :: delta_eps = 0.0_DP
REAL(DP) :: delta_sigma=0.0_DP
INTEGER :: n_cntr = 0
INTEGER :: axis = 0
NAMELIST / press_ai / abivol, P_ext, pvar, P_in, P_fin, rho_thr, &
& step_rad, delta_eps, delta_sigma, n_cntr, &
& fill_vac, scale_at, t_gauss, abisur, &
& Surf_t, dthr, cntr, axis, jellium, R_j, h_j
!=----------------------------------------------------------------------------=!
! WANNIER Namelist Input Parameters
!=----------------------------------------------------------------------------=!
LOGICAL :: wf_efield
LOGICAL :: wf_switch
!
INTEGER :: sw_len
!
REAL(DP) :: efx0, efy0, efz0
REAL(DP) :: efx1, efy1, efz1
!
INTEGER :: wfsd
!
REAL(DP) :: wfdt
REAL(DP) :: maxwfdt
REAL(DP) :: wf_q
REAL(DP) :: wf_friction
!=======================================================================
!exx_wf related
INTEGER :: vnbsp
INTEGER :: exx_neigh
REAL(DP) :: exx_poisson_eps
REAL(DP) :: exx_dis_cutoff
REAL(DP) :: exx_ps_rcut_self
REAL(DP) :: exx_ps_rcut_pair
REAL(DP) :: exx_me_rcut_self
REAL(DP) :: exx_me_rcut_pair
LOGICAL :: exx_use_cube_domain
!=======================================================================
INTEGER :: nit
INTEGER :: nsd
INTEGER :: nsteps
!
REAL(DP) :: tolw
!
LOGICAL :: adapt
!
INTEGER :: calwf
INTEGER :: nwf
INTEGER :: wffort
!
LOGICAL :: writev
!==============================================================================
!exx_wf related
NAMELIST / wannier / wf_efield, wf_switch, sw_len, efx0, efy0, efz0,&
efx1, efy1, efz1, wfsd, wfdt,exx_neigh,exx_poisson_eps,&
exx_dis_cutoff,exx_ps_rcut_self, exx_me_rcut_self, &
exx_use_cube_domain, &
exx_ps_rcut_pair, exx_me_rcut_pair, vnbsp,&
maxwfdt, wf_q, wf_friction, nit, nsd, nsteps, &
tolw, adapt, calwf, nwf, wffort, writev
!===============================================================================
! END manual
! ----------------------------------------------------------------------
!=----------------------------------------------------------------------------=!
! WANNIER_NEW Namelist Input Parameters
!=----------------------------------------------------------------------------=!
LOGICAL :: plot_wannier = .false.
!! if TRUE wannier number plot_wan\_num is plotted
LOGICAL :: use_energy_int = .false.
!! if TRUE energy interval is used to generate wannier
LOGICAL :: print_wannier_coeff = .false.
! if .TRUE.
INTEGER, PARAMETER :: nwanx = 50
!! max number of wannier functions
INTEGER :: nwan
!! number of wannier functions
INTEGER :: plot_wan_num = 0
!! number of wannier for plotting
INTEGER :: plot_wan_spin = 1
!! spin of wannier for plotting
REAL(DP) :: constrain_pot(nwanx,2)
!! constrained potential for wannier
NAMELIST / wannier_ac / plot_wannier, use_energy_int, nwan, &
plot_wan_num, plot_wan_spin, constrain_pot, print_wannier_coeff
! END manual
! ----------------------------------------------------------------------
!
!=----------------------------------------------------------------------------=!
! FCP Namelist Input Parameters
!=----------------------------------------------------------------------------=!
!
REAL(DP) :: fcp_mu = 0.0_DP
!! target Fermi energy (in eV)
CHARACTER(LEN=16) :: fcp_dynamics = 'none'
!! available options:
!! -'none': Not specified;
!! -'lm': Line-Minimization;
!! -'newton': Newton-Raphson algorithm (with DIIS);
!! -'bfgs': BFGS algorithm (coupling with ions);
!! -'damp': Damped dynamics (quick-min Verlet);
!! -'verlet': Verlet dynamics;
!! -'velocity-verlet': Velocity-Verlet dynamics.
CHARACTER(LEN=16) :: fcp_dynamics_allowed(7)
DATA fcp_dynamics_allowed / 'none', 'lm', 'newton', 'bfgs', &
'damp', 'verlet', 'velocity-verlet' /
REAL(DP) :: fcp_conv_thr = 1.0E-2_DP
!! convergence threshold for FCP relaxation (in eV)
INTEGER :: fcp_ndiis = 4
!! size of DIIS for Newton-Raphson algorithm
REAL(DP) :: fcp_rdiis = 1.0_DP
!! step of DIIS for Newton-Raphson algorithm
REAL(DP) :: fcp_mass = -1.0_DP
!! mass for the FCP
REAL(DP) :: fcp_velocity = 0.0_DP
!! initial velocity for the FCP
CHARACTER(LEN=80) :: fcp_temperature = 'not_controlled'
!! Allowed options:
!! -'rescaling': control FCP's temperature via velocity rescaling,
!! see parameters "fcp\_tempw" and "fcp\_tolp";
!! -'rescale-v': control FCP's temperature via velocity rescaling,
!! see parameters "fcp\_tempw" and "fcp\_nraise";
!! -'rescale-T': control FCP's temperature via velocity rescaling,
!! see parameter "fcp\_delta\_t";
!! -'reduce-T': reduce FCP's temperature,
!! see parameters "fcp\_nraise", "fcp\_delta\_t";
!! -'berendsen': control FCP's temperature using "soft" velocity
!! rescaling - see parameters "fcp\_tempw" and "fcp\_nraise"
!! -'andersen': control FCP's temperature using Andersen thermostat,
!! see parameters "fcp\_tempw" and "fcp\_nraise";
!! -'initial': initialize ion velocities to temperature fcp\_tempw
!! and leave uncontrolled further on;
!! -'not_controlled': FCP's temperature is not controlled.
REAL(DP) :: fcp_tempw = 300.0_DP
!! meaningful only with fcp\_temperature different from 'not\_controlled'.
!! Value of the FCP's temperature (in Kelvin) forced by the temperature control
REAL(DP) :: fcp_tolp = 100.0_DP
!! parameter to control temperature
REAL(DP) :: fcp_delta_t = 1.0_DP
!! parameter to control temperature
INTEGER :: fcp_nraise = 1
!! parameter to control temperature
LOGICAL :: freeze_all_atoms = .FALSE.
!! freeze (or fix) all atoms.
!! To perform relaxation or dynamics only with FCP.
NAMELIST / fcp / fcp_mu, fcp_dynamics, fcp_conv_thr, fcp_ndiis, fcp_rdiis, &
fcp_mass, fcp_velocity, fcp_temperature, &
fcp_tempw, fcp_tolp, fcp_delta_t, fcp_nraise, &
freeze_all_atoms
! END manual
! ----------------------------------------------------------------------
!
!=----------------------------------------------------------------------------=!
! RISM Namelist Input Parameters
!=----------------------------------------------------------------------------=!
!
INTEGER :: nsolv = 0
! number of solvents
CHARACTER(len=80) :: closure = 'kh'
! closure = 'hnc' | 'kh'*
! select type of closure equation
! 'hnc' HyperNetted-Chain model
! 'kh' Kovalenko and Hirata's model
CHARACTER(len=80) :: closure_allowed(2)
DATA closure_allowed / 'hnc', 'kh' /
REAL(DP) :: tempv = 300.0_DP
! value of the solvent temperature (in Kelvin)
! during 1D- and 3D-RISM calculations.
REAL(DP) :: ecutsolv = 0.0_DP
! energy cutoff for 3D-RISM in k-space (in Rydberg)
! by default its value is "4 * ecutwfc"
CHARACTER(len=80) :: solute_lj(nsx) = 'uff'
! solute_lj = 'none' | 'uff'* | 'clayff' | 'opls-aa'
! select type of Lennard-Jones force fields for solutes
! 'uff' Universal Force Field
! 'clayff' Clay's Force Field
! 'opls-aa' OPLS-AA (generic parameters for QM/MM)
CHARACTER(len=80) :: solute_lj_allowed(4)
DATA solute_lj_allowed / 'none', 'uff', 'clayff', 'opls-aa' /
REAL(DP) :: solute_epsilon(nsx) = -1.0_DP
! Lennard-Jones parameters `epsilon' for solutes (in kcal/mol)
REAL(DP) :: solute_sigma(nsx) = -1.0_DP
! Lennard-Jones parameters `sigma' for solutes (in angstrom)
REAL(DP) :: rmax_lj = 5.0_DP
! maximum radius of Lennard-Jones for 3D-RISM (in sigma)
REAL(DP) :: rmax1d = 1000.0_DP
! maximum inter-site radius for 1D-RISM (in bohr)
CHARACTER(len=80) :: starting1d = 'zero'
! starting1d = 'zero'* | 'file' | 'fix'
! define how the code should initialize the 1D-RISM's correlation function
! 'zero' start from 0
! 'file' read from file
! 'fix' read from file, and fix correlation function
CHARACTER(len=80) :: starting1d_allowed(3)
DATA starting1d_allowed / 'zero', 'file', 'fix' /
CHARACTER(len=80) :: starting3d = 'zero'
! starting3d = 'zero'* | 'file'
! define how the code should initialize the 3D-RISM's correlation function
! 'zero' start from 0
! 'file' read from file
CHARACTER(len=80) :: starting3d_allowed(2)
DATA starting3d_allowed / 'zero', 'file' /
REAL(DP) :: smear1d = 2.0_DP
! smearing radius for 1D-RISM (in bohr)
REAL(DP) :: smear3d = 2.0_DP
! smearing radius for 3D-RISM (in bohr)
INTEGER :: rism1d_maxstep = 50000
! maximum number of steps in 1D-RISM calculation
INTEGER :: rism3d_maxstep = 5000
! maximum number of steps in 3D-RISM calculation
REAL(DP) :: rism1d_conv_thr = 1.0E-8_DP
! convergence threshold for 1D-RISM calculation
! convergence is achieved when RMS of residual vector < rism1d_conv_thr
REAL(DP) :: rism3d_conv_thr = 1.0E-5_DP
! convergence threshold for 3D-RISM calculation
! convergence is achieved when RMS of residual vector < rism3d_conv_thr
INTEGER :: mdiis1d_size = 20
! size of MDIIS algorithm in 1D-RISM calculation
INTEGER :: mdiis3d_size = 10
! size of MDIIS algorithm in 3D-RISM calculation
REAL(DP) :: mdiis1d_step = -1.0_DP
! step width of MDIIS algorithm in 1D-RISM calculation
REAL(DP) :: mdiis3d_step = -1.0_DP
! step width of MDIIS algorithm in 3D-RISM calculation
REAL(DP) :: rism1d_bond_width = 0.0_DP
! gaussian width of bonds in 1D-RISM calculation
REAL(DP) :: rism1d_dielectric = -1.0_DP
! dielectric constant for DRISM
REAL(DP) :: rism1d_molesize = 2.0_DP
! size of solvent molecule for DRISM (in bohr)
INTEGER :: rism1d_nproc = 128
! number of processes to calculate 1D-RISM
INTEGER :: rism1d_nproc_switch = 16
! number of processes to calculate 1D-RISM
REAL(DP) :: rism3d_conv_level = -1.0_DP
! convergence level of 3D-RISM
LOGICAL :: rism3d_planar_average = .FALSE.
! calculate planar average of solvents after 3D-RISM calculation, or not
INTEGER :: laue_nfit = 4
! number of fitting points in Laue-RISM calculation
REAL(DP) :: laue_expand_right = -1.0_DP
! expanding length on right-hand side in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_expand_left = -1.0_DP
! expanding length on left-hand side in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_starting_right = 0.0_DP
! starting position on right-hand side in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_starting_left = 0.0_DP
! starting position on left-hand side in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_buffer_right = -1.0_DP
! buffering length on right-hand side in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_buffer_right_solu = -1.0_DP
! additional buffering length on right-hand side
! of solute-ward in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_buffer_right_solv = -1.0_DP
! additional buffering length on right-hand side
! of solvent-ward in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_buffer_left = -1.0_DP
! buffering length on left-hand side in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_buffer_left_solu = -1.0_DP
! additional buffering length on left-hand side
! of solute-ward in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_buffer_left_solv = -1.0_DP
! additional buffering length on left-hand side
! of solvent-ward in Laue-RISM calculation (in bohr)
LOGICAL :: laue_both_hands = .FALSE.
! use both-hands method in Laue-RISM calculation, or not
CHARACTER(len=80) :: laue_reference = 'none'
! laue_reference = 'none'* | 'average' | 'right' | 'left'
! reference of electrostatic potential in Laue-RISM calculation
! (used to evaluate Fermi energy and to calculate FCP)
! 'none' explicit reference is not defined
! 'average' average of right-hand side and left-hand side
! 'right' right-hand side
! 'left' left-hand side
CHARACTER(len=80) :: laue_reference_allowed(4)
DATA laue_reference_allowed / 'none', 'average', 'right', 'left' /
CHARACTER(len=80) :: laue_wall = 'auto'
! laue_wall = 'none' | 'auto'* | 'manual'
! define repulsive wall in Laue-RISM calculation
! 'none' wall is not defined
! 'auto' edge position of wall is defined automatically
! 'manual' edge position of wall is defined manually
CHARACTER(len=80) :: laue_wall_allowed(3)
DATA laue_wall_allowed / 'none', 'manual', 'auto' /
REAL(DP) :: laue_wall_z = 0.0_DP
! edge position of repulsive wall in Laue-RISM calculation (in bohr)
REAL(DP) :: laue_wall_rho = 0.01_DP
! density of repulsive wall in Laue-RISM calculation (in 1/bohr^3)
REAL(DP) :: laue_wall_epsilon = 0.1_DP
! Lennard-Jones parameters `epsilon' for repulsive wall
! in Laue-RISM calculation (in kcal/mol)
REAL(DP) :: laue_wall_sigma = 4.0_DP
! Lennard-Jones parameters `sigma' for repulsive wall
! in Laue-RISM calculation (in angstrom)
LOGICAL :: laue_wall_lj6 = .FALSE.
! use attractive term of Lennard-Jones: -(1/r)^6, or not
NAMELIST / rism / nsolv, closure, tempv, ecutsolv, solute_lj, &
solute_epsilon, solute_sigma, rmax_lj, rmax1d, &
starting1d, starting3d, smear1d, smear3d, &
rism1d_maxstep, rism3d_maxstep, rism1d_conv_thr, rism3d_conv_thr, &
mdiis1d_size, mdiis3d_size, mdiis1d_step, mdiis3d_step, &
rism1d_bond_width, rism1d_dielectric, rism1d_molesize, &
rism1d_nproc, rism1d_nproc_switch, &
rism3d_conv_level, rism3d_planar_average, &
laue_nfit, laue_expand_right, laue_expand_left, &
laue_starting_right, laue_starting_left, &
laue_buffer_right, laue_buffer_right_solu, laue_buffer_right_solv, &
laue_buffer_left, laue_buffer_left_solu, laue_buffer_left_solv, &
laue_both_hands, laue_reference, laue_wall, laue_wall_z, laue_wall_rho, &
laue_wall_epsilon, laue_wall_sigma, laue_wall_lj6
! END manual
! ----------------------------------------------------------------------
! ----------------------------------------------------------------
! BEGIN manual
!
!=----------------------------------------------------------------------------=!
! CARDS parameters
!=----------------------------------------------------------------------------=!
!
! Note: See file read_cards.f90 for card syntax and usage
!
! ATOMIC_SPECIES
!
CHARACTER(len=6) :: atom_label(nsx) = 'XX'
!! label of the atomic species being read
CHARACTER(len=80) :: atom_pfile(nsx) = 'YY'
!! pseudopotential file name
REAL(DP) :: atom_mass(nsx) = 0.0_DP
!! atomic mass of the i-th atomic species in atomic mass units:
!! \(1\text{a.m.u.}=1822.9\text{a.u.}=1.6605\cdot 10^{-27}kg\)
LOGICAL :: taspc = .false.
LOGICAL :: tkpoints = .false.
LOGICAL :: tforces = .false.
LOGICAL :: tocc = .false.
LOGICAL :: tcell = .false.
LOGICAL :: tionvel = .false.
LOGICAL :: tconstr = .false.
LOGICAL :: tksout = .false.
LOGICAL :: ttemplate = .false.
LOGICAL :: twannier = .false.
LOGICAL :: tsolvents = .false.
LOGICAL :: ttotcharge = .false.
!
! ATOMIC_POSITIONS
!
REAL(DP), ALLOCATABLE :: rd_pos(:,:)
!! unsorted positions from input
INTEGER, ALLOCATABLE :: sp_pos(:)
INTEGER, ALLOCATABLE :: rd_if_pos(:,:)
INTEGER, ALLOCATABLE :: na_inp(:)
LOGICAL :: tapos = .false.
LOGICAL :: lsg = .false.
CHARACTER(len=80) :: atomic_positions = 'crystal'
!! atomic\_positions = 'bohr' | 'angstrom' | 'crystal' | 'alat'
!! Select the units for the atomic positions being read from stdin
!
! ION_VELOCITIES
!
REAL(DP), ALLOCATABLE :: rd_vel(:,:)
!! unsorted velocities from input
INTEGER, ALLOCATABLE :: sp_vel(:)
LOGICAL :: tavel = .false.
!
! ATOMIC_FORCES
!
REAL(DP), ALLOCATABLE :: rd_for(:,:)
!! external forces applied to single atoms
!
! KPOINTS
!
! ... k-points inputs
LOGICAL :: tk_inp = .false.
REAL(DP), ALLOCATABLE :: xk(:,:), wk(:)
INTEGER :: nkstot = 0, nk1 = 0, nk2 = 0, nk3 = 0, k1 = 0, k2 = 0, k3 = 0
CHARACTER(len=80) :: k_points = 'gamma'
!! select the k points mesh. Available options:
!! '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 (2PI/alat);
!! 'gamma': only gamma point is used (default in CPMD simulation);
!! 'crystal\_b', 'tpiba\_b': postfix '\_b' means that a band input is given.
!! The weights is a integer number that gives the number of points between
!! the present point and the next. The weight of the last point is not used.
!
! OCCUPATIONS
!
REAL(DP), ALLOCATABLE :: f_inp(:,:)
LOGICAL :: tf_inp = .false.
!
! CELL_PARAMETERS
!
REAL(DP) :: rd_ht(3,3) = 0.0_DP
CHARACTER(len=80) :: cell_units = 'none'
LOGICAL :: trd_ht = .false.
!
! REFERENCE_CELL_PARAMETERS
!
REAL(DP) :: rd_ref_ht(3,3) = 0.0_DP
CHARACTER(len=80) :: ref_cell_units = 'alat'
LOGICAL :: ref_cell = .false.
!
! CONSTRAINTS
!
INTEGER :: nc_fields = 4
!! max number of fields that is allowed to
!! define a constraint
INTEGER :: nconstr_inp = 0
REAL(DP) :: constr_tol_inp = 1.E-6_DP
!
CHARACTER(len=20), ALLOCATABLE :: constr_type_inp(:)
REAL(DP), ALLOCATABLE :: constr_inp(:,:)
REAL(DP), ALLOCATABLE :: constr_target_inp(:)
LOGICAL, ALLOCATABLE :: constr_target_set(:)
!
! KOHN_SHAM
!
INTEGER, ALLOCATABLE :: iprnks( :, : )
INTEGER :: nprnks( nspinx ) = 0
!! logical mask used to specify which kohn sham orbital should be
!! written to files 'KS.'
!
! PLOT_WANNIER
!
INTEGER, PARAMETER :: nwf_max = 1000
!
INTEGER :: wannier_index( nwf_max )
!
! WANNIER_NEW
!
TYPE (wannier_data) :: wan_data(nwanx,2)
!
! SOLVENTS
!
CHARACTER(len=10) :: solv_label(nsolx) = 'XX'
!! label of the solvents
CHARACTER(len=80) :: solv_mfile(nsolx) = 'YY'
!! molecular file name
REAL(DP) :: solv_dens1(nsolx) = 0.0_DP
!! solvent's density (for the right-hand side)
REAL(DP) :: solv_dens2(nsolx) = 0.0_DP
!! solvent's density (for the left-hand side)
CHARACTER(len=80) :: solvents_unit = '1/cell'
!! solvents_unit = '1/cell' | 'mol/L' | 'g/cm^3'
!! select the units for the solvent's densities being read from stdin
! HUBBARD
!
LOGICAL :: tahub = .false.
! END manual
! ----------------------------------------------------------------------
LOGICAL :: xmloutput = .false.
!! if TRUE PW produce an xml output
CONTAINS
!
!----------------------------------------------------------------------------
SUBROUTINE reset_input_checks()
!-----------------------------------------------------------------------------
!! This routine sets to FALSE flags used to check whether some variables
!! have been read. If called before reading, allows to read a different
!! input file without triggering bogus error messages - useful for NEB.
!
IMPLICIT NONE
!
tapos = .false.
tkpoints = .false.
taspc = .false.
twannier = .false.
tconstr = .false.
tforces = .false.
tocc = .false.
tksout = .false.
tionvel = .false.
tcell = .false.
tsolvents = .false.
ttotcharge = .false.
!
END SUBROUTINE reset_input_checks
!
!
!-----------------------------------------------------------------------------
SUBROUTINE allocate_input_ions( ntyp, nat )
!-----------------------------------------------------------------------------
!
INTEGER, INTENT(in) :: ntyp, nat
!
IF ( allocated( rd_pos ) ) DEALLOCATE( rd_pos )
IF ( allocated( sp_pos ) ) DEALLOCATE( sp_pos )
IF ( allocated( rd_if_pos ) ) DEALLOCATE( rd_if_pos )
IF ( allocated( na_inp ) ) DEALLOCATE( na_inp )
IF ( allocated( rd_vel ) ) DEALLOCATE( rd_vel )
IF ( allocated( sp_vel ) ) DEALLOCATE( sp_vel )
IF ( allocated( rd_for ) ) DEALLOCATE( rd_for )
!
ALLOCATE( rd_pos( 3, nat ) )
ALLOCATE( sp_pos( nat) )
ALLOCATE( rd_if_pos( 3, nat ) )
ALLOCATE( na_inp( ntyp) )
ALLOCATE( rd_vel( 3, nat ) )
ALLOCATE( sp_vel( nat) )
ALLOCATE( rd_for( 3, nat ) )
!
rd_pos = 0.0_DP
sp_pos = 0
rd_if_pos = 1
na_inp = 0
rd_vel = 0.0_DP
sp_vel = 0
rd_for = 0.0_DP
!
RETURN
!
END SUBROUTINE allocate_input_ions
!-----------------------------------------------------------------------------
SUBROUTINE allocate_input_constr()
!-----------------------------------------------------------------------------
!
IF ( allocated( constr_type_inp ) ) DEALLOCATE( constr_type_inp )
IF ( allocated( constr_inp ) ) DEALLOCATE( constr_inp )
IF ( allocated( constr_target_inp ) ) DEALLOCATE( constr_target_inp )
IF ( allocated( constr_target_set ) ) DEALLOCATE( constr_target_set )
!
ALLOCATE( constr_type_inp( nconstr_inp ) )
ALLOCATE( constr_target_inp( nconstr_inp ) )
ALLOCATE( constr_target_set( nconstr_inp ) )
!
ALLOCATE( constr_inp( nc_fields, nconstr_inp ) )
!
constr_type_inp = ' '
constr_inp = 0.0_DP
constr_target_inp = 0.0_DP
constr_target_set = .false.
!
RETURN
!
END SUBROUTINE allocate_input_constr
!-----------------------------------------------------------------------------
SUBROUTINE allocate_input_iprnks( nksx, nspin )
!-----------------------------------------------------------------------------
!
INTEGER, INTENT(in) :: nksx, nspin
!
IF( allocated( iprnks ) ) DEALLOCATE( iprnks )
!
ALLOCATE( iprnks( max( 1, nksx), nspin ) )
!
iprnks = 0
!
RETURN
!
END SUBROUTINE allocate_input_iprnks
!-----------------------------------------------------------------------------
SUBROUTINE deallocate_input_parameters()
!-----------------------------------------------------------------------------
!
IF ( allocated( xk ) ) DEALLOCATE( xk )
IF ( allocated( wk ) ) DEALLOCATE( wk )
IF ( allocated( rd_pos ) ) DEALLOCATE( rd_pos )
IF ( allocated( sp_pos ) ) DEALLOCATE( sp_pos )
IF ( allocated( rd_if_pos ) ) DEALLOCATE( rd_if_pos )
IF ( allocated( na_inp ) ) DEALLOCATE( na_inp )
IF ( allocated( rd_vel ) ) DEALLOCATE( rd_vel )
IF ( allocated( sp_vel ) ) DEALLOCATE( sp_vel )
IF ( allocated( rd_for ) ) DEALLOCATE( rd_for )
!
IF ( allocated( f_inp ) ) DEALLOCATE( f_inp )
!
IF ( allocated( constr_type_inp ) ) DEALLOCATE( constr_type_inp )
IF ( allocated( constr_inp ) ) DEALLOCATE( constr_inp )
IF ( allocated( constr_target_inp ) ) DEALLOCATE( constr_target_inp )
IF ( allocated( constr_target_set ) ) DEALLOCATE( constr_target_set )
!
IF ( allocated( iprnks ) ) DEALLOCATE( iprnks )
!
RETURN
!
END SUBROUTINE deallocate_input_parameters
!
!=----------------------------------------------------------------------------=!
!
END MODULE input_parameters
!
!=----------------------------------------------------------------------------=!