mirror of https://gitlab.com/QEF/q-e.git
565 lines
17 KiB
Fortran
565 lines
17 KiB
Fortran
!
|
|
! Copyright (C) 2001-2018 Quantum ESPRESSO group
|
|
! This file is distributed under the terms of the
|
|
! GNU General Public License. See the file `License'
|
|
! in the root directory of the present distribution,
|
|
! or http://www.gnu.org/copyleft/gpl.txt .
|
|
!
|
|
!----------------------------------------------------------------------------
|
|
!
|
|
MODULE modes
|
|
!
|
|
!! Common variables for the phonon program needed to describe the modes
|
|
!! and the small group of q.
|
|
!
|
|
USE kinds, ONLY : DP
|
|
!
|
|
SAVE
|
|
!
|
|
INTEGER :: nirr
|
|
!! number of irreducible representations contained in the dynamical matrix
|
|
INTEGER :: nmodes
|
|
!! number of modes
|
|
INTEGER, ALLOCATABLE, TARGET :: npert(:) !(3 * nat )
|
|
!! the number of perturbations per IR
|
|
INTEGER :: npertx
|
|
!! max number of perturbations per IR
|
|
COMPLEX (DP), ALLOCATABLE :: u(:,:) !(3 * nat, 3 * nat)
|
|
!! the transformation modes patterns
|
|
COMPLEX (DP), ALLOCATABLE :: t(:,:,:,:) !(npertx, npertx, 48,3 * nat),
|
|
!! the mode for deltarho
|
|
COMPLEX (DP), ALLOCATABLE :: tmq(:,:,:) !(npertx, npertx, 3 * nat)
|
|
!! the symmetry in the base of the pattern
|
|
! the symmetry q<->-q in the base of the pa
|
|
!
|
|
CHARACTER(15), ALLOCATABLE :: name_rap_mode(:)
|
|
!! symmetry type of each mode
|
|
INTEGER, ALLOCATABLE :: num_rap_mode(:)
|
|
!! number of the representation for each mode
|
|
!
|
|
END MODULE modes
|
|
!
|
|
MODULE cryst_ph
|
|
!
|
|
!! This module contains the variables that describe properties of the
|
|
!! crystal that are needed by the phonon program and are not in pw data
|
|
!! probably these variables should be in the common of pw.
|
|
!! These variables are sets immediately after reading the pw variables.
|
|
!
|
|
USE kinds, ONLY : DP
|
|
!
|
|
SAVE
|
|
!
|
|
LOGICAL :: magnetic_sym
|
|
!! TRUE in the non-collinear magnetic case
|
|
!
|
|
END MODULE cryst_ph
|
|
!
|
|
MODULE dynmat
|
|
!
|
|
!! The dynamical matrix
|
|
!
|
|
USE kinds, ONLY : DP
|
|
!
|
|
SAVE
|
|
!
|
|
COMPLEX(DP), ALLOCATABLE :: dyn00(:,:) ! (3 * nat, 3 * nat)
|
|
!! the initial dynamical matrix
|
|
COMPLEX(DP), ALLOCATABLE :: dyn(:,:) ! (3 * nat, 3 * nat)
|
|
!! the dynamical matrix
|
|
COMPLEX(DP), ALLOCATABLE :: dyn_rec(:,:) ! (3 * nat, 3 * nat)
|
|
!! the contribution of each representation to the dynamical matrix
|
|
REAL (DP), ALLOCATABLE :: w2(:) ! (3 * nat)
|
|
!! omega^2
|
|
!
|
|
! DFPT+U
|
|
COMPLEX(DP), ALLOCATABLE :: dyn_hub_bare(:,:) ! (3*nat,*3nat)
|
|
!! the bare part of the Hubbard dynamical matrix
|
|
COMPLEX(DP), ALLOCATABLE :: dyn_hub_scf(:,:) ! (3*nat,*3nat)
|
|
!! the scf part of the Hubbard dynamical matrix
|
|
!
|
|
END MODULE dynmat
|
|
!
|
|
!
|
|
MODULE efield_mod
|
|
!
|
|
!! The variables for the electric field perturbation.
|
|
!
|
|
USE kinds, ONLY : DP
|
|
!
|
|
SAVE
|
|
!
|
|
REAL (DP) :: epsilon (3, 3)
|
|
!! the dielectric constant
|
|
REAL (DP), ALLOCATABLE :: zstareu(:,:,:) !(3, 3, nat),
|
|
!! the effective charges Z(E,Us) (E=scf,Us=bare)
|
|
REAL (DP), ALLOCATABLE :: zstarue(:,:,:) !(3, nat, 3)
|
|
!! the effective charges Z(Us,E) (Us=scf,E=bare)
|
|
COMPLEX (DP), ALLOCATABLE :: &
|
|
zstareu0(:,:), &! 3, 3 * nat),
|
|
zstarue0(:,:), &! 3 * nat, 3)
|
|
zstarue0_rec(:,:) ! 3 * nat, 3)
|
|
! the effective charges
|
|
!
|
|
END MODULE efield_mod
|
|
!
|
|
!
|
|
MODULE nlcc_ph
|
|
!
|
|
!! The variables needed for non-linear core correction.
|
|
!
|
|
USE kinds, ONLY : DP
|
|
!
|
|
SAVE
|
|
!
|
|
REAL (DP), ALLOCATABLE, TARGET :: drc(:,:) ! (ngm, ntyp)
|
|
!! contain rho core (without structure fac) for all atomic types.
|
|
!
|
|
END MODULE nlcc_ph
|
|
!
|
|
!
|
|
MODULE phus
|
|
!
|
|
!! These are additional variables needed for the linear response
|
|
!! program with the US pseudopotentials.
|
|
!
|
|
USE kinds, ONLY : DP
|
|
USE becmod, ONLY : bec_type
|
|
!
|
|
SAVE
|
|
!
|
|
REAL (DP), ALLOCATABLE :: alphasum(:,:,:,:) ! (nhm*(nhm+1)/2,3,nat,nspin)
|
|
!! used to compute modes. It contains \(\sum_i \langle \psi_i| d/du
|
|
!! (|\beta_n><beta_m|) | \psi_i\rangle + (m-n)\)
|
|
! dipole moment of each Q.
|
|
! These variables contains the five integrals defined in PRB 64, 35118 (2001)
|
|
COMPLEX (DP), ALLOCATABLE :: int1(:,:,:,:,:) ! nhm, nhm, 3, nat, nspin),&
|
|
!! int1 -> \int V_eff d/du (Q) d^3r
|
|
COMPLEX (DP), ALLOCATABLE :: int2(:,:,:,:,:) ! nhm, nhm, 3,nat, nat),&
|
|
!! int2 -> \int d/du (V_loc) Q d^3r
|
|
COMPLEX (DP), ALLOCATABLE :: int4(:,:,:,:,:) ! nhm*(nhm+1)/2, 3, 3, nat, nspin),&
|
|
!! int4 -> \int V_eff d^2/dudu (Q) d^3r
|
|
COMPLEX (DP), ALLOCATABLE :: int5(:,:,:,:,:) ! nhm*(nhm+1)/2, 3, 3, nat, nat),&
|
|
!! int5 -> \int d/du (V_loc) d/du (Q) d^3r
|
|
COMPLEX (DP), ALLOCATABLE :: int1_nc(:,:,:,:,:) ! nhm, nhm, 3, nat, nspin),&
|
|
!! int1 - noncollinear
|
|
COMPLEX (DP), ALLOCATABLE :: int2_so(:,:,:,:,:,:) ! nhm, nhm, 3, nat,nat,nspin),&
|
|
!! int2 - spin-orbit
|
|
COMPLEX (DP), ALLOCATABLE :: int4_nc(:,:,:,:,:,:) ! nhm, nhm, 3, 3, nat, nspin),&
|
|
!! int4 - noncollinear
|
|
COMPLEX (DP), ALLOCATABLE :: int5_so(:,:,:,:,:,:,:) ! nhm*(nhm+1)/2, 3, 3, nat, nat, nspin),&
|
|
!! int5 - spin-orbit
|
|
!
|
|
! int3 -> \int d\du (V_Hxc) Q d^3r .... generalized to Delta V_Hxc and move to lr_us in LR_Modules
|
|
!
|
|
COMPLEX (DP), ALLOCATABLE :: becsum_nc(:,:,:,:) ! nhm*(nhm+1)/2,nat,npol,npol)
|
|
!! it contains \(\sum_i \langle\psi_i | \beta_n\rangle\langle\beta_m| \psi_i \rangle + (m-n)\)
|
|
COMPLEX (DP), ALLOCATABLE :: becsumort(:,:,:,:) ! nhm*(nhm+1)/2,nat,nspin,3*nat)
|
|
!! it contains \(\text{alphasum}+\sum_i \langle\psi_i | \beta_n\rangle\langle\beta_m| \delta \psi_i \rangle\)
|
|
COMPLEX (DP), ALLOCATABLE :: alphasum_nc(:,:,:,:,:) ! nhm*(nhm+1)/2,3,nat,npol,npol)
|
|
!
|
|
!
|
|
type(bec_type), ALLOCATABLE, TARGET :: alphap(:,:) ! nkbtot, nbnd, 3, nksq)
|
|
!! contains \( \langle d\du (\beta_n) | \psi_i \rangle\)
|
|
!
|
|
END MODULE phus
|
|
!
|
|
!
|
|
MODULE partial
|
|
!
|
|
!! The variables needed for partial computation of dynamical matrix.
|
|
!
|
|
USE kinds, ONLY : DP
|
|
!
|
|
SAVE
|
|
!
|
|
INTEGER, ALLOCATABLE :: atomo(:)
|
|
!! (nat) : list of the atoms that moves
|
|
INTEGER :: nat_todo
|
|
!! number of atoms to compute
|
|
INTEGER :: nat_todo_input
|
|
!! nat_todo given in input
|
|
LOGICAL, ALLOCATABLE :: comp_irr(:) !(3*nat)
|
|
!! TRUE if this irr.rep. has to be computed
|
|
LOGICAL, ALLOCATABLE :: done_irr(:) ! (3*nat)
|
|
!! TRUE if this irr.rep. has been done
|
|
LOGICAL :: all_comp
|
|
!! if TRUE all representation have been computed
|
|
INTERFACE
|
|
SUBROUTINE set_local_atomo(nat, nat_todo_, atomo_, nsym, irt, nat_l, atomo_l)
|
|
IMPLICIT NONE
|
|
INTEGER,INTENT(IN) :: nat, nat_todo_, nsym, atomo_(nat_todo_), irt(48,nat)
|
|
!! :nat: total number of atoms
|
|
!! :nat_todo: number of atoms effectively displaced
|
|
!! :nsym: number of symmetries in the system
|
|
!! :atomo: list of atoms to be displaced before symmetrization
|
|
!! :irt: atoms corresponding atom for each sym operation and atom
|
|
INTEGER,INTENT(OUT) :: nat_l
|
|
!! actual number of atoms to be displaced considering symmetries
|
|
INTEGER,ALLOCATABLE,INTENT(OUT) :: atomo_l(:)
|
|
!! list with the indeces of all the atoms to be displaced
|
|
END SUBROUTINE set_local_atomo
|
|
END INTERFACE
|
|
END MODULE partial
|
|
!
|
|
MODULE gamma_gamma
|
|
!
|
|
INTEGER, ALLOCATABLE :: has_equivalent(:)
|
|
!! 0 if the atom has to be calculated
|
|
INTEGER, ALLOCATABLE :: with_symmetry(:)
|
|
!! calculated by symmetry
|
|
INTEGER, ALLOCATABLE :: n_equiv_atoms(:)
|
|
!! number of equivalent atoms
|
|
INTEGER, ALLOCATABLE :: equiv_atoms(:,:)
|
|
!! which atoms are equivalent
|
|
INTEGER :: n_diff_sites
|
|
!! Number of different sites
|
|
INTEGER :: nasr
|
|
!! atom calculated with asr
|
|
LOGICAL :: asr
|
|
!! if TRUE apply the asr
|
|
!
|
|
END MODULE gamma_gamma
|
|
!
|
|
MODULE control_ph
|
|
!
|
|
!! The variables controlling the phonon run.
|
|
!
|
|
USE kinds, ONLY : DP
|
|
USE parameters, ONLY: npk
|
|
!
|
|
SAVE
|
|
!
|
|
INTEGER :: start_irr
|
|
!! initial representation
|
|
INTEGER :: last_irr
|
|
!! last representation of this run
|
|
INTEGER :: current_iq
|
|
!! current q point
|
|
INTEGER :: start_q
|
|
!! initial q in the list
|
|
INTEGER :: last_q
|
|
!! last_q in the list
|
|
!
|
|
CHARACTER(LEN=12) :: electron_phonon
|
|
CHARACTER(LEN=256) :: tmp_dir_ph, tmp_dir_phq
|
|
LOGICAL :: epsil
|
|
!! if TRUE computes dielec. const and eff. charges
|
|
LOGICAL :: done_epsil=.FALSE.
|
|
!! TRUE when diel. constant is available
|
|
LOGICAL :: trans
|
|
!! if TRUE computes phonons
|
|
LOGICAL :: zue
|
|
!! if TRUE computes eff. charges as induced polarization
|
|
LOGICAL :: done_zue=.FALSE.
|
|
!! TRUE when the eff. charges are available
|
|
LOGICAL :: zeu
|
|
!! if TRUE computes eff. charges as induced forces
|
|
LOGICAL :: done_zeu=.FALSE.
|
|
!! TRUE when the eff. charges are available
|
|
LOGICAL :: done_start_zstar=.FALSE.
|
|
!
|
|
LOGICAL :: only_wfc=.FALSE.
|
|
!! if TRUE computes only bands
|
|
LOGICAL :: only_init=.FALSE.
|
|
!! if TRUE computes only initial stuff
|
|
LOGICAL :: with_ext_images=.FALSE.
|
|
!! if TRUE use an external driver to decide what each image does.
|
|
LOGICAL :: always_run=.FALSE.
|
|
!! if TRUE the code do not stop after doing partial representations
|
|
!! always_run=.TRUE., only for testing purposes
|
|
LOGICAL :: recover
|
|
!! if TRUE the run restarts
|
|
LOGICAL :: low_directory_check=.FALSE.
|
|
!! if TRUE search on the phsave directory only the representations
|
|
!! requested in input.
|
|
LOGICAL :: ext_restart
|
|
!! if TRUE there is a restart file
|
|
LOGICAL :: ext_recover
|
|
!! if TRUE there is a recover file
|
|
LOGICAL :: lnoloc
|
|
!! if TRUE calculates the dielectric constant neglecting local field effects
|
|
LOGICAL :: search_sym=.TRUE.
|
|
!! if TRUE search the mode symmetry
|
|
LOGICAL :: search_sym_save=.TRUE.
|
|
!! save search symmetry
|
|
LOGICAL :: lnscf
|
|
!! if TRUE the run makes first a nscf calculation
|
|
LOGICAL :: ldisp
|
|
!! if TRUE the run calculates full phonon dispersion
|
|
LOGICAL :: done_bands
|
|
!! if TRUE the bands have been calculated
|
|
LOGICAL :: bands_computed=.FALSE.
|
|
!! if TRUE the bands were computed in this run
|
|
LOGICAL :: nogg
|
|
!! if TRUE gamma_gamma tricks are disabled
|
|
LOGICAL :: u_from_file=.FALSE.
|
|
!! if TRUE the u are on file
|
|
LOGICAL :: recover_read=.FALSE.
|
|
!! if TRUE the recover data have been read
|
|
LOGICAL :: ldiag=.FALSE.
|
|
!! if TRUE force the diagonalization
|
|
LOGICAL :: lqdir=.FALSE.
|
|
!! if TRUE each q writes in its directory
|
|
LOGICAL :: qplot=.FALSE.
|
|
!! if TRUE the q are read from input
|
|
LOGICAL :: xmldyn=.FALSE.
|
|
!! if TRUE the dynamical matrix is in xml form
|
|
LOGICAL :: all_done
|
|
!! if TRUE all representations have been done
|
|
!
|
|
LOGICAL :: newgrid=.FALSE.
|
|
!! if TRUE use new k-point grid nk1,nk2,nk3
|
|
INTEGER :: nk1,nk2,nk3, k1,k2,k3
|
|
!! new Monkhorst-Pack k-point grid
|
|
!
|
|
CHARACTER(LEN=256) :: dftd3_hess
|
|
! file from where the dftd3 hessian is read
|
|
!
|
|
END MODULE control_ph
|
|
!
|
|
!
|
|
MODULE freq_ph
|
|
!
|
|
!! The variables for computing frequency dependent dielectric constant.
|
|
!
|
|
USE kinds, ONLY : DP
|
|
!
|
|
SAVE
|
|
!
|
|
LOGICAL :: fpol
|
|
!! if TRUE dynamic dielectric constant is computed
|
|
LOGICAL :: done_fpol
|
|
!! if TRUE all dynamic dielectric constant is computed
|
|
!
|
|
INTEGER :: nfs
|
|
!! number of frequencies
|
|
!
|
|
INTEGER :: current_iu
|
|
!! the current frequency
|
|
!
|
|
REAL (KIND=DP), ALLOCATABLE :: fiu(:)
|
|
!! values of frequency
|
|
!
|
|
REAL (KIND=DP), ALLOCATABLE :: polar(:,:,:)
|
|
!! values of frequency
|
|
LOGICAL, ALLOCATABLE :: comp_iu(:)
|
|
!! values of frequency to calculate in this ru
|
|
!
|
|
LOGICAL, ALLOCATABLE :: done_iu(:)
|
|
!! values of frequency already calculated
|
|
|
|
!
|
|
END MODULE freq_ph
|
|
!
|
|
!
|
|
MODULE units_ph
|
|
!
|
|
!! The units of the files and the record lengths.
|
|
!
|
|
SAVE
|
|
!
|
|
INTEGER :: iuvkb
|
|
!! unit with vkb
|
|
INTEGER :: iubar
|
|
!! unit with the part DV_bare
|
|
INTEGER :: lrbar
|
|
!! length of the DV_bare
|
|
INTEGER :: iuebar
|
|
!! unit with the part DV_bare for the electric field
|
|
INTEGER :: lrebar
|
|
!! length of the DV_bare fro the electric field
|
|
INTEGER :: iupsir
|
|
!! unit with evc in real space
|
|
INTEGER :: iudrhous, lrdrhous
|
|
INTEGER :: iudyn
|
|
!! the unit for the dynamical matrix
|
|
INTEGER :: iupdyn
|
|
!! the unit for the partial dynamical matrix
|
|
INTEGER :: iunrec
|
|
!! the unit with the recover data
|
|
INTEGER :: iudvscf
|
|
!! the unit where the delta Vscf is written
|
|
INTEGER :: iudrho
|
|
!! the unit where the delta rho is written
|
|
INTEGER :: lrdrho
|
|
!! the length of the deltarho files
|
|
INTEGER :: iucom
|
|
!! the unit of the bare commutator in US case
|
|
INTEGER :: lrcom
|
|
!! the length of the bare commutator in US case
|
|
INTEGER :: iudvkb3, lrdvkb3
|
|
INTEGER :: iuint3paw
|
|
!! the unit of the int3_paw coefficients
|
|
INTEGER :: lint3paw
|
|
!! the length of the int3_paw coefficients
|
|
INTEGER :: iundnsscf
|
|
!! the unit of dnsscf, for DFPT+U
|
|
INTEGER :: iudvpsi
|
|
!! unit of DV_SCF * psi
|
|
INTEGER :: lrdvpsi
|
|
!! length of DV_SCF * psi
|
|
INTEGER :: iugauge
|
|
!! Unit for reading and writing gauge information in ahc.f90
|
|
INTEGER :: iudumpdrho
|
|
!! Unit to print the macroscopic density at q
|
|
INTEGER :: iurhoun
|
|
!! Unit to print the epsilon at q
|
|
!
|
|
LOGICAL, ALLOCATABLE :: this_dvkb3_is_on_file(:), &
|
|
this_pcxpsi_is_on_file(:,:)
|
|
!
|
|
END MODULE units_ph
|
|
!
|
|
!
|
|
MODULE output
|
|
!
|
|
!! The name of the files.
|
|
!
|
|
SAVE
|
|
!
|
|
CHARACTER (LEN=256) :: fildyn
|
|
!! output file for the dynamical matrix
|
|
CHARACTER (LEN=256) :: fildvscf
|
|
!! output file for deltavscf
|
|
CHARACTER (LEN=256) :: fildrho
|
|
!! output file for deltarho
|
|
!
|
|
END MODULE output
|
|
!
|
|
!
|
|
MODULE disp
|
|
!
|
|
USE kinds, ONLY: DP
|
|
!
|
|
SAVE
|
|
!
|
|
INTEGER :: nq1, nq2, nq3
|
|
!! number of q-points in each direction
|
|
INTEGER :: nqs
|
|
!! number of q points to be calculated
|
|
REAL(DP), ALLOCATABLE :: x_q(:,:)
|
|
!! coordinates of the q points
|
|
REAL(DP), ALLOCATABLE :: wq(:)
|
|
!! for plot
|
|
REAL(DP), ALLOCATABLE :: omega_disp(:,:)
|
|
LOGICAL, ALLOCATABLE :: lgamma_iq(:)
|
|
!! if TRUE this q is gamma.
|
|
LOGICAL, ALLOCATABLE :: done_iq(:)
|
|
!! if TRUE this q point has been already calculated
|
|
LOGICAL, ALLOCATABLE :: comp_iq(:)
|
|
!! if TRUE this q point has to be calculated
|
|
!
|
|
END MODULE disp
|
|
|
|
MODULE grid_irr_iq
|
|
!
|
|
INTEGER, ALLOCATABLE :: npert_irr_iq(:,:)
|
|
!! for each q and irr: the number of perturbations
|
|
INTEGER, ALLOCATABLE :: irr_iq(:)
|
|
!! number of irreducible representation per q point
|
|
INTEGER, ALLOCATABLE :: nsymq_iq(:)
|
|
!! dimension of the small group of q for each q
|
|
!
|
|
LOGICAL, ALLOCATABLE :: comp_irr_iq(:,:)
|
|
!! for each q and irr: if TRUE this representation has to be calculated
|
|
LOGICAL, ALLOCATABLE :: done_irr_iq(:,:)
|
|
!! for each q and irr: if TRUE this representation has been already
|
|
!! calculated
|
|
LOGICAL, ALLOCATABLE :: done_elph_iq(:,:)
|
|
!! for each q and irr: if TRUE the elph of this representation has
|
|
!! been already calculated
|
|
LOGICAL, ALLOCATABLE :: done_bands(:)
|
|
!! nqs, if TRUE the bands of this q have been calculated
|
|
!
|
|
END MODULE grid_irr_iq
|
|
|
|
MODULE ldaU_ph
|
|
!
|
|
USE kinds, ONLY : DP
|
|
USE parameters, ONLY : ntypx
|
|
!
|
|
SAVE
|
|
! ... atomic wfc's at k
|
|
COMPLEX(DP), ALLOCATABLE, TARGET :: wfcatomk(:,:)
|
|
!! atomic wfc at k
|
|
COMPLEX(DP), ALLOCATABLE, TARGET :: dwfcatomk(:,:,:)
|
|
!! derivative of atomic wfc at k
|
|
COMPLEX(DP), ALLOCATABLE, TARGET :: sdwfcatomk(:,:)
|
|
!! S * derivative of atomic wfc at k
|
|
!
|
|
! ... atomic wfc's at k+q
|
|
COMPLEX(DP), POINTER :: wfcatomkpq(:,:)
|
|
!! atomic wfc at k+q
|
|
COMPLEX(DP), POINTER :: dwfcatomkpq(:,:,:)
|
|
!! derivative of atomic wfc at k+q
|
|
COMPLEX(DP), POINTER :: sdwfcatomkpq(:,:)
|
|
!! S * derivative of atomic wfc at k+q
|
|
!
|
|
COMPLEX(DP), ALLOCATABLE, TARGET :: dvkb(:,:,:)
|
|
!! derivative of beta funtions at k
|
|
COMPLEX(DP), POINTER :: vkbkpq(:,:)
|
|
!! beta funtions at k+q
|
|
COMPLEX(DP), POINTER :: dvkbkpq(:,:,:)
|
|
!! derivative of beta funtions at k+q
|
|
!
|
|
! Various arrays for the response occupation matrix
|
|
COMPLEX(DP), ALLOCATABLE :: dnsbare(:,:,:,:,:,:)
|
|
!! bare derivative of ns
|
|
COMPLEX(DP), ALLOCATABLE :: dnsbare_all_modes(:,:,:,:,:)
|
|
!! bare derivative of ns for all modes
|
|
COMPLEX(DP), ALLOCATABLE :: dnsscf_all_modes(:,:,:,:,:)
|
|
!! SCF derivative of ns for all modes
|
|
COMPLEX(DP), ALLOCATABLE :: dnsorth(:,:,:,:,:)
|
|
!! valence component of dns
|
|
COMPLEX(DP), ALLOCATABLE :: dnsorth_cart(:,:,:,:,:,:)
|
|
!! same as above, but in cart. coordinates
|
|
!
|
|
COMPLEX (DP), ALLOCATABLE :: proj1(:,:), &
|
|
proj2(:,:), &
|
|
projpb(:,:), &
|
|
projpdb(:,:,:)
|
|
! Arrays to store scalar products between vectors
|
|
! projpb = <psi|beta>
|
|
! projpdb = <psi|dbeta>
|
|
!
|
|
!
|
|
LOGICAL :: read_dns_bare
|
|
!! if TRUE read the first bare derivative of ns from file
|
|
CHARACTER(LEN=4) :: d2ns_type
|
|
!! type of approximation to compute the second bare derivative
|
|
!! of atomic occupation matrix ns
|
|
!
|
|
END MODULE ldaU_ph
|
|
|
|
!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 phcom
|
|
USE dynmat
|
|
USE eqv
|
|
USE efield_mod
|
|
USE nlcc_ph
|
|
USE phus
|
|
USE partial
|
|
USE control_ph
|
|
USE freq_ph
|
|
USE units_ph
|
|
USE output
|
|
USE gamma_gamma
|
|
USE disp
|
|
USE grid_irr_iq
|
|
USE ldaU_ph
|
|
! USE qpoint_aux
|
|
END MODULE phcom
|