From 00065fbbfa74167d10e26f9bc3fc43d3cfb6fa65 Mon Sep 17 00:00:00 2001 From: Juerg Hutter Date: Sat, 16 Jul 2022 19:47:41 +0200 Subject: [PATCH] Optionally switch off ADMM XC correction in TDDFPT kernel (#2205) * GAPW_XC bug fix for linear response * GAPW/GAPW_XC linear response refactoring * Prettify and update regtests * Remove filter and adjust regtest value * Pretty * Linear response for ADMM/GAPW * TDDFT/ADMM/GAPW excitation energies. More regtests. Some refactoring. * Merge with upstream * Optionally switch off ADMM XC correction in TDDFPT kernel --- src/cp_control_types.F | 2 + src/cp_control_utils.F | 1 + src/input_cp2k_properties_dft.F | 8 + src/qs_tddfpt2_eigensolver.F | 3 +- src/qs_tddfpt2_fhxc.F | 211 +++++++++--------- src/qs_tddfpt2_fhxc_forces.F | 2 +- src/qs_tddfpt2_methods.F | 24 +- tests/QS/regtest-debug-1/TEST_FILES | 1 - tests/QS/regtest-debug-2/TEST_FILES | 1 + .../h2o_admm_gapw.inp | 0 tests/QS/regtest-debug-4/TEST_FILES | 1 + tests/QS/regtest-debug-4/h2o_dip12.inp | 96 ++++++++ tests/QS/regtest-tddfpt-admm/TEST_FILES | 11 + tests/QS/regtest-tddfpt-admm/h2o_a01.inp | 107 +++++++++ tests/QS/regtest-tddfpt-admm/h2o_a02.inp | 103 +++++++++ tests/QS/regtest-tddfpt-admm/h2o_a03.inp | 103 +++++++++ tests/QS/regtest-tddfpt-admm/h2o_a04.inp | 103 +++++++++ tests/TEST_DIRS | 1 + 18 files changed, 664 insertions(+), 114 deletions(-) rename tests/QS/{regtest-debug-1 => regtest-debug-2}/h2o_admm_gapw.inp (100%) create mode 100644 tests/QS/regtest-debug-4/h2o_dip12.inp create mode 100644 tests/QS/regtest-tddfpt-admm/TEST_FILES create mode 100644 tests/QS/regtest-tddfpt-admm/h2o_a01.inp create mode 100644 tests/QS/regtest-tddfpt-admm/h2o_a02.inp create mode 100644 tests/QS/regtest-tddfpt-admm/h2o_a03.inp create mode 100644 tests/QS/regtest-tddfpt-admm/h2o_a04.inp diff --git a/src/cp_control_types.F b/src/cp_control_types.F index 74c823b28e..10691f1829 100644 --- a/src/cp_control_types.F +++ b/src/cp_control_types.F @@ -475,6 +475,8 @@ MODULE cp_control_types INTEGER :: auto_basis_p_lri_aux = 1 !> use symmetric definition of ADMM Kernel correction LOGICAL :: admm_symm + !> Use/Ignore possible ADMM Kernel XC correction + LOGICAL :: admm_xc_correction ! ! DIPOLE_MOMENTS subsection ! diff --git a/src/cp_control_utils.F b/src/cp_control_utils.F index b3e201367e..57a615eac7 100644 --- a/src/cp_control_utils.F +++ b/src/cp_control_utils.F @@ -1282,6 +1282,7 @@ CONTAINS CALL section_vals_val_get(t_section, "RKS_TRIPLETS", l_val=t_control%rks_triplets) CALL section_vals_val_get(t_section, "DO_LRIGPW", l_val=t_control%do_lrigpw) CALL section_vals_val_get(t_section, "ADMM_KERNEL_CORRECTION_SYMMETRIC", l_val=t_control%admm_symm) + CALL section_vals_val_get(t_section, "ADMM_KERNEL_XC_CORRECTION", l_val=t_control%admm_xc_correction) ! read automatically generated auxiliary basis for LRI CALL section_vals_val_get(t_section, "AUTO_BASIS", n_rep_val=nrep) diff --git a/src/input_cp2k_properties_dft.F b/src/input_cp2k_properties_dft.F index 7b236a18f9..7605a04a64 100644 --- a/src/input_cp2k_properties_dft.F +++ b/src/input_cp2k_properties_dft.F @@ -1386,6 +1386,14 @@ CONTAINS CALL section_add_keyword(section, keyword) CALL keyword_release(keyword) + CALL keyword_create(keyword, __LOCATION__, name="ADMM_KERNEL_XC_CORRECTION", & + description="Use/Ignore ADMM correction xc functional for TD kernel."// & + "XC correction functional is defined in ground state XC section.", & + n_var=1, type_of_var=logical_t, & + default_l_val=.TRUE., lone_keyword_l_val=.TRUE.) + CALL section_add_keyword(section, keyword) + CALL keyword_release(keyword) + CALL keyword_create(keyword, __LOCATION__, name="ADMM_KERNEL_CORRECTION_SYMMETRIC", & description="ADMM correction functional in kernel is applied symmetrically."// & "Original implementation is using a non-symmetric formula.", & diff --git a/src/qs_tddfpt2_eigensolver.F b/src/qs_tddfpt2_eigensolver.F index d05d6c4ad2..2ae9754c22 100644 --- a/src/qs_tddfpt2_eigensolver.F +++ b/src/qs_tddfpt2_eigensolver.F @@ -364,7 +364,8 @@ CONTAINS ! full TDDFPT kernel CALL fhxc_kernel(Aop_evects, evects, is_rks_triplets, do_hfx, do_admm, qs_env, & kernel_env%full_kernel, kernel_env_admm_aux, sub_env, work_matrices, & - tddfpt_control%admm_symm, do_lri_response) + tddfpt_control%admm_symm, tddfpt_control%admm_xc_correction, & + do_lri_response) ELSE IF (tddfpt_control%kernel == tddfpt_kernel_stda) THEN ! sTDA kernel CALL stda_kernel(Aop_evects, evects, is_rks_triplets, qs_env, tddfpt_control%stda_control, & diff --git a/src/qs_tddfpt2_fhxc.F b/src/qs_tddfpt2_fhxc.F index 853be8b7f7..a1a5e7db2a 100644 --- a/src/qs_tddfpt2_fhxc.F +++ b/src/qs_tddfpt2_fhxc.F @@ -89,6 +89,7 @@ CONTAINS !> \param sub_env parallel (sub)group environment !> \param work_matrices collection of work matrices (modified on exit) !> \param admm_symm use symmetric definition of ADMM kernel correction +!> \param admm_xc_correction use ADMM XC kernel correction !> \param do_lrigpw ... !> \par History !> * 06.2016 created [Sergey Chulkov] @@ -97,14 +98,14 @@ CONTAINS ! ************************************************************************************************** SUBROUTINE fhxc_kernel(Aop_evects, evects, is_rks_triplets, & do_hfx, do_admm, qs_env, kernel_env, kernel_env_admm_aux, & - sub_env, work_matrices, admm_symm, do_lrigpw) + sub_env, work_matrices, admm_symm, admm_xc_correction, do_lrigpw) TYPE(cp_fm_p_type), DIMENSION(:, :) :: Aop_evects, evects LOGICAL, INTENT(in) :: is_rks_triplets, do_hfx, do_admm TYPE(qs_environment_type), POINTER :: qs_env TYPE(full_kernel_env_type), POINTER :: kernel_env, kernel_env_admm_aux TYPE(tddfpt_subgroup_env_type), INTENT(in) :: sub_env TYPE(tddfpt_work_matrices), INTENT(inout) :: work_matrices - LOGICAL, INTENT(in) :: admm_symm, do_lrigpw + LOGICAL, INTENT(in) :: admm_symm, admm_xc_correction, do_lrigpw CHARACTER(LEN=*), PARAMETER :: routineN = 'fhxc_kernel' @@ -268,111 +269,113 @@ CONTAINS END IF ! ADMM correction - IF (do_admm .AND. dft_control%admm_control%aux_exch_func /= do_admm_aux_exch_func_none) THEN - CALL tddfpt_construct_aux_fit_density(rho_orb_struct=work_matrices%rho_orb_struct_sub, & - rho_aux_fit_struct=work_matrices%rho_aux_fit_struct_sub, & - local_rho_set=work_matrices%local_rho_set_admm, & - qs_env=qs_env, sub_env=sub_env, & - wfm_rho_orb=work_matrices%rho_ao_orb_fm_sub, & - wfm_rho_aux_fit=work_matrices%rho_ao_aux_fit_fm_sub, & - wfm_aux_orb=work_matrices%wfm_aux_orb_sub) - ! - C_{HF} d^{2}E_{x, ADMM}^{DFT}[\hat{\rho}] / d\hat{\rho}^2 - IF (admm_symm) THEN - CALL dbcsr_get_info(rho_ia_ao_aux_fit(1)%matrix, row_blk_size=blk_sizes) - ALLOCATE (A_xc_munu_sub(nspins)) - DO ispin = 1, nspins - ALLOCATE (A_xc_munu_sub(ispin)%matrix) - CALL dbcsr_create(matrix=A_xc_munu_sub(ispin)%matrix, name="ADMM_XC", & - dist=sub_env%dbcsr_dist, matrix_type=dbcsr_type_symmetric, & - row_blk_size=blk_sizes, col_blk_size=blk_sizes, nze=0) - CALL cp_dbcsr_alloc_block_from_nbl(A_xc_munu_sub(ispin)%matrix, sub_env%sab_aux_fit) - CALL dbcsr_set(A_xc_munu_sub(ispin)%matrix, 0.0_dp) - END DO + IF (do_admm .AND. admm_xc_correction) THEN + IF (dft_control%admm_control%aux_exch_func /= do_admm_aux_exch_func_none) THEN + CALL tddfpt_construct_aux_fit_density(rho_orb_struct=work_matrices%rho_orb_struct_sub, & + rho_aux_fit_struct=work_matrices%rho_aux_fit_struct_sub, & + local_rho_set=work_matrices%local_rho_set_admm, & + qs_env=qs_env, sub_env=sub_env, & + wfm_rho_orb=work_matrices%rho_ao_orb_fm_sub, & + wfm_rho_aux_fit=work_matrices%rho_ao_aux_fit_fm_sub, & + wfm_aux_orb=work_matrices%wfm_aux_orb_sub) + ! - C_{HF} d^{2}E_{x, ADMM}^{DFT}[\hat{\rho}] / d\hat{\rho}^2 + IF (admm_symm) THEN + CALL dbcsr_get_info(rho_ia_ao_aux_fit(1)%matrix, row_blk_size=blk_sizes) + ALLOCATE (A_xc_munu_sub(nspins)) + DO ispin = 1, nspins + ALLOCATE (A_xc_munu_sub(ispin)%matrix) + CALL dbcsr_create(matrix=A_xc_munu_sub(ispin)%matrix, name="ADMM_XC", & + dist=sub_env%dbcsr_dist, matrix_type=dbcsr_type_symmetric, & + row_blk_size=blk_sizes, col_blk_size=blk_sizes, nze=0) + CALL cp_dbcsr_alloc_block_from_nbl(A_xc_munu_sub(ispin)%matrix, sub_env%sab_aux_fit) + CALL dbcsr_set(A_xc_munu_sub(ispin)%matrix, 0.0_dp) + END DO - CALL pw_env_get(sub_env%pw_env, auxbas_pw_pool=auxbas_pw_pool) - ALLOCATE (V_rspace_sub(nspins)) - DO ispin = 1, nspins - NULLIFY (V_rspace_sub(ispin)%pw) - CALL pw_pool_create_pw(auxbas_pw_pool, V_rspace_sub(ispin)%pw, & - use_data=REALDATA3D, in_space=REALSPACE) - CALL pw_zero(V_rspace_sub(ispin)%pw) - END DO + CALL pw_env_get(sub_env%pw_env, auxbas_pw_pool=auxbas_pw_pool) + ALLOCATE (V_rspace_sub(nspins)) + DO ispin = 1, nspins + NULLIFY (V_rspace_sub(ispin)%pw) + CALL pw_pool_create_pw(auxbas_pw_pool, V_rspace_sub(ispin)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + CALL pw_zero(V_rspace_sub(ispin)%pw) + END DO - IF (admm_env%do_gapw) THEN - basis_type = "AUX_FIT_SOFT" - task_list => sub_env%task_list_aux_fit_soft + IF (admm_env%do_gapw) THEN + basis_type = "AUX_FIT_SOFT" + task_list => sub_env%task_list_aux_fit_soft + ELSE + basis_type = "AUX_FIT" + task_list => sub_env%task_list_aux_fit + END IF + + CALL tddfpt_apply_xc(A_ia_rspace=V_rspace_sub, & + kernel_env=kernel_env_admm_aux, & + rho_ia_struct=work_matrices%rho_aux_fit_struct_sub, & + is_rks_triplets=is_rks_triplets, pw_env=sub_env%pw_env, & + work_v_xc=work_matrices%wpw_rspace_sub, & + work_v_xc_tau=work_matrices%wpw_tau_rspace_sub) + DO ispin = 1, nspins + CALL pw_scale(V_rspace_sub(ispin)%pw, V_rspace_sub(ispin)%pw%pw_grid%dvol) + CALL integrate_v_rspace(v_rspace=V_rspace_sub(ispin), & + hmat=A_xc_munu_sub(ispin), & + qs_env=qs_env, calculate_forces=.FALSE., & + pw_env_external=sub_env%pw_env, & + basis_type=basis_type, & + task_list_external=task_list) + END DO + IF (admm_env%do_gapw) THEN + rho_atom_set => sub_env%local_rho_set_admm%rho_atom_set + rho1_atom_set => work_matrices%local_rho_set_admm%rho_atom_set + CALL calculate_xc_2nd_deriv_atom(rho_atom_set, rho1_atom_set, qs_env, & + kernel_env_admm_aux%xc_section, & + sub_env%para_env, do_tddfpt2=.TRUE., do_triplet=.FALSE., & + kind_set_external=admm_env%admm_gapw_env%admm_kind_set) + CALL update_ks_atom(qs_env, A_xc_munu_sub, rho_ia_ao_aux_fit, forces=.FALSE., tddft=.TRUE., & + rho_atom_external=rho1_atom_set, & + kind_set_external=admm_env%admm_gapw_env%admm_kind_set, & + oce_external=admm_env%admm_gapw_env%oce, & + sab_external=sub_env%sab_aux_fit) + END IF + ALLOCATE (dbwork) + CALL dbcsr_create(dbwork, template=work_matrices%A_ia_munu_sub(1)%matrix) + CALL cp_fm_create(work_aux_orb, & + matrix_struct=work_matrices%wfm_aux_orb_sub%matrix_struct) + CALL cp_fm_create(work_orb_orb, & + matrix_struct=work_matrices%rho_ao_orb_fm_sub%matrix_struct) + CALL cp_fm_get_info(work_aux_orb, nrow_global=nao_aux, ncol_global=nao) + DO ispin = 1, nspins + CALL cp_dbcsr_sm_fm_multiply(A_xc_munu_sub(ispin)%matrix, sub_env%admm_A, & + work_aux_orb, nao) + CALL cp_gemm('T', 'N', nao, nao, nao_aux, 1.0_dp, sub_env%admm_A, & + work_aux_orb, 0.0_dp, work_orb_orb) + CALL dbcsr_copy(dbwork, work_matrices%A_ia_munu_sub(1)%matrix) + CALL dbcsr_set(dbwork, 0.0_dp) + CALL copy_fm_to_dbcsr(work_orb_orb, dbwork, keep_sparsity=.TRUE.) + CALL dbcsr_add(work_matrices%A_ia_munu_sub(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp) + END DO + CALL dbcsr_release(dbwork) + DEALLOCATE (dbwork) + DO ispin = 1, nspins + CALL pw_pool_give_back_pw(auxbas_pw_pool, V_rspace_sub(ispin)%pw) + END DO + DEALLOCATE (V_rspace_sub) + CALL cp_fm_release(work_aux_orb) + CALL cp_fm_release(work_orb_orb) + DO ispin = 1, nspins + CALL dbcsr_deallocate_matrix(A_xc_munu_sub(ispin)%matrix) + END DO + DEALLOCATE (A_xc_munu_sub) ELSE - basis_type = "AUX_FIT" - task_list => sub_env%task_list_aux_fit - END IF - - CALL tddfpt_apply_xc(A_ia_rspace=V_rspace_sub, & - kernel_env=kernel_env_admm_aux, & - rho_ia_struct=work_matrices%rho_aux_fit_struct_sub, & - is_rks_triplets=is_rks_triplets, pw_env=sub_env%pw_env, & - work_v_xc=work_matrices%wpw_rspace_sub, & - work_v_xc_tau=work_matrices%wpw_tau_rspace_sub) - DO ispin = 1, nspins - CALL pw_scale(V_rspace_sub(ispin)%pw, V_rspace_sub(ispin)%pw%pw_grid%dvol) - CALL integrate_v_rspace(v_rspace=V_rspace_sub(ispin), & - hmat=A_xc_munu_sub(ispin), & - qs_env=qs_env, calculate_forces=.FALSE., & - pw_env_external=sub_env%pw_env, & - basis_type=basis_type, & - task_list_external=task_list) - END DO - IF (admm_env%do_gapw) THEN - rho_atom_set => sub_env%local_rho_set_admm%rho_atom_set - rho1_atom_set => work_matrices%local_rho_set_admm%rho_atom_set - CALL calculate_xc_2nd_deriv_atom(rho_atom_set, rho1_atom_set, qs_env, & - kernel_env_admm_aux%xc_section, & - sub_env%para_env, do_tddfpt2=.TRUE., do_triplet=.FALSE., & - kind_set_external=admm_env%admm_gapw_env%admm_kind_set) - CALL update_ks_atom(qs_env, A_xc_munu_sub, rho_ia_ao_aux_fit, forces=.FALSE., tddft=.TRUE., & - rho_atom_external=rho1_atom_set, & - kind_set_external=admm_env%admm_gapw_env%admm_kind_set, & - oce_external=admm_env%admm_gapw_env%oce, & - sab_external=sub_env%sab_aux_fit) - END IF - ALLOCATE (dbwork) - CALL dbcsr_create(dbwork, template=work_matrices%A_ia_munu_sub(1)%matrix) - CALL cp_fm_create(work_aux_orb, & - matrix_struct=work_matrices%wfm_aux_orb_sub%matrix_struct) - CALL cp_fm_create(work_orb_orb, & - matrix_struct=work_matrices%rho_ao_orb_fm_sub%matrix_struct) - CALL cp_fm_get_info(work_aux_orb, nrow_global=nao_aux, ncol_global=nao) - DO ispin = 1, nspins - CALL cp_dbcsr_sm_fm_multiply(A_xc_munu_sub(ispin)%matrix, sub_env%admm_A, & - work_aux_orb, nao) - CALL cp_gemm('T', 'N', nao, nao, nao_aux, 1.0_dp, sub_env%admm_A, & - work_aux_orb, 0.0_dp, work_orb_orb) - CALL dbcsr_copy(dbwork, work_matrices%A_ia_munu_sub(1)%matrix) - CALL dbcsr_set(dbwork, 0.0_dp) - CALL copy_fm_to_dbcsr(work_orb_orb, dbwork, keep_sparsity=.TRUE.) - CALL dbcsr_add(work_matrices%A_ia_munu_sub(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp) - END DO - CALL dbcsr_release(dbwork) - DEALLOCATE (dbwork) - DO ispin = 1, nspins - CALL pw_pool_give_back_pw(auxbas_pw_pool, V_rspace_sub(ispin)%pw) - END DO - DEALLOCATE (V_rspace_sub) - CALL cp_fm_release(work_aux_orb) - CALL cp_fm_release(work_orb_orb) - DO ispin = 1, nspins - CALL dbcsr_deallocate_matrix(A_xc_munu_sub(ispin)%matrix) - END DO - DEALLOCATE (A_xc_munu_sub) - ELSE - CALL tddfpt_apply_xc(A_ia_rspace=work_matrices%A_ia_rspace_sub, & - kernel_env=kernel_env_admm_aux, & - rho_ia_struct=work_matrices%rho_aux_fit_struct_sub, & - is_rks_triplets=is_rks_triplets, pw_env=sub_env%pw_env, & - work_v_xc=work_matrices%wpw_rspace_sub, & - work_v_xc_tau=work_matrices%wpw_tau_rspace_sub) - IF (admm_env%do_gapw) THEN - CPWARN("GAPW/ADMM needs symmetric ADMM kernel") - CPABORT("GAPW/ADMM@TDDFT") + CALL tddfpt_apply_xc(A_ia_rspace=work_matrices%A_ia_rspace_sub, & + kernel_env=kernel_env_admm_aux, & + rho_ia_struct=work_matrices%rho_aux_fit_struct_sub, & + is_rks_triplets=is_rks_triplets, pw_env=sub_env%pw_env, & + work_v_xc=work_matrices%wpw_rspace_sub, & + work_v_xc_tau=work_matrices%wpw_tau_rspace_sub) + IF (admm_env%do_gapw) THEN + CPWARN("GAPW/ADMM needs symmetric ADMM kernel") + CPABORT("GAPW/ADMM@TDDFT") + END IF END IF END IF END IF diff --git a/src/qs_tddfpt2_fhxc_forces.F b/src/qs_tddfpt2_fhxc_forces.F index 48ec09542d..e2d580206e 100644 --- a/src/qs_tddfpt2_fhxc_forces.F +++ b/src/qs_tddfpt2_fhxc_forces.F @@ -406,7 +406,7 @@ CONTAINS END IF CALL qs_fgxc_release(ks_env, fxc_rho, fxc_tau, gxc_rho, gxc_tau) - IF (do_admm) THEN + IF (do_admm .AND. tddfpt_control%admm_xc_correction) THEN IF (dft_control%admm_control%aux_exch_func == do_admm_aux_exch_func_none) THEN ! nothing to do ELSE diff --git a/src/qs_tddfpt2_methods.F b/src/qs_tddfpt2_methods.F index ae8d9ac822..8fbaf71193 100644 --- a/src/qs_tddfpt2_methods.F +++ b/src/qs_tddfpt2_methods.F @@ -269,10 +269,17 @@ CONTAINS IF (tddfpt_control%kernel == tddfpt_kernel_full) THEN IF (do_admm) THEN ! Full kernel with ADMM - CALL create_kernel_env(kernel_env=full_kernel_env, & - rho_struct_sub=work_matrices%rho_orb_struct_sub, & - xc_section=admm_env%xc_section_primary, & - is_rks_triplets=tddfpt_control%rks_triplets, sub_env=sub_env) + IF (tddfpt_control%admm_xc_correction) THEN + CALL create_kernel_env(kernel_env=full_kernel_env, & + rho_struct_sub=work_matrices%rho_orb_struct_sub, & + xc_section=admm_env%xc_section_primary, & + is_rks_triplets=tddfpt_control%rks_triplets, sub_env=sub_env) + ELSE + CALL create_kernel_env(kernel_env=full_kernel_env, & + rho_struct_sub=work_matrices%rho_orb_struct_sub, & + xc_section=xc_section, & + is_rks_triplets=tddfpt_control%rks_triplets, sub_env=sub_env) + END IF CALL tddfpt_construct_aux_fit_density(rho_orb_struct=work_matrices%rho_orb_struct_sub, & rho_aux_fit_struct=work_matrices%rho_aux_fit_struct_sub, & @@ -869,12 +876,15 @@ CONTAINS CALL xc_write(log_unit, xc_section, lsd) IF (tddfpt_control%do_hfx) THEN IF (tddfpt_control%do_admm) THEN - WRITE (log_unit, "(T2,A,T62,A19)") "KERNEL|", "ADMM exact exchange" + WRITE (log_unit, "(T2,A,T62,A19)") "KERNEL|", "ADMM Exact Exchange" + IF (tddfpt_control%admm_xc_correction) THEN + WRITE (log_unit, "(T2,A,T60,A21)") "KERNEL|", "Apply ADMM Kernel XC Correction" + END IF IF (tddfpt_control%admm_symm) THEN - WRITE (log_unit, "(T2,A,T60,A21)") "KERNEL|", "symmetric ADMM kernel" + WRITE (log_unit, "(T2,A,T60,A21)") "KERNEL|", "Symmetric ADMM Kernel" END IF ELSE - WRITE (log_unit, "(T2,A,T67,A14)") "KERNEL|", "exact exchange" + WRITE (log_unit, "(T2,A,T67,A14)") "KERNEL|", "Exact Exchange" END IF END IF IF (tddfpt_control%do_lrigpw) THEN diff --git a/tests/QS/regtest-debug-1/TEST_FILES b/tests/QS/regtest-debug-1/TEST_FILES index c1092e4bfb..1c530d9e47 100644 --- a/tests/QS/regtest-debug-1/TEST_FILES +++ b/tests/QS/regtest-debug-1/TEST_FILES @@ -10,5 +10,4 @@ h2o_periodic.inp 87 1e-05 h2o_gga.inp 87 1e-05 0.165143521103E+02 h2o_gapw.inp 87 1e-05 0.170288288429E+02 h2o_gapw_xc.inp 87 1e-05 0.170142638188E+02 -h2o_admm_gapw.inp 87 1e-05 0.165349668089E+02 #EOF diff --git a/tests/QS/regtest-debug-2/TEST_FILES b/tests/QS/regtest-debug-2/TEST_FILES index 634c5d51e4..2eaa3f46d4 100644 --- a/tests/QS/regtest-debug-2/TEST_FILES +++ b/tests/QS/regtest-debug-2/TEST_FILES @@ -7,4 +7,5 @@ h2o_lri.inp 87 1e-05 h2o_pade_fd.inp 87 1e-05 0.168333363169E+02 h2o_hfx.inp 87 1e-05 0.155040875037E+02 h2o_hfx_admm.inp 87 1e-05 0.153251090463E+02 +h2o_admm_gapw.inp 87 1e-05 0.165349668089E+02 #EOF diff --git a/tests/QS/regtest-debug-1/h2o_admm_gapw.inp b/tests/QS/regtest-debug-2/h2o_admm_gapw.inp similarity index 100% rename from tests/QS/regtest-debug-1/h2o_admm_gapw.inp rename to tests/QS/regtest-debug-2/h2o_admm_gapw.inp diff --git a/tests/QS/regtest-debug-4/TEST_FILES b/tests/QS/regtest-debug-4/TEST_FILES index b654b2cec4..1a32e7c5da 100644 --- a/tests/QS/regtest-debug-4/TEST_FILES +++ b/tests/QS/regtest-debug-4/TEST_FILES @@ -16,4 +16,5 @@ h2o_dip09.inp 86 1e-09 h2o_dip10.inp 86 1e-09 0.150644266924E+00 h2o_dip11.inp 86 1e-09 0.804659694314E-01 h2o_dip11b.inp 86 1e-09 0.104678363910E+00 +h2o_dip12.inp 86 1e-09 -0.129459747287E+00 #EOF diff --git a/tests/QS/regtest-debug-4/h2o_dip12.inp b/tests/QS/regtest-debug-4/h2o_dip12.inp new file mode 100644 index 0000000000..56ef6f3df7 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip12.inp @@ -0,0 +1,96 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC T + ADMM_KERNEL_XC_CORRECTION F + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC PBEX + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EFIELD + &END + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 20 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 4.0 4.0 4.0 + PERIODIC NONE + &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 + &TOPOLOGY + &CENTER_COORDINATES + &END + &END + &KIND H + BASIS_SET DZV-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE DEBUG +&END GLOBAL +&DEBUG + DEBUG_FORCES .FALSE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .TRUE. + DEBUG_POLARIZABILITY .FALSE. + DE 0.0002 +&END + diff --git a/tests/QS/regtest-tddfpt-admm/TEST_FILES b/tests/QS/regtest-tddfpt-admm/TEST_FILES new file mode 100644 index 0000000000..6a1e62ab12 --- /dev/null +++ b/tests/QS/regtest-tddfpt-admm/TEST_FILES @@ -0,0 +1,11 @@ +# 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 +# e.g. 0 means do not compare anything, running is enough +# 1 compares the last total energy in the file +# for details see cp2k/tools/do_regtest +# +h2o_a01.inp 1 5.0E-11 -17.21071638924079 +h2o_a02.inp 1 5.0E-11 -17.20961421163643 +h2o_a03.inp 1 5.0E-11 -17.20804254307528 +h2o_a04.inp 1 5.0E-11 -17.20949405791527 +#EOF diff --git a/tests/QS/regtest-tddfpt-admm/h2o_a01.inp b/tests/QS/regtest-tddfpt-admm/h2o_a01.inp new file mode 100644 index 0000000000..b59b15e670 --- /dev/null +++ b/tests/QS/regtest-tddfpt-admm/h2o_a01.inp @@ -0,0 +1,107 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC F + ADMM_KERNEL_XC_CORRECTION F + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 2 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC PBEX + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 20 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 300 + REL_CUTOFF 60 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 4.0 4.0 4.0 + PERIODIC NONE + &END + &COORD + O 0.000000 0.000000 0.000000 + H 0.000000 -0.757136 0.580545 + H 0.000000 0.757136 0.580545 + &END COORD + &TOPOLOGY + &CENTER_COORDINATES + &END + &END + &KIND H + BASIS_SET DZV-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE GEO_OPT +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 1 + &END +&END +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH F + DE 0.0005 +&END + diff --git a/tests/QS/regtest-tddfpt-admm/h2o_a02.inp b/tests/QS/regtest-tddfpt-admm/h2o_a02.inp new file mode 100644 index 0000000000..8c8f278b43 --- /dev/null +++ b/tests/QS/regtest-tddfpt-admm/h2o_a02.inp @@ -0,0 +1,103 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC T + ADMM_KERNEL_XC_CORRECTION T + NSTATES 2 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC PBEX + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 20 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 300 + REL_CUTOFF 60 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 4.0 4.0 4.0 + PERIODIC NONE + &END + &COORD + O 0.000000 0.000000 0.000000 + H 0.000000 -0.757136 0.580545 + H 0.000000 0.757136 0.580545 + &END COORD + &TOPOLOGY + &CENTER_COORDINATES + &END + &END + &KIND H + BASIS_SET DZV-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE GEO_OPT +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 1 + &END +&END +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH F + DE 0.0005 +&END + diff --git a/tests/QS/regtest-tddfpt-admm/h2o_a03.inp b/tests/QS/regtest-tddfpt-admm/h2o_a03.inp new file mode 100644 index 0000000000..793810f8a1 --- /dev/null +++ b/tests/QS/regtest-tddfpt-admm/h2o_a03.inp @@ -0,0 +1,103 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC T + ADMM_KERNEL_XC_CORRECTION F + NSTATES 2 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC NONE + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 20 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 300 + REL_CUTOFF 60 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 4.0 4.0 4.0 + PERIODIC NONE + &END + &COORD + O 0.000000 0.000000 0.000000 + H 0.000000 -0.757136 0.580545 + H 0.000000 0.757136 0.580545 + &END COORD + &TOPOLOGY + &CENTER_COORDINATES + &END + &END + &KIND H + BASIS_SET DZV-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE GEO_OPT +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 1 + &END +&END +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH F + DE 0.0005 +&END + diff --git a/tests/QS/regtest-tddfpt-admm/h2o_a04.inp b/tests/QS/regtest-tddfpt-admm/h2o_a04.inp new file mode 100644 index 0000000000..a1cc582734 --- /dev/null +++ b/tests/QS/regtest-tddfpt-admm/h2o_a04.inp @@ -0,0 +1,103 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC T + ADMM_KERNEL_XC_CORRECTION F + NSTATES 2 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC PBEX + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 20 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 300 + REL_CUTOFF 60 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 4.0 4.0 4.0 + PERIODIC NONE + &END + &COORD + O 0.000000 0.000000 0.000000 + H 0.000000 -0.757136 0.580545 + H 0.000000 0.757136 0.580545 + &END COORD + &TOPOLOGY + &CENTER_COORDINATES + &END + &END + &KIND H + BASIS_SET DZV-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE GEO_OPT +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 1 + &END +&END +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH F + DE 0.0005 +&END + diff --git a/tests/TEST_DIRS b/tests/TEST_DIRS index f25191fe68..dd99c15c46 100644 --- a/tests/TEST_DIRS +++ b/tests/TEST_DIRS @@ -57,6 +57,7 @@ QS/regtest-cdft-hirshfeld SIRIUS/regtest-1 sirius QS/regtest-embed libint QS/regtest-pod +QS/regtest-tddfpt-admm libint QS/regtest-debug-1 QS/regtest-debug-2 libint QS/regtest-debug-3 libint