mirror of
https://github.com/cp2k/cp2k.git
synced 2026-07-28 14:15:19 -04:00
ADMM: input(short cuts) and output(write info to output) (#3118)
This commit is contained in:
parent
79e602843f
commit
e1b64ec72d
12 changed files with 572 additions and 40 deletions
|
|
@ -283,6 +283,7 @@ MODULE cp_control_types
|
|||
|
||||
TYPE admm_control_type
|
||||
REAL(KIND=dp) :: eps_filter = 0.0_dp
|
||||
INTEGER :: admm_type = 0
|
||||
INTEGER :: purification_method = 0
|
||||
INTEGER :: method = 0
|
||||
LOGICAL :: charge_constrain = .FALSE.
|
||||
|
|
|
|||
|
|
@ -29,22 +29,28 @@ MODULE cp_control_utils
|
|||
cp_unit_to_cp2k
|
||||
USE force_fields_input, ONLY: read_gp_section
|
||||
USE input_constants, ONLY: &
|
||||
constant_env, custom_env, do_admm_basis_projection, do_admm_blocked_projection, &
|
||||
do_admm_blocking_purify_full, do_admm_charge_constrained_projection, &
|
||||
do_admm_exch_scaling_merlot, do_admm_purify_mcweeny, do_admm_purify_mo_diag, &
|
||||
do_admm_purify_mo_no_diag, do_admm_purify_none, do_admm_purify_none_dm, &
|
||||
do_ddapc_constraint, do_ddapc_restraint, do_method_am1, do_method_dftb, do_method_gapw, &
|
||||
do_method_gapw_xc, do_method_gpw, do_method_lrigpw, do_method_mndo, do_method_mndod, &
|
||||
do_method_ofgpw, do_method_pdg, do_method_pm3, do_method_pm6, do_method_pm6fm, &
|
||||
do_method_pnnl, do_method_rigpw, do_method_rm1, do_method_xtb, do_pwgrid_ns_fullspace, &
|
||||
do_pwgrid_ns_halfspace, do_pwgrid_spherical, do_s2_constraint, do_s2_restraint, &
|
||||
do_se_is_kdso, do_se_is_kdso_d, do_se_is_slater, do_se_lr_ewald, do_se_lr_ewald_gks, &
|
||||
do_se_lr_ewald_r3, do_se_lr_none, gapw_1c_large, gapw_1c_medium, gapw_1c_orb, &
|
||||
gapw_1c_small, gapw_1c_very_large, gaussian_env, numerical, ramp_env, &
|
||||
real_time_propagation, sccs_andreussi, sccs_derivative_cd3, sccs_derivative_cd5, &
|
||||
sccs_derivative_cd7, sccs_derivative_fft, sccs_fattebert_gygi, sic_ad, sic_eo, &
|
||||
sic_list_all, sic_list_unpaired, sic_mauri_spz, sic_mauri_us, sic_none, slater, &
|
||||
tddfpt_dipole_length, tddfpt_excitations, tddfpt_kernel_stda, use_mom_ref_user
|
||||
admm1_type, admm2_type, admmp_type, admmq_type, admms_type, constant_env, custom_env, &
|
||||
do_admm_aux_exch_func_bee, do_admm_aux_exch_func_bee_libxc, do_admm_aux_exch_func_default, &
|
||||
do_admm_aux_exch_func_default_libxc, do_admm_aux_exch_func_none, &
|
||||
do_admm_aux_exch_func_opt, do_admm_aux_exch_func_opt_libxc, do_admm_aux_exch_func_pbex, &
|
||||
do_admm_aux_exch_func_pbex_libxc, do_admm_aux_exch_func_sx_libxc, &
|
||||
do_admm_basis_projection, do_admm_blocked_projection, do_admm_blocking_purify_full, &
|
||||
do_admm_charge_constrained_projection, do_admm_exch_scaling_merlot, &
|
||||
do_admm_exch_scaling_none, do_admm_purify_cauchy, do_admm_purify_cauchy_subspace, &
|
||||
do_admm_purify_mcweeny, do_admm_purify_mo_diag, do_admm_purify_mo_no_diag, &
|
||||
do_admm_purify_none, do_admm_purify_none_dm, do_ddapc_constraint, do_ddapc_restraint, &
|
||||
do_method_am1, do_method_dftb, do_method_gapw, do_method_gapw_xc, do_method_gpw, &
|
||||
do_method_lrigpw, do_method_mndo, do_method_mndod, do_method_ofgpw, do_method_pdg, &
|
||||
do_method_pm3, do_method_pm6, do_method_pm6fm, do_method_pnnl, do_method_rigpw, &
|
||||
do_method_rm1, do_method_xtb, do_pwgrid_ns_fullspace, do_pwgrid_ns_halfspace, &
|
||||
do_pwgrid_spherical, do_s2_constraint, do_s2_restraint, do_se_is_kdso, do_se_is_kdso_d, &
|
||||
do_se_is_slater, do_se_lr_ewald, do_se_lr_ewald_gks, do_se_lr_ewald_r3, do_se_lr_none, &
|
||||
gapw_1c_large, gapw_1c_medium, gapw_1c_orb, gapw_1c_small, gapw_1c_very_large, &
|
||||
gaussian_env, no_admm_type, numerical, ramp_env, real_time_propagation, sccs_andreussi, &
|
||||
sccs_derivative_cd3, sccs_derivative_cd5, sccs_derivative_cd7, sccs_derivative_fft, &
|
||||
sccs_fattebert_gygi, sic_ad, sic_eo, sic_list_all, sic_list_unpaired, sic_mauri_spz, &
|
||||
sic_mauri_us, sic_none, slater, tddfpt_dipole_length, tddfpt_excitations, &
|
||||
tddfpt_kernel_stda, use_mom_ref_user
|
||||
USE input_cp2k_check, ONLY: xc_functionals_expand
|
||||
USE input_cp2k_dft, ONLY: create_dft_section
|
||||
USE input_enumeration_types, ONLY: enum_i2c,&
|
||||
|
|
@ -82,6 +88,7 @@ MODULE cp_control_utils
|
|||
read_tddfpt2_control, &
|
||||
write_dft_control, &
|
||||
write_qs_control, &
|
||||
write_admm_control, &
|
||||
read_ddapc_section
|
||||
CONTAINS
|
||||
|
||||
|
|
@ -97,10 +104,11 @@ CONTAINS
|
|||
CHARACTER(len=default_path_length) :: basis_set_file_name, potential_file_name
|
||||
CHARACTER(LEN=default_string_length), &
|
||||
DIMENSION(:), POINTER :: tmpstringlist
|
||||
INTEGER :: excitations, irep, isize, method_id, &
|
||||
nrep, xc_deriv_method_id
|
||||
LOGICAL :: do_ot, do_rtp, explicit, is_present, &
|
||||
l_param, not_SE, was_present
|
||||
INTEGER :: admmtype, excitations, irep, isize, &
|
||||
method_id, nrep, xc_deriv_method_id
|
||||
LOGICAL :: do_ot, do_rtp, exopt1, exopt2, exopt3, &
|
||||
explicit, is_present, l_param, not_SE, &
|
||||
was_present
|
||||
REAL(KIND=dp) :: density_cut, gradient_cut, tau_cut
|
||||
REAL(KIND=dp), DIMENSION(:), POINTER :: pol
|
||||
TYPE(cp_logger_type), POINTER :: logger
|
||||
|
|
@ -235,16 +243,62 @@ CONTAINS
|
|||
CALL section_vals_val_get(scf_section, "OT%_SECTION_PARAMETERS_", l_val=do_ot)
|
||||
CALL admm_control_create(dft_control%admm_control)
|
||||
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_TYPE", i_val=admmtype)
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", explicit=exopt1)
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%METHOD", explicit=exopt2)
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_SCALING_MODEL", explicit=exopt3)
|
||||
dft_control%admm_control%admm_type = admmtype
|
||||
SELECT CASE (admmtype)
|
||||
CASE (no_admm_type)
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", i_val=method_id)
|
||||
dft_control%admm_control%purification_method = method_id
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%METHOD", i_val=method_id)
|
||||
dft_control%admm_control%method = method_id
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_SCALING_MODEL", i_val=method_id)
|
||||
dft_control%admm_control%scaling_model = method_id
|
||||
CASE (admm1_type)
|
||||
! METHOD BASIS_PROJECTION
|
||||
! ADMM_PURIFICATION_METHOD NONE
|
||||
! EXCH_SCALING_MODEL NONE
|
||||
dft_control%admm_control%purification_method = do_admm_purify_none
|
||||
dft_control%admm_control%method = do_admm_basis_projection
|
||||
dft_control%admm_control%scaling_model = do_admm_exch_scaling_none
|
||||
CASE (admm2_type)
|
||||
! METHOD BASIS_PROJECTION
|
||||
! ADMM_PURIFICATION_METHOD choose
|
||||
! EXCH_SCALING_MODEL NONE
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", i_val=method_id)
|
||||
dft_control%admm_control%purification_method = method_id
|
||||
dft_control%admm_control%method = do_admm_basis_projection
|
||||
dft_control%admm_control%scaling_model = do_admm_exch_scaling_none
|
||||
CASE (admms_type)
|
||||
! ADMM_PURIFICATION_METHOD NONE
|
||||
! METHOD CHARGE_CONSTRAINED_PROJECTION
|
||||
! EXCH_SCALING_MODEL MERLOT
|
||||
dft_control%admm_control%purification_method = do_admm_purify_none
|
||||
dft_control%admm_control%method = do_admm_charge_constrained_projection
|
||||
dft_control%admm_control%scaling_model = do_admm_exch_scaling_merlot
|
||||
CASE (admmp_type)
|
||||
! ADMM_PURIFICATION_METHOD NONE
|
||||
! METHOD BASIS_PROJECTION
|
||||
! EXCH_SCALING_MODEL MERLOT
|
||||
dft_control%admm_control%purification_method = do_admm_purify_none
|
||||
dft_control%admm_control%method = do_admm_basis_projection
|
||||
dft_control%admm_control%scaling_model = do_admm_exch_scaling_merlot
|
||||
CASE (admmq_type)
|
||||
! ADMM_PURIFICATION_METHOD NONE
|
||||
! METHOD CHARGE_CONSTRAINED_PROJECTION
|
||||
! EXCH_SCALING_MODEL NONE
|
||||
dft_control%admm_control%purification_method = do_admm_purify_none
|
||||
dft_control%admm_control%method = do_admm_charge_constrained_projection
|
||||
dft_control%admm_control%scaling_model = do_admm_exch_scaling_none
|
||||
CASE DEFAULT
|
||||
CALL cp_abort(__LOCATION__, &
|
||||
"ADMM_TYPE keyword in &AUXILIARY_DENSITY_MATRIX_METHOD section has a wrong value.")
|
||||
END SELECT
|
||||
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EPS_FILTER", &
|
||||
r_val=dft_control%admm_control%eps_filter)
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", i_val=method_id)
|
||||
dft_control%admm_control%purification_method = method_id
|
||||
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%METHOD", i_val=method_id)
|
||||
dft_control%admm_control%method = method_id
|
||||
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_SCALING_MODEL", i_val=method_id)
|
||||
dft_control%admm_control%scaling_model = method_id
|
||||
|
||||
CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_CORRECTION_FUNC", i_val=method_id)
|
||||
dft_control%admm_control%aux_exch_func = method_id
|
||||
|
|
@ -263,6 +317,22 @@ CONTAINS
|
|||
|
||||
CALL read_admm_block_list(dft_control%admm_control, dft_section)
|
||||
|
||||
! check for double assignments
|
||||
SELECT CASE (admmtype)
|
||||
CASE (admm2_type)
|
||||
IF (exopt2) CALL cp_warn(__LOCATION__, &
|
||||
"Value of ADMM_PURIFICATION_METHOD keyword will be overwritten with ADMM_TYPE selections.")
|
||||
IF (exopt3) CALL cp_warn(__LOCATION__, &
|
||||
"Value of EXCH_SCALING_MODEL keyword will be overwritten with ADMM_TYPE selections.")
|
||||
CASE (admm1_type, admms_type, admmp_type, admmq_type)
|
||||
IF (exopt1) CALL cp_warn(__LOCATION__, &
|
||||
"Value of METHOD keyword will be overwritten with ADMM_TYPE selections.")
|
||||
IF (exopt2) CALL cp_warn(__LOCATION__, &
|
||||
"Value of METHOD keyword will be overwritten with ADMM_TYPE selections.")
|
||||
IF (exopt3) CALL cp_warn(__LOCATION__, &
|
||||
"Value of EXCH_SCALING_MODEL keyword will be overwritten with ADMM_TYPE selections.")
|
||||
END SELECT
|
||||
|
||||
! In the case of charge-constrained projection (e.g. according to Merlot),
|
||||
! there is no purification needed and hence, do_admm_purify_none has to be set.
|
||||
|
||||
|
|
@ -332,8 +402,8 @@ CONTAINS
|
|||
CALL section_vals_val_get(dft_section, "SURF_DIP_DIR", i_val=dft_control%dir_surf_dip)
|
||||
dft_control%pos_dir_surf_dip = -1.0_dp
|
||||
CALL section_vals_val_get(dft_section, "SURF_DIP_POS", r_val=dft_control%pos_dir_surf_dip)
|
||||
! another logical variable, surf_dip_correct_switch, is introduced for
|
||||
! implementation of "SURF_DIP_SWITCH" [SGh]
|
||||
! another logical variable, surf_dip_correct_switch, is introduced for
|
||||
! implementation of "SURF_DIP_SWITCH" [SGh]
|
||||
dft_control%switch_surf_dip = .FALSE.
|
||||
dft_control%surf_dip_correct_switch = dft_control%correct_surf_dip
|
||||
CALL section_vals_val_get(dft_section, "SURF_DIP_SWITCH", l_val=dft_control%switch_surf_dip)
|
||||
|
|
@ -1730,6 +1800,110 @@ CONTAINS
|
|||
|
||||
END SUBROUTINE write_dft_control
|
||||
|
||||
! **************************************************************************************************
|
||||
!> \brief Write the ADMM control parameters to the output unit.
|
||||
!> \param admm_control ...
|
||||
!> \param dft_section ...
|
||||
! **************************************************************************************************
|
||||
SUBROUTINE write_admm_control(admm_control, dft_section)
|
||||
TYPE(admm_control_type), POINTER :: admm_control
|
||||
TYPE(section_vals_type), POINTER :: dft_section
|
||||
|
||||
INTEGER :: iounit
|
||||
TYPE(cp_logger_type), POINTER :: logger
|
||||
|
||||
NULLIFY (logger)
|
||||
logger => cp_get_default_logger()
|
||||
|
||||
iounit = cp_print_key_unit_nr(logger, dft_section, &
|
||||
"PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
|
||||
|
||||
IF (iounit > 0) THEN
|
||||
|
||||
SELECT CASE (admm_control%admm_type)
|
||||
CASE (no_admm_type)
|
||||
WRITE (UNIT=iounit, FMT="(/,T2,A,T77,A)") "ADMM| Specific ADMM type specified", "NONE"
|
||||
CASE (admm1_type)
|
||||
WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM1"
|
||||
CASE (admm2_type)
|
||||
WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM2"
|
||||
CASE (admms_type)
|
||||
WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMS"
|
||||
CASE (admmp_type)
|
||||
WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMP"
|
||||
CASE (admmq_type)
|
||||
WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMQ"
|
||||
CASE DEFAULT
|
||||
CPABORT("admm_type")
|
||||
END SELECT
|
||||
|
||||
SELECT CASE (admm_control%purification_method)
|
||||
CASE (do_admm_purify_none)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T77,A)") "ADMM| Density matrix purification method", "NONE"
|
||||
CASE (do_admm_purify_cauchy)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T75,A)") "ADMM| Density matrix purification method", "Cauchy"
|
||||
CASE (do_admm_purify_cauchy_subspace)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T66,A)") "ADMM| Density matrix purification method", "Cauchy subspace"
|
||||
CASE (do_admm_purify_mo_diag)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T63,A)") "ADMM| Density matrix purification method", "MO diagonalization"
|
||||
CASE (do_admm_purify_mo_no_diag)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T71,A)") "ADMM| Density matrix purification method", "MO no diag"
|
||||
CASE (do_admm_purify_mcweeny)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T74,A)") "ADMM| Density matrix purification method", "McWeeny"
|
||||
CASE (do_admm_purify_none_dm)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T73,A)") "ADMM| Density matrix purification method", "NONE(DM)"
|
||||
CASE DEFAULT
|
||||
CPABORT("admm_purification_method")
|
||||
END SELECT
|
||||
|
||||
SELECT CASE (admm_control%method)
|
||||
CASE (do_admm_basis_projection)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Orbital projection on ADMM basis"
|
||||
CASE (do_admm_blocking_purify_full)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Blocked Fock matrix projection with full purification"
|
||||
CASE (do_admm_blocked_projection)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Blocked Fock matrix projection"
|
||||
CASE (do_admm_charge_constrained_projection)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Orbital projection with charge constrain"
|
||||
CASE DEFAULT
|
||||
CPABORT("admm method")
|
||||
END SELECT
|
||||
|
||||
SELECT CASE (admm_control%scaling_model)
|
||||
CASE (do_admm_exch_scaling_none)
|
||||
CASE (do_admm_exch_scaling_merlot)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Use Merlot (2014) scaling model"
|
||||
CASE DEFAULT
|
||||
CPABORT("admm scaling_model")
|
||||
END SELECT
|
||||
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T61,G20.10)") "ADMM| eps_filter", admm_control%eps_filter
|
||||
|
||||
SELECT CASE (admm_control%aux_exch_func)
|
||||
CASE (do_admm_aux_exch_func_none)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| No exchange functional correction term used"
|
||||
CASE (do_admm_aux_exch_func_default, do_admm_aux_exch_func_default_libxc)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "(W)PBEX"
|
||||
CASE (do_admm_aux_exch_func_pbex, do_admm_aux_exch_func_pbex_libxc)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "PBEX"
|
||||
CASE (do_admm_aux_exch_func_opt, do_admm_aux_exch_func_opt_libxc)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "OPTX"
|
||||
CASE (do_admm_aux_exch_func_bee, do_admm_aux_exch_func_bee_libxc)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "Becke88"
|
||||
CASE (do_admm_aux_exch_func_sx_libxc)
|
||||
WRITE (UNIT=iounit, FMT="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "SlaterX"
|
||||
CASE DEFAULT
|
||||
CPABORT("admm aux_exch_func")
|
||||
END SELECT
|
||||
|
||||
WRITE (UNIT=iounit, FMT="(A)") ""
|
||||
|
||||
END IF
|
||||
|
||||
CALL cp_print_key_finished_output(iounit, logger, dft_section, &
|
||||
"PRINT%DFT_CONTROL_PARAMETERS")
|
||||
END SUBROUTINE write_admm_control
|
||||
|
||||
! **************************************************************************************************
|
||||
!> \brief Write the xTB control parameters to the output unit.
|
||||
!> \param xtb_control ...
|
||||
|
|
|
|||
|
|
@ -874,6 +874,13 @@ MODULE input_constants
|
|||
! Define scaling of the exchange correction
|
||||
INTEGER, PARAMETER, PUBLIC :: do_admm_exch_scaling_none = 0, &
|
||||
do_admm_exch_scaling_merlot = 1
|
||||
! ADMM TYPES
|
||||
INTEGER, PARAMETER, PUBLIC :: no_admm_type = 0, &
|
||||
admm1_type = 1, &
|
||||
admm2_type = 2, &
|
||||
admms_type = 3, &
|
||||
admmp_type = 4, &
|
||||
admmq_type = 5
|
||||
|
||||
! Define DFT+U method identifier codes
|
||||
INTEGER, PARAMETER, PUBLIC :: plus_u_lowdin = 1, &
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ MODULE input_cp2k_dft
|
|||
Ehrhardt1985, Eriksen2020, Fattebert2002, Golze2017a, Golze2017b, Guidon2010, &
|
||||
Heinzmann1976, Holmberg2017, Holmberg2018, Iannuzzi2005, Iannuzzi2006, Iannuzzi2007, &
|
||||
Knizia2013, Kolafa2004, Krack2000, Krack2002, Kuhne2007, Kunert2003, Lippert1997, &
|
||||
Lippert1999, Lu2004, Perdew1981, Repasky2002, Rocha2006, Schenter2008, Schiffmann2015, &
|
||||
Lippert1999, Lu2004, Merlot2014, Perdew1981, Repasky2002, Rocha2006, Schenter2008, Schiffmann2015, &
|
||||
Shigeta2001, Stewart1982, Stewart1989, Stewart2007, Thiel1992, VanVoorhis2015, &
|
||||
VandeVondele2003, VandeVondele2005a, VandeVondele2005b, VandeVondele2006, Weber2008, &
|
||||
Yin2017
|
||||
|
|
@ -105,7 +105,8 @@ MODULE input_cp2k_dft
|
|||
xas_1s_type, xas_2p_type, xas_2s_type, xas_3d_type, xas_3p_type, xas_3s_type, xas_4d_type, &
|
||||
xas_4f_type, xas_4p_type, xas_4s_type, xas_dip_len, xas_dip_vel, xas_dscf, xas_none, &
|
||||
xas_not_excited, xas_tdp_by_index, xas_tdp_by_kind, xas_tp_fh, xas_tp_flex, xas_tp_hh, &
|
||||
xas_tp_xfh, xas_tp_xhh, xes_tp_val
|
||||
xas_tp_xfh, xas_tp_xhh, xes_tp_val, &
|
||||
no_admm_type, admm1_type, admm2_type, admms_type, admmp_type, admmq_type
|
||||
USE input_cp2k_almo, ONLY: create_almo_scf_section
|
||||
USE input_cp2k_distribution, ONLY: create_distribution_section
|
||||
USE input_cp2k_ec, ONLY: create_ec_section
|
||||
|
|
@ -3480,6 +3481,24 @@ CONTAINS
|
|||
n_keywords=1, n_subsections=1, repeats=.FALSE., &
|
||||
citations=(/Guidon2010/))
|
||||
|
||||
CALL keyword_create( &
|
||||
keyword, __LOCATION__, &
|
||||
name="ADMM_TYPE", &
|
||||
description="Type of ADMM (sort name) as refered in literature. "// &
|
||||
"This sets values for METHOD, ADMM_PURIFICATION_METHOD, and EXCH_SCALING_MODEL", &
|
||||
enum_c_vals=s2a("NONE", "ADMM1", "ADMM2", "ADMMS", "ADMMP", "ADMMQ"), &
|
||||
enum_desc=s2a("No short name is used, use specific definitions (default)", &
|
||||
"ADMM1 method from Guidon2010", &
|
||||
"ADMM2 method from Guidon2010", &
|
||||
"ADMMS method from Merlot2014", &
|
||||
"ADMMP method from Merlot2014", &
|
||||
"ADMMQ method from Merlot2014"), &
|
||||
enum_i_vals=(/no_admm_type, admm1_type, admm2_type, admms_type, admmp_type, admmq_type/), &
|
||||
default_i_val=no_admm_type, &
|
||||
citations=(/Guidon2010, Merlot2014/))
|
||||
CALL section_add_keyword(section, keyword)
|
||||
CALL keyword_release(keyword)
|
||||
|
||||
CALL keyword_create( &
|
||||
keyword, __LOCATION__, &
|
||||
name="ADMM_PURIFICATION_METHOD", &
|
||||
|
|
|
|||
|
|
@ -41,14 +41,10 @@ MODULE qs_environment
|
|||
qs_control_type,&
|
||||
semi_empirical_control_type,&
|
||||
xtb_control_type
|
||||
USE cp_control_utils, ONLY: read_ddapc_section,&
|
||||
read_dft_control,&
|
||||
read_mgrid_section,&
|
||||
read_qs_section,&
|
||||
read_tddfpt2_control,&
|
||||
read_tddfpt_control,&
|
||||
write_dft_control,&
|
||||
write_qs_control
|
||||
USE cp_control_utils, ONLY: &
|
||||
read_ddapc_section, read_dft_control, read_mgrid_section, read_qs_section, &
|
||||
read_tddfpt2_control, read_tddfpt_control, write_admm_control, write_dft_control, &
|
||||
write_qs_control
|
||||
USE cp_ddapc_types, ONLY: cp_ddapc_ewald_create
|
||||
USE cp_log_handling, ONLY: cp_get_default_logger,&
|
||||
cp_logger_get_default_io_unit,&
|
||||
|
|
@ -1662,6 +1658,11 @@ CONTAINS
|
|||
! Print the Quickstep control parameters
|
||||
CALL write_qs_control(dft_control%qs_control, dft_section)
|
||||
|
||||
! Print the ADMM control parameters
|
||||
IF (dft_control%do_admm) THEN
|
||||
CALL write_admm_control(dft_control%admm_control, dft_section)
|
||||
END IF
|
||||
|
||||
! Print XES/XAS control parameters
|
||||
IF (dft_control%do_xas_calculation) THEN
|
||||
CALL cite_reference(Iannuzzi2007)
|
||||
|
|
|
|||
63
tests/QS/regtest-admm-type/H2O-ADMM1.inp
Normal file
63
tests/QS/regtest-admm-type/H2O-ADMM1.inp
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
&FORCE_EVAL
|
||||
METHOD Quickstep
|
||||
&DFT
|
||||
BASIS_SET_FILE_NAME BASIS_ccGRB_UZH
|
||||
BASIS_SET_FILE_NAME BASIS_ADMM_UZH
|
||||
POTENTIAL_FILE_NAME POTENTIAL_UZH
|
||||
&MGRID
|
||||
CUTOFF 200
|
||||
REL_CUTOFF 40
|
||||
&END MGRID
|
||||
&AUXILIARY_DENSITY_MATRIX_METHOD
|
||||
ADMM_TYPE ADMM1
|
||||
EXCH_CORRECTION_FUNC PBEX
|
||||
&END
|
||||
&QS
|
||||
EPS_DEFAULT 1.0E-12
|
||||
METHOD GPW
|
||||
&END
|
||||
&SCF
|
||||
SCF_GUESS ATOMIC
|
||||
MAX_SCF 5
|
||||
&END SCF
|
||||
&XC
|
||||
&XC_FUNCTIONAL NONE
|
||||
&END XC_FUNCTIONAL
|
||||
&HF
|
||||
FRACTION 1.0
|
||||
&INTERACTION_POTENTIAL
|
||||
POTENTIAL_TYPE TRUNCATED
|
||||
CUTOFF_RADIUS 2.0
|
||||
&END
|
||||
&END
|
||||
&END XC
|
||||
&END DFT
|
||||
&SUBSYS
|
||||
&CELL
|
||||
ABC 4.5 4.5 4.5
|
||||
PERIODIC NONE
|
||||
&END CELL
|
||||
&TOPOLOGY
|
||||
&END
|
||||
&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 ccGRB-D-q1
|
||||
BASIS_SET AUX_FIT admm-dz-q1
|
||||
POTENTIAL GTH-HYB-q1
|
||||
&END KIND
|
||||
&KIND O
|
||||
BASIS_SET ccGRB-D-q6
|
||||
BASIS_SET AUX_FIT admm-dz-q6
|
||||
POTENTIAL GTH-HYB-q6
|
||||
&END KIND
|
||||
&END SUBSYS
|
||||
&END FORCE_EVAL
|
||||
&GLOBAL
|
||||
PROJECT H2O-ADMM1
|
||||
PRINT_LEVEL MEDIUM
|
||||
RUN_TYPE ENERGY
|
||||
&END GLOBAL
|
||||
67
tests/QS/regtest-admm-type/H2O-ADMM2.inp
Normal file
67
tests/QS/regtest-admm-type/H2O-ADMM2.inp
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
&FORCE_EVAL
|
||||
METHOD Quickstep
|
||||
&DFT
|
||||
BASIS_SET_FILE_NAME BASIS_ccGRB_UZH
|
||||
BASIS_SET_FILE_NAME BASIS_ADMM_UZH
|
||||
POTENTIAL_FILE_NAME POTENTIAL_UZH
|
||||
&MGRID
|
||||
CUTOFF 200
|
||||
REL_CUTOFF 40
|
||||
&END MGRID
|
||||
&AUXILIARY_DENSITY_MATRIX_METHOD
|
||||
ADMM_TYPE ADMM2
|
||||
EXCH_CORRECTION_FUNC NONE
|
||||
&END
|
||||
&QS
|
||||
EPS_DEFAULT 1.0E-12
|
||||
METHOD GPW
|
||||
&END
|
||||
&SCF
|
||||
SCF_GUESS ATOMIC
|
||||
MAX_SCF 5
|
||||
&OT
|
||||
PRECONDITIONER FULL_ALL
|
||||
MINIMIZER DIIS
|
||||
&END OT
|
||||
&END SCF
|
||||
&XC
|
||||
&XC_FUNCTIONAL NONE
|
||||
&END XC_FUNCTIONAL
|
||||
&HF
|
||||
FRACTION 1.0
|
||||
&INTERACTION_POTENTIAL
|
||||
POTENTIAL_TYPE TRUNCATED
|
||||
CUTOFF_RADIUS 2.0
|
||||
&END
|
||||
&END
|
||||
&END XC
|
||||
&END DFT
|
||||
&SUBSYS
|
||||
&CELL
|
||||
ABC 4.5 4.5 4.5
|
||||
PERIODIC NONE
|
||||
&END CELL
|
||||
&TOPOLOGY
|
||||
&END
|
||||
&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 ccGRB-D-q1
|
||||
BASIS_SET AUX_FIT admm-dz-q1
|
||||
POTENTIAL GTH-HYB-q1
|
||||
&END KIND
|
||||
&KIND O
|
||||
BASIS_SET ccGRB-D-q6
|
||||
BASIS_SET AUX_FIT admm-dz-q6
|
||||
POTENTIAL GTH-HYB-q6
|
||||
&END KIND
|
||||
&END SUBSYS
|
||||
&END FORCE_EVAL
|
||||
&GLOBAL
|
||||
PROJECT H2O-ADMM2
|
||||
PRINT_LEVEL MEDIUM
|
||||
RUN_TYPE ENERGY
|
||||
&END GLOBAL
|
||||
62
tests/QS/regtest-admm-type/H2O-ADMMP-GAPW.inp
Normal file
62
tests/QS/regtest-admm-type/H2O-ADMMP-GAPW.inp
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
&FORCE_EVAL
|
||||
METHOD Quickstep
|
||||
&DFT
|
||||
BASIS_SET_FILE_NAME BASIS_ccGRB_UZH
|
||||
BASIS_SET_FILE_NAME BASIS_ADMM_UZH
|
||||
POTENTIAL_FILE_NAME POTENTIAL_UZH
|
||||
&MGRID
|
||||
CUTOFF 200
|
||||
REL_CUTOFF 40
|
||||
&END MGRID
|
||||
&AUXILIARY_DENSITY_MATRIX_METHOD
|
||||
ADMM_TYPE ADMMP
|
||||
&END
|
||||
&QS
|
||||
EPS_DEFAULT 1.0E-12
|
||||
METHOD GAPW
|
||||
&END
|
||||
&SCF
|
||||
SCF_GUESS ATOMIC
|
||||
MAX_SCF 5
|
||||
&END SCF
|
||||
&XC
|
||||
&XC_FUNCTIONAL NONE
|
||||
&END XC_FUNCTIONAL
|
||||
&HF
|
||||
FRACTION 1.0
|
||||
&INTERACTION_POTENTIAL
|
||||
POTENTIAL_TYPE TRUNCATED
|
||||
CUTOFF_RADIUS 2.0
|
||||
&END
|
||||
&END
|
||||
&END XC
|
||||
&END DFT
|
||||
&SUBSYS
|
||||
&CELL
|
||||
ABC 4.5 4.5 4.5
|
||||
PERIODIC NONE
|
||||
&END CELL
|
||||
&TOPOLOGY
|
||||
&END
|
||||
&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 ccGRB-D-q1
|
||||
BASIS_SET AUX_FIT admm-dz-q1
|
||||
POTENTIAL GTH-HYB-q1
|
||||
&END KIND
|
||||
&KIND O
|
||||
BASIS_SET ccGRB-D-q6
|
||||
BASIS_SET AUX_FIT admm-dz-q6
|
||||
POTENTIAL GTH-HYB-q6
|
||||
&END KIND
|
||||
&END SUBSYS
|
||||
&END FORCE_EVAL
|
||||
&GLOBAL
|
||||
PROJECT H2O-ADMMP
|
||||
PRINT_LEVEL MEDIUM
|
||||
RUN_TYPE ENERGY
|
||||
&END GLOBAL
|
||||
63
tests/QS/regtest-admm-type/H2O-ADMMQ-OPTX.inp
Normal file
63
tests/QS/regtest-admm-type/H2O-ADMMQ-OPTX.inp
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
&FORCE_EVAL
|
||||
METHOD Quickstep
|
||||
&DFT
|
||||
BASIS_SET_FILE_NAME BASIS_ccGRB_UZH
|
||||
BASIS_SET_FILE_NAME BASIS_ADMM_UZH
|
||||
POTENTIAL_FILE_NAME POTENTIAL_UZH
|
||||
&MGRID
|
||||
CUTOFF 200
|
||||
REL_CUTOFF 40
|
||||
&END MGRID
|
||||
&AUXILIARY_DENSITY_MATRIX_METHOD
|
||||
ADMM_TYPE ADMMQ
|
||||
EXCH_CORRECTION_FUNC OPTX
|
||||
&END
|
||||
&QS
|
||||
EPS_DEFAULT 1.0E-12
|
||||
METHOD GPW
|
||||
&END
|
||||
&SCF
|
||||
SCF_GUESS ATOMIC
|
||||
MAX_SCF 5
|
||||
&END SCF
|
||||
&XC
|
||||
&XC_FUNCTIONAL NONE
|
||||
&END XC_FUNCTIONAL
|
||||
&HF
|
||||
FRACTION 1.0
|
||||
&INTERACTION_POTENTIAL
|
||||
POTENTIAL_TYPE TRUNCATED
|
||||
CUTOFF_RADIUS 2.0
|
||||
&END
|
||||
&END
|
||||
&END XC
|
||||
&END DFT
|
||||
&SUBSYS
|
||||
&CELL
|
||||
ABC 4.5 4.5 4.5
|
||||
PERIODIC NONE
|
||||
&END CELL
|
||||
&TOPOLOGY
|
||||
&END
|
||||
&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 ccGRB-D-q1
|
||||
BASIS_SET AUX_FIT admm-dz-q1
|
||||
POTENTIAL GTH-HYB-q1
|
||||
&END KIND
|
||||
&KIND O
|
||||
BASIS_SET ccGRB-D-q6
|
||||
BASIS_SET AUX_FIT admm-dz-q6
|
||||
POTENTIAL GTH-HYB-q6
|
||||
&END KIND
|
||||
&END SUBSYS
|
||||
&END FORCE_EVAL
|
||||
&GLOBAL
|
||||
PROJECT H2O-ADMMQ
|
||||
PRINT_LEVEL MEDIUM
|
||||
RUN_TYPE ENERGY
|
||||
&END GLOBAL
|
||||
65
tests/QS/regtest-admm-type/H2O-ADMMS-HYB.inp
Normal file
65
tests/QS/regtest-admm-type/H2O-ADMMS-HYB.inp
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
&FORCE_EVAL
|
||||
METHOD Quickstep
|
||||
&DFT
|
||||
BASIS_SET_FILE_NAME BASIS_ccGRB_UZH
|
||||
BASIS_SET_FILE_NAME BASIS_ADMM_UZH
|
||||
POTENTIAL_FILE_NAME POTENTIAL_UZH
|
||||
&MGRID
|
||||
CUTOFF 200
|
||||
REL_CUTOFF 40
|
||||
&END MGRID
|
||||
&AUXILIARY_DENSITY_MATRIX_METHOD
|
||||
ADMM_TYPE ADMMS
|
||||
&END
|
||||
&QS
|
||||
EPS_DEFAULT 1.0E-12
|
||||
METHOD GPW
|
||||
&END
|
||||
&SCF
|
||||
SCF_GUESS ATOMIC
|
||||
MAX_SCF 5
|
||||
&END SCF
|
||||
&XC
|
||||
&XC_FUNCTIONAL
|
||||
&PBE
|
||||
SCALE_X 0.55
|
||||
&END
|
||||
&END XC_FUNCTIONAL
|
||||
&HF
|
||||
FRACTION 0.45
|
||||
&INTERACTION_POTENTIAL
|
||||
POTENTIAL_TYPE TRUNCATED
|
||||
CUTOFF_RADIUS 2.0
|
||||
&END
|
||||
&END
|
||||
&END XC
|
||||
&END DFT
|
||||
&SUBSYS
|
||||
&CELL
|
||||
ABC 4.5 4.5 4.5
|
||||
PERIODIC NONE
|
||||
&END CELL
|
||||
&TOPOLOGY
|
||||
&END
|
||||
&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 ccGRB-D-q1
|
||||
BASIS_SET AUX_FIT admm-dz-q1
|
||||
POTENTIAL GTH-HYB-q1
|
||||
&END KIND
|
||||
&KIND O
|
||||
BASIS_SET ccGRB-D-q6
|
||||
BASIS_SET AUX_FIT admm-dz-q6
|
||||
POTENTIAL GTH-HYB-q6
|
||||
&END KIND
|
||||
&END SUBSYS
|
||||
&END FORCE_EVAL
|
||||
&GLOBAL
|
||||
PROJECT H2O-ADMMS
|
||||
PRINT_LEVEL MEDIUM
|
||||
RUN_TYPE ENERGY
|
||||
&END GLOBAL
|
||||
9
tests/QS/regtest-admm-type/TEST_FILES
Normal file
9
tests/QS/regtest-admm-type/TEST_FILES
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# runs are executed in the same order as in this file
|
||||
# the second field tells which test should be run in order to compare with the last available output
|
||||
# see regtest/TEST_FILES
|
||||
H2O-ADMM1.inp 11 1e-10 -16.718556848108
|
||||
H2O-ADMM2.inp 11 1e-10 -16.806632978548
|
||||
H2O-ADMMP-GAPW.inp 11 1e-10 -16.701137600827
|
||||
H2O-ADMMQ-OPTX.inp 11 1e-10 -16.813276281820
|
||||
H2O-ADMMS-HYB.inp 11 1e-10 -17.056296138649
|
||||
#EOF
|
||||
|
|
@ -116,6 +116,7 @@ DFTB/regtest-scc-2
|
|||
QS/regtest-hfx libint
|
||||
QS/regtest-rel
|
||||
QS/regtest-ls-rtp
|
||||
QS/regtest-admm-type libint
|
||||
QS/regtest-admm-qps libint
|
||||
QS/regtest-admm-qps-2 libint
|
||||
ATOM/regtest-pseudo
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue