diff --git a/src/cp_control_types.F b/src/cp_control_types.F index cafbfd6a5b..e381d06434 100644 --- a/src/cp_control_types.F +++ b/src/cp_control_types.F @@ -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. diff --git a/src/cp_control_utils.F b/src/cp_control_utils.F index 12ac4dd0b9..0e8f070197 100644 --- a/src/cp_control_utils.F +++ b/src/cp_control_utils.F @@ -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 ... diff --git a/src/input_constants.F b/src/input_constants.F index 5e9e914fb3..674da709d1 100644 --- a/src/input_constants.F +++ b/src/input_constants.F @@ -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, & diff --git a/src/input_cp2k_dft.F b/src/input_cp2k_dft.F index e118f73d61..3c53df61b9 100644 --- a/src/input_cp2k_dft.F +++ b/src/input_cp2k_dft.F @@ -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", & diff --git a/src/qs_environment.F b/src/qs_environment.F index d4239c18b1..af9eed9ac6 100644 --- a/src/qs_environment.F +++ b/src/qs_environment.F @@ -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) diff --git a/tests/QS/regtest-admm-type/H2O-ADMM1.inp b/tests/QS/regtest-admm-type/H2O-ADMM1.inp new file mode 100644 index 0000000000..4875a2f23f --- /dev/null +++ b/tests/QS/regtest-admm-type/H2O-ADMM1.inp @@ -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 diff --git a/tests/QS/regtest-admm-type/H2O-ADMM2.inp b/tests/QS/regtest-admm-type/H2O-ADMM2.inp new file mode 100644 index 0000000000..38ec849733 --- /dev/null +++ b/tests/QS/regtest-admm-type/H2O-ADMM2.inp @@ -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 diff --git a/tests/QS/regtest-admm-type/H2O-ADMMP-GAPW.inp b/tests/QS/regtest-admm-type/H2O-ADMMP-GAPW.inp new file mode 100644 index 0000000000..0da08f5a65 --- /dev/null +++ b/tests/QS/regtest-admm-type/H2O-ADMMP-GAPW.inp @@ -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 diff --git a/tests/QS/regtest-admm-type/H2O-ADMMQ-OPTX.inp b/tests/QS/regtest-admm-type/H2O-ADMMQ-OPTX.inp new file mode 100644 index 0000000000..7142d9336c --- /dev/null +++ b/tests/QS/regtest-admm-type/H2O-ADMMQ-OPTX.inp @@ -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 diff --git a/tests/QS/regtest-admm-type/H2O-ADMMS-HYB.inp b/tests/QS/regtest-admm-type/H2O-ADMMS-HYB.inp new file mode 100644 index 0000000000..e77a1ab274 --- /dev/null +++ b/tests/QS/regtest-admm-type/H2O-ADMMS-HYB.inp @@ -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 diff --git a/tests/QS/regtest-admm-type/TEST_FILES b/tests/QS/regtest-admm-type/TEST_FILES new file mode 100644 index 0000000000..bdae78edda --- /dev/null +++ b/tests/QS/regtest-admm-type/TEST_FILES @@ -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 diff --git a/tests/TEST_DIRS b/tests/TEST_DIRS index 3ae3f712b7..c4cca532c4 100644 --- a/tests/TEST_DIRS +++ b/tests/TEST_DIRS @@ -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