1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
|
!
! Copyright (C) 2001-2019 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 .
!
!----------------------------------------------------------------------------
!
! ... Common variables for LR_Modules routines
!
MODULE qpoint
!
USE kinds, ONLY : DP
!
! ... The variables needed to specify various indices,
! ... number of plane waves and k points and their coordiantes.
!
SAVE
!
INTEGER, POINTER :: igkq(:) ! npwx)
! correspondence k+q+G <-> G
INTEGER :: nksq, npwq, nksqtot
! the real number of k points
! the number of plane waves for q
! the total number of q points
INTEGER, ALLOCATABLE :: ikks(:), ikqs(:)
! the index of k point in the list of k
! the index of k+q point in the list of k
REAL (DP) :: xq(3)
! the coordinates of the q point
COMPLEX (DP), ALLOCATABLE :: eigqts(:) ! nat)
! the phases associated to the q
REAL (DP), ALLOCATABLE :: xk_col(:,:)
!
END MODULE qpoint
!
!
!
MODULE qpoint_aux
USE kinds, ONLY : DP
USE becmod, ONLY : bec_type
SAVE
INTEGER, ALLOCATABLE :: ikmks(:) ! index of -k for magnetic calculations
INTEGER, ALLOCATABLE :: ikmkmqs(:) ! index of -k-q for magnetic calculations
TYPE(bec_type), ALLOCATABLE :: becpt(:), alphapt(:,:)
END MODULE qpoint_aux
!
!
MODULE control_lr
!
USE kinds, ONLY : DP
!
! ... The variables controlling the run of linear response codes
!
SAVE
!
INTEGER, ALLOCATABLE :: nbnd_occ(:) ! occupied bands in metals
INTEGER, ALLOCATABLE :: ofsbeta(:) ! for each atom gives the offset of beta functions
REAL(DP) :: alpha_pv ! the alpha value for shifting the bands
LOGICAL :: lgamma ! if .TRUE. this is a q=0 computation
LOGICAL :: lrpa ! if .TRUE. uses the Random Phace Approximation
REAL(DP) :: ethr_nscf ! convergence threshol for KS eigenvalues in the
! NSCF calculation
! Sternheimer case
LOGICAL :: lgamma_gamma,&! if .TRUE. this is a q=0 computation with k=0 only
convt, &! if .TRUE. the phonon has converged
ext_recover, &! if .TRUE. there is a recover file
lnoloc ! if .TRUE. calculates the dielectric constant
! neglecting local field effects
INTEGER :: rec_code=-1000, & ! code for recover
rec_code_read=-1000 ! code for recover. Not changed during the run
CHARACTER(LEN=256) :: flmixdpot
REAL(DP) :: tr2_ph ! threshold for phonon calculation
REAL(DP) :: alpha_mix(100) ! the mixing parameter
INTEGER :: niter_ph ! maximum number of iterations (read from input)
!
END MODULE control_lr
!
MODULE eqv
!
USE kinds, ONLY : DP
!
! ... The variables describing the linear response problem
!
SAVE
!
COMPLEX (DP), POINTER :: evq(:,:)
! the wavefunctions at point k+q
COMPLEX (DP), ALLOCATABLE :: dvpsi(:,:), dpsi(:,:), drhoscfs (:,:,:)
! the product of dV psi
! the change of the wavefunctions
REAL (DP), ALLOCATABLE :: dmuxc(:,:,:) ! nrxx, nspin, nspin)
! the derivative of the xc potential
REAL (DP), ALLOCATABLE, TARGET :: vlocq(:,:) ! ngm, ntyp)
! the local potential at q+G
!
END MODULE eqv
!
MODULE gc_lr
!
USE kinds, ONLY : DP
!
! ... The variables needed for gradient corrected calculations
!
SAVE
!
REAL (DP), ALLOCATABLE :: &
grho(:,:,:), &! gradient of the unperturbed density (3,nrxx,nspin)
gmag(:,:,:), &! 3, nrxx, nspin)
vsgga(:), &! nrxx)
segni(:), &! nrxx)
dvxc_rr(:,:,:), &! derivatives of the E_xc functional w.r.t. r and s
dvxc_sr(:,:,:), &! r=rho and s=|grad(rho)|
dvxc_ss(:,:,:), &! dimensions: (nrxx, nspin, nspin)
dvxc_s(:,:,:)
!
! in the noncollinear case gmag contains the gradient of the magnetization
! grho the gradient of rho+ and of rho-, the eigenvalues of the spin density
! vsgga= 0.5* (V_up-V_down) to be used in the calculation of the change
! of the exchange and correlation magnetic field.
!
END MODULE gc_lr
!
MODULE lr_symm_base
!
USE kinds, ONLY : DP
!
! ... The variables needed to describe the modes and the small group of q
!
SAVE
!
INTEGER :: irgq(48), nsymq=0, irotmq
! selects the operations of the small group
! the number of symmetry of the small group
! selects the symmetry sending q <-> -q+G
REAL (DP), ALLOCATABLE :: rtau(:,:,:) !3, 48, nat)
! coordinates of direct translations
REAL (DP) :: gi(3,48), gimq(3)
! the possible G associated to each symmetry
! the G associated to the symmetry q<->-q+G
LOGICAL :: minus_q, & ! if .TRUE. there is the symmetry sending q<->-q
invsymq ! if .TRUE. the small group of q has inversion
!
END MODULE lr_symm_base
!
MODULE lrus
!
USE kinds, ONLY : DP
USE becmod, ONLY : bec_type
!
! ... These are additional variables needed for the linear response
! ... with US pseudopotentials and a generic perturbation Delta Vscf
!
SAVE
!
COMPLEX (DP), ALLOCATABLE :: &
int3(:,:,:,:,:), &! nhm, nhm, nat, nspin, npert)
int3_paw(:,:,:,:,:), &! nhm, nhm, nat, nspin, npert)
int3_nc(:,:,:,:,:), &! nhm, nhm, nat, nspin, npert)
intq(:,:,:), &! nhm, nhm, nat)
intq_nc(:,:,:,:) ! nhm, nhm, nat, nspin)
! int3 -> \int (Delta V_Hxc) Q d^3r
! similarly for int_nc while
! int3_paw contains Delta (D^1-\tilde D^1)
! intq integral of e^iqr Q
! intq_nc integral of e^iqr Q in the noncollinear case
!
REAL (DP), ALLOCATABLE :: dpqq(:,:,:,:) ! nhm, nhm, 3, ntyp)
COMPLEX (DP), ALLOCATABLE :: dpqq_so(:,:,:,:,:) ! nhm, nhm, nspin, 3, ntyp)
! dpqq and dpqq_so: dipole moment of each Q multiplied by the fcoef factors
!
type (bec_type), ALLOCATABLE, TARGET :: becp1(:) ! nksq)
! becp1 contains < beta_n | psi_i >
!
REAL (DP), ALLOCATABLE :: bbg(:,:) ! nkb, nkb)
! for gamma_only
COMPLEX (DP), ALLOCATABLE :: bbk(:,:,:) ! nkb, nkb, nks)
! for k points
COMPLEX (DP), ALLOCATABLE :: bbnc(:,:,:) ! nkb*npol, nkb*npol, nks)
! for the noncollinear case
! bbg = < beta^N_i | beta^P_j >
! bbg/bbk/bbnc are the scalar products of beta functions
! localized on atoms N and P.
!
END MODULE lrus
!
MODULE units_lr
!
USE kinds, ONLY : DP
!
! ... These are the units used in the linear response calculations
!
SAVE
!
INTEGER :: iuwfc, & ! unit for wavefunctions
lrwfc, & ! the length of wavefunction record
iuatwfc, & ! unit for atomic wavefunctions
iuatswfc ! unit for atomic wavefunctions * S
!
END MODULE units_lr
|