mirror of https://gitlab.com/QEF/q-e.git
using the preferred vdw_corr input wrapper (tentative)
This commit is contained in:
parent
af88bcce3f
commit
f0762dc13b
|
@ -47,6 +47,7 @@ MODULE cp_restart_new
|
|||
!
|
||||
USE control_flags, ONLY : gamma_only, force_pairing, trhow, &
|
||||
tksw, do_makov_payne, smallmem, &
|
||||
do_mbd, &
|
||||
llondon, lxdm, ts_vdw, tfor, tpre
|
||||
USE control_flags, ONLY : lwfpbe0nscf, lwfnscf, lwf ! Lingzhu Kong
|
||||
USE constants, ONLY : e2
|
||||
|
@ -774,7 +775,7 @@ MODULE cp_restart_new
|
|||
Hubbard_U, hubba_dum, Hubbard_dum(1,:), Hubbard_dum(2,:), Hubbard_dum(3,:), &
|
||||
Hubbard_dum, &
|
||||
vdw_corr, scal6, lon_rcut, vdw_isolated)
|
||||
CALL set_vdw_corr (vdw_corr, llondon, ldftd3, ts_vdw, lxdm )
|
||||
CALL set_vdw_corr (vdw_corr, llondon, ldftd3, ts_vdw, do_mbd, lxdm )
|
||||
IF ( ldftd3 ) CALL errore('cp_readfile','DFT-D3 not implemented',1)
|
||||
!
|
||||
lsda_ = output_obj%magnetization%lsda
|
||||
|
|
|
@ -6,17 +6,18 @@
|
|||
! or http://www.gnu.org/copyleft/gpl.txt .
|
||||
!
|
||||
!
|
||||
SUBROUTINE set_vdw_corr ( vdw_corr, llondon, ldftd3, ts_vdw, lxdm )
|
||||
SUBROUTINE set_vdw_corr ( vdw_corr, llondon, ldftd3, ts_vdw, do_mdb, lxdm )
|
||||
USE io_global, ONLY: stdout
|
||||
!
|
||||
IMPLICIT NONE
|
||||
CHARACTER(LEN=*), INTENT(in) :: vdw_corr
|
||||
LOGICAL, INTENT(out) :: llondon, ldftd3, ts_vdw, lxdm
|
||||
LOGICAL, INTENT(out) :: llondon, ldftd3, ts_vdw, do_mdb, lxdm
|
||||
!
|
||||
|
||||
llondon= .FALSE.
|
||||
ldftd3 = .FALSE.
|
||||
ts_vdw = .FALSE.
|
||||
do_mdb = .FALSE.
|
||||
lxdm = .FALSE.
|
||||
|
||||
SELECT CASE( TRIM( vdw_corr ) )
|
||||
|
@ -29,6 +30,9 @@ SUBROUTINE set_vdw_corr ( vdw_corr, llondon, ldftd3, ts_vdw, lxdm )
|
|||
CASE( 'TS', 'ts', 'ts-vdw', 'ts-vdW', 'tkatchenko-scheffler' )
|
||||
ts_vdw = .TRUE.
|
||||
|
||||
CASE( 'MBD', 'mbd', 'many-body-dispersion' )
|
||||
do_mdb = .TRUE.
|
||||
|
||||
CASE( 'XDM', 'xdm' )
|
||||
lxdm = .TRUE.
|
||||
|
||||
|
|
|
@ -172,6 +172,7 @@ SUBROUTINE iosys()
|
|||
tq_smoothing_ => tq_smoothing, &
|
||||
tbeta_smoothing_ => tbeta_smoothing, &
|
||||
ts_vdw_ => ts_vdw, &
|
||||
do_mbd_ => do_mbd, &
|
||||
lecrpa_ => lecrpa, &
|
||||
scf_must_converge_=> scf_must_converge, &
|
||||
treinit_gvecs_ => treinit_gvecs, &
|
||||
|
@ -263,6 +264,7 @@ SUBROUTINE iosys()
|
|||
vdw_corr, london, london_s6, london_rcut, london_c6, &
|
||||
london_rvdw, dftd3_threebody, dftd3_version, &
|
||||
ts_vdw, ts_vdw_isolated, ts_vdw_econv_thr, &
|
||||
do_mbd, &
|
||||
xdm, xdm_a1, xdm_a2, lforcet, &
|
||||
one_atom_occupations, &
|
||||
esm_bc, esm_efield, esm_w, esm_nfit, esm_a, &
|
||||
|
@ -1322,7 +1324,7 @@ SUBROUTINE iosys()
|
|||
!
|
||||
! VdW CORRECTIONS (SEMI-EMPIRICAL)
|
||||
!
|
||||
CALL set_vdw_corr ( vdw_corr, llondon, ldftd3, ts_vdw_, lxdm)
|
||||
CALL set_vdw_corr ( vdw_corr, llondon, ldftd3, ts_vdw_, do_mbd_, lxdm)
|
||||
!
|
||||
IF ( london ) THEN
|
||||
CALL infomsg("iosys","london is obsolete, use ""vdw_corr='grimme-d2'"" instead")
|
||||
|
@ -1339,6 +1341,11 @@ SUBROUTINE iosys()
|
|||
vdw_corr='TS'
|
||||
ts_vdw_ = .TRUE.
|
||||
END IF
|
||||
IF ( do_mbd ) THEN
|
||||
CALL infomsg("iosys","do_mbd is obsolete, use ""vdw_corr='MBD'"" instead")
|
||||
vdw_corr='MBD'
|
||||
do_mbd_ = .TRUE.
|
||||
END IF
|
||||
IF ( llondon.AND.lxdm .OR. llondon.AND.ts_vdw_ .OR. lxdm.AND.ts_vdw_ .OR. &
|
||||
ldftd3.AND.llondon .OR. ldftd3.AND.lxdm .OR. ldftd3.AND.ts_vdw ) &
|
||||
CALL errore("iosys","must choose a unique vdW correction!", 1)
|
||||
|
|
|
@ -68,6 +68,7 @@ MODULE pw_restart_new
|
|||
lscf, gamma_only, &
|
||||
tqr, tq_smoothing, tbeta_smoothing, &
|
||||
noinv, smallmem, &
|
||||
do_mbd, &
|
||||
llondon, lxdm, ts_vdw, scf_error, n_scf_steps
|
||||
USE constants, ONLY : e2
|
||||
USE realus, ONLY : real_space
|
||||
|
@ -370,7 +371,7 @@ MODULE pw_restart_new
|
|||
ECUTVCUT = ectuvcut_opt, LOCAL_THR = loc_thr_p )
|
||||
END IF
|
||||
|
||||
empirical_vdw = (llondon .OR. ldftd3 .OR. lxdm .OR. ts_vdw )
|
||||
empirical_vdw = (llondon .OR. ldftd3 .OR. lxdm .OR. ts_vdw .OR. do_mbd )
|
||||
dft_is_vdw = dft_is_nonlocc()
|
||||
IF ( dft_is_vdw .OR. empirical_vdw ) THEN
|
||||
ALLOCATE (vdw_obj)
|
||||
|
@ -409,6 +410,13 @@ MODULE pw_restart_new
|
|||
ts_vdw_isolated_pt => ts_vdw_isolated_
|
||||
ts_vdw_econv_thr_ = vdw_econv_thr
|
||||
ts_vdw_econv_thr_pt => ts_vdw_econv_thr_
|
||||
ELSE IF ( do_mbd ) THEN
|
||||
! FIXME
|
||||
!dispersion_energy_term = 2._DP * EtsvdW/e2
|
||||
!ts_vdw_isolated_ = vdw_isolated
|
||||
!ts_vdw_isolated_pt => ts_vdw_isolated_
|
||||
!ts_vdw_econv_thr_ = vdw_econv_thr
|
||||
!ts_vdw_econv_thr_pt => ts_vdw_econv_thr_
|
||||
END IF
|
||||
ELSE
|
||||
vdw_corr_ = 'none'
|
||||
|
@ -1089,7 +1097,7 @@ MODULE pw_restart_new
|
|||
Hubbard_U, Hubbard_U_back, Hubbard_J0, Hubbard_alpha, Hubbard_beta, Hubbard_J, &
|
||||
vdw_corr, scal6, lon_rcut, vdw_isolated )
|
||||
!! More DFT initializations
|
||||
CALL set_vdw_corr ( vdw_corr, llondon, ldftd3, ts_vdw, lxdm )
|
||||
CALL set_vdw_corr ( vdw_corr, llondon, ldftd3, ts_vdw, do_mbd, lxdm )
|
||||
CALL enforce_input_dft ( dft_name, .TRUE. )
|
||||
IF ( dft_is_hybrid() ) THEN
|
||||
ecutvcut=ecutvcut*e2
|
||||
|
|
Loading…
Reference in New Issue