2003-01-20 05:58:50 +08:00
|
|
|
!
|
2008-08-22 23:53:34 +08:00
|
|
|
! Copyright (C) 2001-2008 Quantum-ESPRESSO group
|
2003-01-20 05:58:50 +08:00
|
|
|
! 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 .
|
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
!--------------------------------------------------------------------------
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
MODULE basis
|
|
|
|
!
|
|
|
|
! ... The variables needed to describe the atoms in the unit cell
|
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER :: &
|
|
|
|
natomwfc ! number of starting wavefunctions
|
2007-11-17 01:35:48 +08:00
|
|
|
CHARACTER(LEN=30) :: &! specifies how input coordinates are given
|
|
|
|
atomic_positions, &! 'alat', 'crystal', 'angstrom', 'bohr'
|
2008-09-06 01:11:25 +08:00
|
|
|
starting_wfc, &! 'random' or 'atomic' or 'atomic+randm' or 'file'
|
|
|
|
starting_pot, &! 'atomic' or 'file'
|
2003-10-17 00:30:12 +08:00
|
|
|
startingconfig ! 'input' or 'file'
|
|
|
|
!
|
|
|
|
END MODULE basis
|
|
|
|
!
|
|
|
|
!
|
|
|
|
MODULE gvect
|
|
|
|
!
|
|
|
|
! ...The variables describing the reciprocal lattice vectors
|
|
|
|
!
|
2004-04-02 21:01:15 +08:00
|
|
|
USE kinds, ONLY : DP
|
|
|
|
USE reciprocal_vectors, ONLY : ig_l2g, sortedig_l2g
|
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER :: &
|
|
|
|
ngm, &! number of g vectors
|
|
|
|
ngm_g, &! global number of g vectors (sum over all processors)
|
|
|
|
ngm_l, &! the local number of g vectors (only present processor)
|
|
|
|
gstart, &! first nonzero g vector
|
|
|
|
nr1, &! fft dimension along x
|
|
|
|
nr2, &! fft dimension along y
|
|
|
|
nr3, &! fft dimension along z
|
|
|
|
nrx1, &! maximum fft dimension along x
|
|
|
|
nrx2, &! maximum fft dimension along y
|
|
|
|
nrx3, &! maximum fft dimension along z
|
|
|
|
nrxx, &! maximum total fft
|
|
|
|
ngl ! number of |g| shells
|
|
|
|
!INTEGER, ALLOCATABLE :: &
|
|
|
|
! ig_l2g(:) !"l2g" means local to global, this array convert a local
|
|
|
|
! ! G-vector index into the global index, in other words
|
|
|
|
! ! the index of the G-v. in the overall array of G-vectors
|
|
|
|
INTEGER, ALLOCATABLE, TARGET :: &
|
|
|
|
nl(:), &! correspondence fft <-> array of G vectors
|
|
|
|
nlm(:), &! same for gamma point calculation
|
|
|
|
igtongl(:) ! correspondence shells of G <-> G
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), ALLOCATABLE, TARGET :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
g(:,:), &! coordinates of G vectors
|
|
|
|
gg(:) ! modulus G^2 of G vectors
|
|
|
|
! G vectors are in order of increasing |G|
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
ecutwfc ! energy cut-off
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), POINTER :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
gl(:) ! the modulus of g in each shell
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL (DP) :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
gcutm, &! cut-off for G vectors
|
|
|
|
dual, &! link between G of wavefunctions and charge
|
|
|
|
ecfixed, &!
|
2008-09-02 16:24:49 +08:00
|
|
|
qcutz = 0.0_DP,&! For the modified Ekin functional
|
2003-10-17 00:30:12 +08:00
|
|
|
q2sigma !
|
2005-08-28 22:09:42 +08:00
|
|
|
complex(DP), ALLOCATABLE :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
eigts1(:,:), &!
|
|
|
|
eigts2(:,:), &! the phases e^{-iG*tau_s}
|
|
|
|
eigts3(:,:) !
|
|
|
|
INTEGER, ALLOCATABLE :: &
|
|
|
|
ig1(:), &!
|
|
|
|
ig2(:), &! the indices of G components
|
|
|
|
ig3(:) !
|
|
|
|
!
|
|
|
|
END MODULE gvect
|
|
|
|
!
|
|
|
|
!
|
|
|
|
MODULE gsmooth
|
|
|
|
!
|
|
|
|
! ... the variables for the smooth mesh of the wavefunction. It can
|
|
|
|
! ... be different from the large mesh if dual > 4
|
|
|
|
!
|
2004-04-02 21:01:15 +08:00
|
|
|
USE kinds, ONLY : DP
|
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER :: &
|
|
|
|
ngms, &! the number of smooth G vectors
|
|
|
|
ngms_g, &! the global number of smooth G vectors
|
|
|
|
! (sum over all processors)
|
|
|
|
ngms_l, &! the local number of smooth G vectors
|
|
|
|
! (only present processor)
|
|
|
|
nr1s, &!
|
|
|
|
nr2s, &! the dimension of the smooth grid
|
|
|
|
nr3s, &!
|
|
|
|
nrx1s, &! maximum dimension of the smooth grid
|
|
|
|
nrx2s, &! maximum dimension of the smooth grid
|
|
|
|
nrx3s, &! maximum dimension of the smooth grid
|
|
|
|
nrxxs ! the total dimension of the smooth grid
|
|
|
|
INTEGER, POINTER :: &
|
|
|
|
nls(:), &! the correspondence G <-> smooth mesh
|
|
|
|
nlsm(:) ! the same for gamma point calculation
|
|
|
|
LOGICAL :: &
|
|
|
|
doublegrid ! .TRUE. if we use a double grid
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
gcutms ! the cut-off of the smooth mesh
|
|
|
|
!
|
|
|
|
END MODULE gsmooth
|
|
|
|
!
|
|
|
|
!
|
|
|
|
MODULE klist
|
|
|
|
!
|
|
|
|
! ... The variables for the k-points
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
|
|
|
USE parameters, ONLY : npk
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2006-01-01 17:17:24 +08:00
|
|
|
xk(3,npk), &! coordinates of k points
|
|
|
|
wk(npk), &! weight of k points
|
|
|
|
degauss, &! smearing parameter
|
|
|
|
nelec, &! number of electrons
|
|
|
|
nelup, &! number of spin-up electrons (if two_fermi_energies=t)
|
|
|
|
neldw, &! number of spin-dw electrons (if two_fermi_energies=t)
|
2006-03-21 06:44:35 +08:00
|
|
|
tot_charge
|
2008-09-19 04:27:46 +08:00
|
|
|
REAL(DP) :: &
|
|
|
|
qnorm= 0.0_dp ! |q|, used in phonon+US calculations only
|
2006-08-24 21:49:14 +08:00
|
|
|
INTEGER, ALLOCATABLE :: &
|
|
|
|
ngk(:) ! number of plane waves for each k point
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER :: &
|
2006-01-01 17:17:24 +08:00
|
|
|
nks, &! number of k points in this pool
|
|
|
|
nkstot, &! total number of k points
|
|
|
|
ngauss, &! type of smearing technique
|
|
|
|
tot_magnetization, &! nelup-neldw >= 0 (negative value means unspecified)
|
|
|
|
multiplicity ! spin multiplicity
|
2003-10-17 00:30:12 +08:00
|
|
|
LOGICAL :: &
|
|
|
|
lgauss, &! if .TRUE.: use gaussian broadening
|
2008-09-02 16:24:49 +08:00
|
|
|
lxkcry=.FALSE., &! if .TRUE.:k-pnts in cryst. basis accepted in input
|
2005-03-17 22:47:46 +08:00
|
|
|
two_fermi_energies ! if .TRUE.: nelup and neldw set ef_up and ef_dw
|
|
|
|
! separately
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
END MODULE klist
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
MODULE lsda_mod
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
! ... The variables needed for the lsda calculation
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
|
|
|
USE parameters, ONLY : ntypx, npk
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
LOGICAL :: &
|
|
|
|
lsda
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2004-05-21 19:15:39 +08:00
|
|
|
magtot, &! total magnetization
|
|
|
|
absmag, &! total absolute magnetization
|
|
|
|
starting_magnetization(ntypx) ! the magnetization used to start with
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER :: &
|
2003-01-20 05:58:50 +08:00
|
|
|
nspin, &! number of spin polarization: 2 if lsda, 1 other
|
2003-02-08 00:04:36 +08:00
|
|
|
current_spin, &! spin of the current kpoint
|
2003-01-20 05:58:50 +08:00
|
|
|
isk(npk) ! for each k-point: 1=spin up, 2=spin down
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
END MODULE lsda_mod
|
|
|
|
!
|
|
|
|
!
|
|
|
|
MODULE ktetra
|
|
|
|
!
|
|
|
|
! ... The variables for the tetrahedron method
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER :: &
|
|
|
|
nk1, nk2, nk3, &! the special-point grid
|
|
|
|
k1, k2, k3, &! the offset from the origin
|
|
|
|
ntetra ! number of tetrahedra
|
|
|
|
INTEGER, ALLOCATABLE :: &
|
|
|
|
tetra(:,:) ! index of k-points in a given tetrahedron
|
|
|
|
! shape (4,ntetra)
|
|
|
|
LOGICAL :: &
|
|
|
|
ltetra ! if .TRUE.: use tetrahedron method
|
|
|
|
!
|
|
|
|
END MODULE ktetra
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
|
|
|
!
|
2006-08-09 16:20:53 +08:00
|
|
|
MODULE rap_point_group
|
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
|
|
|
!
|
|
|
|
INTEGER :: &
|
|
|
|
code_group, & ! The code of the point group
|
|
|
|
nclass, & ! The number of classes of the point group
|
|
|
|
nelem(12), & ! The elements of each class
|
|
|
|
elem(8,12), & ! Which elements in the smat list for each class
|
|
|
|
which_irr(12) ! For each class gives its position in the
|
|
|
|
! character table.
|
|
|
|
!
|
|
|
|
COMPLEX(DP) :: char_mat(12,12) ! the character tables
|
|
|
|
|
2006-08-23 01:01:13 +08:00
|
|
|
CHARACTER(LEN=15) :: name_rap(12) ! the name of the representation
|
2007-02-24 22:51:00 +08:00
|
|
|
CHARACTER(LEN=3) :: ir_ram(12) ! a string I, R or I+R for infrared,
|
|
|
|
! Raman, or infrared+raman modes.
|
|
|
|
CHARACTER(LEN=11) :: gname ! the name of the group
|
|
|
|
CHARACTER(LEN=5) :: name_class(12) ! the name of the class
|
2006-08-09 16:20:53 +08:00
|
|
|
!
|
|
|
|
END MODULE rap_point_group
|
2006-08-23 01:01:13 +08:00
|
|
|
|
|
|
|
MODULE rap_point_group_so
|
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
|
|
|
!
|
|
|
|
INTEGER :: &
|
|
|
|
nrap, & ! The number of classes of the point group
|
|
|
|
nelem_so(24), &! The elements of each class
|
|
|
|
elem_so(12,24), &! Which elements in the smat list for each class
|
|
|
|
has_e(12,24), & ! if -1 the smat is multiplied by -E
|
|
|
|
which_irr_so(24) ! For each class gives its position in the
|
|
|
|
! character table.
|
|
|
|
!
|
|
|
|
COMPLEX(DP) :: char_mat_so(12,24), & ! the character tables
|
|
|
|
d_spin(2,2,48) ! the rotation in spin space
|
|
|
|
|
|
|
|
CHARACTER(LEN=15) :: name_rap_so(12) ! the name of the representation
|
|
|
|
CHARACTER(LEN=5) :: name_class_so(24), & ! the name of the class
|
|
|
|
name_class_so1(24) ! the name of the class
|
|
|
|
!
|
|
|
|
END MODULE rap_point_group_so
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
2006-08-23 01:01:13 +08:00
|
|
|
MODULE rap_point_group_is
|
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
|
|
|
!
|
|
|
|
INTEGER :: &
|
|
|
|
ftau_is(3,48), & ! The fractional transl. of the invariant subgroup
|
|
|
|
nsym_is, & ! The number of operations of the invariant subgroup
|
|
|
|
code_group_is ! The code of the point invariant subgroup
|
|
|
|
|
|
|
|
REAL(DP) :: &
|
|
|
|
sr_is(3,3,48) ! The matrices of the invariant subgroup
|
|
|
|
|
|
|
|
COMPLEX(DP) :: &
|
|
|
|
d_spin_is(2,2,48) ! the rotation in spin space
|
|
|
|
|
|
|
|
CHARACTER(LEN=45) :: sname_is(48) ! name of the symmetries
|
|
|
|
CHARACTER(LEN=11) :: gname_is ! the name of the invariant group
|
|
|
|
!
|
|
|
|
END MODULE rap_point_group_is
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
MODULE vlocal
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
! ... The variables needed for the local potential in reciprocal space
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2005-08-28 22:09:42 +08:00
|
|
|
COMPLEX(DP), ALLOCATABLE :: &
|
2003-01-20 05:58:50 +08:00
|
|
|
strf(:,:) ! the structure factor
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), ALLOCATABLE :: &
|
2007-11-19 04:25:11 +08:00
|
|
|
vloc(:,:) ! the local potential for each atom type
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
END MODULE vlocal
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
MODULE wvfct
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
! ... The variables needed to compute the band structure
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER :: &
|
2003-02-08 00:04:36 +08:00
|
|
|
npwx, &! maximum number of PW for wavefunctions
|
2003-04-08 15:13:30 +08:00
|
|
|
nbndx, &! max number of bands use in iterative diag
|
2003-02-08 00:04:36 +08:00
|
|
|
nbnd, &! number of bands
|
2005-10-20 15:34:39 +08:00
|
|
|
npw, &! the number of plane waves
|
|
|
|
current_k ! the index of k-point under consideration
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER, ALLOCATABLE, TARGET :: &
|
2006-08-29 00:56:41 +08:00
|
|
|
igk(:) ! index of G corresponding to a given index of k+G
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), ALLOCATABLE :: &
|
2003-02-08 00:04:36 +08:00
|
|
|
et(:,:), &! eigenvalues of the hamiltonian
|
|
|
|
wg(:,:), &! the weight of each k point and band
|
2003-01-20 05:58:50 +08:00
|
|
|
g2kin(:) ! kinetic energy
|
2006-04-25 01:32:08 +08:00
|
|
|
INTEGER, ALLOCATABLE :: &
|
|
|
|
btype(:,:) ! one if the corresponding state has to be
|
|
|
|
! converged to full accuracy, zero otherwise
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
END MODULE wvfct
|
|
|
|
!
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
MODULE ener
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
! ... The variables needed to compute the energies
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2006-10-06 22:08:36 +08:00
|
|
|
etot, &! the total Kohn-Sham energy of the solid
|
|
|
|
hwf_energy, &! this is the Harris-Weinert-Foulkes energy
|
2005-06-01 04:58:48 +08:00
|
|
|
eband, &! the band energy
|
2006-09-29 21:35:55 +08:00
|
|
|
deband, &! scf correction to have variational energy
|
2005-06-01 04:58:48 +08:00
|
|
|
ehart, &! the hartree energy
|
|
|
|
etxc, &! the exchange and correlation energy
|
|
|
|
vtxc, &! another exchange-correlation energy
|
|
|
|
etxcc, &! the nlcc exchange and correlation
|
|
|
|
ewld, &! the ewald energy
|
2006-09-29 21:35:55 +08:00
|
|
|
demet, &! variational correction ("-TS") for metals
|
2008-02-07 21:48:46 +08:00
|
|
|
epaw, &! sum of one-center paw contributions
|
2005-03-17 22:47:46 +08:00
|
|
|
ef, ef_up, ef_dw ! the fermi energy (up and dw if two_fermi_energies=.T.)
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
END MODULE ener
|
|
|
|
!
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
MODULE force_mod
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
! ... The variables for the first derivative of the energy
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), ALLOCATABLE :: &
|
2003-02-08 00:04:36 +08:00
|
|
|
force(:,:) ! the force on each atom
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2003-01-20 05:58:50 +08:00
|
|
|
sigma(3,3) ! the stress acting on the system
|
2003-10-17 00:30:12 +08:00
|
|
|
LOGICAL :: &
|
|
|
|
lforce, &! if .TRUE. compute the forces
|
|
|
|
lstres ! if .TRUE. compute the stress
|
|
|
|
!
|
|
|
|
END MODULE force_mod
|
|
|
|
!
|
|
|
|
MODULE relax
|
|
|
|
!
|
|
|
|
! ... The variables used to control ionic relaxations
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
2004-06-12 00:53:16 +08:00
|
|
|
USE kinds, ONLY : DP
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
epse, &! threshold on total energy
|
|
|
|
epsf, &! threshold on forces
|
2006-01-25 21:33:56 +08:00
|
|
|
epsp, &! threshold on pressure
|
2008-08-09 23:39:04 +08:00
|
|
|
starting_scf_threshold ! self-explanatory
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
END MODULE relax
|
|
|
|
!
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
MODULE cellmd
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
! ... The variables used to control cell relaxation
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2003-02-08 00:04:36 +08:00
|
|
|
press, cmass, &! target pressure and cell mass,
|
2003-01-20 05:58:50 +08:00
|
|
|
at_old(3,3), &! the lattice vectors at the previous ste
|
2003-02-08 00:04:36 +08:00
|
|
|
omega_old, &! the cell volume at the previous step
|
2003-01-20 05:58:50 +08:00
|
|
|
cell_factor ! maximum expected (linear) cell contraction
|
2003-10-17 00:30:12 +08:00
|
|
|
! during relaxation/MD
|
|
|
|
INTEGER :: &
|
2003-02-08 00:04:36 +08:00
|
|
|
nzero, &! iteration # of last thermalization
|
2003-01-20 05:58:50 +08:00
|
|
|
ntimes, &! number of thermalization steps to be performed
|
|
|
|
ntcheck ! # of steps between thermalizations
|
2003-10-17 00:30:12 +08:00
|
|
|
LOGICAL :: lmovecell ! used in cell relaxation
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
CHARACTER(LEN=2) :: &
|
2008-09-03 17:02:12 +08:00
|
|
|
calc=' ' ! main switch for variable cell shape MD
|
2003-10-17 00:30:12 +08:00
|
|
|
! see readin, vcsmd and/or INPUT files
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
END MODULE cellmd
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
MODULE us
|
|
|
|
!
|
|
|
|
! ... These parameters are needed with the US pseudopotentials
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER :: &
|
2003-02-08 00:04:36 +08:00
|
|
|
nqxq, &! size of interpolation table
|
2003-01-20 05:58:50 +08:00
|
|
|
nqx ! number of interpolation points
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), PARAMETER:: &
|
2004-04-28 18:25:36 +08:00
|
|
|
dq = 0.01D0 ! space between points in the pseudopotential tab.
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), ALLOCATABLE :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
qrad(:,:,:,:), &! radial FT of Q functions
|
2004-01-24 22:44:20 +08:00
|
|
|
tab(:,:,:), &! interpolation table for PPs
|
|
|
|
tab_at(:,:,:) ! interpolation table for atomic wfc
|
2008-09-02 16:24:49 +08:00
|
|
|
LOGICAL :: spline_ps = .FALSE.
|
2006-09-15 17:06:15 +08:00
|
|
|
REAL(DP), ALLOCATABLE :: &
|
|
|
|
tab_d2y(:,:,:) ! for cubic splines
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
END MODULE us
|
|
|
|
!
|
|
|
|
!
|
|
|
|
MODULE ldaU
|
|
|
|
!
|
|
|
|
! ... The quantities needed in lda+U calculations
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2009-02-19 17:49:49 +08:00
|
|
|
USE parameters, ONLY : lqmax, ntypx
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2009-02-19 17:49:49 +08:00
|
|
|
INTEGER, PARAMETER :: nspinx=2
|
2005-08-28 22:09:42 +08:00
|
|
|
COMPLEX(DP), ALLOCATABLE :: &
|
2006-11-29 01:25:00 +08:00
|
|
|
swfcatom(:,:) ! orthogonalized atomic wfcs
|
2007-11-19 04:25:11 +08:00
|
|
|
! REAL(DP), ALLOCATABLE :: &
|
|
|
|
! v_hub(:,:,:,:) ! the hubbard contribution to the potential
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2007-11-10 23:07:51 +08:00
|
|
|
eth, &! the Hubbard contribution to the energy
|
2003-10-17 00:30:12 +08:00
|
|
|
Hubbard_U(ntypx), &! the Hubbard U
|
2004-02-14 16:39:34 +08:00
|
|
|
Hubbard_alpha(ntypx), &! the Hubbard alpha (used to calculate U)
|
|
|
|
starting_ns(lqmax,nspinx,ntypx) !
|
2003-10-17 00:30:12 +08:00
|
|
|
INTEGER :: &
|
|
|
|
niter_with_fixed_ns, &! no. of iterations with fixed ns
|
2008-01-23 01:37:24 +08:00
|
|
|
Hubbard_l(ntypx), &! the angular momentum of Hubbard states
|
2006-12-18 17:56:37 +08:00
|
|
|
Hubbard_lmax = 0 ! maximum angular momentum of Hubbard states
|
2003-10-17 00:30:12 +08:00
|
|
|
LOGICAL :: &
|
|
|
|
lda_plus_u, &! .TRUE. if lda+u calculation is performed
|
|
|
|
conv_ns ! .TRUE. if ns are converged
|
2004-04-03 00:05:17 +08:00
|
|
|
CHARACTER(LEN=30) :: & ! 'atomic', 'ortho-atomic', 'file'
|
|
|
|
U_projection ! specifies how input coordinates are given
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
|
|
|
END MODULE ldaU
|
|
|
|
!
|
|
|
|
!
|
|
|
|
MODULE extfield
|
|
|
|
!
|
2004-04-02 21:01:15 +08:00
|
|
|
! ... The quantities needed in calculations with external field
|
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
LOGICAL :: &
|
|
|
|
tefield, &! if .TRUE. a finite electric field is added to the
|
|
|
|
! local potential
|
|
|
|
dipfield ! if .TRUE. the dipole field is subtracted
|
|
|
|
INTEGER :: &
|
|
|
|
edir ! direction of the field
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP) :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
emaxpos, &! position of the maximum of the field (0<emaxpos<1)
|
|
|
|
eopreg, &! amplitude of the inverse region (0<eopreg<1)
|
|
|
|
eamp, &! field amplitude (in a.u.) (1 a.u. = 51.44 10^11 V/m)
|
|
|
|
etotefield ! energy correction due to the field
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), ALLOCATABLE :: &
|
2003-10-17 00:30:12 +08:00
|
|
|
forcefield(:,:)
|
|
|
|
!
|
|
|
|
END MODULE extfield
|
|
|
|
!
|
|
|
|
!
|
|
|
|
!
|
|
|
|
MODULE fixed_occ
|
|
|
|
!
|
2004-04-02 21:01:15 +08:00
|
|
|
! ... The quantities needed in calculations with fixed occupations
|
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
2003-10-17 20:03:47 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2006-03-29 03:43:35 +08:00
|
|
|
REAL(DP), ALLOCATABLE :: &
|
|
|
|
f_inp(:,:) ! the occupations for each spin
|
2003-10-17 00:30:12 +08:00
|
|
|
LOGICAL :: &
|
|
|
|
tfixed_occ ! if .TRUE. the occupations are fixed.
|
|
|
|
!
|
|
|
|
END MODULE fixed_occ
|
2004-04-30 16:51:31 +08:00
|
|
|
|
|
|
|
MODULE spin_orb
|
|
|
|
|
|
|
|
USE kinds, ONLY: DP
|
2009-02-19 17:49:49 +08:00
|
|
|
USE parameters, ONLY : lmaxx
|
2004-04-30 16:51:31 +08:00
|
|
|
|
|
|
|
SAVE
|
|
|
|
|
|
|
|
LOGICAL :: &
|
2005-12-22 00:30:00 +08:00
|
|
|
lspinorb, & ! if .TRUE. this is a spin-orbit calculation
|
2008-05-15 20:58:11 +08:00
|
|
|
domag ! if .TRUE. magnetization is computed
|
2005-12-22 00:30:00 +08:00
|
|
|
|
2004-04-30 16:51:31 +08:00
|
|
|
|
2005-08-28 22:09:42 +08:00
|
|
|
COMPLEX (DP) :: rot_ylm(2*lmaxx+1,2*lmaxx+1) ! transform real
|
2004-04-30 16:51:31 +08:00
|
|
|
! spherical harmonics into complex ones
|
2005-08-28 22:09:42 +08:00
|
|
|
COMPLEX (DP), ALLOCATABLE :: fcoef(:,:,:,:,:) ! function needed to
|
2004-04-30 16:51:31 +08:00
|
|
|
! account for spinors.
|
|
|
|
END MODULE spin_orb
|
2003-10-17 00:30:12 +08:00
|
|
|
!
|
2005-08-16 20:04:34 +08:00
|
|
|
!
|
|
|
|
MODULE bp
|
|
|
|
USE kinds, ONLY: DP
|
|
|
|
!
|
|
|
|
! ... The variables needed for the Berry phase polarization calculation
|
|
|
|
!
|
|
|
|
SAVE
|
|
|
|
!
|
|
|
|
LOGICAL :: &
|
2007-11-23 05:28:22 +08:00
|
|
|
lberry =.FALSE., & ! if .TRUE. calculate polarization using Berry phase
|
|
|
|
lelfield=.FALSE. ! if .TRUE. finite electric field using Berry phase
|
2005-08-16 20:04:34 +08:00
|
|
|
INTEGER :: &
|
|
|
|
gdir, &! G-vector for polarization calculation
|
|
|
|
nppstr, &! number of k-points (parallel vector)
|
2005-10-26 07:17:05 +08:00
|
|
|
nberrycyc !numer of cycles for cobergence in electric field without changing the selfconsistent charge
|
|
|
|
REAL(DP) :: efield ! electric field intensity in a.u.
|
2005-08-28 22:09:42 +08:00
|
|
|
COMPLEX(DP), ALLOCATABLE , TARGET :: evcel(:,:) ! wave function for calculating the electric field operator
|
2008-06-10 00:43:53 +08:00
|
|
|
COMPLEX(DP), ALLOCATABLE , TARGET :: evcelm(:,:,:) ! wave function for storing projectors for electric field operator
|
|
|
|
COMPLEX(DP), ALLOCATABLE , TARGET :: evcelp(:,:,:) ! wave function for storing projectors for electric field operator
|
|
|
|
COMPLEX(DP), ALLOCATABLE, TARGET :: fact_hepsi(:,:)!factors for hermitean electric field operators
|
2006-12-16 07:18:19 +08:00
|
|
|
COMPLEX(DP), ALLOCATABLE, TARGET :: bec_evcel(:,:)!for storing bec's factors with evcel
|
2007-10-18 03:12:51 +08:00
|
|
|
INTEGER, ALLOCATABLE, TARGET :: mapgp_global(:,:)! map for G'= G+1 correspondence
|
|
|
|
INTEGER, ALLOCATABLE, TARGET :: mapgm_global(:,:)! map for G'= G-1 correspondence
|
2007-12-28 01:48:29 +08:00
|
|
|
REAL(DP), ALLOCATABLE, TARGET :: forces_bp_efield(:,:)!ionic and US contributions to the atomic forces due to el. fields
|
2008-06-10 00:43:53 +08:00
|
|
|
REAL(DP) :: ion_pol(3)!the ionic polarization
|
|
|
|
REAL(DP) :: el_pol(3)!the electronic polarization
|
|
|
|
REAL(DP) :: fc_pol(3)!the prefactor for the electronic polarization
|
2008-01-17 19:48:49 +08:00
|
|
|
LOGICAL :: l_el_pol_old!if true there is already stored a n older value for the polarization
|
|
|
|
!neeeded for having correct polarization during MD
|
2008-06-10 00:43:53 +08:00
|
|
|
REAL(DP) :: el_pol_old(3)! the old electronic polarization
|
|
|
|
REAL(DP) :: el_pol_acc(3)! accumulator for the electronic polarization
|
2005-08-16 20:04:34 +08:00
|
|
|
|
2008-06-10 00:43:53 +08:00
|
|
|
INTEGER :: nppstr_3d(3)!number of element of strings along the reciprocal directions
|
|
|
|
INTEGER, ALLOCATABLE :: nx_el(:,:)!index for string to k-point map, (nks*nspin,dir=3)
|
|
|
|
LOGICAL :: l3dstring!if true strings are on the 3 three directions
|
2008-06-20 16:30:08 +08:00
|
|
|
REAL(DP) :: efield_cart(3)!electric field vector in cartesian units
|
2008-06-10 00:43:53 +08:00
|
|
|
REAL(DP) :: efield_cry(3)!electric field vector in crystal units
|
2008-06-20 16:30:08 +08:00
|
|
|
REAL(DP) :: transform_el(3,3)!transformation matrix from cartesian coordinates to normed reciprocal space
|
2005-08-16 20:04:34 +08:00
|
|
|
!
|
|
|
|
END MODULE bp
|
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
MODULE start_k
|
|
|
|
!
|
|
|
|
USE kinds, ONLY: DP
|
|
|
|
!
|
|
|
|
SAVE
|
|
|
|
|
|
|
|
INTEGER :: nks_start=0
|
|
|
|
! number of initial k points
|
|
|
|
REAL(DP), ALLOCATABLE :: wk_start(:)
|
|
|
|
! initial weight of k points
|
|
|
|
REAL(DP), ALLOCATABLE :: xk_start(:,:)
|
|
|
|
! initial coordinates of k points
|
|
|
|
|
|
|
|
END MODULE start_k
|
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
MODULE pwcom
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
2006-06-23 23:47:59 +08:00
|
|
|
USE constants, ONLY : e2, rytoev, amconv, pi, tpi, fpi
|
2004-04-02 18:30:15 +08:00
|
|
|
USE cell_base, ONLY : celldm, at, bg, alat, omega, tpiba, tpiba2, &
|
|
|
|
ibrav, symm_type
|
2003-10-17 00:30:12 +08:00
|
|
|
USE basis
|
|
|
|
USE gvect
|
|
|
|
USE gsmooth
|
|
|
|
USE klist
|
|
|
|
USE lsda_mod
|
|
|
|
USE ktetra
|
|
|
|
USE vlocal
|
|
|
|
USE wvfct
|
|
|
|
USE ener
|
|
|
|
USE force_mod
|
|
|
|
USE relax
|
|
|
|
USE cellmd
|
|
|
|
USE us
|
|
|
|
USE ldaU
|
|
|
|
USE extfield
|
|
|
|
USE bp
|
|
|
|
USE fixed_occ
|
2004-04-30 16:51:31 +08:00
|
|
|
USE spin_orb
|
2008-07-23 16:46:48 +08:00
|
|
|
USE start_k
|
2004-04-02 21:01:15 +08:00
|
|
|
!
|
2003-10-17 00:30:12 +08:00
|
|
|
END MODULE pwcom
|