RTP| Enabled ADMM with GAPW

This commit is contained in:
abussy 2023-04-17 17:39:13 +02:00 committed by Augustin Bussy
parent 89e83184de
commit 4733487c4d
5 changed files with 126 additions and 10 deletions

View file

@ -270,10 +270,6 @@ CONTAINS
CPABORT("GAPW ADMM not implemented for MCWEENY or NONE_DM purification.")
END IF
IF (admm_env%do_gapw .AND. qs_env%run_rtp) THEN
CPABORT("GAPW ADMM not implemented for real-time propagation.")
END IF
IF (dft_control%do_admm_dm .AND. .NOT. ASSOCIATED(admm_env%admm_dm)) THEN
CALL admm_dm_create(admm_env%admm_dm, dft_control%admm_control, nspins=dft_control%nspins, natoms=natoms)
END IF

View file

@ -775,6 +775,7 @@ CONTAINS
IF (dft_control%do_admm) THEN
!Single atom contribution to the AUX matrices
!Note: also update ks_aux_fit matrix in case of rtp
CALL admm_update_ks_atom(qs_env, calculate_forces)
END IF
END IF

View file

@ -35,7 +35,8 @@ MODULE rtp_admm_methods
do_admm_purify_none
USE input_section_types, ONLY: section_vals_get_subs_vals,&
section_vals_type
USE kinds, ONLY: dp
USE kinds, ONLY: default_string_length,&
dp
USE mathconstants, ONLY: one,&
zero
USE message_passing, ONLY: mp_para_env_type
@ -45,11 +46,13 @@ MODULE rtp_admm_methods
USE qs_environment_types, ONLY: get_qs_env,&
qs_environment_type,&
set_qs_env
USE qs_gapw_densities, ONLY: prepare_gapw_den
USE qs_kind_types, ONLY: get_qs_kind_set,&
qs_kind_type
USE qs_ks_types, ONLY: qs_ks_env_type
USE qs_mo_types, ONLY: get_mo_set,&
mo_set_type
USE qs_rho_atom_methods, ONLY: calculate_rho_atom_coeff
USE qs_rho_types, ONLY: qs_rho_get,&
qs_rho_set,&
qs_rho_type
@ -81,8 +84,9 @@ CONTAINS
CHARACTER(LEN=*), PARAMETER :: routineN = 'rtp_admm_calc_rho_aux'
CHARACTER(LEN=default_string_length) :: basis_type
INTEGER :: handle, ispin, nspins
LOGICAL :: s_mstruct_changed
LOGICAL :: gapw, s_mstruct_changed
REAL(KIND=dp), DIMENSION(:), POINTER :: tot_rho_r_aux
TYPE(admm_type), POINTER :: admm_env
TYPE(cp_fm_type), DIMENSION(:), POINTER :: rtp_coeff_aux_fit
@ -115,10 +119,7 @@ CONTAINS
CALL get_admm_env(admm_env, matrix_s_aux_fit=matrix_s_aux_fit, task_list_aux_fit=task_list_aux_fit, &
matrix_s_aux_fit_vs_orb=matrix_s_aux_fit_vs_orb, mos_aux_fit=mos_aux_fit, &
rho_aux_fit=rho_aux_fit)
IF (admm_env%do_gapw) THEN
CPABORT("GAPW ADMM not implemented for real time propagation")
END IF
gapw = admm_env%do_gapw
nspins = dft_control%nspins
@ -141,6 +142,13 @@ CONTAINS
matrix_p_aux_im(ispin)%matrix, &
ispin)
!IF GAPW, only do the soft basis with PW
basis_type = "AUX_FIT"
IF (gapw) THEN
basis_type = "AUX_FIT_SOFT"
task_list_aux_fit => admm_env%admm_gapw_env%task_list
END IF
CALL calculate_rho_elec(matrix_p=matrix_p_aux(ispin)%matrix, &
rho=rho_r_aux(ispin), &
rho_gspace=rho_g_aux(ispin), &
@ -148,6 +156,18 @@ CONTAINS
ks_env=ks_env, soft_valid=.FALSE., &
basis_type="AUX_FIT", &
task_list_external=task_list_aux_fit)
!IF GAPW, also need to atomic densities
IF (gapw) THEN
CALL calculate_rho_atom_coeff(qs_env, matrix_p_aux, &
rho_atom_set=admm_env%admm_gapw_env%local_rho_set%rho_atom_set, &
qs_kind_set=admm_env%admm_gapw_env%admm_kind_set, &
oce=admm_env%admm_gapw_env%oce, sab=admm_env%sab_aux_fit, &
para_env=para_env)
CALL prepare_gapw_den(qs_env, local_rho_set=admm_env%admm_gapw_env%local_rho_set, &
do_rho0=.FALSE., kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
END IF
END DO
CALL set_qs_env(qs_env, admm_env=admm_env)
CALL qs_rho_set(rho_aux_fit, rho_r_valid=.TRUE., rho_g_valid=.TRUE.)
@ -432,6 +452,8 @@ CONTAINS
matrix_ks_im=matrix_ks_im)
CALL get_admm_env(admm_env, matrix_ks_aux_fit=matrix_ks_aux_fit, matrix_ks_aux_fit_im=matrix_ks_aux_fit_im)
!note: the GAPW contribution to ks_aux_fit taken care of in qs_ks_methods.F/update_admm_ks_atom
DO ispin = 1, dft_control%nspins
SELECT CASE (admm_env%purification_method)

View file

@ -0,0 +1,95 @@
&FORCE_EVAL
METHOD QUICKSTEP
&DFT
&AUXILIARY_DENSITY_MATRIX_METHOD
METHOD BASIS_PROJECTION
ADMM_PURIFICATION_METHOD NONE
&END
&REAL_TIME_PROPAGATION
MAX_ITER 7
MAT_EXP ARNOLDI
PROPAGATOR ETRS
EXP_ACCURACY 1.0E-11
EPS_ITER 1.0E-2
INITIAL_WFN SCF_WFN
&END
BASIS_SET_FILE_NAME BASIS_MOLOPT
BASIS_SET_FILE_NAME BASIS_ADMM
POTENTIAL_FILE_NAME POTENTIAL
&MGRID
CUTOFF 100
&END MGRID
&QS
EPS_DEFAULT 1.0E-10
METHOD GAPW
FORCE_PAW
&END QS
&POISSON
PERIODIC NONE
PSOLVER MT
&END
&SCF
MAX_SCF 5
EPS_SCF 1.0E-6
SCF_GUESS ATOMIC
&OT ON
ROTATION
&END OT
&END SCF
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF
&SCREENING
EPS_SCHWARZ 1.0E-10
EPS_SCHWARZ_FORCES 1.0E-10
SCREEN_ON_INITIAL_P FALSE
&END
&INTERACTION_POTENTIAL
POTENTIAL_TYPE COULOMB
&END
&MEMORY
MAX_MEMORY 50
EPS_STORAGE_SCALING 0.1
TREAT_FORCES_IN_CORE TRUE
&END
&END
&END XC
&END DFT
&SUBSYS
&CELL
ABC 8.0 8.0 8.0
PERIODIC NONE
&END CELL
&COORD
O 0.000000 0.000000 -0.065587
H 0.000000 -0.757136 0.520545
H 0.000000 0.757136 0.520545
&END COORD
&KIND H
BASIS_SET ORB DZVP-MOLOPT-GTH
POTENTIAL GTH-PBE-q1
BASIS_SET AUX_FIT cFIT3
&END KIND
&KIND O
BASIS_SET ORB DZVP-MOLOPT-GTH
POTENTIAL GTH-PBE-q6
BASIS_SET AUX_FIT cFIT3
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
PROJECT H2O-hybrid-EMD
RUN_TYPE EHRENFEST_DYN
PRINT_LEVEL MEDIUM
&END GLOBAL
&MOTION
&MD
ENSEMBLE NVE
STEPS 2
TIMESTEP [au_t] 0.25
TEMPERATURE 300.0
&END MD
&END MOTION

View file

@ -17,4 +17,6 @@ MD-2-ALL.inp 1 5e-10
# GAPW_XC tests
H2-geo-XC.inp 1 5e-10 -1.15201574159787
H2O-ADMMP-XC.inp 1 1e-12 -16.85600729246631
# GAPW ADMM with RTP
H2O-admm-emd.inp 2 1e-10 -0.167597110002E+02
#EOF