diff --git a/src/common/bibliography.F b/src/common/bibliography.F index e41fe4d082..57f34d6b7f 100644 --- a/src/common/bibliography.F +++ b/src/common/bibliography.F @@ -1982,8 +1982,8 @@ CONTAINS CALL add_reference(key=Kolafa2004, ISI_record=s2a( & "AU Kolafa, J", & - "TI Time-reversible always stable predictor-corrector method for "// & - "molecular dynamics of polarizable molecules", & + "TI Time-reversible always stable predictor-corrector method for ", & + " molecular dynamics of polarizable molecules", & "SO JOURNAL OF COMPUTATIONAL CHEMISTRY", & "SN 0192-8651", & "J9 J COMPUT CHEM", & diff --git a/src/cp2k_debug.F b/src/cp2k_debug.F index a708f87a69..0cd6511e88 100644 --- a/src/cp2k_debug.F +++ b/src/cp2k_debug.F @@ -407,14 +407,27 @@ CONTAINS WRITE (UNIT=iw, FMT="(T13,A1,T21,F16.8,T38,F16.8,T56,G12.3,T72,F9.3)") & ACHAR(119 + k), dipole_numer(k), dipole_moment(k), dd, derr ELSE + derr = 0.0_dp WRITE (UNIT=iw, FMT="(T13,A1,T21,F16.8,T38,F16.8,T56,G12.3)") & ACHAR(119 + k), dipole_numer(k), dipole_moment(k), dd END IF + err(k) = derr END DO WRITE (UNIT=iw, FMT="((T2,A))") & "DEBUG|=========================================================================" - WRITE (UNIT=iw, FMT="(T2,A,T61,E20.12)") ' DIPOLE : CheckSum =', SUM(dipole_moment) + WRITE (UNIT=iw, FMT="(T2,A,T61,E20.12)") 'DIPOLE : CheckSum =', SUM(dipole_moment) + IF (ANY(ABS(err(1:3)) > 0.1_dp)) THEN + message = "A mismatch between analytical and numerical dipoles "// & + "has been detected. Check the implementation of the "// & + "analytical dipole calculation" + IF (stop_on_mismatch) THEN + CPABORT(message) + ELSE + CPWARN(message) + END IF + END IF END IF + ELSE CALL cp_warn(__LOCATION__, "Debug of dipole moments only for Quickstep code available") END IF diff --git a/src/cp_control_types.F b/src/cp_control_types.F index af74af696c..7ed1861368 100644 --- a/src/cp_control_types.F +++ b/src/cp_control_types.F @@ -117,6 +117,7 @@ MODULE cp_control_types LOGICAL :: xb_interaction LOGICAL :: do_nonbonded LOGICAL :: coulomb_interaction + LOGICAL :: coulomb_lr LOGICAL :: tb3_interaction LOGICAL :: check_atomic_charges ! @@ -441,6 +442,9 @@ MODULE cp_control_types INTEGER :: nprocs !> type of kernel function/approximation to use INTEGER :: kernel + !> fro full kernel, do we have HFX/ADMM + LOGICAL :: do_hfx + LOGICAL :: do_admm !> options used in sTDA calculation (Kernel) TYPE(stda_control_type) :: stda_control !> algorithm to correct orbital energies @@ -458,6 +462,8 @@ MODULE cp_control_types LOGICAL :: is_restart !> compute triplet excited states using spin-unpolarised molecular orbitals LOGICAL :: rks_triplets + !> use symmetric definition of ADMM Kernel correction + LOGICAL :: admm_symm ! ! DIPOLE_MOMENTS subsection ! diff --git a/src/cp_control_utils.F b/src/cp_control_utils.F index 8dce157486..8687440007 100644 --- a/src/cp_control_utils.F +++ b/src/cp_control_utils.F @@ -1157,6 +1157,8 @@ CONTAINS ! For debug purposes CALL section_vals_val_get(xtb_section, "COULOMB_INTERACTION", & l_val=qs_control%xtb_control%coulomb_interaction) + CALL section_vals_val_get(xtb_section, "COULOMB_LR", & + l_val=qs_control%xtb_control%coulomb_lr) CALL section_vals_val_get(xtb_section, "TB3_INTERACTION", & l_val=qs_control%xtb_control%tb3_interaction) ! Check for bad atomic charges @@ -1265,6 +1267,7 @@ CONTAINS CALL section_vals_val_get(t_section, "RESTART", l_val=t_control%is_restart) CALL section_vals_val_get(t_section, "RKS_TRIPLETS", l_val=t_control%rks_triplets) + CALL section_vals_val_get(t_section, "ADMM_KERNEL_CORRECTION_SYMMETRIC", l_val=t_control%admm_symm) IF (t_control%conv < 0) & t_control%conv = ABS(t_control%conv) diff --git a/src/ec_env_types.F b/src/ec_env_types.F index 74e541360c..8e02236a5c 100644 --- a/src/ec_env_types.F +++ b/src/ec_env_types.F @@ -13,6 +13,8 @@ ! ************************************************************************************************** MODULE ec_env_types USE cp_dbcsr_operations, ONLY: dbcsr_deallocate_matrix_set + USE cp_fm_types, ONLY: cp_fm_p_type,& + cp_fm_release USE dbcsr_api, ONLY: dbcsr_p_type USE dm_ls_scf_types, ONLY: ls_scf_env_type,& ls_scf_release @@ -22,6 +24,8 @@ MODULE ec_env_types pw_release USE qs_dispersion_types, ONLY: qs_dispersion_release,& qs_dispersion_type + USE qs_force_types, ONLY: deallocate_qs_force,& + qs_force_type USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type,& release_neighbor_list_sets USE qs_p_env_types, ONLY: p_env_release,& @@ -66,6 +70,8 @@ MODULE ec_env_types REAL(KIND=dp) :: etotal REAL(KIND=dp) :: eband, exc, ehartree, vhxc REAL(KIND=dp) :: edispersion, efield_nuclear + ! forces + TYPE(qs_force_type), DIMENSION(:), POINTER :: force => Null() ! full neighbor lists and corresponding task list TYPE(neighbor_list_set_p_type), & DIMENSION(:), POINTER :: sab_orb, sac_ppl, sap_ppnl @@ -85,6 +91,7 @@ MODULE ec_env_types TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: mao_coef ! CP equations TYPE(qs_p_env_type), POINTER :: p_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: cpmos TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_hz, matrix_z, matrix_wz, z_admm ! potentials from input density TYPE(pw_p_type), POINTER :: vh_rspace @@ -115,6 +122,8 @@ CONTAINS CALL release_neighbor_list_sets(ec_env%sab_orb) CALL release_neighbor_list_sets(ec_env%sac_ppl) CALL release_neighbor_list_sets(ec_env%sap_ppnl) + ! forces + IF (ASSOCIATED(ec_env%force)) CALL deallocate_qs_force(ec_env%force) ! operator matrices IF (ASSOCIATED(ec_env%matrix_ks)) CALL dbcsr_deallocate_matrix_set(ec_env%matrix_ks) IF (ASSOCIATED(ec_env%matrix_h)) CALL dbcsr_deallocate_matrix_set(ec_env%matrix_h) @@ -131,6 +140,14 @@ CONTAINS IF (ASSOCIATED(ec_env%dispersion_env)) THEN CALL qs_dispersion_release(ec_env%dispersion_env) END IF + ! CP env + IF (ASSOCIATED(ec_env%cpmos)) THEN + DO iab = 1, SIZE(ec_env%cpmos) + CALL cp_fm_release(ec_env%cpmos(iab)%matrix) + END DO + DEALLOCATE (ec_env%cpmos) + NULLIFY (ec_env%cpmos) + END IF IF (ASSOCIATED(ec_env%matrix_z)) CALL dbcsr_deallocate_matrix_set(ec_env%matrix_z) IF (ASSOCIATED(ec_env%matrix_hz)) CALL dbcsr_deallocate_matrix_set(ec_env%matrix_hz) diff --git a/src/ec_environment.F b/src/ec_environment.F index 52b353b17b..087c45bc9d 100644 --- a/src/ec_environment.F +++ b/src/ec_environment.F @@ -104,7 +104,8 @@ CONTAINS SUBROUTINE init_ec_env(qs_env, ec_env, dft_section, ec_section) TYPE(qs_environment_type), POINTER :: qs_env TYPE(energy_correction_type), POINTER :: ec_env - TYPE(section_vals_type), OPTIONAL, POINTER :: dft_section, ec_section + TYPE(section_vals_type), POINTER :: dft_section + TYPE(section_vals_type), OPTIONAL, POINTER :: ec_section INTEGER :: ikind, maxlgto, nkind, unit_nr LOGICAL :: explicit @@ -126,8 +127,10 @@ CONTAINS NULLIFY (ec_env%matrix_t, ec_env%matrix_p, ec_env%matrix_w) NULLIFY (ec_env%task_list) NULLIFY (ec_env%mao_coef) + NULLIFY (ec_env%force) NULLIFY (ec_env%dispersion_env) NULLIFY (ec_env%xc_section) + NULLIFY (ec_env%cpmos) NULLIFY (ec_env%matrix_z) NULLIFY (ec_env%matrix_hz) NULLIFY (ec_env%matrix_wz) @@ -140,140 +143,145 @@ CONTAINS ec_env%should_update = .TRUE. ec_env%mao = .FALSE. - ! get a useful output_unit - logger => cp_get_default_logger() - IF (logger%para_env%ionode) THEN - unit_nr = cp_logger_get_default_unit_nr(logger, local=.TRUE.) - ELSE - unit_nr = -1 - ENDIF + IF (qs_env%energy_correction) THEN - CALL section_vals_val_get(ec_section, "ALGORITHM", & - i_val=ec_env%ks_solver) - CALL section_vals_val_get(ec_section, "ENERGY_FUNCTIONAL", & - i_val=ec_env%energy_functional) - CALL section_vals_val_get(ec_section, "FACTORIZATION", & - i_val=ec_env%factorization) - CALL section_vals_val_get(ec_section, "OT_INITIAL_GUESS", & - i_val=ec_env%ec_initial_guess) - CALL section_vals_val_get(ec_section, "EPS_DEFAULT", & - r_val=ec_env%eps_default) - CALL section_vals_val_get(ec_section, "HARRIS_BASIS", & - c_val=ec_env%basis) - CALL section_vals_val_get(ec_section, "MAO", & - l_val=ec_env%mao) - CALL section_vals_val_get(ec_section, "MAO_MAX_ITER", & - i_val=ec_env%mao_max_iter) - CALL section_vals_val_get(ec_section, "MAO_EPS_GRAD", & - r_val=ec_env%mao_eps_grad) - ! Skip EC calculation if ground-state calculation did not converge - CALL section_vals_val_get(ec_section, "SKIP_EC", & - l_val=ec_env%skip_ec) + CPASSERT(PRESENT(ec_section)) + ! get a useful output_unit + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + unit_nr = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + unit_nr = -1 + ENDIF - ec_env%do_skip = .FALSE. + CALL section_vals_val_get(ec_section, "ALGORITHM", & + i_val=ec_env%ks_solver) + CALL section_vals_val_get(ec_section, "ENERGY_FUNCTIONAL", & + i_val=ec_env%energy_functional) + CALL section_vals_val_get(ec_section, "FACTORIZATION", & + i_val=ec_env%factorization) + CALL section_vals_val_get(ec_section, "OT_INITIAL_GUESS", & + i_val=ec_env%ec_initial_guess) + CALL section_vals_val_get(ec_section, "EPS_DEFAULT", & + r_val=ec_env%eps_default) + CALL section_vals_val_get(ec_section, "HARRIS_BASIS", & + c_val=ec_env%basis) + CALL section_vals_val_get(ec_section, "MAO", & + l_val=ec_env%mao) + CALL section_vals_val_get(ec_section, "MAO_MAX_ITER", & + i_val=ec_env%mao_max_iter) + CALL section_vals_val_get(ec_section, "MAO_EPS_GRAD", & + r_val=ec_env%mao_eps_grad) + ! Skip EC calculation if ground-state calculation did not converge + CALL section_vals_val_get(ec_section, "SKIP_EC", & + l_val=ec_env%skip_ec) - ! set basis - CALL get_qs_env(qs_env, qs_kind_set=qs_kind_set, nkind=nkind) - CALL uppercase(ec_env%basis) - SELECT CASE (ec_env%basis) - CASE ("ORBITAL") - DO ikind = 1, nkind - qs_kind => qs_kind_set(ikind) - CALL get_qs_kind(qs_kind=qs_kind, basis_set=basis_set, basis_type="ORB") - IF (ASSOCIATED(basis_set)) THEN + ec_env%do_skip = .FALSE. + + ! set basis + CALL get_qs_env(qs_env, qs_kind_set=qs_kind_set, nkind=nkind) + CALL uppercase(ec_env%basis) + SELECT CASE (ec_env%basis) + CASE ("ORBITAL") + DO ikind = 1, nkind + qs_kind => qs_kind_set(ikind) + CALL get_qs_kind(qs_kind=qs_kind, basis_set=basis_set, basis_type="ORB") + IF (ASSOCIATED(basis_set)) THEN + NULLIFY (harris_basis) + CALL get_qs_kind(qs_kind=qs_kind, basis_set=harris_basis, basis_type="HARRIS") + IF (ASSOCIATED(harris_basis)) THEN + CALL remove_basis_from_container(qs_kind%basis_sets, basis_type="HARRIS") + END IF + NULLIFY (harris_basis) + CALL copy_gto_basis_set(basis_set, harris_basis) + CALL add_basis_set_to_container(qs_kind%basis_sets, harris_basis, "HARRIS") + END IF + END DO + CASE ("PRIMITIVE") + DO ikind = 1, nkind + qs_kind => qs_kind_set(ikind) + CALL get_qs_kind(qs_kind=qs_kind, basis_set=basis_set, basis_type="ORB") + IF (ASSOCIATED(basis_set)) THEN + NULLIFY (harris_basis) + CALL get_qs_kind(qs_kind=qs_kind, basis_set=harris_basis, basis_type="HARRIS") + IF (ASSOCIATED(harris_basis)) THEN + CALL remove_basis_from_container(qs_kind%basis_sets, basis_type="HARRIS") + END IF + NULLIFY (harris_basis) + CALL create_primitive_basis_set(basis_set, harris_basis) + CALL get_qs_env(qs_env, dft_control=dft_control) + eps_pgf_orb = dft_control%qs_control%eps_pgf_orb + CALL init_interaction_radii_orb_basis(harris_basis, eps_pgf_orb) + harris_basis%kind_radius = basis_set%kind_radius + CALL add_basis_set_to_container(qs_kind%basis_sets, harris_basis, "HARRIS") + END IF + END DO + CASE ("HARRIS") + DO ikind = 1, nkind + qs_kind => qs_kind_set(ikind) NULLIFY (harris_basis) CALL get_qs_kind(qs_kind=qs_kind, basis_set=harris_basis, basis_type="HARRIS") - IF (ASSOCIATED(harris_basis)) THEN - CALL remove_basis_from_container(qs_kind%basis_sets, basis_type="HARRIS") + IF (.NOT. ASSOCIATED(harris_basis)) THEN + CPWARN("Harris Basis not defined for all types of atoms.") END IF - NULLIFY (harris_basis) - CALL copy_gto_basis_set(basis_set, harris_basis) - CALL add_basis_set_to_container(qs_kind%basis_sets, harris_basis, "HARRIS") - END IF - END DO - CASE ("PRIMITIVE") - DO ikind = 1, nkind - qs_kind => qs_kind_set(ikind) - CALL get_qs_kind(qs_kind=qs_kind, basis_set=basis_set, basis_type="ORB") - IF (ASSOCIATED(basis_set)) THEN - NULLIFY (harris_basis) - CALL get_qs_kind(qs_kind=qs_kind, basis_set=harris_basis, basis_type="HARRIS") - IF (ASSOCIATED(harris_basis)) THEN - CALL remove_basis_from_container(qs_kind%basis_sets, basis_type="HARRIS") - END IF - NULLIFY (harris_basis) - CALL create_primitive_basis_set(basis_set, harris_basis) - CALL get_qs_env(qs_env, dft_control=dft_control) - eps_pgf_orb = dft_control%qs_control%eps_pgf_orb - CALL init_interaction_radii_orb_basis(harris_basis, eps_pgf_orb) - harris_basis%kind_radius = basis_set%kind_radius - CALL add_basis_set_to_container(qs_kind%basis_sets, harris_basis, "HARRIS") - END IF - END DO - CASE ("HARRIS") - DO ikind = 1, nkind - qs_kind => qs_kind_set(ikind) - NULLIFY (harris_basis) - CALL get_qs_kind(qs_kind=qs_kind, basis_set=harris_basis, basis_type="HARRIS") - IF (.NOT. ASSOCIATED(harris_basis)) THEN - CPWARN("Harris Basis not defined for all types of atoms.") - END IF - END DO - CASE DEFAULT - CPABORT("Unknown basis set for energy correction (Harris functional)") - END SELECT - ! - CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto, basis_type="HARRIS") - CALL init_orbital_pointers(maxlgto + 1) - ! set functional - SELECT CASE (ec_env%energy_functional) - CASE (ec_functional_harris) - ec_env%ec_name = "Harris" - CASE DEFAULT - CPABORT("unknown energy correction") - END SELECT - ! select the XC section - NULLIFY (xc_section) - xc_section => section_vals_get_subs_vals(dft_section, "XC") - section1 => section_vals_get_subs_vals(ec_section, "XC") - section2 => section_vals_get_subs_vals(ec_section, "XC%XC_FUNCTIONAL") - CALL section_vals_get(section2, explicit=explicit) - IF (explicit) THEN - CALL xc_functionals_expand(section2, section1) - ec_env%xc_section => section1 - ELSE - ec_env%xc_section => xc_section - END IF - ! dispersion - ALLOCATE (dispersion_env) - NULLIFY (xc_section) - xc_section => ec_env%xc_section - CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, para_env=para_env) - CALL qs_dispersion_env_set(dispersion_env, xc_section) - IF (dispersion_env%type == xc_vdw_fun_pairpot) THEN - NULLIFY (pp_section) - pp_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%PAIR_POTENTIAL") - CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env) - ELSE IF (dispersion_env%type == xc_vdw_fun_nonloc) THEN - NULLIFY (nl_section) - nl_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%NON_LOCAL") - CALL qs_dispersion_nonloc_init(dispersion_env, para_env) - END IF - ec_env%dispersion_env => dispersion_env + END DO + CASE DEFAULT + CPABORT("Unknown basis set for energy correction (Harris functional)") + END SELECT + ! + CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto, basis_type="HARRIS") + CALL init_orbital_pointers(maxlgto + 1) + ! set functional + SELECT CASE (ec_env%energy_functional) + CASE (ec_functional_harris) + ec_env%ec_name = "Harris" + CASE DEFAULT + CPABORT("unknown energy correction") + END SELECT + ! select the XC section + NULLIFY (xc_section) + xc_section => section_vals_get_subs_vals(dft_section, "XC") + section1 => section_vals_get_subs_vals(ec_section, "XC") + section2 => section_vals_get_subs_vals(ec_section, "XC%XC_FUNCTIONAL") + CALL section_vals_get(section2, explicit=explicit) + IF (explicit) THEN + CALL xc_functionals_expand(section2, section1) + ec_env%xc_section => section1 + ELSE + ec_env%xc_section => xc_section + END IF + ! dispersion + ALLOCATE (dispersion_env) + NULLIFY (xc_section) + xc_section => ec_env%xc_section + CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, para_env=para_env) + CALL qs_dispersion_env_set(dispersion_env, xc_section) + IF (dispersion_env%type == xc_vdw_fun_pairpot) THEN + NULLIFY (pp_section) + pp_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%PAIR_POTENTIAL") + CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env) + ELSE IF (dispersion_env%type == xc_vdw_fun_nonloc) THEN + NULLIFY (nl_section) + nl_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%NON_LOCAL") + CALL qs_dispersion_nonloc_init(dispersion_env, para_env) + END IF + ec_env%dispersion_env => dispersion_env - ! Initialize Harris LS solver environment - ec_env%use_ls_solver = .FALSE. - ec_env%use_ls_solver = (ec_env%ks_solver .EQ. ec_matrix_sign) & - .OR. (ec_env%ks_solver .EQ. ec_matrix_trs4) & - .OR. (ec_env%ks_solver .EQ. ec_matrix_tc2) + ! Initialize Harris LS solver environment + ec_env%use_ls_solver = .FALSE. + ec_env%use_ls_solver = (ec_env%ks_solver .EQ. ec_matrix_sign) & + .OR. (ec_env%ks_solver .EQ. ec_matrix_trs4) & + .OR. (ec_env%ks_solver .EQ. ec_matrix_tc2) - IF (ec_env%use_ls_solver) THEN - CALL ec_ls_create(qs_env, ec_env) - END IF + IF (ec_env%use_ls_solver) THEN + CALL ec_ls_create(qs_env, ec_env) + END IF + + ! Write input + IF (unit_nr > 0) THEN + CALL ec_write_input(ec_env, unit_nr) + END IF - ! Write input - IF (unit_nr > 0) THEN - CALL ec_write_input(ec_env, unit_nr) END IF END SUBROUTINE init_ec_env @@ -351,7 +359,7 @@ CONTAINS CALL section_vals_val_get(ec_section, "EPS_LANCZOS", r_val=ls_env%eps_lanczos) CALL section_vals_val_get(ec_section, "MAX_ITER_LANCZOS", i_val=ls_env%max_iter_lanczos) - SELECT CASE (qs_env%ec_env%ks_solver) + SELECT CASE (ec_env%ks_solver) CASE (ec_matrix_sign) ! S inverse required for Sign matrix algorithm, ! calculated either by Hotelling or multiplying S matrix sqrt inv @@ -511,7 +519,6 @@ CONTAINS CPABORT("Unknown sqrt method.") END SELECT WRITE (unit_nr, '(T2,A,T61,I20)') "S sqrt order:", ls_env%s_sqrt_order - END IF SELECT CASE (ls_env%s_preconditioner_type) diff --git a/src/ec_orth_solver.F b/src/ec_orth_solver.F index 979c00084a..7360ae5c62 100644 --- a/src/ec_orth_solver.F +++ b/src/ec_orth_solver.F @@ -32,7 +32,8 @@ MODULE ec_orth_solver ls_s_sqrt_ns,& ls_s_sqrt_proot,& precond_mlp - USE input_section_types, ONLY: section_vals_get_subs_vals,& + USE input_section_types, ONLY: section_vals_get,& + section_vals_get_subs_vals,& section_vals_type,& section_vals_val_get USE iterate_matrix, ONLY: matrix_sqrt_Newton_Schulz,& @@ -1124,6 +1125,7 @@ CONTAINS CHARACTER(len=*), PARAMETER :: routineN = 'hessian_op2', routineP = moduleN//':'//routineN INTEGER :: handle, ispin, nspins + LOGICAL :: do_hfx REAL(KIND=dp) :: ekin_mol TYPE(cp_para_env_type), POINTER :: para_env TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_G, matrix_s, rho1_ao, rho_ao @@ -1136,7 +1138,7 @@ CONTAINS TYPE(pw_pool_p_type), DIMENSION(:), POINTER :: pw_pools TYPE(pw_pool_type), POINTER :: auxbas_pw_pool TYPE(qs_rho_type), POINTER :: rho - TYPE(section_vals_type), POINTER :: input, xc_section + TYPE(section_vals_type), POINTER :: hfx_section, input, xc_section CALL timeset(routineN, handle) @@ -1184,6 +1186,15 @@ CONTAINS NULLIFY (v_xc, xc_section) xc_section => section_vals_get_subs_vals(input, "DFT%XC") + ! No HFX allowed + hfx_section => section_vals_get_subs_vals(xc_section, "HF") + CALL section_vals_get(hfx_section, explicit=do_hfx) + IF (do_hfx) THEN + CALL cp_warn(__LOCATION__, "HFX not possible with AO based response solver. "// & + "Use the MO solver: RESPONSE_SOLVER/METOD MO_SOLVER") + CPABORT("hessian_op2@ec_orth_solver") + END IF + ! add xc-kernel CALL create_kernel(qs_env, & vxc=v_xc, & diff --git a/src/emd/rt_propagation_utils.F b/src/emd/rt_propagation_utils.F index eb465c1ef0..28bfca6b76 100644 --- a/src/emd/rt_propagation_utils.F +++ b/src/emd/rt_propagation_utils.F @@ -43,6 +43,7 @@ MODULE rt_propagation_utils USE mathconstants, ONLY: zero USE orbital_pointers, ONLY: ncoset USE particle_types, ONLY: particle_type + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_dftb_matrices, ONLY: build_dftb_overlap USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type @@ -51,7 +52,6 @@ MODULE rt_propagation_utils qs_ks_env_type USE qs_mo_io, ONLY: read_mo_set_from_restart,& read_rt_mos_from_restart - USE qs_mo_methods, ONLY: calculate_density_matrix USE qs_mo_types, ONLY: mo_set_p_type USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type USE qs_overlap, ONLY: build_overlap_matrix diff --git a/src/energy_corrections.F b/src/energy_corrections.F index 4195405c3f..38dbb64b07 100644 --- a/src/energy_corrections.F +++ b/src/energy_corrections.F @@ -124,6 +124,8 @@ MODULE energy_corrections USE qs_collocate_density, ONLY: calculate_rho_elec USE qs_core_energies, ONLY: calculate_ecore_overlap,& calculate_ptrace + USE qs_density_matrices, ONLY: calculate_density_matrix,& + calculate_w_matrix USE qs_dispersion_pairpot, ONLY: calculate_dispersion_pairpot USE qs_dispersion_types, ONLY: qs_dispersion_type USE qs_energy_types, ONLY: qs_energy_type @@ -139,11 +141,9 @@ MODULE energy_corrections get_qs_kind_set,& qs_kind_type USE qs_kinetic, ONLY: build_kinetic_matrix - USE qs_ks_methods, ONLY: calc_rho_tot_gspace,& - calculate_w_matrix + USE qs_ks_methods, ONLY: calc_rho_tot_gspace USE qs_ks_types, ONLY: qs_ks_env_type - USE qs_mo_methods, ONLY: calculate_density_matrix,& - calculate_subspace_eigenvalues,& + USE qs_mo_methods, ONLY: calculate_subspace_eigenvalues,& make_basis_sm USE qs_mo_types, ONLY: deallocate_mo_set,& get_mo_set,& @@ -185,7 +185,7 @@ MODULE energy_corrections CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'energy_corrections' - LOGICAL, PARAMETER :: debug_forces = .FALSE. + LOGICAL, PARAMETER :: debug_forces = .TRUE. LOGICAL, PARAMETER :: debug_stress = .FALSE. PUBLIC :: energy_correction @@ -268,11 +268,9 @@ CONTAINS ! IF (ec_env%should_update) THEN energy%nonscf_correction = ec_env%etotal - energy%total - energy%total = energy%total + energy%nonscf_correction - CALL evaluate_ec_core_matrix_traces(qs_env, ec_env) + energy%total = ec_env%etotal END IF - CASE DEFAULT CPABORT("unknown energy correction") END SELECT @@ -390,8 +388,10 @@ CONTAINS vadmm_rspace=ec_env%vadmm_rspace, & matrix_hz=ec_env%matrix_hz, & matrix_pz=ec_env%matrix_z, & + matrix_pz_admm=ec_env%z_admm, & matrix_wz=ec_env%matrix_wz, & zehartree=ec_env%ehartree, & + p_env=ec_env%p_env, & zexc=ec_env%exc) CALL ec_properties(qs_env, ec_env) @@ -461,7 +461,11 @@ CONTAINS CALL timeset(routineN, handle) logger => cp_get_default_logger() - iounit = cp_logger_get_default_unit_nr(logger) + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF ! no k-points possible CALL get_qs_env(qs_env=qs_env, & @@ -569,7 +573,11 @@ CONTAINS CALL timeset(routineN, handle) logger => cp_get_default_logger() - iounit = cp_logger_get_default_unit_nr(logger) + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF calculate_forces = .FALSE. @@ -711,7 +719,11 @@ CONTAINS CALL timeset(routineN, handle) logger => cp_get_default_logger() - iounit = cp_logger_get_default_unit_nr(logger) + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "ec_build_core_hamiltonian_force - START" @@ -771,7 +783,7 @@ CONTAINS sab_nl=sab_orb, calculate_forces=.TRUE., & matrixkp_p=ec_env%matrix_w) IF (debug_forces) THEN - fodeb(1:3) = fconv*(force(1)%overlap(1:3, 1) - fodeb(1:3)) + fodeb(1:3) = force(1)%overlap(1:3, 1) - fodeb(1:3) CALL mp_sum(fodeb, para_env%group) IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Wout*dS ", fodeb fodeb(1:3) = force(1)%kinetic(1:3, 1) @@ -919,13 +931,17 @@ CONTAINS TYPE(qs_force_type), DIMENSION(:), POINTER :: force TYPE(qs_ks_env_type), POINTER :: ks_env TYPE(qs_rho_type), POINTER :: rho - TYPE(section_vals_type), POINTER :: input, xc_section + TYPE(section_vals_type), POINTER :: xc_section TYPE(virial_type), POINTER :: virdeb, virial CALL timeset(routineN, handle) logger => cp_get_default_logger() - iounit = cp_logger_get_default_unit_nr(logger) + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF ! get all information on the electronic density NULLIFY (atomic_kind_set, blacs_env, cell, dft_control, force, ks_env, & @@ -1125,7 +1141,7 @@ CONTAINS ! Pulay force from Tr P_in (V_H(drho)+ Fxc(rho_in)*drho) ! RHS of CPKS equations: (V_H(drho)+ Fxc(rho_in)*drho)*C0 ! Fxc*drho term - CALL get_qs_env(qs_env, input=input) + NULLIFY (v_xc) xc_section => ec_env%xc_section IF (use_virial) virial%pv_xc = 0.0_dp @@ -1190,7 +1206,6 @@ CONTAINS WRITE (UNIT=iounit, FMT="(T2,A,T41,2(1X,ES19.11))") & 'STRESS| INT 2nd f_Hxc[dP]*Pin ', one_third_sum_diag(stdeb), det_3x3(stdeb) END IF - ! Stress-tensor 2nd derivative integral contribution IF (use_virial) THEN virial%pv_ehartree = virial%pv_ehartree + (virial%pv_virial - pv_loc) @@ -1919,7 +1934,6 @@ CONTAINS CALL build_neighbor_lists(sab_vdw, particle_set, atom2d, cell, pair_radius, & subcells=subcells, operator_type="PP", nlname="sab_vdw") dispersion_env%sab_vdw => sab_vdw - IF (dispersion_env%pp_type == vdw_pairpot_dftd3 .OR. & dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN ! Build the neighbor lists for coordination numbers as needed by the DFT-D3 method @@ -1938,7 +1952,7 @@ CONTAINS CALL atom2d_cleanup(atom2d) DEALLOCATE (atom2d) DEALLOCATE (orb_present, default_present, ppl_present, ppnl_present) - DEALLOCATE (c_radius, orb_radius, ppl_radius, ppnl_radius) + DEALLOCATE (orb_radius, ppl_radius, ppnl_radius, c_radius) DEALLOCATE (pair_radius) ! Task list @@ -1992,7 +2006,11 @@ CONTAINS rlab(3) = "Z" logger => cp_get_default_logger() - iounit = cp_logger_get_default_unit_nr(logger) + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF print_key => section_vals_get_subs_vals(section_vals=qs_env%input, & subsection_name="DFT%PRINT%MOMENTS") diff --git a/src/ewald_methods_tb.F b/src/ewald_methods_tb.F index 2726f8217c..df6603300a 100644 --- a/src/ewald_methods_tb.F +++ b/src/ewald_methods_tb.F @@ -65,7 +65,7 @@ MODULE ewald_methods_tb CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ewald_methods_tb' - PUBLIC :: tb_spme_evaluate, tb_ewald_overlap + PUBLIC :: tb_spme_evaluate, tb_ewald_overlap, tb_spme_zforce CONTAINS @@ -408,5 +408,173 @@ CONTAINS END SUBROUTINE tb_ewald_overlap +! ************************************************************************************************** +!> \brief ... +!> \param ewald_env ... +!> \param ewald_pw ... +!> \param particle_set ... +!> \param box ... +!> \param gmcharge ... +!> \param mcharge ... +! ************************************************************************************************** + SUBROUTINE tb_spme_zforce(ewald_env, ewald_pw, particle_set, box, gmcharge, mcharge) + + TYPE(ewald_environment_type), POINTER :: ewald_env + TYPE(ewald_pw_type), POINTER :: ewald_pw + TYPE(particle_type), DIMENSION(:), INTENT(IN) :: particle_set + TYPE(cell_type), POINTER :: box + REAL(KIND=dp), DIMENSION(:, :), INTENT(inout) :: gmcharge + REAL(KIND=dp), DIMENSION(:), INTENT(in) :: mcharge + + CHARACTER(len=*), PARAMETER :: routineN = 'tb_spme_zforce' + + INTEGER :: group, handle, i, ipart, n, npart, & + o_spline, p1 + INTEGER, ALLOCATABLE, DIMENSION(:, :) :: center + INTEGER, DIMENSION(3) :: npts + REAL(KIND=dp) :: alpha, dvols, fat(3), fint, vgc + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: rhos + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(greens_fn_type), POINTER :: green + TYPE(pw_grid_type), POINTER :: grid_spme + TYPE(pw_p_type), DIMENSION(3) :: dphi_g + TYPE(pw_poisson_type), POINTER :: poisson_env + TYPE(pw_pool_type), POINTER :: pw_pool + TYPE(pw_type), POINTER :: phi_g, rhob_g, rhob_r + TYPE(realspace_grid_desc_type), POINTER :: rs_desc + TYPE(realspace_grid_p_type), DIMENSION(:), POINTER :: drpot + TYPE(realspace_grid_type), POINTER :: rden, rpot + + CALL timeset(routineN, handle) + !-------------- INITIALISATION --------------------- + CALL ewald_env_get(ewald_env, alpha=alpha, o_spline=o_spline, group=group, & + para_env=para_env) + NULLIFY (green, poisson_env, pw_pool) + CALL ewald_pw_get(ewald_pw, pw_big_pool=pw_pool, rs_desc=rs_desc, & + poisson_env=poisson_env) + CALL pw_poisson_rebuild(poisson_env) + green => poisson_env%green_fft + grid_spme => pw_pool%pw_grid + + CALL get_pw_grid_info(grid_spme, dvol=dvols, npts=npts) + + npart = SIZE(particle_set) + + n = o_spline + ALLOCATE (rhos(n, n, n)) + + CALL rs_grid_create(rden, rs_desc) + CALL rs_grid_set_box(grid_spme, rs=rden) + CALL rs_grid_zero(rden) + + ALLOCATE (center(3, npart)) + CALL get_center(particle_set, box, center, npts, n) + + !-------------- DENSITY CALCULATION ---------------- + ipart = 0 + DO + CALL set_list(particle_set, npart, center, p1, rden, ipart) + IF (p1 == 0) EXIT + + ! calculate function on small boxes + CALL get_patch(particle_set, box, green, npts, p1, rhos, is_core=.FALSE., & + is_shell=.FALSE., unit_charge=.TRUE.) + rhos(:, :, :) = rhos(:, :, :)*mcharge(p1) + + ! add boxes to real space grid (big box) + CALL dg_sum_patch(rden, rhos, center(:, p1)) + END DO + + CALL pw_pool_create_pw(pw_pool, rhob_r, use_data=REALDATA3D, & + in_space=REALSPACE) + + CALL rs_pw_transfer(rden, rhob_r, rs2pw) + + ! transform density to G space and add charge function + CALL pw_pool_create_pw(pw_pool, rhob_g, use_data=COMPLEXDATA1D, & + in_space=RECIPROCALSPACE) + CALL pw_transfer(rhob_r, rhob_g) + ! update charge function + rhob_g%cc = rhob_g%cc*green%p3m_charge%cr + + !-------------- ELECTROSTATIC CALCULATION ----------- + + ! allocate intermediate arrays + DO i = 1, 3 + NULLIFY (dphi_g(i)%pw) + CALL pw_pool_create_pw(pw_pool, dphi_g(i)%pw, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + END DO + CALL pw_pool_create_pw(pw_pool, phi_g, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + CALL pw_poisson_solve(poisson_env, rhob_g, vgc, phi_g, dphi_g) + + CALL rs_grid_create(rpot, rs_desc) + CALL rs_grid_set_box(grid_spme, rs=rpot) + + CALL pw_pool_give_back_pw(pw_pool, rhob_g) + + CALL rs_grid_zero(rpot) + phi_g%cc = phi_g%cc*green%p3m_charge%cr + CALL pw_transfer(phi_g, rhob_r) + CALL pw_pool_give_back_pw(pw_pool, phi_g) + CALL rs_pw_transfer(rpot, rhob_r, pw2rs) + + !---------- END OF ELECTROSTATIC CALCULATION -------- + + ! move derivative of potential to real space grid and + ! multiply by charge function in g-space + ALLOCATE (drpot(1:3)) + DO i = 1, 3 + CALL rs_grid_create(drpot(i)%rs_grid, rs_desc) + CALL rs_grid_set_box(grid_spme, rs=drpot(i)%rs_grid) + dphi_g(i)%pw%cc = dphi_g(i)%pw%cc*green%p3m_charge%cr + CALL pw_transfer(dphi_g(i)%pw, rhob_r) + CALL pw_pool_give_back_pw(pw_pool, dphi_g(i)%pw) + CALL rs_pw_transfer(drpot(i)%rs_grid, rhob_r, pw2rs) + END DO + CALL pw_pool_give_back_pw(pw_pool, rhob_r) + + !----------------- FORCE CALCULATION ---------------- + + ipart = 0 + DO + + CALL set_list(particle_set, npart, center, p1, rden, ipart) + IF (p1 == 0) EXIT + + ! calculate function on small boxes + CALL get_patch(particle_set, box, green, npts, p1, rhos, is_core=.FALSE., & + is_shell=.FALSE., unit_charge=.TRUE.) + + CALL dg_sum_patch_force_1d(rpot, rhos, center(:, p1), fint) + gmcharge(p1, 1) = gmcharge(p1, 1) + fint*dvols + + CALL dg_sum_patch_force_3d(drpot, rhos, center(:, p1), fat) + gmcharge(p1, 2) = gmcharge(p1, 2) - fat(1)*dvols + gmcharge(p1, 3) = gmcharge(p1, 3) - fat(2)*dvols + gmcharge(p1, 4) = gmcharge(p1, 4) - fat(3)*dvols + + END DO + + !--------------END OF FORCE CALCULATION ------------- + + !------------------CLEANING UP ---------------------- + + CALL rs_grid_release(rden) + CALL rs_grid_release(rpot) + IF (ASSOCIATED(drpot)) THEN + DO i = 1, 3 + CALL rs_grid_release(drpot(i)%rs_grid) + END DO + DEALLOCATE (drpot) + END IF + DEALLOCATE (rhos) + DEALLOCATE (center) + + CALL timestop(handle) + + END SUBROUTINE tb_spme_zforce + END MODULE ewald_methods_tb diff --git a/src/ex_property_calculation.F b/src/ex_property_calculation.F new file mode 100644 index 0000000000..6132da26a5 --- /dev/null +++ b/src/ex_property_calculation.F @@ -0,0 +1,274 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +! ************************************************************************************************** +!> \brief Routines for property calculations of excited states +!> \par History +!> 02.2020 Adapted from ec_properties +!> \author JGH +! ************************************************************************************************** +MODULE ex_property_calculation + USE atomic_kind_types, ONLY: atomic_kind_type,& + get_atomic_kind + USE cell_types, ONLY: cell_type,& + pbc + USE cp_control_types, ONLY: dft_control_type + USE cp_dbcsr_operations, ONLY: dbcsr_allocate_matrix_set,& + dbcsr_deallocate_matrix_set + USE cp_log_handling, ONLY: cp_get_default_logger,& + cp_logger_get_default_unit_nr,& + cp_logger_type + USE cp_output_handling, ONLY: cp_p_file,& + cp_print_key_finished_output,& + cp_print_key_should_output,& + cp_print_key_unit_nr + USE cp_para_types, ONLY: cp_para_env_type + USE cp_result_methods, ONLY: cp_results_erase,& + put_results + USE cp_result_types, ONLY: cp_result_type + USE dbcsr_api, ONLY: dbcsr_add,& + dbcsr_copy,& + dbcsr_create,& + dbcsr_dot,& + dbcsr_p_type,& + dbcsr_release,& + dbcsr_set,& + dbcsr_type + USE distribution_1d_types, ONLY: distribution_1d_type + USE input_section_types, ONLY: section_get_ival,& + section_get_lval,& + section_vals_get_subs_vals,& + section_vals_type,& + section_vals_val_get + USE kinds, ONLY: default_path_length,& + default_string_length,& + dp + USE message_passing, ONLY: mp_sum + USE moments_utils, ONLY: get_reference_point + USE mulliken, ONLY: mulliken_charges + USE particle_types, ONLY: particle_type + USE physcon, ONLY: debye + USE qs_environment_types, ONLY: get_qs_env,& + qs_environment_type + USE qs_kind_types, ONLY: get_qs_kind,& + qs_kind_type + USE qs_moments, ONLY: build_local_moment_matrix + USE qs_p_env_types, ONLY: qs_p_env_type + USE qs_rho_types, ONLY: qs_rho_get,& + qs_rho_type +#include "./base/base_uses.f90" + + IMPLICIT NONE + + PRIVATE + +! *** Global parameters *** + + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ex_property_calculation' + + PUBLIC :: ex_properties + +CONTAINS + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param matrix_pe ... +!> \param p_env ... +! ************************************************************************************************** + SUBROUTINE ex_properties(qs_env, matrix_pe, p_env) + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pe + TYPE(qs_p_env_type), POINTER :: p_env + + CHARACTER(LEN=*), PARAMETER :: routineN = 'ex_properties', routineP = moduleN//':'//routineN + + CHARACTER(LEN=8), DIMENSION(3) :: rlab + CHARACTER(LEN=default_path_length) :: filename + CHARACTER(LEN=default_string_length) :: description + INTEGER :: akind, handle, i, ia, iatom, idir, & + ikind, iounit, ispin, maxmom, natom, & + nspins, reference, unit_nr + LOGICAL :: magnetic, periodic, tb + REAL(KIND=dp) :: charge, dd, q, tmp + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: mcharge + REAL(KIND=dp), DIMENSION(3) :: cdip, pdip, pedip, rcc, rdip, ria, tdip + REAL(KIND=dp), DIMENSION(:), POINTER :: ref_point + TYPE(atomic_kind_type), POINTER :: atomic_kind + TYPE(cell_type), POINTER :: cell + TYPE(cp_logger_type), POINTER :: logger + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(cp_result_type), POINTER :: results + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_p, matrix_s, moments + TYPE(dbcsr_type), POINTER :: matrix_pall + TYPE(dft_control_type), POINTER :: dft_control + TYPE(distribution_1d_type), POINTER :: local_particles + TYPE(particle_type), DIMENSION(:), POINTER :: particle_set + TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set + TYPE(qs_rho_type), POINTER :: rho + TYPE(section_vals_type), POINTER :: print_key + + CALL timeset(routineN, handle) + + rlab(1) = "X" + rlab(2) = "Y" + rlab(3) = "Z" + + CALL get_qs_env(qs_env=qs_env, dft_control=dft_control) + tb = (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb) + + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF + + print_key => section_vals_get_subs_vals(section_vals=qs_env%input, & + subsection_name="DFT%PRINT%MOMENTS") + + IF (BTEST(cp_print_key_should_output(logger%iter_info, print_key), cp_p_file)) THEN + + maxmom = section_get_ival(section_vals=qs_env%input, & + keyword_name="DFT%PRINT%MOMENTS%MAX_MOMENT") + periodic = section_get_lval(section_vals=qs_env%input, & + keyword_name="DFT%PRINT%MOMENTS%PERIODIC") + reference = section_get_ival(section_vals=qs_env%input, & + keyword_name="DFT%PRINT%MOMENTS%REFERENCE") + magnetic = section_get_lval(section_vals=qs_env%input, & + keyword_name="DFT%PRINT%MOMENTS%MAGNETIC") + NULLIFY (ref_point) + CALL section_vals_val_get(qs_env%input, "DFT%PRINT%MOMENTS%REF_POINT", r_vals=ref_point) + unit_nr = cp_print_key_unit_nr(logger=logger, basis_section=qs_env%input, & + print_key_path="DFT%PRINT%MOMENTS", extension=".dat", & + middle_name="moments", log_filename=.FALSE.) + + IF (iounit > 0) THEN + IF (unit_nr /= iounit .AND. unit_nr > 0) THEN + INQUIRE (UNIT=unit_nr, NAME=filename) + WRITE (UNIT=iounit, FMT="(/,T2,A,2(/,T3,A),/)") & + "MOMENTS", "The electric/magnetic moments are written to file:", & + TRIM(filename) + ELSE + WRITE (UNIT=iounit, FMT="(/,T2,A)") "ELECTRIC/MAGNETIC MOMENTS" + END IF + END IF + + IF (periodic) THEN + CPABORT("Periodic moments not implemented with TDDFT") + ELSE + CPASSERT(maxmom < 2) + CPASSERT(.NOT. magnetic) + IF (maxmom == 1) THEN + CALL get_qs_env(qs_env=qs_env, cell=cell, para_env=para_env) + ! reference point + CALL get_reference_point(rcc, qs_env=qs_env, reference=reference, ref_point=ref_point) + ! nuclear contribution + cdip = 0.0_dp + CALL get_qs_env(qs_env=qs_env, particle_set=particle_set, & + qs_kind_set=qs_kind_set, local_particles=local_particles) + DO ikind = 1, SIZE(local_particles%n_el) + DO ia = 1, local_particles%n_el(ikind) + iatom = local_particles%list(ikind)%array(ia) + ! fold atomic positions back into unit cell + ria = pbc(particle_set(iatom)%r - rcc, cell) + rcc + ria = ria - rcc + atomic_kind => particle_set(iatom)%atomic_kind + CALL get_atomic_kind(atomic_kind, kind_number=akind) + CALL get_qs_kind(qs_kind_set(akind), core_charge=charge) + cdip(1:3) = cdip(1:3) - charge*ria(1:3) + END DO + END DO + CALL mp_sum(cdip, para_env%group) + ! + ! electronic contribution + CALL get_qs_env(qs_env=qs_env, rho=rho, matrix_s=matrix_s) + CALL qs_rho_get(rho, rho_ao=matrix_p) + nspins = SIZE(matrix_p, 1) + IF (tb) THEN + ALLOCATE (matrix_pall) + CALL dbcsr_create(matrix_pall, template=matrix_s(1)%matrix) + CALL dbcsr_copy(matrix_pall, matrix_s(1)%matrix, "Moments") + CALL dbcsr_set(matrix_pall, 0.0_dp) + DO ispin = 1, nspins + CALL dbcsr_add(matrix_pall, matrix_p(ispin)%matrix, 1.0_dp, 1.0_dp) + CALL dbcsr_add(matrix_pall, matrix_pe(ispin)%matrix, 1.0_dp, 1.0_dp) + CALL dbcsr_add(matrix_pall, p_env%p1(ispin)%matrix, 1.0_dp, 1.0_dp) + END DO + CALL get_qs_env(qs_env=qs_env, natom=natom) + ! Mulliken charges + ALLOCATE (mcharge(natom)) + ! + CALL mulliken_charges(matrix_pall, matrix_s(1)%matrix, para_env, mcharge) + ! + rdip = 0.0_dp + pdip = 0.0_dp + pedip = 0.0_dp + DO i = 1, SIZE(particle_set) + ria = pbc(particle_set(i)%r - rcc, cell) + rcc + ria = ria - rcc + q = mcharge(i) + rdip = rdip + q*ria + END DO + CALL dbcsr_release(matrix_pall) + DEALLOCATE (matrix_pall) + DEALLOCATE (mcharge) + ELSE + ! KS-DFT + NULLIFY (moments) + CALL dbcsr_allocate_matrix_set(moments, 4) + DO i = 1, 4 + ALLOCATE (moments(i)%matrix) + CALL dbcsr_copy(moments(i)%matrix, matrix_s(1)%matrix, "Moments") + CALL dbcsr_set(moments(i)%matrix, 0.0_dp) + END DO + CALL build_local_moment_matrix(qs_env, moments, 1, ref_point=rcc) + ! + rdip = 0.0_dp + pdip = 0.0_dp + pedip = 0.0_dp + DO ispin = 1, nspins + DO idir = 1, 3 + CALL dbcsr_dot(matrix_pe(ispin)%matrix, moments(idir)%matrix, tmp) + pedip(idir) = pedip(idir) + tmp + CALL dbcsr_dot(matrix_p(ispin)%matrix, moments(idir)%matrix, tmp) + pdip(idir) = pdip(idir) + tmp + CALL dbcsr_dot(p_env%p1(ispin)%matrix, moments(idir)%matrix, tmp) + rdip(idir) = rdip(idir) + tmp + END DO + END DO + CALL dbcsr_deallocate_matrix_set(moments) + END IF + ! + IF (unit_nr > 0) THEN + tdip = -(rdip + pedip + pdip + cdip) + WRITE (unit_nr, "(T3,A)") "Dipoles are based on the traditional operator." + dd = SQRT(SUM(tdip(1:3)**2))*debye + WRITE (unit_nr, "(T3,A)") "Dipole moment [Debye]" + WRITE (unit_nr, "(T5,3(A,A,F14.8,1X),T60,A,T67,F14.8)") & + (TRIM(rlab(i)), "=", tdip(i)*debye, i=1, 3), "Total=", dd + WRITE (unit_nr, FMT="(T2,A,T61,E20.12)") ' DIPOLE : CheckSum =', SUM(ABS(tdip)) + END IF + ENDIF + END IF + + CALL get_qs_env(qs_env=qs_env, results=results) + description = "[DIPOLE]" + CALL cp_results_erase(results=results, description=description) + CALL put_results(results=results, description=description, values=tdip(1:3)) + + CALL cp_print_key_finished_output(unit_nr=unit_nr, logger=logger, & + basis_section=qs_env%input, print_key_path="DFT%PRINT%MOMENTS") + END IF + + CALL timestop(handle) + + END SUBROUTINE ex_properties + +! ************************************************************************************************** + +END MODULE ex_property_calculation diff --git a/src/excited_states.F b/src/excited_states.F new file mode 100644 index 0000000000..81a758df1c --- /dev/null +++ b/src/excited_states.F @@ -0,0 +1,160 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +! ************************************************************************************************** +!> \brief Routines for total energy and forces of excited states +!> \par History +!> 01.2020 created +!> \author JGH +! ************************************************************************************************** +MODULE excited_states + USE atomic_kind_types, ONLY: atomic_kind_type,& + get_atomic_kind_set + USE cp_control_types, ONLY: dft_control_type + USE cp_log_handling, ONLY: cp_get_default_logger,& + cp_logger_get_default_unit_nr,& + cp_logger_type + USE ex_property_calculation, ONLY: ex_properties + USE exstates_types, ONLY: excited_energy_type + USE qs_energy_types, ONLY: qs_energy_type + USE qs_environment_types, ONLY: get_qs_env,& + qs_environment_type,& + set_qs_env + USE qs_force_types, ONLY: allocate_qs_force,& + deallocate_qs_force,& + qs_force_type,& + sum_qs_force,& + zero_qs_force + USE qs_p_env_types, ONLY: p_env_release,& + qs_p_env_type + USE response_solver, ONLY: response_equation,& + response_force,& + response_force_xtb +#include "./base/base_uses.f90" + + IMPLICIT NONE + + PRIVATE + +! *** Global parameters *** + + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'excited_states' + + LOGICAL, PARAMETER :: debug_forces = .TRUE. + + PUBLIC :: excited_state_energy + +CONTAINS + +! ************************************************************************************************** +!> \brief Excited state energy and forces +!> +!> \param qs_env ... +!> \param calculate_forces ... +!> \par History +!> 03.2014 created +!> \author JGH +! ************************************************************************************************** + SUBROUTINE excited_state_energy(qs_env, calculate_forces) + TYPE(qs_environment_type), POINTER :: qs_env + LOGICAL, INTENT(IN), OPTIONAL :: calculate_forces + + CHARACTER(len=*), PARAMETER :: routineN = 'excited_state_energy', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, nkind, unit_nr + INTEGER, ALLOCATABLE, DIMENSION(:) :: natom_of_kind + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(cp_logger_type), POINTER :: logger + TYPE(dft_control_type), POINTER :: dft_control + TYPE(excited_energy_type), POINTER :: ex_env + TYPE(qs_energy_type), POINTER :: energy + TYPE(qs_force_type), DIMENSION(:), POINTER :: ks_force, lr_force + TYPE(qs_p_env_type), POINTER :: p_env + + CALL timeset(routineN, handle) + + ! Check for energy correction + IF (qs_env%excited_state) THEN + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + unit_nr = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + unit_nr = -1 + ENDIF + + CALL get_qs_env(qs_env, exstate_env=ex_env, energy=energy) + + energy%excited_state = ex_env%evalue + energy%total = energy%total + ex_env%evalue + IF (calculate_forces) THEN + IF (unit_nr > 0) THEN + WRITE (unit_nr, '(T2,A,A,A,A,A)') "!", REPEAT("-", 27), & + " Excited State Forces ", REPEAT("-", 28), "!" + END IF + ! prepare force array + CALL get_qs_env(qs_env, force=ks_force, atomic_kind_set=atomic_kind_set) + nkind = SIZE(atomic_kind_set) + ALLOCATE (natom_of_kind(nkind)) + CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, natom_of_kind=natom_of_kind) + NULLIFY (lr_force) + CALL allocate_qs_force(lr_force, natom_of_kind) + DEALLOCATE (natom_of_kind) + CALL zero_qs_force(lr_force) + CALL set_qs_env(qs_env, force=lr_force) + ! + NULLIFY (p_env) + CALL response_equation(qs_env, p_env, ex_env%cpmos, unit_nr) + ! + CALL get_qs_env(qs_env, dft_control=dft_control) + IF (dft_control%qs_control%semi_empirical) THEN + CPABORT("Not available") + ELSEIF (dft_control%qs_control%dftb) THEN + CPABORT("Not available") + ELSEIF (dft_control%qs_control%xtb) THEN + CALL response_force_xtb(qs_env, p_env, ex_env%matrix_hz, ex_env) + ELSE + ! KS-DFT + CALL response_force(qs_env=qs_env, vh_rspace=ex_env%vh_rspace, & + vxc_rspace=ex_env%vxc_rspace, vtau_rspace=ex_env%vtau_rspace, & + vadmm_rspace=ex_env%vadmm_rspace, matrix_hz=ex_env%matrix_hz, & + matrix_pz=ex_env%matrix_px1, matrix_pz_admm=p_env%p1_admm, & + matrix_wz=p_env%w1, & + p_env=p_env, ex_env=ex_env) + END IF + ! add TD and KS forces + CALL get_qs_env(qs_env, force=lr_force) + CALL sum_qs_force(ks_force, lr_force) + CALL set_qs_env(qs_env, force=ks_force) + CALL deallocate_qs_force(lr_force) + ! + CALL ex_properties(qs_env, ex_env%matrix_pe, p_env) + ! + CALL p_env_release(p_env) + ! + ELSE + IF (unit_nr > 0) THEN + WRITE (unit_nr, '(T2,A,A,A,A,A)') "!", REPEAT("-", 27), & + " Excited State Energy ", REPEAT("-", 28), "!" + WRITE (unit_nr, '(T2,A,T65,F16.10)') "Excitation Energy [Hartree] ", ex_env%evalue + WRITE (unit_nr, '(T2,A,T65,F16.10)') "Total Energy [Hartree]", energy%total + END IF + END IF + + IF (unit_nr > 0) THEN + WRITE (unit_nr, '(T2,A,A,A)') "!", REPEAT("-", 77), "!" + END IF + + END IF + + CALL timestop(handle) + + END SUBROUTINE excited_state_energy + +! ************************************************************************************************** + +END MODULE excited_states diff --git a/src/exstates_types.F b/src/exstates_types.F new file mode 100644 index 0000000000..0100845cee --- /dev/null +++ b/src/exstates_types.F @@ -0,0 +1,158 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +! ************************************************************************************************** +!> \brief Types for excited states potential energies +!> \par History +!> 2020.01 created +!> \author JGH +! ************************************************************************************************** +MODULE exstates_types + USE cp_dbcsr_operations, ONLY: dbcsr_deallocate_matrix_set + USE cp_fm_types, ONLY: cp_fm_p_type,& + cp_fm_release + USE dbcsr_api, ONLY: dbcsr_p_type + USE input_section_types, ONLY: section_vals_type,& + section_vals_val_get + USE kinds, ONLY: dp + USE pw_types, ONLY: pw_p_type,& + pw_release +#include "./base/base_uses.f90" + + IMPLICIT NONE + + PRIVATE + + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'exstates_types' + + PUBLIC :: excited_energy_type, exstate_release, exstate_create + +! ***************************************************************************** +!> \brief Contains information on the excited states energy +!> \par History +!> 01.2020 created +!> \author JGH +! ***************************************************************************** + TYPE excited_energy_type + INTEGER :: state + REAL(KIND=dp) :: evalue + INTEGER :: xc_kernel_method + TYPE(cp_fm_p_type), POINTER, DIMENSION(:) :: evect => NULL() + TYPE(cp_fm_p_type), POINTER, DIMENSION(:) :: cpmos => NULL() + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pe => NULL() + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_hz => NULL() + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pe_admm => NULL() + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_px1 => NULL() + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_px1_admm => NULL() + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_wx1 => NULL() + TYPE(pw_p_type), POINTER :: vh_rspace => NULL() + TYPE(pw_p_type), DIMENSION(:), POINTER :: vxc_rspace => NULL() + TYPE(pw_p_type), DIMENSION(:), POINTER :: vtau_rspace => NULL() + TYPE(pw_p_type), DIMENSION(:), POINTER :: vadmm_rspace => NULL() + END TYPE excited_energy_type + +CONTAINS + +! ************************************************************************************************** +!> \brief ... +!> \param ex_env ... +! ************************************************************************************************** + SUBROUTINE exstate_release(ex_env) + TYPE(excited_energy_type), POINTER :: ex_env + + CHARACTER(LEN=*), PARAMETER :: routineN = 'exstate_release', & + routineP = moduleN//':'//routineN + + INTEGER :: iab, is + + IF (ASSOCIATED(ex_env)) THEN + + IF (ASSOCIATED(ex_env%evect)) THEN + DO is = 1, SIZE(ex_env%evect) + CALL cp_fm_release(ex_env%evect(is)%matrix) + END DO + DEALLOCATE (ex_env%evect) + END IF + IF (ASSOCIATED(ex_env%cpmos)) THEN + DO is = 1, SIZE(ex_env%cpmos) + CALL cp_fm_release(ex_env%cpmos(is)%matrix) + END DO + DEALLOCATE (ex_env%cpmos) + END IF + IF (ASSOCIATED(ex_env%matrix_pe)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe) + NULLIFY (ex_env%matrix_pe) + IF (ASSOCIATED(ex_env%matrix_hz)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_hz) + NULLIFY (ex_env%matrix_hz) + IF (ASSOCIATED(ex_env%matrix_pe_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe_admm) + NULLIFY (ex_env%matrix_pe_admm) + IF (ASSOCIATED(ex_env%matrix_px1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1) + NULLIFY (ex_env%matrix_px1) + IF (ASSOCIATED(ex_env%matrix_px1_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_admm) + NULLIFY (ex_env%matrix_px1_admm) + IF (ASSOCIATED(ex_env%matrix_wx1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_wx1) + NULLIFY (ex_env%matrix_wx1) + ! + IF (ASSOCIATED(ex_env%vh_rspace)) THEN + CALL pw_release(ex_env%vh_rspace%pw) + DEALLOCATE (ex_env%vh_rspace) + END IF + IF (ASSOCIATED(ex_env%vxc_rspace)) THEN + DO iab = 1, SIZE(ex_env%vxc_rspace) + CALL pw_release(ex_env%vxc_rspace(iab)%pw) + END DO + DEALLOCATE (ex_env%vxc_rspace) + END IF + IF (ASSOCIATED(ex_env%vtau_rspace)) THEN + DO iab = 1, SIZE(ex_env%vtau_rspace) + CALL pw_release(ex_env%vtau_rspace(iab)%pw) + END DO + DEALLOCATE (ex_env%vtau_rspace) + END IF + IF (ASSOCIATED(ex_env%vadmm_rspace)) THEN + DO iab = 1, SIZE(ex_env%vadmm_rspace) + CALL pw_release(ex_env%vadmm_rspace(iab)%pw) + END DO + DEALLOCATE (ex_env%vadmm_rspace) + END IF + + DEALLOCATE (ex_env) + + END IF + + END SUBROUTINE exstate_release + +! ************************************************************************************************** +!> \brief Allocates and intitializes exstate_env +!> \param ex_env the object to create +!> \param excited_state ... +!> \param dft_section ... +!> \par History +!> 2020.01 created +!> \author JGH +! ************************************************************************************************** + SUBROUTINE exstate_create(ex_env, excited_state, dft_section) + TYPE(excited_energy_type), POINTER :: ex_env + LOGICAL, INTENT(IN) :: excited_state + TYPE(section_vals_type), POINTER :: dft_section + + CHARACTER(len=*), PARAMETER :: routineN = 'exstate_create', routineP = moduleN//':'//routineN + + CPASSERT(.NOT. ASSOCIATED(ex_env)) + ALLOCATE (ex_env) + ex_env%evalue = 0.0_dp + NULLIFY (ex_env%evect) + IF (excited_state) THEN + CALL section_vals_val_get(dft_section, "EXCITED_STATES%STATE", i_val=ex_env%state) + CALL section_vals_val_get(dft_section, "EXCITED_STATES%XC_KERNEL_METHOD", & + i_val=ex_env%xc_kernel_method) + ELSE + ex_env%state = -1 + END IF + + END SUBROUTINE exstate_create + +END MODULE exstates_types diff --git a/src/hfx_admm_utils.F b/src/hfx_admm_utils.F index b26840ddab..8250431aae 100644 --- a/src/hfx_admm_utils.F +++ b/src/hfx_admm_utils.F @@ -1184,6 +1184,7 @@ CONTAINS s_mstruct_changed=s_mstruct_changed, & x_data=x_data) + ! This should probably be the HF section from the TDDFPT XC section! hfx_sections => section_vals_get_subs_vals(input, "DFT%XC%HF") my_update_energy = .TRUE. diff --git a/src/hfx_derivatives.F b/src/hfx_derivatives.F index 1ffe133cf9..7ba76c3995 100644 --- a/src/hfx_derivatives.F +++ b/src/hfx_derivatives.F @@ -551,7 +551,7 @@ CONTAINS ! restore as full density the HF density ! maybe in the future - IF (with_resp_density) THEN + IF (with_resp_density .AND. .NOT. my_resp_only) THEN full_density_alpha(:, 1) = full_density_alpha(:, 1) - full_density_resp IF (nspins == 2) THEN full_density_beta(:, 1) = & diff --git a/src/hfx_pair_list_methods.F b/src/hfx_pair_list_methods.F index e0d11ef8d7..5f4331feb6 100644 --- a/src/hfx_pair_list_methods.F +++ b/src/hfx_pair_list_methods.F @@ -95,6 +95,8 @@ CONTAINS EtaInv = list2%ZetaInv Zeta_C = list2%zeta Zeta_D = list2%zetb + temp_CC = 0.0_dp + temp_DD = 0.0_dp DO i = 1, nimages1 P = list1%image_list(i)%P R1 = list1%image_list(i)%R diff --git a/src/input_constants.F b/src/input_constants.F index d5baca8b57..72f0a484f9 100644 --- a/src/input_constants.F +++ b/src/input_constants.F @@ -556,7 +556,8 @@ MODULE input_constants tddfpt_spin_flip = 3 INTEGER, PARAMETER, PUBLIC :: tddfpt_lanczos = 0, & tddfpt_davidson = 1 - INTEGER, PARAMETER, PUBLIC :: tddfpt_kernel_full = 1, & + INTEGER, PARAMETER, PUBLIC :: tddfpt_kernel_none = 2, & + tddfpt_kernel_full = 1, & tddfpt_kernel_stda = 0 INTEGER, PARAMETER, PUBLIC :: oe_none = 0, & oe_lb = 1, & @@ -664,6 +665,11 @@ MODULE input_constants tddfpt_dipole_length = 2, & tddfpt_dipole_velocity = 3 + ! XC Kernel derivative methods for forces + INTEGER, PARAMETER, PUBLIC :: xc_kernel_method_best = 100, & + xc_kernel_method_analytic = 101, & + xc_kernel_method_numeric = 102 + ! Linear Response for properties INTEGER, PARAMETER, PUBLIC :: lr_none = 0, & lr_chemshift = 1, & diff --git a/src/input_cp2k_dft.F b/src/input_cp2k_dft.F index d171f0f443..dcd5fb16d0 100644 --- a/src/input_cp2k_dft.F +++ b/src/input_cp2k_dft.F @@ -106,6 +106,7 @@ MODULE input_cp2k_dft 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 + USE input_cp2k_exstate, ONLY: create_exstate_section USE input_cp2k_external, ONLY: create_ext_den_section,& create_ext_pot_section,& create_ext_vxc_section @@ -401,6 +402,10 @@ CONTAINS CALL section_add_subsection(section, subsection) CALL section_release(subsection) + CALL create_exstate_section(subsection) + CALL section_add_subsection(section, subsection) + CALL section_release(subsection) + CALL create_admm_section(subsection) CALL section_add_subsection(section, subsection) CALL section_release(subsection) @@ -4932,7 +4937,7 @@ CONTAINS CPASSERT(.NOT. ASSOCIATED(section)) CALL section_create(section, __LOCATION__, name="tddfpt", & - description="parameters needed to set up the Time Dependent Density Functional PT", & + description="Old TDDFPT code. Use new version in CP2K_INPUT / FORCE_EVAL / PROPERTIES / TDDFPT", & n_keywords=5, n_subsections=1, repeats=.FALSE., & citations=(/Iannuzzi2005/)) diff --git a/src/input_cp2k_exstate.F b/src/input_cp2k_exstate.F new file mode 100644 index 0000000000..b132282ff7 --- /dev/null +++ b/src/input_cp2k_exstate.F @@ -0,0 +1,82 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +! ************************************************************************************************** +!> \brief Excited state input section +!> \par History +!> 01.2020 created +!> \author jgh +! ************************************************************************************************** +MODULE input_cp2k_exstate + USE input_constants, ONLY: xc_kernel_method_analytic,& + xc_kernel_method_best,& + xc_kernel_method_numeric + USE input_keyword_types, ONLY: keyword_create,& + keyword_release,& + keyword_type + USE input_section_types, ONLY: section_add_keyword,& + section_create,& + section_type + USE string_utilities, ONLY: s2a +#include "./base/base_uses.f90" + + IMPLICIT NONE + PRIVATE + + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_exstate' + + PUBLIC :: create_exstate_section + +CONTAINS + +! ************************************************************************************************** +!> \brief creates the EXCITED ENERGY section +!> \param section ... +!> \author JGH +! ************************************************************************************************** + SUBROUTINE create_exstate_section(section) + TYPE(section_type), POINTER :: section + + CHARACTER(len=*), PARAMETER :: routineN = 'create_exstate_section', & + routineP = moduleN//':'//routineN + + TYPE(keyword_type), POINTER :: keyword + + CPASSERT(.NOT. ASSOCIATED(section)) + + NULLIFY (keyword) + CALL section_create(section, __LOCATION__, name="EXCITED_STATES", & + description="Sets the various options for Excited State Potential Energy Calculations", & + n_keywords=1, n_subsections=0, repeats=.FALSE.) + + CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", & + description="Controls the activation of the excited states", & + usage="&EXCITED_STATES T", & + default_l_val=.FALSE., & + lone_keyword_l_val=.TRUE.) + CALL section_add_keyword(section, keyword) + CALL keyword_release(keyword) + + CALL keyword_create(keyword, __LOCATION__, name="STATE", & + description="Excited state to be used in calculation.", & + usage="STATE 2", & + default_i_val=1) + CALL section_add_keyword(section, keyword) + CALL keyword_release(keyword) + + CALL keyword_create(keyword, __LOCATION__, name="XC_KERNEL_METHOD", & + description="Method to evaluate XC Kernel contributions to forces", & + usage="XC_KERNEL_METHOD (BEST_AVAILABLE|ANALYTIC|NUMERIC)", & + enum_c_vals=s2a("BEST_AVAILABLE", "ANALYTIC", "NUMERIC"), & + enum_i_vals=(/xc_kernel_method_best, xc_kernel_method_analytic, xc_kernel_method_numeric/), & + default_i_val=xc_kernel_method_best) + CALL section_add_keyword(section, keyword) + CALL keyword_release(keyword) + + END SUBROUTINE create_exstate_section + +END MODULE input_cp2k_exstate diff --git a/src/input_cp2k_mp2.F b/src/input_cp2k_mp2.F index 458bd3adb4..a63f134afd 100644 --- a/src/input_cp2k_mp2.F +++ b/src/input_cp2k_mp2.F @@ -270,6 +270,16 @@ CONTAINS CALL section_add_keyword(section, keyword) CALL keyword_release(keyword) + CALL keyword_create( & + keyword, __LOCATION__, & + name="USE_OLD_GRADIENT_CODE", & + description="Use the original RI-MP2 gradient code.", & + usage="USE_OLD_GRADIENT_CODE T", & + lone_keyword_l_val=.TRUE., & + default_l_val=.TRUE.) + CALL section_add_keyword(section, keyword) + CALL keyword_release(keyword) + END SUBROUTINE create_ri_mp2 ! ************************************************************************************************** diff --git a/src/input_cp2k_properties_dft.F b/src/input_cp2k_properties_dft.F index 519ce08dd2..cd807c0b39 100644 --- a/src/input_cp2k_properties_dft.F +++ b/src/input_cp2k_properties_dft.F @@ -37,8 +37,8 @@ MODULE input_cp2k_properties_dft ot_precond_full_all, ot_precond_full_kinetic, ot_precond_full_single, & ot_precond_full_single_inverse, ot_precond_none, ot_precond_s_inverse, scan_x, scan_xy, & scan_xyz, scan_xz, scan_y, scan_yz, scan_z, tddfpt_dipole_berry, tddfpt_dipole_length, & - tddfpt_dipole_velocity, tddfpt_kernel_full, tddfpt_kernel_stda, use_mom_ref_coac, & - use_mom_ref_com, use_mom_ref_user, use_mom_ref_zero + tddfpt_dipole_velocity, tddfpt_kernel_full, tddfpt_kernel_none, tddfpt_kernel_stda, & + use_mom_ref_coac, use_mom_ref_com, use_mom_ref_user, use_mom_ref_zero USE input_cp2k_atprop, ONLY: create_atprop_section USE input_cp2k_dft, ONLY: create_ddapc_restraint_section,& create_interp_section,& @@ -1191,8 +1191,8 @@ CONTAINS CALL keyword_create(keyword, __LOCATION__, name="KERNEL", & description="Options to compute the kernel", & usage="KERNEL FULL", & - enum_c_vals=s2a("FULL", "sTDA"), & - enum_i_vals=(/tddfpt_kernel_full, tddfpt_kernel_stda/), & + enum_c_vals=s2a("FULL", "sTDA", "NONE"), & + enum_i_vals=(/tddfpt_kernel_full, tddfpt_kernel_stda, tddfpt_kernel_none/), & default_i_val=tddfpt_kernel_full) CALL section_add_keyword(section, keyword) CALL keyword_release(keyword) @@ -1271,6 +1271,14 @@ CONTAINS 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.", & + n_var=1, type_of_var=logical_t, & + default_l_val=.FALSE., lone_keyword_l_val=.TRUE.) + CALL section_add_keyword(section, keyword) + CALL keyword_release(keyword) + ! Strings CALL keyword_create(keyword, __LOCATION__, name="WFN_RESTART_FILE_NAME", & variants=(/"RESTART_FILE_NAME"/), & diff --git a/src/input_cp2k_tb.F b/src/input_cp2k_tb.F index 1e0e388e87..b5582b0dff 100644 --- a/src/input_cp2k_tb.F +++ b/src/input_cp2k_tb.F @@ -184,6 +184,12 @@ CONTAINS CALL section_add_keyword(section, keyword) CALL keyword_release(keyword) + CALL keyword_create(keyword, __LOCATION__, name="COULOMB_LR", & + description="Use Coulomb LR (1/r) interaction terms; for debug only", & + usage="COULOMB_LR 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="TB3_INTERACTION", & description="Use TB3 interaction terms; for debug only", & usage="TB3_INTERACTION T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.) diff --git a/src/mp2_cphf.F b/src/mp2_cphf.F index 23f1dae793..7547c5b577 100644 --- a/src/mp2_cphf.F +++ b/src/mp2_cphf.F @@ -86,6 +86,7 @@ MODULE mp2_cphf pw_p_type USE qs_2nd_kernel_ao, ONLY: admm_projection_derivative,& apply_2nd_order_kernel + USE qs_density_matrices, ONLY: calculate_whz_matrix USE qs_dispersion_pairpot, ONLY: calculate_dispersion_pairpot USE qs_dispersion_types, ONLY: qs_dispersion_type USE qs_energy_types, ONLY: qs_energy_type @@ -116,8 +117,7 @@ MODULE mp2_cphf qs_p_env_type USE qs_rho_types, ONLY: qs_rho_get,& qs_rho_type - USE response_solver, ONLY: calculate_whz_matrix,& - ks_ref_potential + USE response_solver, ONLY: ks_ref_potential USE task_list_types, ONLY: task_list_type USE virial_types, ONLY: virial_type,& zero_virial @@ -498,7 +498,7 @@ CONTAINS CALL timestop(handle) - END SUBROUTINE + END SUBROUTINE solve_z_vector_eq ! ************************************************************************************************** !> \brief Here we performe the CPHF like update using GPW, @@ -1517,7 +1517,8 @@ CONTAINS ! Finish matrix_w_mp2 with occ-occ block DO ispin = 1, nspins - CALL calculate_whz_matrix(mos(ispin)%mo_set, p_env%kpp1(ispin)%matrix, p_env%w1(1)%matrix, 1.0_dp) + CALL calculate_whz_matrix(mos(ispin)%mo_set%mo_coeff, p_env%kpp1(ispin)%matrix, & + p_env%w1(1)%matrix, 1.0_dp) END DO IF (debug_forces .AND. use_virial) e_dummy = third_tr(virial%pv_virial) diff --git a/src/mp2_setup.F b/src/mp2_setup.F index c01a5f22b2..d89107ff4d 100644 --- a/src/mp2_setup.F +++ b/src/mp2_setup.F @@ -225,9 +225,11 @@ CONTAINS CALL section_vals_val_get(mp2_section, "RI_SOS_MP2%SIZE_INTEG_GROUP", i_val=mp2_env%ri_laplace%integ_group_size) CALL section_vals_val_get(mp2_section, "RI_MP2%_SECTION_PARAMETERS_", l_val=do_ri_mp2) + mp2_env%ri_mp2%use_old_grad = .FALSE. IF (do_ri_mp2) THEN CALL check_method(mp2_env%method) mp2_env%method = ri_mp2_method_gpw + CALL section_vals_val_get(mp2_section, "RI_MP2%USE_OLD_GRADIENT_CODE", l_val=mp2_env%ri_mp2%use_old_grad) END IF CALL section_vals_val_get(mp2_section, "RI_MP2%BLOCK_SIZE", i_val=mp2_env%ri_mp2%block_size) CALL section_vals_val_get(mp2_section, "RI_MP2%EPS_CANONICAL", r_val=mp2_env%ri_mp2%eps_canonical) diff --git a/src/mp2_types.F b/src/mp2_types.F index f409f1ace0..3e483b9edd 100644 --- a/src/mp2_types.F +++ b/src/mp2_types.F @@ -119,6 +119,7 @@ MODULE mp2_types INTEGER :: block_size REAL(dp) :: eps_canonical LOGICAL :: free_hfx_buffer + LOGICAL :: use_old_grad END TYPE TYPE ri_rpa_type diff --git a/src/optbas_fenv_manipulation.F b/src/optbas_fenv_manipulation.F index 25e726c489..e2d2de980a 100644 --- a/src/optbas_fenv_manipulation.F +++ b/src/optbas_fenv_manipulation.F @@ -43,6 +43,7 @@ MODULE optbas_fenv_manipulation USE optimize_basis_types, ONLY: basis_optimization_type,& flex_basis_type USE particle_types, ONLY: particle_type + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_energy_init, ONLY: qs_energies_init USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type @@ -55,7 +56,6 @@ MODULE optbas_fenv_manipulation set_ks_env USE qs_matrix_pools, ONLY: mpools_get USE qs_mo_io, ONLY: read_mo_set_from_restart - USE qs_mo_methods, ONLY: calculate_density_matrix USE qs_mo_types, ONLY: init_mo_set,& mo_set_p_type USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type diff --git a/src/qs_active_space_methods.F b/src/qs_active_space_methods.F index d54f789ef8..244bbcf0ed 100644 --- a/src/qs_active_space_methods.F +++ b/src/qs_active_space_methods.F @@ -100,6 +100,7 @@ MODULE qs_active_space_methods eri_type_eri_element_func,& get_irange_csr USE qs_collocate_density, ONLY: calculate_wavefunction + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_energy_types, ONLY: qs_energy_type USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type,& @@ -114,8 +115,7 @@ MODULE qs_active_space_methods USE qs_loc_utils, ONLY: qs_loc_control_init,& qs_loc_env_init,& qs_loc_init - USE qs_mo_methods, ONLY: calculate_density_matrix,& - calculate_subspace_eigenvalues + USE qs_mo_methods, ONLY: calculate_subspace_eigenvalues USE qs_mo_types, ONLY: allocate_mo_set,& get_mo_set,& init_mo_set,& diff --git a/src/qs_basis_gradient.F b/src/qs_basis_gradient.F index 910443b474..c1245ce12f 100644 --- a/src/qs_basis_gradient.F +++ b/src/qs_basis_gradient.F @@ -28,6 +28,7 @@ MODULE qs_basis_gradient USE kinds, ONLY: dp USE particle_types, ONLY: particle_type USE qs_core_hamiltonian, ONLY: build_core_hamiltonian_matrix + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_energy_matrix_w, ONLY: qs_energies_compute_w USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type @@ -43,8 +44,7 @@ MODULE qs_basis_gradient USE qs_ks_types, ONLY: qs_ks_env_type,& set_ks_env USE qs_mixing_utils, ONLY: mixing_allocate - USE qs_mo_methods, ONLY: calculate_density_matrix,& - make_basis_sm + USE qs_mo_methods, ONLY: make_basis_sm USE qs_mo_types, ONLY: get_mo_set,& mo_set_p_type USE qs_neighbor_lists, ONLY: build_qs_neighbor_lists diff --git a/src/qs_density_matrices.F b/src/qs_density_matrices.F new file mode 100644 index 0000000000..d990b4f421 --- /dev/null +++ b/src/qs_density_matrices.F @@ -0,0 +1,542 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +! ************************************************************************************************** +!> \brief collects routines that calculate density matrices +!> \note +!> first version : most routines imported +!> \author JGH (2020-01) +! ************************************************************************************************** +MODULE qs_density_matrices + USE cp_blacs_env, ONLY: cp_blacs_env_type + USE cp_dbcsr_operations, ONLY: copy_dbcsr_to_fm,& + copy_fm_to_dbcsr,& + cp_dbcsr_plus_fm_fm_t,& + cp_dbcsr_sm_fm_multiply + USE cp_fm_basic_linalg, ONLY: cp_fm_column_scale,& + cp_fm_scale_and_add,& + cp_fm_symm,& + cp_fm_upper_to_full + USE cp_fm_struct, ONLY: cp_fm_struct_create,& + cp_fm_struct_release,& + cp_fm_struct_type + USE cp_fm_types, ONLY: cp_fm_create,& + cp_fm_get_info,& + cp_fm_release,& + cp_fm_to_fm,& + cp_fm_type + USE cp_gemm_interface, ONLY: cp_gemm + USE cp_para_types, ONLY: cp_para_env_type + USE dbcsr_api, ONLY: dbcsr_copy,& + dbcsr_multiply,& + dbcsr_release,& + dbcsr_scale_by_vector,& + dbcsr_set,& + dbcsr_type + USE kinds, ONLY: dp + USE qs_mo_types, ONLY: get_mo_set,& + mo_set_type +#include "./base/base_uses.f90" + + IMPLICIT NONE + PRIVATE + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_density_matrices' + + PUBLIC :: calculate_density_matrix + PUBLIC :: calculate_w_matrix, calculate_w_matrix_ot + PUBLIC :: calculate_wz_matrix, calculate_whz_matrix + PUBLIC :: calculate_wx_matrix, calculate_xwx_matrix + + INTERFACE calculate_density_matrix + MODULE PROCEDURE calculate_dm_sparse + END INTERFACE + + INTERFACE calculate_w_matrix + MODULE PROCEDURE calculate_w_matrix_1, calculate_w_matrix_roks + END INTERFACE + +CONTAINS + +! ************************************************************************************************** +!> \brief Calculate the density matrix +!> \param mo_set ... +!> \param density_matrix ... +!> \param use_dbcsr ... +!> \param retain_sparsity ... +!> \date 06.2002 +!> \par History +!> - Fractional occupied orbitals (MK) +!> \author Joost VandeVondele +!> \version 1.0 +! ************************************************************************************************** + SUBROUTINE calculate_dm_sparse(mo_set, density_matrix, use_dbcsr, retain_sparsity) + + TYPE(mo_set_type), POINTER :: mo_set + TYPE(dbcsr_type), POINTER :: density_matrix + LOGICAL, INTENT(IN), OPTIONAL :: use_dbcsr, retain_sparsity + + CHARACTER(len=*), PARAMETER :: routineN = 'calculate_dm_sparse', & + routineP = moduleN//':'//routineN + + INTEGER :: handle + LOGICAL :: my_retain_sparsity, my_use_dbcsr + REAL(KIND=dp) :: alpha + TYPE(cp_fm_type), POINTER :: fm_tmp + TYPE(dbcsr_type) :: dbcsr_tmp + + CALL timeset(routineN, handle) + + my_use_dbcsr = .FALSE. + IF (PRESENT(use_dbcsr)) my_use_dbcsr = use_dbcsr + my_retain_sparsity = .TRUE. + IF (PRESENT(retain_sparsity)) my_retain_sparsity = retain_sparsity + IF (my_use_dbcsr) THEN + IF (.NOT. ASSOCIATED(mo_set%mo_coeff_b)) THEN + CPABORT("mo_coeff_b NOT ASSOCIATED") + END IF + END IF + + CALL dbcsr_set(density_matrix, 0.0_dp) + + IF (.NOT. mo_set%uniform_occupation) THEN ! not all orbitals 1..homo are equally occupied + + IF (my_use_dbcsr) THEN + CALL dbcsr_copy(dbcsr_tmp, mo_set%mo_coeff_b) + CALL dbcsr_scale_by_vector(dbcsr_tmp, mo_set%occupation_numbers(1:mo_set%homo), & + side='right') + CALL dbcsr_multiply("N", "T", 1.0_dp, mo_set%mo_coeff_b, dbcsr_tmp, & + 1.0_dp, density_matrix, retain_sparsity=my_retain_sparsity, & + last_k=mo_set%homo) + CALL dbcsr_release(dbcsr_tmp) + ELSE + NULLIFY (fm_tmp) + CALL cp_fm_create(fm_tmp, mo_set%mo_coeff%matrix_struct) + CALL cp_fm_to_fm(mo_set%mo_coeff, fm_tmp) + CALL cp_fm_column_scale(fm_tmp, mo_set%occupation_numbers(1:mo_set%homo)) + alpha = 1.0_dp + CALL cp_dbcsr_plus_fm_fm_t(sparse_matrix=density_matrix, & + matrix_v=mo_set%mo_coeff, & + matrix_g=fm_tmp, & + ncol=mo_set%homo, & + alpha=alpha) + CALL cp_fm_release(fm_tmp) + ENDIF + ELSE + IF (my_use_dbcsr) THEN + CALL dbcsr_multiply("N", "T", mo_set%maxocc, mo_set%mo_coeff_b, mo_set%mo_coeff_b, & + 1.0_dp, density_matrix, retain_sparsity=my_retain_sparsity, & + last_k=mo_set%homo) + ELSE + alpha = mo_set%maxocc + CALL cp_dbcsr_plus_fm_fm_t(sparse_matrix=density_matrix, & + matrix_v=mo_set%mo_coeff, & + ncol=mo_set%homo, & + alpha=alpha) + ENDIF + ENDIF + + CALL timestop(handle) + + END SUBROUTINE calculate_dm_sparse + +! ************************************************************************************************** +!> \brief Calculate the W matrix from the MO eigenvectors, MO eigenvalues, +!> and the MO occupation numbers. Only works if they are eigenstates +!> \param mo_set type containing the full matrix of the MO and the eigenvalues +!> \param w_matrix sparse matrix +!> error +!> \par History +!> Creation (03.03.03,MK) +!> Modification that computes it as a full block, several times (e.g. 20) +!> faster at the cost of some additional memory +!> \author MK +! ************************************************************************************************** + SUBROUTINE calculate_w_matrix_1(mo_set, w_matrix) + + TYPE(mo_set_type), POINTER :: mo_set + TYPE(dbcsr_type), POINTER :: w_matrix + + CHARACTER(len=*), PARAMETER :: routineN = 'calculate_w_matrix_1', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, imo + REAL(KIND=dp), DIMENSION(:), POINTER :: eigocc + TYPE(cp_fm_type), POINTER :: weighted_vectors + + CALL timeset(routineN, handle) + NULLIFY (weighted_vectors) + + CALL dbcsr_set(w_matrix, 0.0_dp) + CALL cp_fm_create(weighted_vectors, mo_set%mo_coeff%matrix_struct, "weighted_vectors") + CALL cp_fm_to_fm(mo_set%mo_coeff, weighted_vectors) + + ! scale every column with the occupation + ALLOCATE (eigocc(mo_set%homo)) + + DO imo = 1, mo_set%homo + eigocc(imo) = mo_set%eigenvalues(imo)*mo_set%occupation_numbers(imo) + ENDDO + CALL cp_fm_column_scale(weighted_vectors, eigocc) + DEALLOCATE (eigocc) + + CALL cp_dbcsr_plus_fm_fm_t(sparse_matrix=w_matrix, & + matrix_v=mo_set%mo_coeff, & + matrix_g=weighted_vectors, & + ncol=mo_set%homo) + + CALL cp_fm_release(weighted_vectors) + + CALL timestop(handle) + + END SUBROUTINE calculate_w_matrix_1 + +! ************************************************************************************************** +!> \brief Calculate the W matrix from the MO coefs, MO derivs +!> could overwrite the mo_derivs for increased memory efficiency +!> \param mo_set type containing the full matrix of the MO coefs +!> mo_deriv: +!> \param mo_deriv ... +!> \param w_matrix sparse matrix +!> \param s_matrix sparse matrix for the overlap +!> error +!> \par History +!> Creation (JV) +!> \author MK +! ************************************************************************************************** + SUBROUTINE calculate_w_matrix_ot(mo_set, mo_deriv, w_matrix, s_matrix) + + TYPE(mo_set_type), POINTER :: mo_set + TYPE(dbcsr_type), POINTER :: mo_deriv, w_matrix, s_matrix + + CHARACTER(len=*), PARAMETER :: routineN = 'calculate_w_matrix_ot', & + routineP = moduleN//':'//routineN + LOGICAL, PARAMETER :: check_gradient = .FALSE., & + do_symm = .FALSE. + + INTEGER :: handle, ncol_block, ncol_global, & + nrow_block, nrow_global + REAL(KIND=dp), DIMENSION(:), POINTER :: occupation_numbers, scaling_factor + TYPE(cp_fm_struct_type), POINTER :: fm_struct_tmp + TYPE(cp_fm_type), POINTER :: gradient, h_block, h_block_t, & + weighted_vectors + + CALL timeset(routineN, handle) + NULLIFY (weighted_vectors, h_block, fm_struct_tmp) + + CALL cp_fm_get_info(matrix=mo_set%mo_coeff, & + ncol_global=ncol_global, & + nrow_global=nrow_global, & + nrow_block=nrow_block, & + ncol_block=ncol_block) + + CALL cp_fm_create(weighted_vectors, mo_set%mo_coeff%matrix_struct, "weighted_vectors") + CALL cp_fm_struct_create(fm_struct_tmp, nrow_global=ncol_global, ncol_global=ncol_global, & + para_env=mo_set%mo_coeff%matrix_struct%para_env, & + context=mo_set%mo_coeff%matrix_struct%context) + CALL cp_fm_create(h_block, fm_struct_tmp, name="h block") + IF (do_symm) CALL cp_fm_create(h_block_t, fm_struct_tmp, name="h block t") + CALL cp_fm_struct_release(fm_struct_tmp) + + CALL get_mo_set(mo_set=mo_set, occupation_numbers=occupation_numbers) + ALLOCATE (scaling_factor(SIZE(occupation_numbers))) + scaling_factor = 2.0_dp*occupation_numbers + CALL copy_dbcsr_to_fm(mo_deriv, weighted_vectors) + CALL cp_fm_column_scale(weighted_vectors, scaling_factor) + DEALLOCATE (scaling_factor) + + ! the convention seems to require the half here, the factor of two is presumably taken care of + ! internally in qs_core_hamiltonian + CALL cp_gemm('T', 'N', ncol_global, ncol_global, nrow_global, 0.5_dp, & + mo_set%mo_coeff, weighted_vectors, 0.0_dp, h_block) + + IF (do_symm) THEN + ! at the minimum things are anyway symmetric, but numerically it might not be the case + ! needs some investigation to find out if using this is better + CALL cp_fm_transpose(h_block, h_block_t) + CALL cp_fm_scale_and_add(0.5_dp, h_block, 0.5_dp, h_block_t) + ENDIF + + ! this could overwrite the mo_derivs to save the weighted_vectors + CALL cp_gemm('N', 'N', nrow_global, ncol_global, ncol_global, 1.0_dp, & + mo_set%mo_coeff, h_block, 0.0_dp, weighted_vectors) + + CALL dbcsr_set(w_matrix, 0.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(sparse_matrix=w_matrix, & + matrix_v=mo_set%mo_coeff, & + matrix_g=weighted_vectors, & + ncol=mo_set%homo) + + IF (check_gradient) THEN + CALL cp_fm_create(gradient, mo_set%mo_coeff%matrix_struct, "gradient") + CALL cp_dbcsr_sm_fm_multiply(s_matrix, weighted_vectors, & + gradient, ncol_global) + + ALLOCATE (scaling_factor(SIZE(occupation_numbers))) + scaling_factor = 2.0_dp*occupation_numbers + CALL copy_dbcsr_to_fm(mo_deriv, weighted_vectors) + CALL cp_fm_column_scale(weighted_vectors, scaling_factor) + DEALLOCATE (scaling_factor) + + WRITE (*, *) " maxabs difference ", MAXVAL(ABS(weighted_vectors%local_data - 2.0_dp*gradient%local_data)) + CALL cp_fm_release(gradient) + ENDIF + + IF (do_symm) CALL cp_fm_release(h_block_t) + CALL cp_fm_release(weighted_vectors) + CALL cp_fm_release(h_block) + + CALL timestop(handle) + + END SUBROUTINE calculate_w_matrix_ot + +! ************************************************************************************************** +!> \brief Calculate the energy-weighted density matrix W if ROKS is active. +!> The W matrix is returned in matrix_w. +!> \param mo_set ... +!> \param matrix_ks ... +!> \param matrix_p ... +!> \param matrix_w ... +!> \author 04.05.06,MK +! ************************************************************************************************** + SUBROUTINE calculate_w_matrix_roks(mo_set, matrix_ks, matrix_p, matrix_w) + TYPE(mo_set_type), POINTER :: mo_set + TYPE(dbcsr_type), POINTER :: matrix_ks, matrix_p, matrix_w + + CHARACTER(len=*), PARAMETER :: routineN = 'calculate_w_matrix_roks', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, nao + TYPE(cp_blacs_env_type), POINTER :: context + TYPE(cp_fm_struct_type), POINTER :: fm_struct + TYPE(cp_fm_type), POINTER :: c, ks, p, work + TYPE(cp_para_env_type), POINTER :: para_env + + CALL timeset(routineN, handle) + + NULLIFY (c) + NULLIFY (context) + NULLIFY (fm_struct) + NULLIFY (ks) + NULLIFY (p) + NULLIFY (para_env) + NULLIFY (work) + + CALL get_mo_set(mo_set=mo_set, mo_coeff=c) + CALL cp_fm_get_info(c, context=context, nrow_global=nao, para_env=para_env) + CALL cp_fm_struct_create(fm_struct, context=context, nrow_global=nao, & + ncol_global=nao, para_env=para_env) + CALL cp_fm_create(ks, fm_struct, name="Kohn-Sham matrix") + CALL cp_fm_create(p, fm_struct, name="Density matrix") + CALL cp_fm_create(work, fm_struct, name="Work matrix") + CALL cp_fm_struct_release(fm_struct) + CALL copy_dbcsr_to_fm(matrix_ks, ks) + CALL copy_dbcsr_to_fm(matrix_p, p) + CALL cp_fm_upper_to_full(p, work) + CALL cp_fm_symm("L", "U", nao, nao, 1.0_dp, ks, p, 0.0_dp, work) + CALL cp_gemm("T", "N", nao, nao, nao, 1.0_dp, p, work, 0.0_dp, ks) + CALL dbcsr_set(matrix_w, 0.0_dp) + CALL copy_fm_to_dbcsr(ks, matrix_w, keep_sparsity=.TRUE.) + + CALL cp_fm_release(work) + CALL cp_fm_release(p) + CALL cp_fm_release(ks) + + CALL timestop(handle) + + END SUBROUTINE calculate_w_matrix_roks + +! ************************************************************************************************** +!> \brief Calculate the response W matrix from the MO eigenvectors, MO eigenvalues, +!> and the MO occupation numbers. Only works if they are eigenstates +!> \param mo_set type containing the full matrix of the MO and the eigenvalues +!> \param psi1 response orbitals +!> \param ks_matrix Kohn-Sham sparse matrix +!> \param w_matrix sparse matrix +!> \par History +!> adapted from calculate_w_matrix_1 +!> \author JGH +! ************************************************************************************************** + SUBROUTINE calculate_wz_matrix(mo_set, psi1, ks_matrix, w_matrix) + + TYPE(mo_set_type), POINTER :: mo_set + TYPE(cp_fm_type), POINTER :: psi1 + TYPE(dbcsr_type), POINTER :: ks_matrix, w_matrix + + CHARACTER(len=*), PARAMETER :: routineN = 'calculate_wz_matrix', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, ncol, nrow + TYPE(cp_fm_struct_type), POINTER :: fm_struct_tmp + TYPE(cp_fm_type), POINTER :: ksmat, scrv + + CALL timeset(routineN, handle) + + CALL cp_fm_get_info(matrix=mo_set%mo_coeff, ncol_global=ncol, nrow_global=nrow) + CALL cp_fm_create(scrv, mo_set%mo_coeff%matrix_struct, "scr vectors") + CALL cp_fm_struct_create(fm_struct_tmp, nrow_global=ncol, ncol_global=ncol, & + para_env=mo_set%mo_coeff%matrix_struct%para_env, & + context=mo_set%mo_coeff%matrix_struct%context) + CALL cp_fm_create(ksmat, fm_struct_tmp, name="KS") + CALL cp_fm_struct_release(fm_struct_tmp) + CALL cp_dbcsr_sm_fm_multiply(ks_matrix, mo_set%mo_coeff, scrv, ncol) + CALL cp_gemm("T", "N", ncol, ncol, nrow, 1.0_dp, mo_set%mo_coeff, scrv, 0.0_dp, ksmat) + CALL cp_gemm("N", "N", nrow, ncol, ncol, 1.0_dp, mo_set%mo_coeff, ksmat, 0.0_dp, scrv) + CALL dbcsr_set(w_matrix, 0.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=scrv, matrix_g=psi1, & + ncol=mo_set%homo, alpha=0.5_dp) + CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=psi1, matrix_g=scrv, & + ncol=mo_set%homo, alpha=0.5_dp) + CALL cp_fm_release(scrv) + CALL cp_fm_release(ksmat) + + CALL timestop(handle) + + END SUBROUTINE calculate_wz_matrix + +! ************************************************************************************************** +!> \brief Calculate the Wz matrix from the MO eigenvectors, MO eigenvalues, +!> and the MO occupation numbers. Only works if they are eigenstates +!> \param c0vec ... +!> \param hzm ... +!> \param w_matrix sparse matrix +!> \param focc ... +!> \par History +!> adapted from calculate_w_matrix_1 +!> \author JGH +! ************************************************************************************************** + SUBROUTINE calculate_whz_matrix(c0vec, hzm, w_matrix, focc) + + TYPE(cp_fm_type), POINTER :: c0vec + TYPE(dbcsr_type), POINTER :: hzm, w_matrix + REAL(KIND=dp), INTENT(IN) :: focc + + CHARACTER(len=*), PARAMETER :: routineN = 'calculate_whz_matrix', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, nao, norb + REAL(KIND=dp) :: falpha + TYPE(cp_fm_struct_type), POINTER :: fm_struct, fm_struct_mat + TYPE(cp_fm_type), POINTER :: chcmat, hcvec + + CALL timeset(routineN, handle) + + falpha = focc + + CALL cp_fm_create(hcvec, c0vec%matrix_struct, "hcvec") + CALL cp_fm_get_info(hcvec, matrix_struct=fm_struct, nrow_global=nao, ncol_global=norb) + CALL cp_fm_struct_create(fm_struct_mat, context=fm_struct%context, nrow_global=norb, & + ncol_global=norb, para_env=fm_struct%para_env) + CALL cp_fm_create(chcmat, fm_struct_mat) + CALL cp_fm_struct_release(fm_struct_mat) + + CALL cp_dbcsr_sm_fm_multiply(hzm, c0vec, hcvec, norb) + CALL cp_gemm("T", "N", norb, norb, nao, 1.0_dp, c0vec, hcvec, 0.0_dp, chcmat) + CALL cp_gemm("N", "N", nao, norb, norb, 1.0_dp, c0vec, chcmat, 0.0_dp, hcvec) + + CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=hcvec, matrix_g=c0vec, ncol=norb, alpha=falpha) + + CALL cp_fm_release(hcvec) + CALL cp_fm_release(chcmat) + + CALL timestop(handle) + + END SUBROUTINE calculate_whz_matrix + +! ************************************************************************************************** +!> \brief Calculate the excited state W matrix from the MO eigenvectors, KS matrix +!> \param mos_occ ... +!> \param xvec ... +!> \param ks_matrix ... +!> \param w_matrix ... +!> \par History +!> adapted from calculate_wz_matrix +!> \author JGH +! ************************************************************************************************** + SUBROUTINE calculate_wx_matrix(mos_occ, xvec, ks_matrix, w_matrix) + + TYPE(cp_fm_type), POINTER :: mos_occ, xvec + TYPE(dbcsr_type), POINTER :: ks_matrix, w_matrix + + CHARACTER(len=*), PARAMETER :: routineN = 'calculate_wx_matrix', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, ncol, nrow + TYPE(cp_fm_struct_type), POINTER :: fm_struct_tmp + TYPE(cp_fm_type), POINTER :: ksmat, scrv + + CALL timeset(routineN, handle) + + CALL cp_fm_get_info(matrix=mos_occ, ncol_global=ncol, nrow_global=nrow) + CALL cp_fm_create(scrv, mos_occ%matrix_struct, "scr vectors") + CALL cp_fm_struct_create(fm_struct_tmp, nrow_global=ncol, ncol_global=ncol, & + para_env=mos_occ%matrix_struct%para_env, & + context=mos_occ%matrix_struct%context) + CALL cp_fm_create(ksmat, fm_struct_tmp, name="KS") + CALL cp_fm_struct_release(fm_struct_tmp) + CALL cp_dbcsr_sm_fm_multiply(ks_matrix, mos_occ, scrv, ncol) + CALL cp_gemm("T", "N", ncol, ncol, nrow, 1.0_dp, mos_occ, scrv, 0.0_dp, ksmat) + CALL cp_gemm("N", "N", nrow, ncol, ncol, 1.0_dp, xvec, ksmat, 0.0_dp, scrv) + CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=scrv, matrix_g=xvec, ncol=ncol, alpha=0.5_dp) + CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=xvec, matrix_g=scrv, ncol=ncol, alpha=0.5_dp) + CALL cp_fm_release(scrv) + CALL cp_fm_release(ksmat) + + CALL timestop(handle) + + END SUBROUTINE calculate_wx_matrix + +! ************************************************************************************************** +!> \brief Calculate the excited state W matrix from the MO eigenvectors, KS matrix +!> \param mos_occ ... +!> \param xvec ... +!> \param s_matrix ... +!> \param ks_matrix ... +!> \param w_matrix ... +!> \param eval ... +!> \par History +!> adapted from calculate_wz_matrix +!> \author JGH +! ************************************************************************************************** + SUBROUTINE calculate_xwx_matrix(mos_occ, xvec, s_matrix, ks_matrix, w_matrix, eval) + + TYPE(cp_fm_type), POINTER :: mos_occ, xvec + TYPE(dbcsr_type), POINTER :: s_matrix, ks_matrix, w_matrix + REAL(KIND=dp), INTENT(IN) :: eval + + CHARACTER(len=*), PARAMETER :: routineN = 'calculate_xwx_matrix', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, ncol, nrow + TYPE(cp_fm_struct_type), POINTER :: fm_struct_tmp + TYPE(cp_fm_type), POINTER :: scrv, xsxmat + + CALL timeset(routineN, handle) + + CALL cp_fm_get_info(matrix=mos_occ, ncol_global=ncol, nrow_global=nrow) + CALL cp_fm_create(scrv, mos_occ%matrix_struct, "scr vectors") + CALL cp_fm_struct_create(fm_struct_tmp, nrow_global=ncol, ncol_global=ncol, & + para_env=mos_occ%matrix_struct%para_env, & + context=mos_occ%matrix_struct%context) + CALL cp_fm_create(xsxmat, fm_struct_tmp, name="XSX") + CALL cp_fm_struct_release(fm_struct_tmp) + + CALL cp_dbcsr_sm_fm_multiply(ks_matrix, xvec, scrv, ncol, 1.0_dp, 0.0_dp) + CALL cp_dbcsr_sm_fm_multiply(s_matrix, xvec, scrv, ncol, eval, -1.0_dp) + CALL cp_gemm("T", "N", ncol, ncol, nrow, 1.0_dp, xvec, scrv, 0.0_dp, xsxmat) + + CALL cp_gemm("N", "N", nrow, ncol, ncol, 1.0_dp, mos_occ, xsxmat, 0.0_dp, scrv) + CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=scrv, matrix_g=mos_occ, ncol=ncol, alpha=0.5_dp) + CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=mos_occ, matrix_g=scrv, ncol=ncol, alpha=0.5_dp) + + CALL cp_fm_release(scrv) + CALL cp_fm_release(xsxmat) + + CALL timestop(handle) + + END SUBROUTINE calculate_xwx_matrix + +END MODULE qs_density_matrices diff --git a/src/qs_dispersion_pairpot.F b/src/qs_dispersion_pairpot.F index a914c6fa94..3ea45a3bfd 100644 --- a/src/qs_dispersion_pairpot.F +++ b/src/qs_dispersion_pairpot.F @@ -1273,9 +1273,7 @@ CONTAINS atener => atprop%atevdw END IF atstress = atprop%stress - IF (atstress) THEN - atstr => atprop%atstress - END IF + atstr => atprop%atstress IF (unit_nr > 0) THEN WRITE (unit_nr, *) diff --git a/src/qs_energy.F b/src/qs_energy.F index a9134de93e..b1153b5a50 100644 --- a/src/qs_energy.F +++ b/src/qs_energy.F @@ -16,6 +16,7 @@ MODULE qs_energy USE cp_control_types, ONLY: dft_control_type USE dm_ls_scf, ONLY: ls_scf USE energy_corrections, ONLY: energy_correction + USE excited_states, ONLY: excited_state_energy USE lri_environment_methods, ONLY: lri_print_stat USE qs_energy_init, ONLY: qs_energies_init USE qs_energy_types, ONLY: qs_energy_type @@ -112,7 +113,9 @@ CONTAINS CALL energy_correction(qs_env, ec_init=.TRUE., calculate_forces=.FALSE.) END IF - CALL qs_energies_properties(qs_env) + CALL qs_energies_properties(qs_env, calc_forces) + + CALL excited_state_energy(qs_env, calculate_forces=.FALSE.) IF (dft_control%qs_control%lrigpw) THEN CALL lri_print_stat(qs_env) diff --git a/src/qs_energy_matrix_w.F b/src/qs_energy_matrix_w.F index b9babe55e4..92e4329997 100644 --- a/src/qs_energy_matrix_w.F +++ b/src/qs_energy_matrix_w.F @@ -26,10 +26,10 @@ MODULE qs_energy_matrix_w USE kpoint_methods, ONLY: kpoint_density_matrices,& kpoint_density_transform USE kpoint_types, ONLY: kpoint_type + USE qs_density_matrices, ONLY: calculate_w_matrix,& + calculate_w_matrix_ot USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type - USE qs_ks_methods, ONLY: calculate_w_matrix,& - calculate_w_matrix_ot USE qs_mo_types, ONLY: get_mo_set,& mo_set_p_type,& mo_set_type diff --git a/src/qs_energy_types.F b/src/qs_energy_types.F index f67fc8f670..9fa580548a 100644 --- a/src/qs_energy_types.F +++ b/src/qs_energy_types.F @@ -65,6 +65,8 @@ MODULE qs_energy_types ! non-scf orbital(density) corrections ! for example, almo delocalization corrction singles_corr, & + ! excitation energy + excited_state, & total, & tot_old, & kinetic, & !total kinetic energy [rk] @@ -187,6 +189,7 @@ CONTAINS qs_energy%efermi = 0.0_dp qs_energy%kinetic = 0.0_dp qs_energy%surf_dipole = 0.0_dp + qs_energy%excited_state = 0.0_dp qs_energy%total = 0.0_dp qs_energy%singles_corr = 0.0_dp qs_energy%nonscf_correction = 0.0_dp diff --git a/src/qs_energy_utils.F b/src/qs_energy_utils.F index 072bc9b517..19d4772259 100644 --- a/src/qs_energy_utils.F +++ b/src/qs_energy_utils.F @@ -40,13 +40,13 @@ MODULE qs_energy_utils USE mp2, ONLY: mp2_main USE pw_env_types, ONLY: pw_env_type USE pw_types, ONLY: pw_p_type + USE qs_density_matrices, ONLY: calculate_w_matrix,& + calculate_w_matrix_ot USE qs_energy_types, ONLY: qs_energy_type USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type USE qs_integrate_potential, ONLY: integrate_v_core_rspace - USE qs_ks_methods, ONLY: calculate_w_matrix,& - calculate_w_matrix_ot,& - qs_ks_update_qs_env + USE qs_ks_methods, ONLY: qs_ks_update_qs_env USE qs_linres_module, ONLY: linres_calculation_low USE qs_mo_types, ONLY: get_mo_set,& mo_set_p_type,& @@ -202,12 +202,14 @@ CONTAINS !> \brief Refactoring of qs_energies_scf. Moves computation of properties !> into separate subroutine !> \param qs_env ... +!> \param calc_forces ... !> \par History !> 05.2013 created [Florian Schiffmann] ! ************************************************************************************************** - SUBROUTINE qs_energies_properties(qs_env) + SUBROUTINE qs_energies_properties(qs_env, calc_forces) TYPE(qs_environment_type), POINTER :: qs_env + LOGICAL, INTENT(IN) :: calc_forces CHARACTER(len=*), PARAMETER :: routineN = 'qs_energies_properties' @@ -298,7 +300,7 @@ CONTAINS END IF IF (dft_control%tddfpt2_control%enabled) THEN - CALL tddfpt(qs_env) + CALL tddfpt(qs_env, calc_forces) END IF ! tip scan diff --git a/src/qs_environment.F b/src/qs_environment.F index 04c4519fc0..6da0be7a8a 100644 --- a/src/qs_environment.F +++ b/src/qs_environment.F @@ -67,6 +67,7 @@ MODULE qs_environment distribution_1d_type USE distribution_methods, ONLY: distribute_molecules_1d USE dm_ls_scf_create, ONLY: ls_scf_create + USE ec_env_types, ONLY: energy_correction_type USE ec_environment, ONLY: ec_env_create USE et_coupling_types, ONLY: et_coupling_create USE ewald_environment_types, ONLY: ewald_env_create,& @@ -80,6 +81,8 @@ MODULE qs_environment USE ewald_pw_types, ONLY: ewald_pw_create,& ewald_pw_release,& ewald_pw_type + USE exstates_types, ONLY: excited_energy_type,& + exstate_create USE external_potential_types, ONLY: get_potential,& init_potential,& set_potential @@ -264,6 +267,8 @@ CONTAINS TYPE(cell_type), POINTER :: my_cell, my_cell_ref TYPE(cp_blacs_env_type), POINTER :: blacs_env TYPE(dft_control_type), POINTER :: dft_control + TYPE(energy_correction_type), POINTER :: ec_env + TYPE(excited_energy_type), POINTER :: exstate_env TYPE(kpoint_type), POINTER :: kpoints TYPE(lri_environment_type), POINTER :: lri_env TYPE(particle_type), DIMENSION(:), POINTER :: particle_set @@ -440,6 +445,16 @@ CONTAINS CALL kg_env_create(qs_env, qs_env%kg_env, qs_kind_set, qs_env%input) END IF + dft_section => section_vals_get_subs_vals(qs_env%input, "DFT") + CALL section_vals_val_get(dft_section, "ENERGY_CORRECTION%_SECTION_PARAMETERS_", & + l_val=qs_env%energy_correction) + dft_section => section_vals_get_subs_vals(qs_env%input, "DFT") + CALL section_vals_val_get(dft_section, "EXCITED_STATES%_SECTION_PARAMETERS_", & + l_val=qs_env%excited_state) + NULLIFY (exstate_env) + CALL exstate_create(exstate_env, qs_env%excited_state, dft_section) + CALL set_qs_env(qs_env, exstate_env=exstate_env) + et_coupling_section => section_vals_get_subs_vals(qs_env%input, & "PROPERTIES%ET_COUPLING") CALL section_vals_get(et_coupling_section, explicit=do_et) @@ -455,13 +470,13 @@ CONTAINS CALL ls_scf_create(qs_env) ENDIF + NULLIFY (ec_env) dft_section => section_vals_get_subs_vals(qs_env%input, "DFT") CALL section_vals_val_get(dft_section, "ENERGY_CORRECTION%_SECTION_PARAMETERS_", & l_val=qs_env%energy_correction) ec_section => section_vals_get_subs_vals(qs_env%input, "DFT%ENERGY_CORRECTION") - IF (qs_env%energy_correction) THEN - CALL ec_env_create(qs_env, qs_env%ec_env, dft_section, ec_section) - END IF + CALL ec_env_create(qs_env, ec_env, dft_section, ec_section) + CALL set_qs_env(qs_env, ec_env=ec_env) IF (dft_control%qs_control%do_almo_scf) THEN CALL almo_scf_env_create(qs_env) diff --git a/src/qs_environment_types.F b/src/qs_environment_types.F index 53989fa860..711af989ae 100644 --- a/src/qs_environment_types.F +++ b/src/qs_environment_types.F @@ -51,6 +51,8 @@ MODULE qs_environment_types USE ewald_pw_types, ONLY: ewald_pw_release,& ewald_pw_retain,& ewald_pw_type + USE exstates_types, ONLY: excited_energy_type,& + exstate_release USE fist_nonbond_env_types, ONLY: fist_nonbond_env_release,& fist_nonbond_env_type USE global_types, ONLY: global_environment_type @@ -285,6 +287,9 @@ MODULE qs_environment_types TYPE(lri_density_type), POINTER :: lri_density ! Energy correction TYPE(energy_correction_type), POINTER :: ec_env + ! Excited States + LOGICAL :: excited_state + TYPE(excited_energy_type), POINTER :: exstate_env ! Empirical dispersion TYPE(qs_dispersion_type), POINTER :: dispersion_env ! Empirical geometrical BSSE correction @@ -472,6 +477,7 @@ CONTAINS !> \param admm_dm ... !> \param lri_env ... !> \param lri_density ... +!> \param exstate_env ... !> \param ec_env ... !> \param dispersion_env ... !> \param gcp_env ... @@ -527,7 +533,8 @@ CONTAINS neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, & outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, & se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, admm_dm, & - lri_env, lri_density, ec_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, & + lri_env, lri_density, exstate_env, ec_env, dispersion_env, gcp_env, vee, & + rho_external, external_vxc, mask, & mp2_env, kg_env, WannierCentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, & s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, & gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, rhs) @@ -641,6 +648,7 @@ CONTAINS TYPE(admm_dm_type), OPTIONAL, POINTER :: admm_dm TYPE(lri_environment_type), OPTIONAL, POINTER :: lri_env TYPE(lri_density_type), OPTIONAL, POINTER :: lri_density + TYPE(excited_energy_type), OPTIONAL, POINTER :: exstate_env TYPE(energy_correction_type), OPTIONAL, POINTER :: ec_env TYPE(qs_dispersion_type), OPTIONAL, POINTER :: dispersion_env TYPE(qs_gcp_type), OPTIONAL, POINTER :: gcp_env @@ -718,6 +726,7 @@ CONTAINS IF (PRESENT(lri_env)) lri_env => qs_env%lri_env IF (PRESENT(lri_density)) lri_density => qs_env%lri_density IF (PRESENT(ec_env)) ec_env => qs_env%ec_env + IF (PRESENT(exstate_env)) exstate_env => qs_env%exstate_env IF (PRESENT(dispersion_env)) dispersion_env => qs_env%dispersion_env IF (PRESENT(gcp_env)) gcp_env => qs_env%gcp_env IF (PRESENT(run_rtp)) run_rtp = qs_env%run_rtp @@ -939,6 +948,7 @@ CONTAINS NULLIFY (qs_env%efield) NULLIFY (qs_env%lri_env) NULLIFY (qs_env%ec_env) + NULLIFY (qs_env%exstate_env) NULLIFY (qs_env%lri_density) NULLIFY (qs_env%gcp_env) NULLIFY (qs_env%rtp) @@ -1048,6 +1058,7 @@ CONTAINS !> \param transport_env ... !> \param lri_env ... !> \param lri_density ... +!> \param exstate_env ... !> \param ec_env ... !> \param dispersion_env ... !> \param gcp_env ... @@ -1080,7 +1091,7 @@ CONTAINS linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, & outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, & se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, & - do_transport, transport_env, lri_env, lri_density, ec_env, dispersion_env, & + do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, & gcp_env, mp2_env, kg_env, force, & kpoints, WannierCentres, almo_scf_env, gradient_history, variable_history, embed_pot, & spin_embed_pot, polar_env, mos_last_converged, rhs) @@ -1142,6 +1153,7 @@ CONTAINS TYPE(transport_env_type), OPTIONAL, POINTER :: transport_env TYPE(lri_environment_type), OPTIONAL, POINTER :: lri_env TYPE(lri_density_type), OPTIONAL, POINTER :: lri_density + TYPE(excited_energy_type), OPTIONAL, POINTER :: exstate_env TYPE(energy_correction_type), OPTIONAL, POINTER :: ec_env TYPE(qs_dispersion_type), OPTIONAL, POINTER :: dispersion_env TYPE(qs_gcp_type), OPTIONAL, POINTER :: gcp_env @@ -1331,6 +1343,7 @@ CONTAINS IF (PRESENT(lri_env)) qs_env%lri_env => lri_env IF (PRESENT(lri_density)) qs_env%lri_density => lri_density IF (PRESENT(ec_env)) qs_env%ec_env => ec_env + IF (PRESENT(exstate_env)) qs_env%exstate_env => exstate_env IF (PRESENT(dispersion_env)) qs_env%dispersion_env => dispersion_env IF (PRESENT(gcp_env)) qs_env%gcp_env => gcp_env IF (PRESENT(WannierCentres)) qs_env%WannierCentres => WannierCentres @@ -1560,6 +1573,9 @@ CONTAINS IF (ASSOCIATED(qs_env%ec_env)) THEN CALL ec_env_release(qs_env%ec_env) END IF + IF (ASSOCIATED(qs_env%exstate_env)) THEN + CALL exstate_release(qs_env%exstate_env) + END IF IF (ASSOCIATED(qs_env%mp2_env)) THEN CALL mp2_env_release(qs_env%mp2_env) END IF diff --git a/src/qs_fb_env_methods.F b/src/qs_fb_env_methods.F index c703cec2f7..9820f9b351 100644 --- a/src/qs_fb_env_methods.F +++ b/src/qs_fb_env_methods.F @@ -62,6 +62,7 @@ MODULE qs_fb_env_methods USE orbital_pointers, ONLY: nco,& ncoset USE particle_types, ONLY: particle_type + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_diis, ONLY: qs_diis_b_step USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type @@ -89,7 +90,6 @@ MODULE qs_fb_env_methods mpools_rebuild_fm_pools,& mpools_release,& qs_matrix_pools_type - USE qs_mo_methods, ONLY: calculate_density_matrix USE qs_mo_occupation, ONLY: set_mo_occupation USE qs_mo_types, ONLY: allocate_mo_set,& deallocate_mo_set,& diff --git a/src/qs_force.F b/src/qs_force.F index b58e1ddf1e..103fd21ae4 100644 --- a/src/qs_force.F +++ b/src/qs_force.F @@ -35,6 +35,7 @@ MODULE qs_force USE ec_env_types, ONLY: energy_correction_type USE efield_utils, ONLY: calculate_ecore_efield USE energy_corrections, ONLY: energy_correction + USE excited_states, ONLY: excited_state_energy USE input_constants, ONLY: do_admm_purify_none USE input_section_types, ONLY: section_vals_get_subs_vals,& section_vals_type,& @@ -299,7 +300,7 @@ CONTAINS CALL build_xtb_matrices(qs_env=qs_env, para_env=para_env, & calculate_forces=.TRUE.) ELSEIF (perform_ec) THEN - CALL energy_correction(qs_env, ec_init=.FALSE., calculate_forces=.TRUE.) + ! ELSE ! Dispersion energy and forces are calculated in qs_energy? CALL build_core_hamiltonian_matrix(qs_env=qs_env, calculate_forces=.TRUE.) @@ -380,6 +381,13 @@ CONTAINS CALL update_mp2_forces(qs_env) END IF + IF (perform_ec) THEN + CALL energy_correction(qs_env, ec_init=.FALSE., calculate_forces=.TRUE.) + END IF + + ! Excited state forces + CALL excited_state_energy(qs_env, calculate_forces=.TRUE.) + ! replicate forces (get current pointer) NULLIFY (force) CALL get_qs_env(qs_env=qs_env, force=force) diff --git a/src/qs_force_types.F b/src/qs_force_types.F index 79105ff1b1..a88b7b90fe 100644 --- a/src/qs_force_types.F +++ b/src/qs_force_types.F @@ -12,9 +12,11 @@ ! ************************************************************************************************** MODULE qs_force_types - !USE cp_control_types, ONLY: qs_control_type USE atomic_kind_types, ONLY: atomic_kind_type,& get_atomic_kind + USE cp_log_handling, ONLY: cp_get_default_logger,& + cp_logger_get_default_io_unit,& + cp_logger_type USE cp_para_types, ONLY: cp_para_env_type USE kinds, ONLY: dp USE message_passing, ONLY: mp_sum @@ -61,7 +63,8 @@ MODULE qs_force_types get_qs_force, & put_qs_force, & total_qs_force, & - zero_qs_force + zero_qs_force, & + write_forces_debug CONTAINS @@ -577,4 +580,81 @@ CONTAINS END SUBROUTINE total_qs_force +! ************************************************************************************************** +!> \brief Write a Quickstep force data for 1 atom +!> \param qs_force ... +!> \param ikind ... +!> \param iatom ... +!> \param iunit ... +!> \date 05.06.2002 +!> \author MK/JGH +!> \version 1.0 +! ************************************************************************************************** + SUBROUTINE write_forces_debug(qs_force, ikind, iatom, iunit) + + TYPE(qs_force_type), DIMENSION(:), POINTER :: qs_force + INTEGER, INTENT(IN), OPTIONAL :: ikind, iatom, iunit + + CHARACTER(LEN=35) :: fmtstr2 + CHARACTER(LEN=48) :: fmtstr1 + INTEGER :: iounit, jatom, jkind + REAL(KIND=dp), DIMENSION(3) :: total + TYPE(cp_logger_type), POINTER :: logger + + IF (PRESENT(iunit)) THEN + iounit = iunit + ELSE + NULLIFY (logger) + logger => cp_get_default_logger() + iounit = cp_logger_get_default_io_unit(logger) + END IF + IF (PRESENT(ikind)) THEN + jkind = ikind + ELSE + jkind = 1 + END IF + IF (PRESENT(iatom)) THEN + jatom = iatom + ELSE + jatom = 1 + END IF + + IF (iounit > 0) THEN + + fmtstr1 = "(/,T2,A,/,T3,A,T11,A,T23,A,T40,A1,2(17X,A1))" + fmtstr2 = "((T2,I5,4X,I4,T18,A,T34,3F18.12))" + + WRITE (UNIT=iounit, FMT=fmtstr1) & + "FORCES [a.u.]", "Atom", "Kind", "Component", "X", "Y", "Z" + + total(1:3) = qs_force(jkind)%overlap(1:3, jatom) & + + qs_force(jkind)%overlap_admm(1:3, jatom) & + + qs_force(jkind)%kinetic(1:3, jatom) & + + qs_force(jkind)%gth_ppl(1:3, jatom) & + + qs_force(jkind)%gth_ppnl(1:3, jatom) & + + qs_force(jkind)%core_overlap(1:3, jatom) & + + qs_force(jkind)%rho_core(1:3, jatom) & + + qs_force(jkind)%rho_elec(1:3, jatom) & + + qs_force(jkind)%dispersion(1:3, jatom) & + + qs_force(jkind)%fock_4c(1:3, jatom) & + + qs_force(jkind)%mp2_non_sep(1:3, jatom) + + WRITE (UNIT=iounit, FMT=fmtstr2) & + jatom, jkind, " overlap", qs_force(jkind)%overlap(1:3, jatom), & + jatom, jkind, " overlap_admm", qs_force(jkind)%overlap_admm(1:3, jatom), & + jatom, jkind, " kinetic", qs_force(jkind)%kinetic(1:3, jatom), & + jatom, jkind, " gth_ppl", qs_force(jkind)%gth_ppl(1:3, jatom), & + jatom, jkind, " gth_ppnl", qs_force(jkind)%gth_ppnl(1:3, jatom), & + jatom, jkind, " core_overlap", qs_force(jkind)%core_overlap(1:3, jatom), & + jatom, jkind, " rho_core", qs_force(jkind)%rho_core(1:3, jatom), & + jatom, jkind, " rho_elec", qs_force(jkind)%rho_elec(1:3, jatom), & + jatom, jkind, " dispersion", qs_force(jkind)%dispersion(1:3, jatom), & + jatom, jkind, " fock_4c", qs_force(jkind)%fock_4c(1:3, jatom), & + jatom, jkind, " mp2_non_sep", qs_force(jkind)%mp2_non_sep(1:3, jatom), & + jatom, jkind, " total", total(1:3) + + END IF + + END SUBROUTINE write_forces_debug + END MODULE qs_force_types diff --git a/src/qs_fxc.F b/src/qs_fxc.F new file mode 100644 index 0000000000..7cc5850ebd --- /dev/null +++ b/src/qs_fxc.F @@ -0,0 +1,428 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +! ************************************************************************************************** +!> \brief https://en.wikipedia.org/wiki/Finite_difference_coefficient +!--------------------------------------------------------------------------------------------------- +!Derivative Accuracy 4 3 2 1 0 1 2 3 4 +!--------------------------------------------------------------------------------------------------- +! 1 2 -1/2 0 1/2 +! 4 1/12 -2/3 0 2/3 -1/12 +! 6 -1/60 3/20 -3/4 0 3/4 -3/20 1/60 +! 8 1/280 -4/105 1/5 -4/5 0 4/5 -1/5 4/105 -1/280 +!--------------------------------------------------------------------------------------------------- +! 2 2 1 -2 1 +! 4 -1/12 4/3 -5/2 4/3 -1/12 +! 6 1/90 -3/20 3/2 -49/18 3/2 -3/20 1/90 +! 8 -1/560 8/315 -1/5 8/5 -205/72 8/5 -1/5 8/315 -1/560 +!--------------------------------------------------------------------------------------------------- +!> \par History +!> init 17.03.2020 +!> \author JGH +! ************************************************************************************************** +MODULE qs_fxc + + USE cp_control_types, ONLY: dft_control_type + USE input_section_types, ONLY: section_vals_get_subs_vals,& + section_vals_type + USE kinds, ONLY: dp + USE pw_env_types, ONLY: pw_env_get,& + pw_env_type + USE pw_methods, ONLY: pw_axpy,& + pw_scale,& + pw_zero + USE pw_pool_types, ONLY: pw_pool_create_pw,& + pw_pool_give_back_pw,& + pw_pool_type + USE pw_types, ONLY: REALDATA3D,& + REALSPACE,& + pw_p_type + USE qs_ks_types, ONLY: get_ks_env,& + qs_ks_env_type + USE qs_rho_methods, ONLY: qs_rho_copy,& + qs_rho_scale_and_add + USE qs_rho_types, ONLY: qs_rho_create,& + qs_rho_get,& + qs_rho_release,& + qs_rho_type + USE qs_vxc, ONLY: qs_vxc_create + USE xc, ONLY: xc_calc_2nd_deriv,& + xc_prep_2nd_deriv + USE xc_derivative_set_types, ONLY: xc_derivative_set_type,& + xc_dset_release + USE xc_derivatives, ONLY: xc_functionals_get_needs + USE xc_rho_cflags_types, ONLY: xc_rho_cflags_type + USE xc_rho_set_types, ONLY: xc_rho_set_release,& + xc_rho_set_type +#include "./base/base_uses.f90" + + IMPLICIT NONE + + PRIVATE + + ! *** Public subroutines *** + PUBLIC :: qs_fxc_fdiff, qs_fxc_analytic, qs_fgxc_create, qs_fgxc_release + + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_fxc' + +! ************************************************************************************************** + +CONTAINS + +! ************************************************************************************************** +!> \brief ... +!> \param rho0 ... +!> \param rho1_r ... +!> \param xc_section ... +!> \param auxbas_pw_pool ... +!> \param is_triplet ... +!> \param v_xc ... +! ************************************************************************************************** + SUBROUTINE qs_fxc_analytic(rho0, rho1_r, xc_section, auxbas_pw_pool, is_triplet, v_xc) + + TYPE(qs_rho_type), POINTER :: rho0 + TYPE(pw_p_type), DIMENSION(:), POINTER :: rho1_r + TYPE(section_vals_type), POINTER :: xc_section + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + LOGICAL, INTENT(IN) :: is_triplet + TYPE(pw_p_type), DIMENSION(:), POINTER :: v_xc + + CHARACTER(len=*), PARAMETER :: routineN = 'qs_fxc_analytic', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, nspins + INTEGER, DIMENSION(2, 3) :: bo + LOGICAL :: lsd + REAL(KIND=dp) :: fac + TYPE(pw_p_type), DIMENSION(:), POINTER :: rho0_g, rho0_r, rho1_g, tau0_r + TYPE(section_vals_type), POINTER :: xc_fun_section + TYPE(xc_derivative_set_type), POINTER :: deriv_set + TYPE(xc_rho_cflags_type) :: needs + TYPE(xc_rho_set_type), POINTER :: rho0_set + + CALL timeset(routineN, handle) + + CPASSERT(.NOT. ASSOCIATED(v_xc)) + + CALL qs_rho_get(rho0, rho_r=rho0_r, rho_g=rho0_g, tau_r=tau0_r) + nspins = SIZE(rho0_r) + + lsd = (nspins == 2) + fac = 0._dp + IF (is_triplet .AND. nspins == 1) fac = -1.0_dp + + NULLIFY (deriv_set, rho0_set) + NULLIFY (rho1_g) + bo = rho1_r(1)%pw%pw_grid%bounds_local + xc_fun_section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL") + needs = xc_functionals_get_needs(xc_fun_section, lsd, .TRUE.) + ! calculate the arguments needed by the functionals + CALL xc_prep_2nd_deriv(deriv_set, rho0_set, rho0_r, auxbas_pw_pool, xc_section=xc_section) + CALL xc_calc_2nd_deriv(v_xc, deriv_set, rho0_set, rho1_r, rho1_g, & + auxbas_pw_pool, xc_section=xc_section, gapw=.FALSE., do_triplet=is_triplet) + CALL xc_dset_release(deriv_set) + CALL xc_rho_set_release(rho0_set) + + CALL timestop(handle) + + END SUBROUTINE qs_fxc_analytic + +! ************************************************************************************************** +!> \brief ... +!> \param ks_env ... +!> \param rho0_struct ... +!> \param rho1_struct ... +!> \param xc_section ... +!> \param accuracy ... +!> \param is_triplet ... +!> \param fxc_rho ... +!> \param fxc_tau ... +! ************************************************************************************************** + SUBROUTINE qs_fxc_fdiff(ks_env, rho0_struct, rho1_struct, xc_section, accuracy, is_triplet, & + fxc_rho, fxc_tau) + + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(qs_rho_type), POINTER :: rho0_struct, rho1_struct + TYPE(section_vals_type), POINTER :: xc_section + INTEGER, INTENT(IN) :: accuracy + LOGICAL, INTENT(IN) :: is_triplet + TYPE(pw_p_type), DIMENSION(:), POINTER :: fxc_rho, fxc_tau + + CHARACTER(len=*), PARAMETER :: routineN = 'qs_fxc_fdiff', routineP = moduleN//':'//routineN + REAL(KIND=dp), PARAMETER :: epsrho = 5.e-4_dp + + INTEGER :: handle, ispin, istep, nspins, nstep + REAL(KIND=dp) :: alpha, beta, exc, oeps1 + REAL(KIND=dp), DIMENSION(-4:4) :: ak + TYPE(dft_control_type), POINTER :: dft_control + TYPE(pw_env_type), POINTER :: pw_env + TYPE(pw_p_type), DIMENSION(:), POINTER :: v_tau_rspace, vxc00 + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + TYPE(qs_rho_type), POINTER :: rhoin + + CALL timeset(routineN, handle) + + CPASSERT(.NOT. ASSOCIATED(fxc_rho)) + CPASSERT(.NOT. ASSOCIATED(fxc_tau)) + CPASSERT(ASSOCIATED(rho0_struct)) + CPASSERT(ASSOCIATED(rho1_struct)) + + ak = 0.0_dp + SELECT CASE (accuracy) + CASE (:4) + nstep = 2 + ak(-2:2) = (/1.0_dp, -8.0_dp, 0.0_dp, 8.0_dp, -1.0_dp/)/12.0_dp + CASE (5:7) + nstep = 3 + ak(-3:3) = (/-1.0_dp, 9.0_dp, -45.0_dp, 0.0_dp, 45.0_dp, -9.0_dp, 1.0_dp/)/60.0_dp + CASE (8:) + nstep = 4 + ak(-4:4) = (/1.0_dp, -32.0_dp/3.0_dp, 56.0_dp, -224.0_dp, 0.0_dp, & + 224.0_dp, -56.0_dp, 32.0_dp/3.0_dp, -1.0_dp/)/280.0_dp + END SELECT + + CALL get_ks_env(ks_env, dft_control=dft_control, pw_env=pw_env) + CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool) + + nspins = dft_control%nspins + exc = 0.0_dp + + DO istep = -nstep, nstep + + IF (ak(istep) /= 0.0_dp) THEN + alpha = 1.0_dp + beta = REAL(istep, KIND=dp)*epsrho + NULLIFY (rhoin) + CALL qs_rho_create(rhoin) + NULLIFY (vxc00, v_tau_rspace) + IF (is_triplet) THEN + CPASSERT(nspins == 1) + CALL qs_rho_copy(rho0_struct, rhoin, auxbas_pw_pool, 2) + CALL qs_rho_scale_and_add(rhoin, rho1_struct, alpha, 0.5_dp*beta) + CALL qs_vxc_create(ks_env=ks_env, rho_struct=rhoin, xc_section=xc_section, & + vxc_rho=vxc00, vxc_tau=v_tau_rspace, exc=exc, just_energy=.FALSE.) + CALL pw_axpy(vxc00(2)%pw, vxc00(1)%pw, -1.0_dp) + ELSE + CALL qs_rho_copy(rho0_struct, rhoin, auxbas_pw_pool, nspins) + CALL qs_rho_scale_and_add(rhoin, rho1_struct, alpha, beta) + CALL qs_vxc_create(ks_env=ks_env, rho_struct=rhoin, xc_section=xc_section, & + vxc_rho=vxc00, vxc_tau=v_tau_rspace, exc=exc, just_energy=.FALSE.) + END IF + CALL qs_rho_release(rhoin) + IF (.NOT. ASSOCIATED(fxc_rho)) THEN + ALLOCATE (fxc_rho(nspins)) + DO ispin = 1, nspins + CALL pw_pool_create_pw(auxbas_pw_pool, fxc_rho(ispin)%pw, & + in_space=REALSPACE, use_data=REALDATA3D) + CALL pw_zero(fxc_rho(ispin)%pw) + END DO + END IF +!deb CPASSERT(.NOT. ASSOCIATED(v_tau_rspace)) + DO ispin = 1, nspins + CALL pw_axpy(vxc00(ispin)%pw, fxc_rho(ispin)%pw, ak(istep)) + END DO + DO ispin = 1, SIZE(vxc00) + CALL pw_pool_give_back_pw(auxbas_pw_pool, vxc00(ispin)%pw) + END DO + DEALLOCATE (vxc00) + END IF + + END DO + + oeps1 = 1.0_dp/epsrho + DO ispin = 1, nspins + CALL pw_scale(fxc_rho(ispin)%pw, oeps1) + END DO + + CALL timestop(handle) + + END SUBROUTINE qs_fxc_fdiff + +! ************************************************************************************************** +!> \brief ... +!> \param ks_env ... +!> \param rho0_struct ... +!> \param rho1_struct ... +!> \param xc_section ... +!> \param accuracy ... +!> \param is_triplet ... +!> \param fxc_rho ... +!> \param fxc_tau ... +!> \param gxc_rho ... +!> \param gxc_tau ... +! ************************************************************************************************** + SUBROUTINE qs_fgxc_create(ks_env, rho0_struct, rho1_struct, xc_section, accuracy, is_triplet, & + fxc_rho, fxc_tau, gxc_rho, gxc_tau) + + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(qs_rho_type), POINTER :: rho0_struct, rho1_struct + TYPE(section_vals_type), POINTER :: xc_section + INTEGER, INTENT(IN) :: accuracy + LOGICAL, INTENT(IN) :: is_triplet + TYPE(pw_p_type), DIMENSION(:), POINTER :: fxc_rho, fxc_tau, gxc_rho, gxc_tau + + CHARACTER(len=*), PARAMETER :: routineN = 'qs_fgxc_create', routineP = moduleN//':'//routineN + REAL(KIND=dp), PARAMETER :: epsrho = 5.e-4_dp + + INTEGER :: handle, ispin, istep, nspins, nstep + REAL(KIND=dp) :: alpha, beta, exc, oeps1, oeps2 + REAL(KIND=dp), DIMENSION(-4:4) :: ak, bl + TYPE(dft_control_type), POINTER :: dft_control + TYPE(pw_env_type), POINTER :: pw_env + TYPE(pw_p_type), DIMENSION(:), POINTER :: v_tau_rspace, vxc00 + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + TYPE(qs_rho_type), POINTER :: rhoin + + CALL timeset(routineN, handle) + + CPASSERT(.NOT. ASSOCIATED(fxc_rho)) + CPASSERT(.NOT. ASSOCIATED(fxc_tau)) + CPASSERT(.NOT. ASSOCIATED(gxc_rho)) + CPASSERT(.NOT. ASSOCIATED(gxc_tau)) + CPASSERT(ASSOCIATED(rho0_struct)) + CPASSERT(ASSOCIATED(rho1_struct)) + + ak = 0.0_dp + bl = 0.0_dp + SELECT CASE (accuracy) + CASE (:4) + nstep = 2 + ak(-2:2) = (/1.0_dp, -8.0_dp, 0.0_dp, 8.0_dp, -1.0_dp/)/12.0_dp + bl(-2:2) = (/-1.0_dp, 16.0_dp, -30.0_dp, 16.0_dp, -1.0_dp/)/12.0_dp + CASE (5:7) + nstep = 3 + ak(-3:3) = (/-1.0_dp, 9.0_dp, -45.0_dp, 0.0_dp, 45.0_dp, -9.0_dp, 1.0_dp/)/60.0_dp + bl(-3:3) = (/2.0_dp, -27.0_dp, 270.0_dp, -490.0_dp, 270.0_dp, -27.0_dp, 2.0_dp/)/180.0_dp + CASE (8:) + nstep = 4 + ak(-4:4) = (/1.0_dp, -32.0_dp/3.0_dp, 56.0_dp, -224.0_dp, 0.0_dp, & + 224.0_dp, -56.0_dp, 32.0_dp/3.0_dp, -1.0_dp/)/280.0_dp + bl(-4:4) = (/-1.0_dp, 128.0_dp/9.0_dp, -112.0_dp, 896.0_dp, -14350.0_dp/9.0_dp, & + 896.0_dp, -112.0_dp, 128.0_dp/9.0_dp, -1.0_dp/)/560.0_dp + END SELECT + + CALL get_ks_env(ks_env, dft_control=dft_control, pw_env=pw_env) + CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool) + + nspins = dft_control%nspins + exc = 0.0_dp + + DO istep = -nstep, nstep + + alpha = 1.0_dp + beta = REAL(istep, KIND=dp)*epsrho + NULLIFY (rhoin) + CALL qs_rho_create(rhoin) + NULLIFY (vxc00, v_tau_rspace) + IF (is_triplet) THEN + CPASSERT(nspins == 1) + CALL qs_rho_copy(rho0_struct, rhoin, auxbas_pw_pool, 2) + CALL qs_rho_scale_and_add(rhoin, rho1_struct, alpha, 0.5_dp*beta) + CALL qs_vxc_create(ks_env=ks_env, rho_struct=rhoin, xc_section=xc_section, & + vxc_rho=vxc00, vxc_tau=v_tau_rspace, exc=exc, just_energy=.FALSE.) + CALL pw_axpy(vxc00(2)%pw, vxc00(1)%pw, -1.0_dp) + ELSE + CALL qs_rho_copy(rho0_struct, rhoin, auxbas_pw_pool, nspins) + CALL qs_rho_scale_and_add(rhoin, rho1_struct, alpha, beta) + CALL qs_vxc_create(ks_env=ks_env, rho_struct=rhoin, xc_section=xc_section, & + vxc_rho=vxc00, vxc_tau=v_tau_rspace, exc=exc, just_energy=.FALSE.) + END IF + CALL qs_rho_release(rhoin) + IF (.NOT. ASSOCIATED(fxc_rho)) THEN + ALLOCATE (fxc_rho(nspins)) + DO ispin = 1, nspins + CALL pw_pool_create_pw(auxbas_pw_pool, fxc_rho(ispin)%pw, & + in_space=REALSPACE, use_data=REALDATA3D) + CALL pw_zero(fxc_rho(ispin)%pw) + END DO + END IF + IF (.NOT. ASSOCIATED(gxc_rho)) THEN + ALLOCATE (gxc_rho(nspins)) + DO ispin = 1, nspins + CALL pw_pool_create_pw(auxbas_pw_pool, gxc_rho(ispin)%pw, & + in_space=REALSPACE, use_data=REALDATA3D) + CALL pw_zero(gxc_rho(ispin)%pw) + END DO + END IF + CPASSERT(.NOT. ASSOCIATED(v_tau_rspace)) + DO ispin = 1, nspins + IF (ak(istep) /= 0.0_dp) THEN + CALL pw_axpy(vxc00(ispin)%pw, fxc_rho(ispin)%pw, ak(istep)) + END IF + IF (bl(istep) /= 0.0_dp) THEN + CALL pw_axpy(vxc00(ispin)%pw, gxc_rho(ispin)%pw, bl(istep)) + END IF + END DO + DO ispin = 1, SIZE(vxc00) + CALL pw_pool_give_back_pw(auxbas_pw_pool, vxc00(ispin)%pw) + END DO + DEALLOCATE (vxc00) + + END DO + + oeps1 = 1.0_dp/epsrho + oeps2 = 1.0_dp/(epsrho**2) + DO ispin = 1, nspins + CALL pw_scale(fxc_rho(ispin)%pw, oeps1) + CALL pw_scale(gxc_rho(ispin)%pw, oeps2) + END DO + + CALL timestop(handle) + + END SUBROUTINE qs_fgxc_create + +! ************************************************************************************************** +!> \brief ... +!> \param ks_env ... +!> \param fxc_rho ... +!> \param fxc_tau ... +!> \param gxc_rho ... +!> \param gxc_tau ... +! ************************************************************************************************** + SUBROUTINE qs_fgxc_release(ks_env, fxc_rho, fxc_tau, gxc_rho, gxc_tau) + + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(pw_p_type), DIMENSION(:), POINTER :: fxc_rho, fxc_tau, gxc_rho, gxc_tau + + CHARACTER(len=*), PARAMETER :: routineN = 'qs_fgxc_release', & + routineP = moduleN//':'//routineN + + INTEGER :: ispin + TYPE(pw_env_type), POINTER :: pw_env + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + + CALL get_ks_env(ks_env, pw_env=pw_env) + CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool) + + IF (ASSOCIATED(fxc_rho)) THEN + DO ispin = 1, SIZE(fxc_rho) + CALL pw_pool_give_back_pw(auxbas_pw_pool, fxc_rho(ispin)%pw) + END DO + DEALLOCATE (fxc_rho) + END IF + IF (ASSOCIATED(fxc_tau)) THEN + DO ispin = 1, SIZE(fxc_tau) + CALL pw_pool_give_back_pw(auxbas_pw_pool, fxc_tau(ispin)%pw) + END DO + DEALLOCATE (fxc_tau) + END IF + IF (ASSOCIATED(gxc_rho)) THEN + DO ispin = 1, SIZE(gxc_rho) + CALL pw_pool_give_back_pw(auxbas_pw_pool, gxc_rho(ispin)%pw) + END DO + DEALLOCATE (gxc_rho) + END IF + IF (ASSOCIATED(gxc_tau)) THEN + DO ispin = 1, SIZE(gxc_tau) + CALL pw_pool_give_back_pw(auxbas_pw_pool, gxc_tau(ispin)%pw) + END DO + DEALLOCATE (gxc_tau) + END IF + + END SUBROUTINE qs_fgxc_release + +END MODULE qs_fxc diff --git a/src/qs_gcp_method.F b/src/qs_gcp_method.F index 1f6a3d6123..e09f3fe1ee 100644 --- a/src/qs_gcp_method.F +++ b/src/qs_gcp_method.F @@ -124,9 +124,7 @@ CONTAINS atener => atprop%ategcp END IF atstress = atprop%stress - IF (atstress) THEN - atstr => atprop%atstress - END IF + atstr => atprop%atstress IF (unit_nr > 0) THEN WRITE (unit_nr, *) diff --git a/src/qs_initial_guess.F b/src/qs_initial_guess.F index 8dd1c33965..8769545c2a 100644 --- a/src/qs_initial_guess.F +++ b/src/qs_initial_guess.F @@ -66,6 +66,7 @@ MODULE qs_initial_guess mp_sum USE particle_methods, ONLY: get_particle_set USE particle_types, ONLY: particle_type + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_dftb_utils, ONLY: get_dftb_atom_param USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type @@ -74,8 +75,7 @@ MODULE qs_initial_guess qs_kind_type USE qs_mo_io, ONLY: read_mo_set_from_restart,& wfn_restart_file_name - USE qs_mo_methods, ONLY: calculate_density_matrix,& - make_basis_lowdin,& + USE qs_mo_methods, ONLY: make_basis_lowdin,& make_basis_simple,& make_basis_sm USE qs_mo_occupation, ONLY: set_mo_occupation diff --git a/src/qs_kernel_types.F b/src/qs_kernel_types.F index 27abd49a62..7c0a7893ed 100644 --- a/src/qs_kernel_types.F +++ b/src/qs_kernel_types.F @@ -8,6 +8,7 @@ MODULE qs_kernel_types USE input_section_types, ONLY: section_vals_type USE kinds, ONLY: dp + USE qs_tddfpt2_stda_types, ONLY: stda_env_type USE xc_derivative_set_types, ONLY: xc_derivative_set_type,& xc_dset_release USE xc_rho_cflags_types, ONLY: xc_rho_cflags_type @@ -26,7 +27,7 @@ MODULE qs_kernel_types INTEGER, PARAMETER, PRIVATE :: nderivs = 3 INTEGER, PARAMETER, PRIVATE :: maxspins = 2 - PUBLIC :: full_kernel_env_type + PUBLIC :: full_kernel_env_type, kernel_env_type PUBLIC :: release_kernel_env ! ************************************************************************************************** @@ -57,6 +58,16 @@ MODULE qs_kernel_types LOGICAL :: deriv2_analytic LOGICAL :: deriv3_analytic END TYPE full_kernel_env_type +! ************************************************************************************************** +!> \brief Type to hold environments for the different kernels +!> \par History +!> * 04.2019 created [JHU] +! ************************************************************************************************** + TYPE kernel_env_type + TYPE(full_kernel_env_type), POINTER :: full_kernel => Null() + TYPE(full_kernel_env_type), POINTER :: admm_kernel => Null() + TYPE(stda_env_type), POINTER :: stda_kernel => Null() + END TYPE kernel_env_type CONTAINS diff --git a/src/qs_kpp1_env_methods.F b/src/qs_kpp1_env_methods.F index f9c68e1b5a..09489abe4c 100644 --- a/src/qs_kpp1_env_methods.F +++ b/src/qs_kpp1_env_methods.F @@ -220,6 +220,7 @@ CONTAINS output_unit LOGICAL :: gapw, gapw_xc, lsd, my_calc_forces REAL(KIND=dp) :: alpha, energy_hartree, energy_hartree_1c + REAL(KIND=dp), DIMENSION(:, :, :, :), POINTER :: vxg TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set TYPE(cp_logger_type), POINTER :: logger TYPE(cp_para_env_type), POINTER :: para_env @@ -360,7 +361,7 @@ CONTAINS CALL xc_calc_2nd_deriv(v_xc, p_env%kpp1_env%deriv_set, p_env%kpp1_env%rho_set, & rho1_r_pw, rho1_g_pw, auxbas_pw_pool, xc_section, .FALSE., & - NULL(), lsd_singlets, do_excitations, do_triplet, do_tddft, & + NULL(vxg), lsd_singlets, do_excitations, do_triplet, do_tddft, & compute_virial=calc_virial, virial_xc=virial) DO ispin = 1, nspins @@ -463,7 +464,6 @@ CONTAINS qs_env=qs_env, & calculate_forces=my_calc_forces, gapw=gapw) END IF - END IF CALL dbcsr_add(p_env%kpp1(ispin)%matrix, p_env%kpp1_env%v_ao(ispin)%matrix, 1.0_dp, alpha) @@ -763,13 +763,13 @@ CONTAINS !> \brief ... !> \param rho1 ... !> \param rho1_tot_gspace ... -!> \param output_unit ... +!> \param out_unit ... ! ************************************************************************************************** - SUBROUTINE print_densities(rho1, rho1_tot_gspace, output_unit) + SUBROUTINE print_densities(rho1, rho1_tot_gspace, out_unit) TYPE(qs_rho_type), POINTER :: rho1 TYPE(pw_p_type), INTENT(IN) :: rho1_tot_gspace - INTEGER :: output_unit + INTEGER :: out_unit REAL(KIND=dp) :: total_rho_gspace REAL(KIND=dp), DIMENSION(:), POINTER :: tot_rho1_r @@ -777,9 +777,9 @@ CONTAINS NULLIFY (tot_rho1_r) total_rho_gspace = pw_integrate_function(rho1_tot_gspace%pw, isign=-1) - IF (output_unit > 0) THEN + IF (out_unit > 0) THEN CALL qs_rho_get(rho1, tot_rho_r=tot_rho1_r) - WRITE (UNIT=output_unit, FMT="(T3,A,T60,F20.10)") & + WRITE (UNIT=out_unit, FMT="(T3,A,T60,F20.10)") & "KPP1 total charge density (r-space):", & accurate_sum(tot_rho1_r), & "KPP1 total charge density (g-space):", & diff --git a/src/qs_kpp1_env_types.F b/src/qs_kpp1_env_types.F index 1f3630e126..051c19c0f1 100644 --- a/src/qs_kpp1_env_types.F +++ b/src/qs_kpp1_env_types.F @@ -41,21 +41,32 @@ MODULE qs_kpp1_env_types !> \param v_ao the potential in the ao basis (used togheter with v_rspace !> to update only what changed !> \param id_nr identification number, unique for each kpp1 env +!> \param print_count counter to create unique filename !> \param iter number of iterations !> \param drho_r (idir,ispin): the derivative of rho wrt. x,y,z in the real space !> \param deriv_xc (ii,ipot): the second derivative of the xc potential at psi0 !> (qs_env%c), if grad pot is true it should already be divised !> by the gradient +!> \param spin_pot (1:2,ipot): information about wrt. to which spins the +!> corresponding component of deriv_xc was derived (see +!> xc_create_2nd_deriv_info) +!> \param grad_pot (1:2,ipot): if the derivative spin_pot was wrt. to +!> the gradient (see xc_create_2nd_deriv_info) +!> \param ndiag_term (ipot): it the term is an off diagonal term (see +!> xc_create_2nd_deriv_info) ! ************************************************************************************************** TYPE qs_kpp1_env_type - INTEGER :: ref_count, id_nr - TYPE(pw_p_type), DIMENSION(:), POINTER :: v_rspace - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: v_ao - TYPE(pw_p_type), DIMENSION(:, :), POINTER :: drho_r - TYPE(xc_derivative_set_type), POINTER :: deriv_set - TYPE(xc_rho_set_type), POINTER :: rho_set - TYPE(xc_derivative_set_type), POINTER :: deriv_set_admm - TYPE(xc_rho_set_type), POINTER :: rho_set_admm + INTEGER :: ref_count, id_nr, print_count, iter + TYPE(pw_p_type), DIMENSION(:), POINTER :: v_rspace => NULL() + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: v_ao => NULL() + TYPE(pw_p_type), DIMENSION(:, :), POINTER :: drho_r => NULL() + TYPE(xc_derivative_set_type), POINTER :: deriv_set => NULL() + TYPE(xc_rho_set_type), POINTER :: rho_set => NULL() + TYPE(xc_derivative_set_type), POINTER :: deriv_set_admm => NULL() + TYPE(xc_rho_set_type), POINTER :: rho_set_admm => NULL() + INTEGER, DIMENSION(:, :), POINTER :: spin_pot => NULL() + LOGICAL, DIMENSION(:, :), POINTER :: grad_pot => NULL() + LOGICAL, DIMENSION(:), POINTER :: ndiag_term => NULL() END TYPE qs_kpp1_env_type ! ************************************************************************************************** @@ -120,6 +131,15 @@ CONTAINS CALL xc_rho_set_release(kpp1_env%rho_set_admm) NULLIFY (kpp1_env%rho_set_admm) END IF + IF (ASSOCIATED(kpp1_env%spin_pot)) THEN + DEALLOCATE (kpp1_env%spin_pot) + END IF + IF (ASSOCIATED(kpp1_env%grad_pot)) THEN + DEALLOCATE (kpp1_env%grad_pot) + END IF + IF (ASSOCIATED(kpp1_env%ndiag_term)) THEN + DEALLOCATE (kpp1_env%ndiag_term) + END IF DEALLOCATE (kpp1_env) END IF END IF diff --git a/src/qs_ks_methods.F b/src/qs_ks_methods.F index 94d8067887..e3a2fc5382 100644 --- a/src/qs_ks_methods.F +++ b/src/qs_ks_methods.F @@ -28,31 +28,17 @@ MODULE qs_ks_methods admm_update_ks_atom USE admm_types, ONLY: admm_type USE cell_types, ONLY: cell_type - USE cp_blacs_env, ONLY: cp_blacs_env_type USE cp_control_types, ONLY: dft_control_type USE cp_dbcsr_cp2k_link, ONLY: cp_dbcsr_alloc_block_from_nbl USE cp_dbcsr_operations, ONLY: copy_dbcsr_to_fm,& copy_fm_to_dbcsr,& - cp_dbcsr_plus_fm_fm_t,& - cp_dbcsr_sm_fm_multiply,& dbcsr_allocate_matrix_set,& dbcsr_copy_columns_hack USE cp_ddapc, ONLY: qs_ks_ddapc - USE cp_fm_basic_linalg, ONLY: cp_fm_column_scale,& - cp_fm_scale_and_add,& - cp_fm_symm,& - cp_fm_transpose,& - cp_fm_upper_to_full - USE cp_fm_struct, ONLY: cp_fm_struct_create,& - cp_fm_struct_release,& - cp_fm_struct_type USE cp_fm_types, ONLY: cp_fm_create,& - cp_fm_get_info,& cp_fm_p_type,& cp_fm_release,& - cp_fm_to_fm,& cp_fm_type - USE cp_gemm_interface, ONLY: cp_gemm USE cp_log_handling, ONLY: cp_get_default_logger,& cp_logger_get_default_io_unit,& cp_logger_type @@ -135,8 +121,7 @@ MODULE qs_ks_methods sic_explicit_orbitals, sum_up_and_integrate USE qs_local_rho_types, ONLY: local_rho_type USE qs_mo_types, ONLY: get_mo_set,& - mo_set_p_type,& - mo_set_type + mo_set_p_type USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type USE qs_rho0_ggrid, ONLY: integrate_vhg0_rspace USE qs_rho_types, ONLY: qs_rho_get,& @@ -156,17 +141,11 @@ MODULE qs_ks_methods PRIVATE - INTERFACE calculate_w_matrix - MODULE PROCEDURE calculate_w_matrix_1, & - calculate_w_matrix_roks - - END INTERFACE - LOGICAL, PARAMETER :: debug_this_module = .TRUE. CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_ks_methods' PUBLIC :: calc_rho_tot_gspace, qs_ks_update_qs_env, qs_ks_build_kohn_sham_matrix, & - calculate_w_matrix, calculate_w_matrix_ot, qs_ks_allocate_basics + qs_ks_allocate_basics CONTAINS @@ -733,6 +712,12 @@ CONTAINS END IF END IF + ELSE + IF (do_hfx) THEN + IF (.FALSE.) THEN + CPWARN("KS matrix not longer correct. Check possible problems with property calculations!") + END IF + END IF END IF ! .NOT. just energy IF (dft_control%qs_control%ddapc_explicit_potential) THEN @@ -1240,209 +1225,6 @@ CONTAINS END SUBROUTINE rebuild_ks_matrix -! ************************************************************************************************** -!> \brief Calculate the W matrix from the MO eigenvectors, MO eigenvalues, -!> and the MO occupation numbers. Only works if they are eigenstates -!> \param mo_set type containing the full matrix of the MO and the eigenvalues -!> \param w_matrix sparse matrix -!> error -!> \par History -!> Creation (03.03.03,MK) -!> Modification that computes it as a full block, several times (e.g. 20) -!> faster at the cost of some additional memory -!> \author MK -! ************************************************************************************************** - SUBROUTINE calculate_w_matrix_1(mo_set, w_matrix) - - TYPE(mo_set_type), POINTER :: mo_set - TYPE(dbcsr_type), POINTER :: w_matrix - - CHARACTER(len=*), PARAMETER :: routineN = 'calculate_w_matrix_1' - - INTEGER :: handle, imo - REAL(KIND=dp), DIMENSION(:), POINTER :: eigocc - TYPE(cp_fm_type), POINTER :: weighted_vectors - - CALL timeset(routineN, handle) - NULLIFY (weighted_vectors) - - CALL dbcsr_set(w_matrix, 0.0_dp) - CALL cp_fm_create(weighted_vectors, mo_set%mo_coeff%matrix_struct, "weighted_vectors") - CALL cp_fm_to_fm(mo_set%mo_coeff, weighted_vectors) - - ! scale every column with the occupation - ALLOCATE (eigocc(mo_set%homo)) - - DO imo = 1, mo_set%homo - eigocc(imo) = mo_set%eigenvalues(imo)*mo_set%occupation_numbers(imo) - ENDDO - CALL cp_fm_column_scale(weighted_vectors, eigocc) - DEALLOCATE (eigocc) - - CALL cp_dbcsr_plus_fm_fm_t(sparse_matrix=w_matrix, & - matrix_v=mo_set%mo_coeff, & - matrix_g=weighted_vectors, & - ncol=mo_set%homo) - - CALL cp_fm_release(weighted_vectors) - - CALL timestop(handle) - - END SUBROUTINE calculate_w_matrix_1 - -! ************************************************************************************************** -!> \brief Calculate the W matrix from the MO coefs, MO derivs -!> could overwrite the mo_derivs for increased memory efficiency -!> \param mo_set type containing the full matrix of the MO coefs -!> mo_deriv: -!> \param mo_deriv ... -!> \param w_matrix sparse matrix -!> \param s_matrix sparse matrix for the overlap -!> error -!> \par History -!> Creation (JV) -!> \author MK -! ************************************************************************************************** - SUBROUTINE calculate_w_matrix_ot(mo_set, mo_deriv, w_matrix, s_matrix) - - TYPE(mo_set_type), POINTER :: mo_set - TYPE(dbcsr_type), POINTER :: mo_deriv, w_matrix, s_matrix - - CHARACTER(len=*), PARAMETER :: routineN = 'calculate_w_matrix_ot' - LOGICAL, PARAMETER :: check_gradient = .FALSE., & - do_symm = .FALSE. - - INTEGER :: handle, ncol_block, ncol_global, & - nrow_block, nrow_global - REAL(KIND=dp), DIMENSION(:), POINTER :: occupation_numbers, scaling_factor - TYPE(cp_fm_struct_type), POINTER :: fm_struct_tmp - TYPE(cp_fm_type), POINTER :: gradient, h_block, h_block_t, & - weighted_vectors - - CALL timeset(routineN, handle) - NULLIFY (weighted_vectors, h_block, fm_struct_tmp) - - CALL cp_fm_get_info(matrix=mo_set%mo_coeff, & - ncol_global=ncol_global, & - nrow_global=nrow_global, & - nrow_block=nrow_block, & - ncol_block=ncol_block) - - CALL cp_fm_create(weighted_vectors, mo_set%mo_coeff%matrix_struct, "weighted_vectors") - CALL cp_fm_struct_create(fm_struct_tmp, nrow_global=ncol_global, ncol_global=ncol_global, & - para_env=mo_set%mo_coeff%matrix_struct%para_env, & - context=mo_set%mo_coeff%matrix_struct%context) - CALL cp_fm_create(h_block, fm_struct_tmp, name="h block") - IF (do_symm) CALL cp_fm_create(h_block_t, fm_struct_tmp, name="h block t") - CALL cp_fm_struct_release(fm_struct_tmp) - - CALL get_mo_set(mo_set=mo_set, occupation_numbers=occupation_numbers) - ALLOCATE (scaling_factor(SIZE(occupation_numbers))) - scaling_factor = 2.0_dp*occupation_numbers - CALL copy_dbcsr_to_fm(mo_deriv, weighted_vectors) - CALL cp_fm_column_scale(weighted_vectors, scaling_factor) - DEALLOCATE (scaling_factor) - - ! the convention seems to require the half here, the factor of two is presumably taken care of - ! internally in qs_core_hamiltonian - CALL cp_gemm('T', 'N', ncol_global, ncol_global, nrow_global, 0.5_dp, & - mo_set%mo_coeff, weighted_vectors, 0.0_dp, h_block) - - IF (do_symm) THEN - ! at the minimum things are anyway symmetric, but numerically it might not be the case - ! needs some investigation to find out if using this is better - CALL cp_fm_transpose(h_block, h_block_t) - CALL cp_fm_scale_and_add(0.5_dp, h_block, 0.5_dp, h_block_t) - ENDIF - - ! this could overwrite the mo_derivs to save the weighted_vectors - CALL cp_gemm('N', 'N', nrow_global, ncol_global, ncol_global, 1.0_dp, & - mo_set%mo_coeff, h_block, 0.0_dp, weighted_vectors) - - CALL dbcsr_set(w_matrix, 0.0_dp) - CALL cp_dbcsr_plus_fm_fm_t(sparse_matrix=w_matrix, & - matrix_v=mo_set%mo_coeff, & - matrix_g=weighted_vectors, & - ncol=mo_set%homo) - - IF (check_gradient) THEN - CALL cp_fm_create(gradient, mo_set%mo_coeff%matrix_struct, "gradient") - CALL cp_dbcsr_sm_fm_multiply(s_matrix, weighted_vectors, & - gradient, ncol_global) - - ALLOCATE (scaling_factor(SIZE(occupation_numbers))) - scaling_factor = 2.0_dp*occupation_numbers - CALL copy_dbcsr_to_fm(mo_deriv, weighted_vectors) - CALL cp_fm_column_scale(weighted_vectors, scaling_factor) - DEALLOCATE (scaling_factor) - - WRITE (*, *) " maxabs difference ", MAXVAL(ABS(weighted_vectors%local_data - 2.0_dp*gradient%local_data)) - CALL cp_fm_release(gradient) - ENDIF - - IF (do_symm) CALL cp_fm_release(h_block_t) - CALL cp_fm_release(weighted_vectors) - CALL cp_fm_release(h_block) - - CALL timestop(handle) - - END SUBROUTINE calculate_w_matrix_ot - -! ************************************************************************************************** -!> \brief Calculate the energy-weighted density matrix W if ROKS is active. -!> The W matrix is returned in matrix_w. -!> \param mo_set ... -!> \param matrix_ks ... -!> \param matrix_p ... -!> \param matrix_w ... -!> \author 04.05.06,MK -! ************************************************************************************************** - SUBROUTINE calculate_w_matrix_roks(mo_set, matrix_ks, matrix_p, matrix_w) - TYPE(mo_set_type), POINTER :: mo_set - TYPE(dbcsr_type), POINTER :: matrix_ks, matrix_p, matrix_w - - CHARACTER(len=*), PARAMETER :: routineN = 'calculate_w_matrix_roks' - - INTEGER :: handle, nao - TYPE(cp_blacs_env_type), POINTER :: context - TYPE(cp_fm_struct_type), POINTER :: fm_struct - TYPE(cp_fm_type), POINTER :: c, ks, p, work - TYPE(cp_para_env_type), POINTER :: para_env - - CALL timeset(routineN, handle) - - NULLIFY (c) - NULLIFY (context) - NULLIFY (fm_struct) - NULLIFY (ks) - NULLIFY (p) - NULLIFY (para_env) - NULLIFY (work) - - CALL get_mo_set(mo_set=mo_set, mo_coeff=c) - CALL cp_fm_get_info(c, context=context, nrow_global=nao, para_env=para_env) - CALL cp_fm_struct_create(fm_struct, context=context, nrow_global=nao, & - ncol_global=nao, para_env=para_env) - CALL cp_fm_create(ks, fm_struct, name="Kohn-Sham matrix") - CALL cp_fm_create(p, fm_struct, name="Density matrix") - CALL cp_fm_create(work, fm_struct, name="Work matrix") - CALL cp_fm_struct_release(fm_struct) - CALL copy_dbcsr_to_fm(matrix_ks, ks) - CALL copy_dbcsr_to_fm(matrix_p, p) - CALL cp_fm_upper_to_full(p, work) - CALL cp_fm_symm("L", "U", nao, nao, 1.0_dp, ks, p, 0.0_dp, work) - CALL cp_gemm("T", "N", nao, nao, nao, 1.0_dp, p, work, 0.0_dp, ks) - CALL dbcsr_set(matrix_w, 0.0_dp) - CALL copy_fm_to_dbcsr(ks, matrix_w, keep_sparsity=.TRUE.) - - CALL cp_fm_release(work) - CALL cp_fm_release(p) - CALL cp_fm_release(ks) - - CALL timestop(handle) - - END SUBROUTINE calculate_w_matrix_roks - ! ************************************************************************************************** !> \brief Allocate ks_matrix and ks_env if necessary !> \param qs_env ... diff --git a/src/qs_linres_kernel.F b/src/qs_linres_kernel.F new file mode 100644 index 0000000000..d136f0525d --- /dev/null +++ b/src/qs_linres_kernel.F @@ -0,0 +1,1186 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +! ************************************************************************************************** +!> \brief linres kernel functions +!> \par History +!> created from qs_linres_methods +!> \author JGH +! ************************************************************************************************** +MODULE qs_linres_kernel + USE admm_types, ONLY: admm_type + USE atomic_kind_types, ONLY: atomic_kind_type,& + get_atomic_kind + USE cp_control_types, ONLY: dft_control_type + USE cp_dbcsr_operations, ONLY: cp_dbcsr_plus_fm_fm_t,& + cp_dbcsr_sm_fm_multiply,& + dbcsr_allocate_matrix_set,& + dbcsr_deallocate_matrix_set + USE cp_fm_types, ONLY: cp_fm_get_info,& + cp_fm_p_type,& + cp_fm_type + USE cp_gemm_interface, ONLY: cp_gemm + USE cp_log_handling, ONLY: cp_get_default_logger,& + cp_logger_type,& + cp_to_string + USE cp_para_types, ONLY: cp_para_env_type + USE dbcsr_api, ONLY: dbcsr_copy,& + dbcsr_create,& + dbcsr_deallocate_matrix,& + dbcsr_p_type,& + dbcsr_set + USE hartree_local_methods, ONLY: Vh_1c_gg_integrals + USE hfx_energy_potential, ONLY: integrate_four_center + USE hfx_types, ONLY: hfx_type + USE input_constants, ONLY: do_admm_aux_exch_func_none,& + do_admm_basis_projection,& + do_admm_exch_scaling_none,& + do_admm_purify_none,& + kg_tnadd_embed + USE input_section_types, ONLY: section_get_ival,& + section_get_lval,& + section_get_rval,& + section_vals_get,& + section_vals_get_subs_vals,& + section_vals_type,& + section_vals_val_get + USE kg_correction, ONLY: kg_ekin_subset + USE kg_environment_types, ONLY: kg_environment_type + USE kinds, ONLY: dp + USE lri_environment_types, ONLY: lri_density_type,& + lri_environment_type,& + lri_kind_type + USE lri_ks_methods, ONLY: calculate_lri_ks_matrix + USE message_passing, ONLY: mp_sum + USE mulliken, ONLY: ao_charges + USE particle_types, ONLY: particle_type + USE pw_env_types, ONLY: pw_env_get,& + pw_env_type + USE pw_methods, ONLY: pw_axpy,& + pw_copy,& + pw_transfer + USE pw_poisson_methods, ONLY: pw_poisson_solve + USE pw_poisson_types, ONLY: pw_poisson_type + USE pw_pool_types, ONLY: pw_pool_create_pw,& + pw_pool_give_back_pw,& + pw_pool_type + USE pw_types, ONLY: COMPLEXDATA1D,& + REALDATA3D,& + REALSPACE,& + RECIPROCALSPACE,& + pw_p_type,& + pw_release,& + pw_retain + USE qs_collocate_density, ONLY: calculate_rho_elec + USE qs_environment_types, ONLY: get_qs_env,& + qs_environment_type + USE qs_fxc, ONLY: qs_fxc_analytic,& + qs_fxc_fdiff + USE qs_gapw_densities, ONLY: prepare_gapw_den + USE qs_integrate_potential, ONLY: integrate_v_rspace,& + integrate_v_rspace_diagonal,& + integrate_v_rspace_one_center + USE qs_kind_types, ONLY: get_qs_kind,& + get_qs_kind_set,& + qs_kind_type + USE qs_kpp1_env_types, ONLY: qs_kpp1_env_type + USE qs_ks_atom, ONLY: update_ks_atom + USE qs_ks_types, ONLY: qs_ks_env_type + USE qs_linres_types, ONLY: linres_control_type + USE qs_p_env_types, ONLY: qs_p_env_type + USE qs_rho0_ggrid, ONLY: integrate_vhg0_rspace + USE qs_rho_types, ONLY: qs_rho_get,& + qs_rho_type + USE qs_vxc_atom, ONLY: calculate_xc_2nd_deriv_atom + USE task_list_types, ONLY: task_list_type + USE xc, ONLY: xc_calc_2nd_deriv,& + xc_prep_2nd_deriv + USE xc_derivatives, ONLY: xc_functionals_get_needs + USE xc_rho_cflags_types, ONLY: xc_rho_cflags_type + USE xc_rho_set_types, ONLY: xc_rho_set_create,& + xc_rho_set_release,& + xc_rho_set_type,& + xc_rho_set_update + USE xtb_ehess, ONLY: xtb_coulomb_hessian + USE xtb_types, ONLY: get_xtb_atom_param,& + xtb_atom_type +#include "./base/base_uses.f90" + + IMPLICIT NONE + + PRIVATE + + ! *** Public subroutines *** + PUBLIC :: apply_op_2 + + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_linres_kernel' + +! ************************************************************************************************** + +CONTAINS + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param p_env ... +!> \param c0 ... +!> \param v ... +!> \param Av ... +! ************************************************************************************************** + SUBROUTINE apply_op_2(qs_env, p_env, c0, v, Av) + ! + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(qs_p_env_type), POINTER :: p_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: c0, v, Av + + TYPE(dft_control_type), POINTER :: dft_control + + CALL get_qs_env(qs_env=qs_env, dft_control=dft_control) + IF (dft_control%qs_control%semi_empirical) THEN + CPABORT("Linear response not available with SE methods") + ELSEIF (dft_control%qs_control%dftb) THEN + CPABORT("Linear response not available with DFTB") + ELSEIF (dft_control%qs_control%xtb) THEN + CALL apply_op_2_xtb(qs_env, p_env, c0, v, Av) + ELSE + CALL apply_op_2_dft(qs_env, p_env, c0, v, Av) + CALL apply_hfx(qs_env, p_env, c0, v, Av) + CALL apply_xc_admm(qs_env, p_env, c0, v, Av) + END IF + + END SUBROUTINE apply_op_2 + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param p_env ... +!> \param c0 ... +!> \param v ... +!> \param Av ... +! ************************************************************************************************** + SUBROUTINE apply_op_2_dft(qs_env, p_env, c0, v, Av) + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(qs_p_env_type), POINTER :: p_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: c0, v, Av + + CHARACTER(len=*), PARAMETER :: routineN = 'apply_op_2_dft' + REAL(KIND=dp), PARAMETER :: h = 0.001_dp + + INTEGER :: handle, ikind, ispin, ncol, nkind, ns, & + nspins + LOGICAL :: deriv2_analytic, gapw, gapw_xc, & + lr_triplet, lrigpw + REAL(KIND=dp) :: alpha, ekin_mol, energy_hartree, & + energy_hartree_1c + TYPE(admm_type), POINTER :: admm_env + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(cp_logger_type), POINTER :: logger + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: k1mat, matrix_s, rho1_ao, rho_ao + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: ksmat, psmat + TYPE(dft_control_type), POINTER :: dft_control + TYPE(kg_environment_type), POINTER :: kg_env + TYPE(linres_control_type), POINTER :: linres_control + TYPE(lri_density_type), POINTER :: lri_density + TYPE(lri_environment_type), POINTER :: lri_env + TYPE(lri_kind_type), DIMENSION(:), POINTER :: lri_v_int + TYPE(pw_env_type), POINTER :: pw_env + TYPE(pw_p_type) :: rho1_tot_gspace, v_hartree_gspace, & + v_hartree_rspace + TYPE(pw_p_type), DIMENSION(:), POINTER :: rho1_g, rho1_r, rho_r, tau, & + v_rspace_new, v_xc + TYPE(pw_poisson_type), POINTER :: poisson_env + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + TYPE(qs_kpp1_env_type), POINTER :: kpp1_env + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(qs_rho_type), POINTER :: rho, rho1, rho1_xc, rho1a, rho_aux + TYPE(section_vals_type), POINTER :: input, xc_section, xc_section_aux + + CALL timeset(routineN, handle) + + NULLIFY (auxbas_pw_pool, pw_env, v_rspace_new, para_env, rho1_r, & + v_xc, rho1_ao, rho_ao, poisson_env, input, rho, dft_control, & + logger, rho1_g) + logger => cp_get_default_logger() + + energy_hartree = 0.0_dp + energy_hartree_1c = 0.0_dp + + CPASSERT(ASSOCIATED(c0)) + CPASSERT(ASSOCIATED(v)) + CPASSERT(ASSOCIATED(Av)) + + CPASSERT(ASSOCIATED(p_env%kpp1)) + CPASSERT(ASSOCIATED(p_env%kpp1_env)) + kpp1_env => p_env%kpp1_env + CPASSERT(kpp1_env%ref_count > 0) + + CALL get_qs_env(qs_env=qs_env, & + ks_env=ks_env, & + pw_env=pw_env, & + input=input, & + admm_env=admm_env, & + para_env=para_env, & + rho=rho, & + linres_control=linres_control, & + dft_control=dft_control) + + gapw = dft_control%qs_control%gapw + gapw_xc = dft_control%qs_control%gapw_xc + lr_triplet = linres_control%lr_triplet + + rho1 => p_env%rho1 + rho1_xc => p_env%rho1_xc + CPASSERT(ASSOCIATED(rho1)) + IF (gapw_xc) THEN + CPASSERT(ASSOCIATED(rho1_xc)) + END IF + + CALL qs_rho_get(rho, rho_ao=rho_ao, rho_r=rho_r) + CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool) + + nspins = SIZE(p_env%kpp1) + lrigpw = dft_control%qs_control%lrigpw + IF (lrigpw) THEN + CALL get_qs_env(qs_env, & + lri_env=lri_env, & + lri_density=lri_density, & + atomic_kind_set=atomic_kind_set) + ENDIF + + IF (.NOT. ASSOCIATED(kpp1_env%v_rspace)) THEN + ALLOCATE (kpp1_env%v_rspace(nspins)) + DO ispin = 1, nspins + CALL pw_pool_create_pw(auxbas_pw_pool, & + kpp1_env%v_rspace(ispin)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + END DO + END IF + + IF (.NOT. ASSOCIATED(kpp1_env%v_ao)) THEN + CALL get_qs_env(qs_env, matrix_s=matrix_s) + CALL dbcsr_allocate_matrix_set(kpp1_env%v_ao, nspins) + DO ispin = 1, nspins + ALLOCATE (kpp1_env%v_ao(ispin)%matrix) + CALL dbcsr_copy(kpp1_env%v_ao(ispin)%matrix, matrix_s(1)%matrix, & + name="kpp1%v_ao-"//ADJUSTL(cp_to_string(ispin))) + END DO + END IF + + IF (dft_control%do_admm) THEN + xc_section => admm_env%xc_section_primary + ELSE + xc_section => section_vals_get_subs_vals(input, "DFT%XC") + END IF + + kpp1_env%iter = kpp1_env%iter + 1 + + ! gets the tmp grids + CPASSERT(ASSOCIATED(pw_env)) + CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, & + poisson_env=poisson_env) + ALLOCATE (v_rspace_new(nspins)) + CALL pw_pool_create_pw(auxbas_pw_pool, v_hartree_gspace%pw, & + use_data=COMPLEXDATA1D, & + in_space=RECIPROCALSPACE) + CALL pw_pool_create_pw(auxbas_pw_pool, v_hartree_rspace%pw, & + use_data=REALDATA3D, & + in_space=REALSPACE) + + IF (gapw .OR. gapw_xc) & + CALL prepare_gapw_den(qs_env, p_env%local_rho_set, do_rho0=(.NOT. gapw_xc)) + + ! *** calculate the hartree potential on the total density *** + CALL pw_pool_create_pw(auxbas_pw_pool, rho1_tot_gspace%pw, & + use_data=COMPLEXDATA1D, & + in_space=RECIPROCALSPACE) + + CALL qs_rho_get(rho1, rho_g=rho1_g) + CALL pw_copy(rho1_g(1)%pw, rho1_tot_gspace%pw) + DO ispin = 2, nspins + CALL pw_axpy(rho1_g(ispin)%pw, rho1_tot_gspace%pw) + END DO + IF (gapw) & + CALL pw_axpy(p_env%local_rho_set%rho0_mpole%rho0_s_gs%pw, rho1_tot_gspace%pw) + + IF (.NOT. (nspins == 1 .AND. lr_triplet)) THEN + CALL pw_poisson_solve(poisson_env, rho1_tot_gspace%pw, & + energy_hartree, & + v_hartree_gspace%pw) + CALL pw_transfer(v_hartree_gspace%pw, v_hartree_rspace%pw) + ENDIF + + CALL pw_pool_give_back_pw(auxbas_pw_pool, rho1_tot_gspace%pw) + + ! *** calculate the xc potential *** + NULLIFY (rho1a) + IF (gapw_xc) THEN + rho1a => rho1_xc + ELSE + rho1a => rho1 + END IF + + deriv2_analytic = section_get_lval(xc_section, "2ND_DERIV_ANALYTICAL") + IF (deriv2_analytic) THEN + CALL qs_rho_get(rho1a, rho_r=rho1_r) + CALL qs_fxc_analytic(rho, rho1_r, xc_section, auxbas_pw_pool, lr_triplet, v_xc) + IF (gapw) CALL calculate_xc_2nd_deriv_atom(p_env%local_rho_set, qs_env, xc_section, para_env, & + do_tddft=.FALSE., do_triplet=lr_triplet) + ELSE + NULLIFY (tau) + CALL qs_fxc_fdiff(ks_env, rho, rho1a, xc_section, 6, lr_triplet, v_xc, tau) + CPASSERT(.NOT. gapw) + END IF + + DO ispin = 1, nspins + v_rspace_new(ispin)%pw => v_xc(ispin)%pw + END DO + DEALLOCATE (v_xc) + +!========================================================================================================================= + + ! ADMM Correction + IF (dft_control%do_admm) THEN + IF (dft_control%admm_control%aux_exch_func /= do_admm_aux_exch_func_none) THEN + IF (.NOT. ASSOCIATED(kpp1_env%deriv_set_admm)) THEN + CPASSERT(.NOT. lr_triplet) + xc_section_aux => admm_env%xc_section_aux + CALL get_qs_env(qs_env=qs_env, rho_aux_fit=rho_aux) + CALL qs_rho_get(rho_aux, rho_r=rho_r) + CALL xc_prep_2nd_deriv(kpp1_env%deriv_set_admm, kpp1_env%rho_set_admm, & + rho_r, auxbas_pw_pool, & + xc_section=xc_section_aux) + END IF + END IF + END IF + + !-------------------------------! + ! Add both hartree and xc terms ! + !-------------------------------! + DO ispin = 1, nspins + + IF (gapw_xc) THEN + ! XC and Hartree are integrated separatedly + ! XC uses the sofft basis set only + v_rspace_new(ispin)%pw%cr3d = v_rspace_new(ispin)%pw%cr3d* & + v_rspace_new(ispin)%pw%pw_grid%dvol + + IF (nspins == 1) THEN + + IF (.NOT. (lr_triplet)) THEN + v_rspace_new(1)%pw%cr3d = 2.0_dp*v_rspace_new(1)%pw%cr3d + END IF + CALL qs_rho_get(rho1, rho_ao=rho1_ao) + ! remove kpp1_env%v_ao and work directly on k_p_p1 ? + CALL dbcsr_set(kpp1_env%v_ao(ispin)%matrix, 0.0_dp) + CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), & + pmat=rho1_ao(ispin), & + hmat=kpp1_env%v_ao(ispin), & + qs_env=qs_env, & + calculate_forces=.FALSE., gapw=gapw_xc) + + ! add hartree only for SINGLETS + IF (.NOT. lr_triplet) THEN + v_hartree_rspace%pw%cr3d = v_hartree_rspace%pw%cr3d* & + v_hartree_rspace%pw%pw_grid%dvol + v_rspace_new(1)%pw%cr3d = 2.0_dp*v_hartree_rspace%pw%cr3d + + CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), & + pmat=rho_ao(ispin), & + hmat=kpp1_env%v_ao(ispin), & + qs_env=qs_env, & + calculate_forces=.FALSE., gapw=gapw) + END IF + ELSE + ! remove kpp1_env%v_ao and work directly on k_p_p1 ? + CALL dbcsr_set(kpp1_env%v_ao(ispin)%matrix, 0.0_dp) + CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), & + pmat=rho_ao(ispin), & + hmat=kpp1_env%v_ao(ispin), & + qs_env=qs_env, & + calculate_forces=.FALSE., gapw=gapw_xc) + + IF (ispin == 1) THEN + v_hartree_rspace%pw%cr3d = v_hartree_rspace%pw%cr3d* & + v_hartree_rspace%pw%pw_grid%dvol + END IF + v_rspace_new(ispin)%pw%cr3d = v_hartree_rspace%pw%cr3d + CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), & + pmat=rho_ao(ispin), & + hmat=kpp1_env%v_ao(ispin), & + qs_env=qs_env, & + calculate_forces=.FALSE., gapw=gapw) + END IF + + ELSE + + v_rspace_new(ispin)%pw%cr3d = v_rspace_new(ispin)%pw%cr3d* & + v_rspace_new(ispin)%pw%pw_grid%dvol + + IF (nspins == 1) THEN + IF (.NOT. (lr_triplet)) THEN + v_rspace_new(1)%pw%cr3d = 2.0_dp*v_rspace_new(1)%pw%cr3d + ENDIF + ! add hartree only for SINGLETS + !IF (res_etype == tddfpt_singlet) THEN + IF (.NOT. lr_triplet) THEN + v_hartree_rspace%pw%cr3d = v_hartree_rspace%pw%cr3d* & + v_hartree_rspace%pw%pw_grid%dvol + v_rspace_new(1)%pw%cr3d = v_rspace_new(1)%pw%cr3d+ & + 2.0_dp*v_hartree_rspace%pw%cr3d + END IF + ELSE + IF (ispin == 1) THEN + v_hartree_rspace%pw%cr3d = v_hartree_rspace%pw%cr3d* & + v_hartree_rspace%pw%pw_grid%dvol + END IF + v_rspace_new(ispin)%pw%cr3d = v_rspace_new(ispin)%pw%cr3d+ & + v_hartree_rspace%pw%cr3d + END IF + + ! remove kpp1_env%v_ao and work directly on k_p_p1 ? + CALL dbcsr_set(kpp1_env%v_ao(ispin)%matrix, 0.0_dp) + + IF (lrigpw) THEN + lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds + CALL get_qs_env(qs_env, nkind=nkind) + DO ikind = 1, nkind + lri_v_int(ikind)%v_int = 0.0_dp + END DO + CALL integrate_v_rspace_one_center(v_rspace_new(ispin), qs_env, & + lri_v_int, .FALSE., "LRI_AUX") + DO ikind = 1, nkind + CALL mp_sum(lri_v_int(ikind)%v_int, para_env%group) + END DO + ALLOCATE (k1mat(1)) + k1mat(1)%matrix => kpp1_env%v_ao(ispin)%matrix + IF (lri_env%exact_1c_terms) THEN + CALL integrate_v_rspace_diagonal(v_rspace_new(ispin), k1mat(1)%matrix, & + rho_ao(ispin)%matrix, qs_env, .FALSE., "ORB") + END IF + CALL calculate_lri_ks_matrix(lri_env, lri_v_int, k1mat, atomic_kind_set) + DEALLOCATE (k1mat) + ELSE + CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), & + pmat=rho_ao(ispin), & + hmat=kpp1_env%v_ao(ispin), & + qs_env=qs_env, & + calculate_forces=.FALSE., gapw=gapw) + END IF + + END IF + + CALL dbcsr_copy(p_env%kpp1(ispin)%matrix, kpp1_env%v_ao(ispin)%matrix) + END DO + + IF (gapw) THEN + + IF (.NOT. ((nspins == 1 .AND. lr_triplet))) THEN + CALL Vh_1c_gg_integrals(qs_env, energy_hartree_1c, & + p_env%hartree_local%ecoul_1c, & + p_env%local_rho_set, & + para_env, tddft=.TRUE.) + + CALL integrate_vhg0_rspace(qs_env, v_hartree_rspace, para_env, & + calculate_forces=.FALSE., & + local_rho_set=p_env%local_rho_set) + END IF + + ! *** Add single atom contributions to the KS matrix *** + ! remap pointer + ns = SIZE(p_env%kpp1) + ksmat(1:ns, 1:1) => p_env%kpp1(1:ns) + ns = SIZE(rho_ao) + psmat(1:ns, 1:1) => rho_ao(1:ns) + + CALL update_ks_atom(qs_env, ksmat, psmat, forces=.FALSE., tddft=.TRUE., & + rho_atom_external=p_env%local_rho_set%rho_atom_set) + + END IF + + ! KG embedding, contribution of kinetic energy functional to kernel + IF (dft_control%qs_control%do_kg .AND. .NOT. (lr_triplet .OR. gapw .OR. gapw_xc)) THEN + IF (qs_env%kg_env%tnadd_method == kg_tnadd_embed) THEN + + CALL qs_rho_get(rho1, rho_ao=rho1_ao) +!MERGE IF (nspins == 2) THEN + alpha = 1.0_dp +! ELSE +! alpha = 2.0_dp +!MERGE END IF + + ekin_mol = 0.0_dp + CALL get_qs_env(qs_env, kg_env=kg_env) + CALL kg_ekin_subset(qs_env=qs_env, & + ks_matrix=p_env%kpp1, & + ekin_mol=ekin_mol, & + calc_force=.FALSE., & + do_kernel=.TRUE., & + pmat_ext=rho1_ao) +!MERGE alpha=alpha) + END IF + END IF + + CALL pw_pool_give_back_pw(auxbas_pw_pool, v_hartree_gspace%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, v_hartree_rspace%pw) + DO ispin = 1, nspins + CALL pw_pool_give_back_pw(auxbas_pw_pool, v_rspace_new(ispin)%pw) + END DO + DEALLOCATE (v_rspace_new) + + DO ispin = 1, nspins + CALL cp_fm_get_info(c0(ispin)%matrix, ncol_global=ncol) + CALL cp_dbcsr_sm_fm_multiply(p_env%kpp1(ispin)%matrix, & + c0(ispin)%matrix, & + Av(ispin)%matrix, & + ncol=ncol, alpha=1.0_dp, beta=1.0_dp) + ENDDO + + CALL timestop(handle) + + END SUBROUTINE apply_op_2_dft + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param p_env ... +!> \param c0 ... +!> \param v ... +!> \param Av ... +! ************************************************************************************************** + SUBROUTINE apply_op_2_xtb(qs_env, p_env, c0, v, Av) + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(qs_p_env_type), POINTER :: p_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: c0, v, Av + + CHARACTER(len=*), PARAMETER :: routineN = 'apply_op_2_xtb' + + INTEGER :: atom_a, handle, iatom, ikind, is, ispin, & + na, natom, natorb, ncol, nkind, ns, & + nsgf, nspins + INTEGER, DIMENSION(25) :: lao + INTEGER, DIMENSION(5) :: occ + LOGICAL :: lr_triplet + REAL(dp), ALLOCATABLE, DIMENSION(:) :: mcharge, mcharge1 + REAL(dp), ALLOCATABLE, DIMENSION(:, :) :: aocg, aocg1, charges, charges1 + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ao + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_p, matrix_p1, matrix_s + TYPE(dft_control_type), POINTER :: dft_control + TYPE(linres_control_type), POINTER :: linres_control + TYPE(particle_type), DIMENSION(:), POINTER :: particle_set + TYPE(pw_env_type), POINTER :: pw_env + TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set + TYPE(qs_kpp1_env_type), POINTER :: kpp1_env + TYPE(qs_rho_type), POINTER :: rho, rho1 + TYPE(xtb_atom_type), POINTER :: xtb_kind + + CALL timeset(routineN, handle) + + CPASSERT(ASSOCIATED(c0)) + CPASSERT(ASSOCIATED(v)) + CPASSERT(ASSOCIATED(Av)) + MARK_USED(v) + + CPASSERT(ASSOCIATED(p_env%kpp1_env)) + CPASSERT(ASSOCIATED(p_env%kpp1)) + kpp1_env => p_env%kpp1_env + + rho1 => p_env%rho1 + CPASSERT(ASSOCIATED(rho1)) + + CPASSERT(kpp1_env%ref_count > 0) + + CALL get_qs_env(qs_env=qs_env, & + pw_env=pw_env, & + para_env=para_env, & + rho=rho, & + linres_control=linres_control, & + dft_control=dft_control) + + CALL qs_rho_get(rho, rho_ao=rho_ao) + + lr_triplet = linres_control%lr_triplet + CPASSERT(.NOT. lr_triplet) + + nspins = SIZE(p_env%kpp1) + kpp1_env%iter = kpp1_env%iter + 1 + + DO ispin = 1, nspins + CALL dbcsr_set(p_env%kpp1(ispin)%matrix, 0.0_dp) + ENDDO + + IF (dft_control%qs_control%xtb_control%coulomb_interaction) THEN + ! Mulliken charges + CALL get_qs_env(qs_env, particle_set=particle_set, matrix_s_kp=matrix_s) + natom = SIZE(particle_set) + CALL qs_rho_get(rho, rho_ao_kp=matrix_p) + CALL qs_rho_get(rho1, rho_ao_kp=matrix_p1) + ALLOCATE (mcharge(natom), charges(natom, 5)) + ALLOCATE (mcharge1(natom), charges1(natom, 5)) + charges = 0.0_dp + charges1 = 0.0_dp + CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set) + nkind = SIZE(atomic_kind_set) + CALL get_qs_kind_set(qs_kind_set, maxsgf=nsgf) + ALLOCATE (aocg(nsgf, natom)) + aocg = 0.0_dp + ALLOCATE (aocg1(nsgf, natom)) + aocg1 = 0.0_dp + CALL ao_charges(matrix_p, matrix_s, aocg, para_env) + CALL ao_charges(matrix_p1, matrix_s, aocg1, para_env) + DO ikind = 1, nkind + CALL get_atomic_kind(atomic_kind_set(ikind), natom=na) + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind) + CALL get_xtb_atom_param(xtb_kind, natorb=natorb, lao=lao, occupation=occ) + DO iatom = 1, na + atom_a = atomic_kind_set(ikind)%atom_list(iatom) + charges(atom_a, :) = REAL(occ(:), KIND=dp) + DO is = 1, natorb + ns = lao(is) + 1 + charges(atom_a, ns) = charges(atom_a, ns) - aocg(is, atom_a) + charges1(atom_a, ns) = charges1(atom_a, ns) - aocg1(is, atom_a) + END DO + END DO + END DO + DEALLOCATE (aocg, aocg1) + DO iatom = 1, natom + mcharge(iatom) = SUM(charges(iatom, :)) + mcharge1(iatom) = SUM(charges1(iatom, :)) + END DO + ! Coulomb Kernel + CALL xtb_coulomb_hessian(qs_env, p_env%kpp1, charges1, mcharge1, mcharge) + ! + DEALLOCATE (charges, mcharge, charges1, mcharge1) + END IF + + DO ispin = 1, nspins + CALL cp_fm_get_info(c0(ispin)%matrix, ncol_global=ncol) + CALL cp_dbcsr_sm_fm_multiply(p_env%kpp1(ispin)%matrix, & + c0(ispin)%matrix, & + Av(ispin)%matrix, & + ncol=ncol, alpha=1.0_dp, beta=1.0_dp) + ENDDO + + CALL timestop(handle) + + END SUBROUTINE apply_op_2_xtb + +! ************************************************************************************************** +!> \brief Update action of TDDFPT operator on trial vectors by adding exact-exchange term. +!> \param qs_env ... +!> \param p_env ... +!> \param c0 ... +!> \param v ... +!> \param Av ... +!> \par History +!> * 11.2019 adapted from tddfpt_apply_hfx +! ************************************************************************************************** + SUBROUTINE apply_hfx(qs_env, p_env, c0, v, Av) + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(qs_p_env_type), POINTER :: p_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: c0, v, Av + + CHARACTER(LEN=*), PARAMETER :: routineN = 'apply_hfx' + + INTEGER :: handle, ispin, nao, nao_aux, ncol, nspins + LOGICAL :: do_hfx + REAL(KIND=dp) :: alpha + TYPE(admm_type), POINTER :: admm_env + TYPE(cp_fm_type), POINTER :: tc0, tv + TYPE(cp_logger_type), POINTER :: logger + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s, rho1_ao, work + TYPE(dft_control_type), POINTER :: dft_control + TYPE(section_vals_type), POINTER :: hfx_section, input + + CALL timeset(routineN, handle) + + logger => cp_get_default_logger() + + CPASSERT(ASSOCIATED(c0)) + CPASSERT(ASSOCIATED(v)) + CPASSERT(ASSOCIATED(Av)) + + CALL get_qs_env(qs_env=qs_env, & + input=input, & + matrix_s=matrix_s, & + dft_control=dft_control) + nspins = dft_control%nspins + + hfx_section => section_vals_get_subs_vals(input, "DFT%XC%HF") + CALL section_vals_get(hfx_section, explicit=do_hfx) + + IF (do_hfx) THEN + + IF (dft_control%do_admm) THEN + IF (dft_control%admm_control%purification_method /= do_admm_purify_none) THEN + CPABORT("ADMM: Linear Response needs purification_method=none") + END IF + IF (dft_control%admm_control%scaling_model /= do_admm_exch_scaling_none) THEN + CPABORT("ADMM: Linear Response needs scaling_model=none") + END IF + IF (dft_control%admm_control%method /= do_admm_basis_projection) THEN + CPABORT("ADMM: Linear Response needs admm_method=basis_projection") + END IF + ! + CALL get_qs_env(qs_env, admm_env=admm_env) + CPASSERT(ASSOCIATED(admm_env%A)) + CPASSERT(ASSOCIATED(admm_env%work_aux_orb)) + CPASSERT(ASSOCIATED(admm_env%work_aux_orb2)) + CALL cp_fm_get_info(admm_env%A, nrow_global=nao_aux) + CALL get_qs_env(qs_env=qs_env, matrix_s_aux_fit=matrix_s) + NULLIFY (work, rho1_ao) + CALL dbcsr_allocate_matrix_set(work, nspins) + CALL dbcsr_allocate_matrix_set(rho1_ao, nspins) + DO ispin = 1, nspins + ALLOCATE (work(ispin)%matrix, rho1_ao(ispin)%matrix) + CALL dbcsr_create(work(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(work(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(work(ispin)%matrix, 0.0_dp) + CALL dbcsr_create(rho1_ao(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(rho1_ao(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(rho1_ao(ispin)%matrix, 0.0_dp) + END DO + ! P1 -> AUX BASIS + DO ispin = 1, nspins + CALL cp_fm_get_info(c0(ispin)%matrix, nrow_global=nao, ncol_global=ncol) + tv => admm_env%work_aux_orb + tc0 => admm_env%work_aux_orb2 + CALL cp_gemm('N', 'N', nao_aux, ncol, nao, 1.0_dp, admm_env%A, & + v(ispin)%matrix, 0.0_dp, tv) + CALL cp_gemm('N', 'N', nao_aux, ncol, nao, 1.0_dp, admm_env%A, & + c0(ispin)%matrix, 0.0_dp, tc0) + CALL cp_dbcsr_plus_fm_fm_t(rho1_ao(ispin)%matrix, matrix_v=tv, matrix_g=tc0, & + ncol=ncol, alpha=1.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(rho1_ao(ispin)%matrix, matrix_v=tc0, matrix_g=tv, & + ncol=ncol, alpha=1.0_dp) + ENDDO + ELSE + NULLIFY (work, rho1_ao) + CALL get_qs_env(qs_env=qs_env, matrix_s=matrix_s) + CALL dbcsr_allocate_matrix_set(work, nspins) + DO ispin = 1, nspins + ALLOCATE (work(ispin)%matrix) + CALL dbcsr_create(work(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(work(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(work(ispin)%matrix, 0.0_dp) + END DO + rho1_ao => p_env%p1 + END IF + + CALL hfx_matrix(work, rho1_ao, qs_env, hfx_section) + + alpha = 2.0_dp + IF (nspins == 2) alpha = 1.0_dp + IF (dft_control%do_admm) THEN + DO ispin = 1, nspins + CALL cp_fm_get_info(c0(ispin)%matrix, nrow_global=nao, ncol_global=ncol) + CALL cp_gemm('N', 'N', nao_aux, ncol, nao, 1.0_dp, admm_env%A, & + c0(ispin)%matrix, 0.0_dp, tc0) + CALL cp_dbcsr_sm_fm_multiply(work(ispin)%matrix, tc0, tv, & + ncol=ncol, alpha=alpha, beta=0.0_dp) + CALL cp_gemm('T', 'N', nao, ncol, nao_aux, 1.0_dp, admm_env%A, & + tv, 1.0_dp, Av(ispin)%matrix) + END DO + CALL dbcsr_deallocate_matrix_set(rho1_ao) + CALL dbcsr_deallocate_matrix_set(work) + ELSE + DO ispin = 1, nspins + CALL cp_fm_get_info(c0(ispin)%matrix, ncol_global=ncol) + CALL cp_dbcsr_sm_fm_multiply(work(ispin)%matrix, c0(ispin)%matrix, Av(ispin)%matrix, & + ncol=ncol, alpha=alpha, beta=1.0_dp) + END DO + CALL dbcsr_deallocate_matrix_set(work) + END IF + + END IF + + CALL timestop(handle) + + END SUBROUTINE apply_hfx + +! ************************************************************************************************** +!> \brief Add the hfx contributions to the Hamiltonian +!> +!> \param matrix_ks ... +!> \param rho_ao ... +!> \param qs_env ... +!> \param hfx_sections ... +!> \note +!> Simplified version of subroutine hfx_ks_matrix() +! ************************************************************************************************** + SUBROUTINE hfx_matrix(matrix_ks, rho_ao, qs_env, hfx_sections) + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks, rho_ao + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(section_vals_type), POINTER :: hfx_sections + + CHARACTER(LEN=*), PARAMETER :: routineN = 'hfx_matrix' + + INTEGER :: handle, irep, ispin, mspin, n_rep_hf, & + nspins + LOGICAL :: distribute_fock_matrix, & + hfx_treat_lsd_in_core, & + s_mstruct_changed + REAL(KIND=dp) :: eh1 + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_ks_kp, rho_ao_kp + TYPE(dft_control_type), POINTER :: dft_control + TYPE(hfx_type), DIMENSION(:, :), POINTER :: x_data + + CALL timeset(routineN, handle) + + NULLIFY (dft_control, para_env, matrix_ks_kp, rho_ao_kp) + + CALL get_qs_env(qs_env=qs_env, & + dft_control=dft_control, & + para_env=para_env, & + s_mstruct_changed=s_mstruct_changed, & + x_data=x_data) + + CPASSERT(dft_control%nimages == 1) + nspins = dft_control%nspins + + CALL section_vals_get(hfx_sections, n_repetition=n_rep_hf) + CALL section_vals_val_get(hfx_sections, "TREAT_LSD_IN_CORE", l_val=hfx_treat_lsd_in_core, & + i_rep_section=1) + + CALL section_vals_get(hfx_sections, n_repetition=n_rep_hf) + distribute_fock_matrix = .TRUE. + + mspin = 1 + IF (hfx_treat_lsd_in_core) mspin = nspins + + matrix_ks_kp(1:nspins, 1:1) => matrix_ks(1:nspins) + rho_ao_kp(1:nspins, 1:1) => rho_ao(1:nspins) + + DO irep = 1, n_rep_hf + DO ispin = 1, mspin + CALL integrate_four_center(qs_env, x_data, matrix_ks_kp, eh1, rho_ao_kp, hfx_sections, para_env, & + s_mstruct_changed, irep, distribute_fock_matrix, ispin=ispin) + END DO + END DO + + CALL timestop(handle) + + END SUBROUTINE hfx_matrix + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param p_env ... +!> \param c0 ... +!> \param v ... +!> \param Av ... +! ************************************************************************************************** + SUBROUTINE apply_xc_admm(qs_env, p_env, c0, v, Av) + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(qs_p_env_type), POINTER :: p_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: c0, v, Av + + CHARACTER(len=*), PARAMETER :: routineN = 'apply_xc_admm' + + INTEGER :: handle, ispin, nao, nao_aux, ncol, nspins + INTEGER, DIMENSION(2, 3) :: bo + LOGICAL :: lsd + REAL(KIND=dp) :: fac + TYPE(admm_type), POINTER :: admm_env + TYPE(cp_fm_type), POINTER :: tc0, tc1 + TYPE(dbcsr_p_type) :: xcmat + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s + TYPE(dft_control_type), POINTER :: dft_control + TYPE(linres_control_type), POINTER :: linres_control + TYPE(pw_env_type), POINTER :: pw_env + TYPE(pw_p_type), DIMENSION(:), POINTER :: rho1_aux_g, rho1_aux_r, tau_pw, v_xc + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + TYPE(section_vals_type), POINTER :: xc_fun_section, xc_section + TYPE(task_list_type), POINTER :: task_list_aux_fit + TYPE(xc_rho_cflags_type) :: needs + TYPE(xc_rho_set_type), POINTER :: rho1_set + + CALL timeset(routineN, handle) + + CPASSERT(ASSOCIATED(c0)) + CPASSERT(ASSOCIATED(v)) + CPASSERT(ASSOCIATED(Av)) + + CALL get_qs_env(qs_env=qs_env, dft_control=dft_control, task_list_aux_fit=task_list_aux_fit) + + IF (dft_control%do_admm) THEN + IF (dft_control%admm_control%aux_exch_func == do_admm_aux_exch_func_none) THEN + ! nothing to do + ELSE + CALL get_qs_env(qs_env=qs_env, linres_control=linres_control) + CPASSERT(.NOT. dft_control%qs_control%gapw) + CPASSERT(.NOT. dft_control%qs_control%gapw_xc) + CPASSERT(.NOT. dft_control%qs_control%lrigpw) + CPASSERT(.NOT. linres_control%lr_triplet) + + nspins = dft_control%nspins + + ! AUX basis contribution + CALL get_qs_env(qs_env=qs_env, pw_env=pw_env) + CPASSERT(ASSOCIATED(pw_env)) + CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool) + NULLIFY (tau_pw) + ! calculate the xc potential + lsd = (nspins == 2) + CALL get_qs_env(qs_env=qs_env, matrix_s_aux_fit=matrix_s) + ALLOCATE (xcmat%matrix) + CALL dbcsr_create(xcmat%matrix, template=matrix_s(1)%matrix) + ALLOCATE (rho1_aux_r(nspins), rho1_aux_g(nspins)) + DO ispin = 1, nspins + NULLIFY (rho1_aux_r(ispin)%pw, rho1_aux_g(ispin)%pw) + CALL pw_pool_create_pw(auxbas_pw_pool, rho1_aux_r(ispin)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + CALL pw_pool_create_pw(auxbas_pw_pool, rho1_aux_g(ispin)%pw, & + in_space=RECIPROCALSPACE, use_data=COMPLEXDATA1D) + END DO + + CALL admm_aux_reponse_density(qs_env, c0, v, rho1_aux_r, rho1_aux_g) + CALL get_qs_env(qs_env, admm_env=admm_env) + xc_section => admm_env%xc_section_aux + bo = rho1_aux_r(1)%pw%pw_grid%bounds_local + ! create the place where to store the argument for the functionals + NULLIFY (rho1_set) + CALL xc_rho_set_create(rho1_set, bo, & + rho_cutoff=section_get_rval(xc_section, "DENSITY_CUTOFF"), & + drho_cutoff=section_get_rval(xc_section, "GRADIENT_CUTOFF"), & + tau_cutoff=section_get_rval(xc_section, "TAU_CUTOFF")) + + xc_fun_section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL") + needs = xc_functionals_get_needs(xc_fun_section, lsd, .TRUE.) + + ! calculate the arguments needed by the functionals + CALL xc_rho_set_update(rho1_set, rho1_aux_r, rho1_aux_g, tau_pw, needs, & + section_get_ival(xc_section, "XC_GRID%XC_DERIV"), & + section_get_ival(xc_section, "XC_GRID%XC_SMOOTH_RHO"), & + auxbas_pw_pool) + fac = 0._dp + CALL xc_calc_2nd_deriv(v_xc, p_env%kpp1_env%deriv_set_admm, p_env%kpp1_env%rho_set_admm, & + rho1_aux_r, rho1_aux_g, auxbas_pw_pool, gapw=.FALSE., & + xc_section=xc_section) + CALL xc_rho_set_release(rho1_set) + + tc0 => admm_env%work_aux_orb + tc1 => admm_env%work_aux_orb2 + CALL cp_fm_get_info(admm_env%A, nrow_global=nao_aux) + DO ispin = 1, nspins + v_xc(ispin)%pw%cr3d = v_xc(ispin)%pw%cr3d*v_xc(ispin)%pw%pw_grid%dvol + IF (nspins == 1) THEN + v_xc(ispin)%pw%cr3d = 2.0_dp*v_xc(ispin)%pw%cr3d + END IF + CALL dbcsr_copy(xcmat%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(xcmat%matrix, 0.0_dp) + CALL integrate_v_rspace(v_rspace=v_xc(ispin), hmat=xcmat, qs_env=qs_env, & + calculate_forces=.FALSE., basis_type="AUX_FIT", & + task_list_external=task_list_aux_fit) + CALL cp_fm_get_info(c0(ispin)%matrix, nrow_global=nao, ncol_global=ncol) + CALL cp_gemm('N', 'N', nao_aux, ncol, nao, 1.0_dp, admm_env%A, & + c0(ispin)%matrix, 0.0_dp, tc0) + CALL cp_dbcsr_sm_fm_multiply(xcmat%matrix, tc0, tc1, & + ncol=ncol, alpha=1.0_dp, beta=0.0_dp) + CALL cp_gemm('T', 'N', nao, ncol, nao_aux, 1.0_dp, admm_env%A, & + tc1, 1.0_dp, Av(ispin)%matrix) + END DO + + DO ispin = 1, nspins + CALL pw_pool_give_back_pw(auxbas_pw_pool, v_xc(ispin)%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, rho1_aux_r(ispin)%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, rho1_aux_g(ispin)%pw) + END DO + DEALLOCATE (v_xc, rho1_aux_r, rho1_aux_g) + CALL dbcsr_deallocate_matrix(xcmat%matrix) + + END IF + END IF + + CALL timestop(handle) + + END SUBROUTINE apply_xc_admm + +! ************************************************************************************************** +!> \brief Calculate ADMM auxiliary response density +!> \param qs_env ... +!> \param c0 ... +!> \param c1 ... +!> \param rho1_aux_r ... +!> \param rho1_aux_g ... +! ************************************************************************************************** + SUBROUTINE admm_aux_reponse_density(qs_env, c0, c1, rho1_aux_r, rho1_aux_g) + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: c0, c1 + TYPE(pw_p_type), DIMENSION(:), POINTER :: rho1_aux_r, rho1_aux_g + + CHARACTER(LEN=*), PARAMETER :: routineN = 'admm_aux_reponse_density' + + INTEGER :: handle, ispin, nao, nao_aux, ncol, nspins + REAL(KIND=dp) :: tot_rho_aux + TYPE(admm_type), POINTER :: admm_env + TYPE(cp_fm_type), POINTER :: tc0, tc1 + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s, rho1_ao + TYPE(dft_control_type), POINTER :: dft_control + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(task_list_type), POINTER :: task_list_aux_fit + + CALL timeset(routineN, handle) + + CALL get_qs_env(qs_env=qs_env, & + ks_env=ks_env, & + matrix_s=matrix_s, & + dft_control=dft_control) + nspins = dft_control%nspins + + CALL get_qs_env(qs_env, admm_env=admm_env, & + task_list_aux_fit=task_list_aux_fit) + CPASSERT(ASSOCIATED(admm_env%A)) + CPASSERT(ASSOCIATED(admm_env%work_aux_orb)) + CPASSERT(ASSOCIATED(admm_env%work_aux_orb2)) + CALL cp_fm_get_info(admm_env%A, nrow_global=nao_aux) + CALL get_qs_env(qs_env=qs_env, matrix_s_aux_fit=matrix_s) + NULLIFY (rho1_ao) + CALL dbcsr_allocate_matrix_set(rho1_ao, nspins) + DO ispin = 1, nspins + ALLOCATE (rho1_ao(ispin)%matrix) + CALL dbcsr_create(rho1_ao(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(rho1_ao(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(rho1_ao(ispin)%matrix, 0.0_dp) + END DO + ! P1 -> AUX BASIS + DO ispin = 1, nspins + CALL cp_fm_get_info(c0(ispin)%matrix, nrow_global=nao, ncol_global=ncol) + tc0 => admm_env%work_aux_orb + tc1 => admm_env%work_aux_orb2 + CALL cp_gemm('N', 'N', nao_aux, ncol, nao, 1.0_dp, admm_env%A, & + c1(ispin)%matrix, 0.0_dp, tc1) + CALL cp_gemm('N', 'N', nao_aux, ncol, nao, 1.0_dp, admm_env%A, & + c0(ispin)%matrix, 0.0_dp, tc0) + CALL cp_dbcsr_plus_fm_fm_t(rho1_ao(ispin)%matrix, matrix_v=tc1, matrix_g=tc0, & + ncol=ncol, alpha=1.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(rho1_ao(ispin)%matrix, matrix_v=tc0, matrix_g=tc1, & + ncol=ncol, alpha=1.0_dp) + ENDDO + + DO ispin = 1, nspins + CALL calculate_rho_elec(matrix_p=rho1_ao(ispin)%matrix, & + rho=rho1_aux_r(ispin), rho_gspace=rho1_aux_g(ispin), & + total_rho=tot_rho_aux, ks_env=ks_env, & + basis_type="AUX_FIT", & + task_list_external=task_list_aux_fit) + END DO + + CALL dbcsr_deallocate_matrix_set(rho1_ao) + + CALL timestop(handle) + + END SUBROUTINE admm_aux_reponse_density + +! ************************************************************************************************** +!> \brief ... +!> \param kpp1_env ... +!> \param qs_env ... +!> \param lr_triplet ... +! ************************************************************************************************** + SUBROUTINE kpp1_check_i_alloc(kpp1_env, qs_env, lr_triplet) + + TYPE(qs_kpp1_env_type), POINTER :: kpp1_env + TYPE(qs_environment_type), POINTER :: qs_env + LOGICAL, INTENT(IN) :: lr_triplet + + INTEGER :: ispin, nspins + TYPE(admm_type), POINTER :: admm_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s + TYPE(dft_control_type), POINTER :: dft_control + TYPE(pw_env_type), POINTER :: pw_env + TYPE(pw_p_type), DIMENSION(:), POINTER :: my_rho_r, rho_r + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + TYPE(qs_rho_type), POINTER :: rho + TYPE(section_vals_type), POINTER :: input, xc_section + + NULLIFY (pw_env, auxbas_pw_pool, matrix_s, rho, rho_r, input) + + CPASSERT(ASSOCIATED(kpp1_env)) + CPASSERT(kpp1_env%ref_count > 0) + + CALL get_qs_env(qs_env, pw_env=pw_env, & + matrix_s=matrix_s, input=input, rho=rho) + + CALL qs_rho_get(rho, rho_r=rho_r) + nspins = SIZE(rho_r) + + CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool) + + IF (.NOT. ASSOCIATED(kpp1_env%v_rspace)) THEN + ALLOCATE (kpp1_env%v_rspace(nspins)) + DO ispin = 1, nspins + CALL pw_pool_create_pw(auxbas_pw_pool, & + kpp1_env%v_rspace(ispin)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + END DO + END IF + + IF (.NOT. ASSOCIATED(kpp1_env%v_ao)) THEN + CALL dbcsr_allocate_matrix_set(kpp1_env%v_ao, nspins) + DO ispin = 1, nspins + ALLOCATE (kpp1_env%v_ao(ispin)%matrix) + CALL dbcsr_copy(kpp1_env%v_ao(ispin)%matrix, matrix_s(1)%matrix, & + name="kpp1%v_ao-"//ADJUSTL(cp_to_string(ispin))) + END DO + END IF + + CALL get_qs_env(qs_env, admm_env=admm_env, dft_control=dft_control) + + IF (.NOT. ASSOCIATED(kpp1_env%deriv_set)) THEN + IF (nspins == 1 .AND. lr_triplet) THEN + ALLOCATE (my_rho_r(2)) + DO ispin = 1, 2 + CALL pw_pool_create_pw(auxbas_pw_pool, my_rho_r(ispin)%pw, & + use_data=rho_r(1)%pw%in_use, in_space=rho_r(1)%pw%in_space) + my_rho_r(ispin)%pw%cr3d = 0.5_dp*rho_r(1)%pw%cr3d + END DO + ELSE + ALLOCATE (my_rho_r(SIZE(rho_r))) + DO ispin = 1, SIZE(rho_r) + my_rho_r(ispin)%pw => rho_r(ispin)%pw + CALL pw_retain(my_rho_r(ispin)%pw) + END DO + END IF + + IF (dft_control%do_admm) THEN + xc_section => admm_env%xc_section_primary + ELSE + xc_section => section_vals_get_subs_vals(input, "DFT%XC") + END IF + + CALL xc_prep_2nd_deriv(kpp1_env%deriv_set, kpp1_env%rho_set, & + my_rho_r, auxbas_pw_pool, & + xc_section=xc_section) + + DO ispin = 1, SIZE(my_rho_r) + CALL pw_release(my_rho_r(ispin)%pw) + ENDDO + DEALLOCATE (my_rho_r) + ENDIF + + ! ADMM Correction + IF (dft_control%do_admm) THEN + IF (dft_control%admm_control%aux_exch_func /= do_admm_aux_exch_func_none) THEN + IF (.NOT. ASSOCIATED(kpp1_env%deriv_set_admm)) THEN + CPASSERT(.NOT. lr_triplet) + xc_section => admm_env%xc_section_aux + CALL get_qs_env(qs_env=qs_env, rho_aux_fit=rho) + CALL qs_rho_get(rho, rho_r=rho_r) + CALL xc_prep_2nd_deriv(kpp1_env%deriv_set_admm, kpp1_env%rho_set_admm, & + rho_r, auxbas_pw_pool, & + xc_section=xc_section) + END IF + END IF + END IF + + END SUBROUTINE kpp1_check_i_alloc + +END MODULE qs_linres_kernel diff --git a/src/qs_linres_methods.F b/src/qs_linres_methods.F index 5601c5c6c8..7c5a17cdc5 100644 --- a/src/qs_linres_methods.F +++ b/src/qs_linres_methods.F @@ -13,9 +13,6 @@ !> \author MI ! ************************************************************************************************** MODULE qs_linres_methods - USE admm_types, ONLY: admm_type - USE atomic_kind_types, ONLY: atomic_kind_type,& - get_atomic_kind USE cp_control_types, ONLY: dft_control_type USE cp_dbcsr_operations, ONLY: cp_dbcsr_sm_fm_multiply USE cp_external_control, ONLY: external_control @@ -51,36 +48,25 @@ MODULE qs_linres_methods dbcsr_set,& dbcsr_type USE input_constants, ONLY: do_loc_none,& - kg_tnadd_embed,& op_loc_berry,& ot_precond_none,& ot_precond_solver_default,& state_loc_all - USE input_section_types, ONLY: section_vals_get,& - section_vals_get_subs_vals,& + USE input_section_types, ONLY: section_vals_get_subs_vals,& section_vals_type,& section_vals_val_get - USE kg_correction, ONLY: kg_ekin_subset USE kinds, ONLY: default_path_length,& default_string_length,& dp USE machine, ONLY: m_flush,& m_walltime USE message_passing, ONLY: mp_bcast - USE mulliken, ONLY: ao_charges - USE particle_types, ONLY: particle_type USE preconditioner, ONLY: apply_preconditioner,& make_preconditioner - USE pw_env_types, ONLY: pw_env_type - USE qs_2nd_kernel_ao, ONLY: apply_hfx_ao,& - apply_xc_admm_ao,& - build_dm_response + USE qs_2nd_kernel_ao, ONLY: build_dm_response USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type - USE qs_kind_types, ONLY: get_qs_kind,& - get_qs_kind_set,& - qs_kind_type - USE qs_kpp1_env_methods, ONLY: calc_kpp1 + USE qs_linres_kernel, ONLY: apply_op_2 USE qs_linres_types, ONLY: linres_control_type USE qs_loc_methods, ONLY: qs_loc_driver USE qs_loc_types, ONLY: get_qs_loc_env,& @@ -95,16 +81,11 @@ MODULE qs_linres_methods USE qs_mo_types, ONLY: get_mo_set,& mo_set_p_type USE qs_p_env_methods, ONLY: p_env_check_i_alloc,& - p_env_finish_kpp1,& p_env_update_rho USE qs_p_env_types, ONLY: qs_p_env_type USE qs_rho_methods, ONLY: qs_rho_update_rho - USE qs_rho_types, ONLY: qs_rho_get,& - qs_rho_type + USE qs_rho_types, ONLY: qs_rho_type USE string_utilities, ONLY: xstring - USE xtb_ehess, ONLY: xtb_coulomb_hessian - USE xtb_types, ONLY: get_xtb_atom_param,& - xtb_atom_type #include "./base/base_uses.f90" IMPLICIT NONE @@ -247,10 +228,9 @@ CONTAINS INTEGER :: handle, ispin, iter, maxnmo, maxnmo_o, & nao, ncol, nmo, nspins LOGICAL :: restart - REAL(dp) :: norm_res, t1, t2 - REAL(dp), DIMENSION(:), POINTER :: alpha, beta, tr_pAp, tr_rz0, tr_rz00, & - tr_rz1 - TYPE(cp_fm_p_type), ALLOCATABLE, DIMENSION(:) :: Ap, chc, mo_coeff_array, p, r, Sc, z + REAL(dp) :: alpha, beta, norm_res, t1, t2 + REAL(dp), DIMENSION(:), POINTER :: tr_pAp, tr_rz0, tr_rz00, tr_rz1 + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: Ap, chc, mo_coeff_array, p, r, Sc, z TYPE(cp_fm_struct_type), POINTER :: tmp_fm_struct TYPE(cp_fm_type), POINTER :: buf, mo_coeff TYPE(cp_para_env_type), POINTER :: para_env @@ -290,7 +270,7 @@ CONTAINS CALL check_p_env_init(p_env, linres_control, nspins) ! ! allocate the vectors - ALLOCATE (alpha(nspins), beta(nspins), tr_pAp(nspins), tr_rz0(nspins), tr_rz00(nspins), tr_rz1(nspins), & + ALLOCATE (tr_pAp(nspins), tr_rz0(nspins), tr_rz00(nspins), tr_rz1(nspins), & r(nspins), p(nspins), z(nspins), Ap(nspins), mo_coeff_array(nspins)) DO ispin = 1, nspins CALL get_mo_set(mos(ispin)%mo_set, mo_coeff=mo_coeff) @@ -334,8 +314,6 @@ CONTAINS CALL cp_dbcsr_sm_fm_multiply(matrix_s(1)%matrix, mo_coeff, Sc(ispin)%matrix, ncol) ENDDO ! - ! - ! ! header IF (iounit > 0) THEN WRITE (iounit, "(/,T3,A,T16,A,T25,A,T38,A,T52,A,T72,A,/,T3,A)") & @@ -349,6 +327,7 @@ CONTAINS ! build the preconditioner IF (linres_control%preconditioner_type /= ot_precond_none) THEN IF (p_env%new_preconditioner) THEN + p_env%os_valid = .FALSE. DO ispin = 1, nspins IF (ASSOCIATED(matrix_t)) THEN CALL make_preconditioner(p_env%preconditioner(ispin), & @@ -401,7 +380,6 @@ CONTAINS linres_control%flag = "PCG" ENDIF ! - norm_res = 0.0_dp DO ispin = 1, nspins ! ! p_0 = z_0 @@ -409,11 +387,11 @@ CONTAINS ! ! trace(r_0 * z_0) CALL cp_fm_trace(r(ispin)%matrix, z(ispin)%matrix, tr_rz0(ispin)) - IF (tr_rz0(ispin) .LT. 0.0_dp) CPABORT("tr(r_j*z_j) < 0") - norm_res = MAX(norm_res, ABS(tr_rz0(ispin))/SQRT(REAL(nao*maxnmo_o, dp))) ENDDO + IF (SUM(tr_rz0) < 0.0_dp) CPABORT("tr(r_j*z_j) < 0") + norm_res = ABS(SUM(tr_rz0))/SQRT(REAL(nspins*nao*maxnmo_o, dp)) ! - alpha(:) = 0.0_dp + alpha = 0.0_dp restart = .FALSE. should_stop = .FALSE. iteration: DO iter = 1, linres_control%max_iter @@ -425,23 +403,24 @@ CONTAINS ENDIF ! t2 = m_walltime() - IF (iter .EQ. 1 .OR. MOD(iter, 1) .EQ. 0 .OR. linres_control%converged .OR. restart .OR. should_stop) THEN + IF (iter .EQ. 1 .OR. MOD(iter, 1) .EQ. 0 .OR. linres_control%converged & + .OR. restart .OR. should_stop) THEN IF (iounit > 0) THEN WRITE (iounit, "(T5,I5,T18,A3,T28,L1,T38,1E8.2,T48,F16.10,T68,F8.2)") & - iter, linres_control%flag, restart, MAXVAL(alpha), norm_res, t2 - t1 + iter, linres_control%flag, restart, alpha, norm_res, t2 - t1 CALL m_flush(iounit) ENDIF ENDIF ! IF (linres_control%converged) THEN IF (iounit > 0) THEN - WRITE (iounit, "(/,T2,A,I4,A,/)") "The linear solver converged in ", iter, " iterations." + WRITE (iounit, "(T3,A,I4,A)") "The linear solver converged in ", iter, " iterations." CALL m_flush(iounit) ENDIF EXIT iteration ELSE IF (should_stop) THEN IF (iounit > 0) THEN - WRITE (iounit, "(/,T2,A,I4,A,/)") "The linear solver did NOT converge! External stop" + WRITE (iounit, "(T3,A,I4,A)") "The linear solver did NOT converge! External stop" CALL m_flush(iounit) END IF EXIT iteration @@ -450,8 +429,8 @@ CONTAINS ! Max number of iteration reached IF (iter == linres_control%max_iter) THEN IF (iounit > 0) THEN - WRITE (iounit, "(/,T2,A/)") & - "The linear solver didnt converge! Maximum number of iterations reached." + WRITE (iounit, "(T3,A)") & + "The linear solver didn't converge! Maximum number of iterations reached." CALL m_flush(iounit) ENDIF linres_control%converged = .FALSE. @@ -467,35 +446,18 @@ CONTAINS ! ! tr(Ap_j*p_j) CALL cp_fm_trace(Ap(ispin)%matrix, p(ispin)%matrix, tr_pAp(ispin)) - IF (tr_pAp(ispin) .LT. 0.0_dp) THEN - ! try to fix it by getting rid of the preconditioner - IF (iter > 1) THEN - CALL cp_fm_scale_and_add(beta(ispin), p(ispin)%matrix, -1.0_dp, z(ispin)%matrix) - CALL cp_fm_trace(r(ispin)%matrix, r(ispin)%matrix, tr_rz1(ispin)) - beta(ispin) = tr_rz1(ispin)/tr_rz00(ispin) - CALL cp_fm_scale_and_add(beta(ispin), p(ispin)%matrix, 1.0_dp, r(ispin)%matrix) - tr_rz0(ispin) = tr_rz1(ispin) - ELSE - CALL cp_fm_to_fm(r(ispin)%matrix, p(ispin)%matrix) - CALL cp_fm_trace(r(ispin)%matrix, r(ispin)%matrix, tr_rz0(ispin)) - END IF - linres_control%flag = "CG" - - CALL apply_op(qs_env, p_env, psi0_order, p, Ap, chc) - CALL postortho(Ap, mo_coeff_array, Sc) - CALL cp_fm_trace(Ap(ispin)%matrix, p(ispin)%matrix, tr_pAp(ispin)) - CPABORT("tr(Ap_j*p_j) < 0") - END IF - ! - ! alpha = tr(r_j*z_j) / tr(Ap_j*p_j) - IF (tr_pAp(ispin) .LT. 1.0e-10_dp) THEN - alpha(ispin) = 1.0_dp - ELSE - alpha(ispin) = tr_rz0(ispin)/tr_pAp(ispin) - ENDIF + END DO + ! + ! alpha = tr(r_j*z_j) / tr(Ap_j*p_j) + IF (SUM(tr_pAp) < 1.0e-10_dp) THEN + alpha = 1.0_dp + ELSE + alpha = SUM(tr_rz0)/SUM(tr_pAp) + ENDIF + DO ispin = 1, nspins ! ! x_j+1 = x_j + alpha * p_j - CALL cp_fm_scale_and_add(1.0_dp, psi1(ispin)%matrix, alpha(ispin), p(ispin)%matrix) + CALL cp_fm_scale_and_add(1.0_dp, psi1(ispin)%matrix, alpha, p(ispin)%matrix) ENDDO ! ! need to recompute the residue @@ -519,7 +481,7 @@ CONTAINS ! ! r_j+1 = r_j - alpha * Ap_j DO ispin = 1, nspins - CALL cp_fm_scale_and_add(1.0_dp, r(ispin)%matrix, -alpha(ispin), Ap(ispin)%matrix) + CALL cp_fm_scale_and_add(1.0_dp, r(ispin)%matrix, -alpha, Ap(ispin)%matrix) ENDDO restart = .FALSE. ENDIF @@ -543,27 +505,28 @@ CONTAINS linres_control%flag = "PCG" ENDIF ! - norm_res = 0.0_dp DO ispin = 1, nspins ! ! tr(r_j+1*z_j+1) CALL cp_fm_trace(r(ispin)%matrix, z(ispin)%matrix, tr_rz1(ispin)) - IF (tr_rz1(ispin) .LT. 0.0_dp) CPABORT("tr(r_j+1*z_j+1) < 0") - norm_res = MAX(norm_res, tr_rz1(ispin)/SQRT(REAL(nao*maxnmo_o, dp))) - ! - ! beta = tr(r_j+1*z_j+1) / tr(r_j*z_j) - IF (tr_rz0(ispin) .LT. 1.0e-10_dp) THEN - beta(ispin) = 0.0_dp - ELSE - beta(ispin) = tr_rz1(ispin)/tr_rz0(ispin) - ENDIF + END DO + IF (SUM(tr_rz1) < 0.0_dp) CPABORT("tr(r_j+1*z_j+1) < 0") + norm_res = SUM(tr_rz1)/SQRT(REAL(nspins*nao*maxnmo_o, dp)) + ! + ! beta = tr(r_j+1*z_j+1) / tr(r_j*z_j) + IF (SUM(tr_rz0) < 1.0e-10_dp) THEN + beta = 0.0_dp + ELSE + beta = SUM(tr_rz1)/SUM(tr_rz0) + ENDIF + DO ispin = 1, nspins ! ! p_j+1 = z_j+1 + beta * p_j - CALL cp_fm_scale_and_add(beta(ispin), p(ispin)%matrix, 1.0_dp, z(ispin)%matrix) + CALL cp_fm_scale_and_add(beta, p(ispin)%matrix, 1.0_dp, z(ispin)%matrix) tr_rz00(ispin) = tr_rz0(ispin) tr_rz0(ispin) = tr_rz1(ispin) ENDDO - + ! ! Can we exit the SCF loop? CALL external_control(should_stop, "LINRES", target_time=qs_env%target_time, & start_time=qs_env%start_time) @@ -584,7 +547,7 @@ CONTAINS CALL cp_fm_release(Sc(ispin)%matrix) CALL cp_fm_release(chc(ispin)%matrix) ENDDO - DEALLOCATE (alpha, beta, tr_pAp, tr_rz0, tr_rz00, tr_rz1, r, p, z, Ap, Sc, chc, mo_coeff_array) + DEALLOCATE (tr_pAp, tr_rz0, tr_rz00, tr_rz1, r, p, z, Ap, Sc, chc, mo_coeff_array) ! CALL timestop(handle) ! @@ -603,7 +566,7 @@ CONTAINS ! TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env TYPE(qs_p_env_type), INTENT(IN), POINTER :: p_env - TYPE(cp_fm_p_type), DIMENSION(:), INTENT(INOUT) :: c0, v, Av, chc + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: c0, v, Av, chc CHARACTER(LEN=*), PARAMETER :: routineN = 'apply_op' @@ -659,7 +622,7 @@ CONTAINS IF (ASSOCIATED(p_env%kpp1_admm)) CALL dbcsr_set(p_env%kpp1_admm(ispin)%matrix, 0.0_dp) END DO - CALL apply_op_2(qs_env, p_env, c0, Av) + CALL apply_op_2(qs_env, p_env, c0, v, Av) ENDIF @@ -712,293 +675,12 @@ CONTAINS ! END SUBROUTINE apply_op_1 +!MERGE ! ************************************************************************************************** !> \brief ... -!> \param qs_env ... -!> \param p_env ... -!> \param c0 ... -!> \param Av ... -! ************************************************************************************************** - SUBROUTINE apply_op_2(qs_env, p_env, c0, Av) - ! - TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env - TYPE(qs_p_env_type), INTENT(IN), POINTER :: p_env - TYPE(cp_fm_p_type), DIMENSION(:), INTENT(INOUT) :: c0, Av - - INTEGER :: ispin, ncol - TYPE(dft_control_type), POINTER :: dft_control - - CALL get_qs_env(qs_env=qs_env, dft_control=dft_control) - IF (dft_control%qs_control%semi_empirical) THEN - CPABORT("Linear response not available with SE methods") - ELSEIF (dft_control%qs_control%dftb) THEN - CPABORT("Linear response not available with DFTB") - ELSEIF (dft_control%qs_control%xtb) THEN - CALL apply_op_2_xtb(qs_env, p_env) - ELSE - CALL apply_op_2_dft(qs_env, p_env) - CALL apply_hfx(qs_env, p_env) - CALL apply_xc_admm(qs_env, p_env) - CALL p_env_finish_kpp1(qs_env, p_env) - END IF - - ! Transform second index in AO basis - DO ispin = 1, SIZE(p_env%kpp1) - CALL cp_fm_get_info(c0(ispin)%matrix, ncol_global=ncol) - CALL cp_dbcsr_sm_fm_multiply(p_env%kpp1(ispin)%matrix, c0(ispin)%matrix, Av(ispin)%matrix, & - ncol=ncol, alpha=1.0_dp, beta=1.0_dp) - END DO - - END SUBROUTINE apply_op_2 - -! ************************************************************************************************** -!> \brief ... -!> \param qs_env ... -!> \param p_env ... -! ************************************************************************************************** - SUBROUTINE apply_op_2_dft(qs_env, p_env) - TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env - TYPE(qs_p_env_type), INTENT(IN), POINTER :: p_env - - CHARACTER(len=*), PARAMETER :: routineN = 'apply_op_2_dft' - - INTEGER :: handle, nspins - LOGICAL :: gapw, gapw_xc, lr_triplet, lrigpw - REAL(KIND=dp) :: ekin_mol - TYPE(admm_type), POINTER :: admm_env - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho1_ao - TYPE(dft_control_type), POINTER :: dft_control - TYPE(linres_control_type), POINTER :: linres_control - TYPE(qs_rho_type), POINTER :: rho1, rho1_xc - TYPE(section_vals_type), POINTER :: input, xc_section - - CALL timeset(routineN, handle) - - NULLIFY (rho1_ao, input, dft_control) - - rho1 => p_env%rho1 - rho1_xc => p_env%rho1_xc - CPASSERT(ASSOCIATED(rho1)) - - CALL get_qs_env(qs_env=qs_env, & - input=input, & - linres_control=linres_control, & - dft_control=dft_control) - - lrigpw = dft_control%qs_control%lrigpw - - lr_triplet = linres_control%lr_triplet - - gapw = dft_control%qs_control%gapw - gapw_xc = dft_control%qs_control%gapw_xc - - IF (dft_control%do_admm) THEN - CALL get_qs_env(qs_env, admm_env=admm_env) - xc_section => admm_env%xc_section_primary - ELSE - xc_section => section_vals_get_subs_vals(input, "DFT%XC") - END IF - - CALL calc_kpp1(rho1_xc, rho1, xc_section, .FALSE., & - .FALSE., lrigpw, .TRUE., lr_triplet, & - qs_env, p_env) - - nspins = SIZE(p_env%kpp1) - ! KG embedding, contribution of kinetic energy functional to kernel - IF (dft_control%qs_control%do_kg .AND. .NOT. (lr_triplet .OR. gapw .OR. gapw_xc)) THEN - IF (qs_env%kg_env%tnadd_method == kg_tnadd_embed) THEN - - ekin_mol = 0.0_dp - CALL qs_rho_get(rho1, rho_ao=rho1_ao) - CALL kg_ekin_subset(qs_env=qs_env, & - ks_matrix=p_env%kpp1, & - ekin_mol=ekin_mol, & - calc_force=.FALSE., & - do_kernel=.TRUE., & - pmat_ext=rho1_ao) - END IF - END IF - - CALL timestop(handle) - - END SUBROUTINE apply_op_2_dft - -! ************************************************************************************************** -!> \brief ... -!> \param qs_env ... -!> \param p_env ... -! ************************************************************************************************** - SUBROUTINE apply_op_2_xtb(qs_env, p_env) - TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env - TYPE(qs_p_env_type), INTENT(IN), POINTER :: p_env - - CHARACTER(len=*), PARAMETER :: routineN = 'apply_op_2_xtb' - - INTEGER :: atom_a, handle, iatom, ikind, is, ispin, & - na, natom, natorb, nkind, ns, nsgf, & - nspins - INTEGER, DIMENSION(25) :: lao - INTEGER, DIMENSION(5) :: occ - LOGICAL :: lr_triplet - REAL(dp), ALLOCATABLE, DIMENSION(:) :: mcharge, mcharge1 - REAL(dp), ALLOCATABLE, DIMENSION(:, :) :: aocg, aocg1, charges, charges1 - TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set - TYPE(cp_para_env_type), POINTER :: para_env - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: p_matrix, rho_ao - TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_p, matrix_p1, matrix_s - TYPE(dbcsr_type), POINTER :: s_matrix - TYPE(dft_control_type), POINTER :: dft_control - TYPE(linres_control_type), POINTER :: linres_control - TYPE(particle_type), DIMENSION(:), POINTER :: particle_set - TYPE(pw_env_type), POINTER :: pw_env - TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set - TYPE(qs_rho_type), POINTER :: rho, rho1 - TYPE(xtb_atom_type), POINTER :: xtb_kind - - CALL timeset(routineN, handle) - - CPASSERT(ASSOCIATED(p_env%kpp1_env)) - CPASSERT(ASSOCIATED(p_env%kpp1)) - - rho1 => p_env%rho1 - CPASSERT(ASSOCIATED(rho1)) - - CPASSERT(p_env%kpp1_env%ref_count > 0) - - CALL get_qs_env(qs_env=qs_env, & - pw_env=pw_env, & - para_env=para_env, & - rho=rho, & - linres_control=linres_control, & - dft_control=dft_control) - - CALL qs_rho_get(rho, rho_ao=rho_ao) - - lr_triplet = linres_control%lr_triplet - CPASSERT(.NOT. lr_triplet) - - nspins = SIZE(p_env%kpp1) - - DO ispin = 1, nspins - CALL dbcsr_set(p_env%kpp1(ispin)%matrix, 0.0_dp) - ENDDO - - IF (dft_control%qs_control%xtb_control%coulomb_interaction) THEN - ! Mulliken charges - CALL get_qs_env(qs_env, particle_set=particle_set, matrix_s_kp=matrix_s) - natom = SIZE(particle_set) - CALL qs_rho_get(rho, rho_ao_kp=matrix_p) - CALL qs_rho_get(rho1, rho_ao_kp=matrix_p1) - ALLOCATE (mcharge(natom), charges(natom, 5)) - ALLOCATE (mcharge1(natom), charges1(natom, 5)) - charges = 0.0_dp - charges1 = 0.0_dp - CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set) - nkind = SIZE(atomic_kind_set) - CALL get_qs_kind_set(qs_kind_set, maxsgf=nsgf) - ALLOCATE (aocg(nsgf, natom)) - aocg = 0.0_dp - ALLOCATE (aocg1(nsgf, natom)) - aocg1 = 0.0_dp - p_matrix => matrix_p(:, 1) - s_matrix => matrix_s(1, 1)%matrix - CALL ao_charges(matrix_p, matrix_s, aocg, para_env) - CALL ao_charges(matrix_p1, matrix_s, aocg1, para_env) - DO ikind = 1, nkind - CALL get_atomic_kind(atomic_kind_set(ikind), natom=na) - CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind) - CALL get_xtb_atom_param(xtb_kind, natorb=natorb, lao=lao, occupation=occ) - DO iatom = 1, na - atom_a = atomic_kind_set(ikind)%atom_list(iatom) - charges(atom_a, :) = REAL(occ(:), KIND=dp) - DO is = 1, natorb - ns = lao(is) + 1 - charges(atom_a, ns) = charges(atom_a, ns) - aocg(is, atom_a) - charges1(atom_a, ns) = charges1(atom_a, ns) - aocg1(is, atom_a) - END DO - END DO - END DO - DEALLOCATE (aocg, aocg1) - DO iatom = 1, natom - mcharge(iatom) = SUM(charges(iatom, :)) - mcharge1(iatom) = SUM(charges1(iatom, :)) - END DO - ! Coulomb Kernel - CALL xtb_coulomb_hessian(qs_env, p_env%kpp1, charges1, mcharge1, mcharge) - ! - DEALLOCATE (charges, mcharge, charges1, mcharge1) - END IF - - CALL timestop(handle) - - END SUBROUTINE apply_op_2_xtb - -! ************************************************************************************************** -!> \brief Update action of TDDFPT operator on trial vectors by adding exact-exchange term. -!> \param qs_env ... -!> \param p_env ... -!> \par History -!> * 11.2019 adapted from tddfpt_apply_hfx -! ************************************************************************************************** - SUBROUTINE apply_hfx(qs_env, p_env) - TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env - TYPE(qs_p_env_type), INTENT(IN), POINTER :: p_env - - CHARACTER(LEN=*), PARAMETER :: routineN = 'apply_hfx' - - INTEGER :: handle - LOGICAL :: do_hfx - TYPE(dft_control_type), POINTER :: dft_control - TYPE(section_vals_type), POINTER :: hfx_section, input - - CALL timeset(routineN, handle) - - CALL get_qs_env(qs_env=qs_env, & - input=input, & - dft_control=dft_control) - - hfx_section => section_vals_get_subs_vals(input, "DFT%XC%HF") - CALL section_vals_get(hfx_section, explicit=do_hfx) - - IF (do_hfx) THEN - CALL apply_hfx_ao(qs_env, p_env) - END IF - - CALL timestop(handle) - - END SUBROUTINE apply_hfx - -! ************************************************************************************************** -!> \brief ... -!> \param qs_env ... -!> \param p_env ... -! ************************************************************************************************** - SUBROUTINE apply_xc_admm(qs_env, p_env) - TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env - TYPE(qs_p_env_type), INTENT(IN), POINTER :: p_env - - CHARACTER(len=*), PARAMETER :: routineN = 'apply_xc_admm' - - INTEGER :: handle - TYPE(dft_control_type), POINTER :: dft_control - - CALL timeset(routineN, handle) - - CALL get_qs_env(qs_env=qs_env, dft_control=dft_control) - - IF (dft_control%do_admm) THEN - CALL apply_xc_admm_ao(qs_env, p_env) - END IF - - CALL timestop(handle) - - END SUBROUTINE apply_xc_admm - -! ************************************************************************************************** -!> \brief projects first index of v onto the virtual subspace -!> \param v matrix to be projected -!> \param psi0 matrix with occupied orbitals -!> \param S_psi0 matrix containing product of metric and occupied orbitals +!> \param v ... +!> \param psi0 ... +!> \param S_psi0 ... ! ************************************************************************************************** SUBROUTINE preortho(v, psi0, S_psi0) !v = (I-PS)v @@ -1378,8 +1060,6 @@ CONTAINS END SUBROUTINE linres_read_restart -! ************************************************************************************************** - ! ************************************************************************************************** !> \brief ... !> \param p_env ... diff --git a/src/qs_linres_module.F b/src/qs_linres_module.F index 067ae728ee..f96886ebf3 100644 --- a/src/qs_linres_module.F +++ b/src/qs_linres_module.F @@ -40,6 +40,7 @@ MODULE qs_linres_module section_vals_get_subs_vals,& section_vals_type,& section_vals_val_get + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type,& set_qs_env @@ -80,7 +81,6 @@ MODULE qs_linres_module linres_control_release,& linres_control_type,& nmr_env_type - USE qs_mo_methods, ONLY: calculate_density_matrix USE qs_mo_types, ONLY: mo_set_p_type USE qs_p_env_methods, ONLY: p_env_create,& p_env_psi0_changed diff --git a/src/qs_mo_io.F b/src/qs_mo_io.F index 49f49e2f70..e584f246ce 100644 --- a/src/qs_mo_io.F +++ b/src/qs_mo_io.F @@ -68,12 +68,12 @@ MODULE qs_mo_io USE orbital_transformation_matrices, ONLY: orbtramat USE particle_types, ONLY: particle_type USE physcon, ONLY: evolt + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_dftb_types, ONLY: qs_dftb_atom_type USE qs_dftb_utils, ONLY: get_dftb_atom_param USE qs_kind_types, ONLY: get_qs_kind,& get_qs_kind_set,& qs_kind_type - USE qs_mo_methods, ONLY: calculate_density_matrix USE qs_mo_occupation, ONLY: set_mo_occupation USE qs_mo_types, ONLY: mo_set_p_type,& mo_set_type diff --git a/src/qs_mo_methods.F b/src/qs_mo_methods.F index 91faea005c..08e4769823 100644 --- a/src/qs_mo_methods.F +++ b/src/qs_mo_methods.F @@ -21,10 +21,8 @@ MODULE qs_mo_methods USE cp_dbcsr_operations, ONLY: copy_dbcsr_to_fm,& copy_fm_to_dbcsr,& cp_dbcsr_m_by_n_from_template,& - cp_dbcsr_plus_fm_fm_t,& cp_dbcsr_sm_fm_multiply - USE cp_fm_basic_linalg, ONLY: cp_fm_column_scale,& - cp_fm_syrk,& + USE cp_fm_basic_linalg, ONLY: cp_fm_syrk,& cp_fm_triangular_multiply USE cp_fm_cholesky, ONLY: cp_fm_cholesky_decompose USE cp_fm_diag, ONLY: choose_eigv_solver,& @@ -41,17 +39,20 @@ MODULE qs_mo_methods USE cp_gemm_interface, ONLY: cp_gemm USE cp_log_handling, ONLY: cp_logger_get_default_io_unit USE cp_para_types, ONLY: cp_para_env_type - USE dbcsr_api, ONLY: & - dbcsr_copy, dbcsr_get_info, dbcsr_init_p, dbcsr_multiply, dbcsr_p_type, dbcsr_release, & - dbcsr_release_p, dbcsr_scale_by_vector, dbcsr_set, dbcsr_type, dbcsr_type_no_symmetry + USE dbcsr_api, ONLY: dbcsr_copy,& + dbcsr_get_info,& + dbcsr_init_p,& + dbcsr_multiply,& + dbcsr_p_type,& + dbcsr_release_p,& + dbcsr_type,& + dbcsr_type_no_symmetry USE kinds, ONLY: dp USE message_passing, ONLY: mp_max USE physcon, ONLY: evolt USE qs_mo_occupation, ONLY: set_mo_occupation USE qs_mo_types, ONLY: get_mo_set,& - has_uniform_occupation,& - mo_set_p_type,& - mo_set_type + mo_set_p_type USE scf_control_types, ONLY: scf_control_type #include "./base/base_uses.f90" @@ -60,13 +61,9 @@ MODULE qs_mo_methods CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_mo_methods' PUBLIC :: make_basis_simple, make_basis_cholesky, make_basis_sv, make_basis_sm, & - make_basis_lowdin, calculate_density_matrix, calculate_subspace_eigenvalues, & + make_basis_lowdin, calculate_subspace_eigenvalues, & calculate_orthonormality, calculate_magnitude, make_mo_eig - INTERFACE calculate_density_matrix - MODULE PROCEDURE calculate_dm_sparse - END INTERFACE - INTERFACE calculate_subspace_eigenvalues MODULE PROCEDURE subspace_eigenvalues_ks_fm MODULE PROCEDURE subspace_eigenvalues_ks_dbcsr @@ -389,83 +386,6 @@ CONTAINS END SUBROUTINE make_basis_simple -! ************************************************************************************************** -!> \brief Calculate the density matrix -!> \param mo_set ... -!> \param density_matrix ... -!> \param use_dbcsr ... -!> \param retain_sparsity ... -!> \date 06.2002 -!> \par History -!> - Fractional occupied orbitals (MK) -!> \author Joost VandeVondele -!> \version 1.0 -! ************************************************************************************************** - SUBROUTINE calculate_dm_sparse(mo_set, density_matrix, use_dbcsr, retain_sparsity) - - TYPE(mo_set_type), POINTER :: mo_set - TYPE(dbcsr_type), POINTER :: density_matrix - LOGICAL, INTENT(IN), OPTIONAL :: use_dbcsr, retain_sparsity - - CHARACTER(len=*), PARAMETER :: routineN = 'calculate_dm_sparse' - - INTEGER :: handle - LOGICAL :: my_retain_sparsity, my_use_dbcsr - TYPE(cp_fm_type), POINTER :: fm_tmp - TYPE(dbcsr_type) :: dbcsr_tmp - - CALL timeset(routineN, handle) - - my_use_dbcsr = .FALSE. - IF (PRESENT(use_dbcsr)) my_use_dbcsr = use_dbcsr - my_retain_sparsity = .TRUE. - IF (PRESENT(retain_sparsity)) my_retain_sparsity = retain_sparsity - IF (my_use_dbcsr) THEN - IF (.NOT. ASSOCIATED(mo_set%mo_coeff_b)) THEN - CPABORT("mo_coeff_b NOT ASSOCIATED") - END IF - END IF - - CALL dbcsr_set(density_matrix, 0.0_dp) - - IF (has_uniform_occupation(mo_set=mo_set, last_mo=mo_set%homo)) THEN - IF (my_use_dbcsr) THEN - CALL dbcsr_multiply("N", "T", mo_set%maxocc, mo_set%mo_coeff_b, mo_set%mo_coeff_b, & - 1.0_dp, density_matrix, retain_sparsity=my_retain_sparsity, & - last_k=mo_set%homo) - ELSE - CALL cp_dbcsr_plus_fm_fm_t(sparse_matrix=density_matrix, & - matrix_v=mo_set%mo_coeff, & - ncol=mo_set%homo, & - alpha=mo_set%maxocc) - END IF - ELSE - IF (my_use_dbcsr) THEN - CALL dbcsr_copy(dbcsr_tmp, mo_set%mo_coeff_b) - CALL dbcsr_scale_by_vector(dbcsr_tmp, mo_set%occupation_numbers(1:mo_set%homo), & - side='right') - CALL dbcsr_multiply("N", "T", 1.0_dp, mo_set%mo_coeff_b, dbcsr_tmp, & - 1.0_dp, density_matrix, retain_sparsity=my_retain_sparsity, & - last_k=mo_set%homo) - CALL dbcsr_release(dbcsr_tmp) - ELSE - NULLIFY (fm_tmp) - CALL cp_fm_create(fm_tmp, mo_set%mo_coeff%matrix_struct) - CALL cp_fm_to_fm(mo_set%mo_coeff, fm_tmp) - CALL cp_fm_column_scale(fm_tmp, mo_set%occupation_numbers(1:mo_set%homo)) - CALL cp_dbcsr_plus_fm_fm_t(sparse_matrix=density_matrix, & - matrix_v=mo_set%mo_coeff, & - matrix_g=fm_tmp, & - ncol=mo_set%homo, & - alpha=1.0_dp) - CALL cp_fm_release(fm_tmp) - END IF - END IF - - CALL timestop(handle) - - END SUBROUTINE calculate_dm_sparse - ! ************************************************************************************************** !> \brief computes ritz values of a set of orbitals given a ks_matrix !> rotates the orbitals into eigenstates depending on do_rotation diff --git a/src/qs_mom_methods.F b/src/qs_mom_methods.F index d37961b857..4c476c6a87 100644 --- a/src/qs_mom_methods.F +++ b/src/qs_mom_methods.F @@ -33,7 +33,7 @@ MODULE qs_mom_methods momtype_mom USE input_section_types, ONLY: section_vals_type USE kinds, ONLY: dp - USE qs_mo_methods, ONLY: calculate_density_matrix + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_mo_types, ONLY: get_mo_set,& mo_set_p_type,& mo_set_type,& diff --git a/src/qs_p_env_methods.F b/src/qs_p_env_methods.F index 9f28874513..fe4d741c7f 100644 --- a/src/qs_p_env_methods.F +++ b/src/qs_p_env_methods.F @@ -154,8 +154,6 @@ CONTAINS TYPE(pw_env_type), POINTER :: pw_env TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set -! code - CALL timeset(routineN, handle) NULLIFY (ao_mo_fm_pools, mo_mo_fm_pools, matrix_s, dft_control, para_env, blacs_env) CALL get_qs_env(qs_env, & @@ -188,8 +186,17 @@ CONTAINS p_env%ref_count = 1 last_p_env_id = last_p_env_id + 1 p_env%id_nr = last_p_env_id + p_env%iter = 0 p_env%new_preconditioner = .TRUE. + p_env%only_energy = .FALSE. + p_env%os_valid = .FALSE. + p_env%ls_count = 0 + p_env%delta = 0.0_dp + p_env%gnorm = 0.0_dp + p_env%gnorm_old = 0.0_dp + p_env%etotal = 0.0_dp + p_env%gradient = 0.0_dp CALL qs_rho_create(p_env%rho1) CALL qs_rho_create(p_env%rho1_xc) @@ -448,7 +455,7 @@ CONTAINS IF (dft_control%do_admm) THEN IF (dft_control%admm_control%aux_exch_func /= do_admm_aux_exch_func_none) THEN - NULLIFY (ks_env, rho_g_aux, rho_r_aux, task_list) + NULLIFY (ks_env, rho1_ao, rho_g_aux, rho_r_aux, task_list) CALL get_qs_env(qs_env, & ks_env=ks_env, & diff --git a/src/qs_p_env_types.F b/src/qs_p_env_types.F index feadfbf7aa..f86b0b638c 100644 --- a/src/qs_p_env_types.F +++ b/src/qs_p_env_types.F @@ -18,6 +18,7 @@ MODULE qs_p_env_types USE dbcsr_api, ONLY: dbcsr_p_type USE hartree_local_types, ONLY: hartree_local_release,& hartree_local_type + USE kinds, ONLY: dp USE preconditioner_types, ONLY: destroy_preconditioner,& preconditioner_type USE qs_kpp1_env_types, ONLY: kpp1_release,& @@ -60,7 +61,7 @@ MODULE qs_p_env_types TYPE qs_p_env_type LOGICAL :: orthogonal_orbitals - INTEGER :: id_nr, ref_count + INTEGER :: id_nr, ref_count, iter TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: kpp1, kpp1_admm, p1, w1 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: p1_admm => NULL() TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: m_epsilon, & @@ -82,6 +83,13 @@ MODULE qs_p_env_types TYPE(preconditioner_type), DIMENSION(:), POINTER :: preconditioner LOGICAL :: new_preconditioner + !factors + REAL(KIND=dp) :: delta, gnorm, gnorm_cross, gnorm_old, etotal, gradient + !line search + INTEGER :: ls_count + REAL(KIND=dp) :: ls_pos(53), ls_energy(53), ls_grad(53) + LOGICAL :: only_energy, os_valid + END TYPE qs_p_env_type ! ************************************************************************************************** diff --git a/src/qs_rho_methods.F b/src/qs_rho_methods.F index 2440572728..47a8db8365 100644 --- a/src/qs_rho_methods.F +++ b/src/qs_rho_methods.F @@ -20,9 +20,11 @@ MODULE qs_rho_methods dbcsr_deallocate_matrix_set USE cp_log_handling, ONLY: cp_to_string USE cp_para_types, ONLY: cp_para_env_type - USE dbcsr_api, ONLY: dbcsr_copy,& + USE dbcsr_api, ONLY: dbcsr_add,& + dbcsr_copy,& dbcsr_create,& dbcsr_p_type,& + dbcsr_scale,& dbcsr_set,& dbcsr_type,& dbcsr_type_symmetric @@ -71,7 +73,8 @@ MODULE qs_rho_methods LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE. CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_rho_methods' - PUBLIC :: qs_rho_update_rho, qs_rho_rebuild, duplicate_rho_type + PUBLIC :: qs_rho_update_rho, qs_rho_rebuild, qs_rho_copy, qs_rho_scale_and_add + PUBLIC :: duplicate_rho_type CONTAINS @@ -553,6 +556,458 @@ CONTAINS END SUBROUTINE qs_rho_update_rho +! ************************************************************************************************** +!> \brief Allocate a density structure and fill it with data from an input structure +!> SIZE(rho_input) == mspin == 1 direct copy +!> SIZE(rho_input) == mspin == 2 direct copy of alpha and beta spin +!> SIZE(rho_input) == 1 AND mspin == 2 copy rho/2 into alpha and beta spin +!> \param rho_input ... +!> \param rho_output ... +!> \param auxbas_pw_pool ... +!> \param mspin ... +! ************************************************************************************************** + SUBROUTINE qs_rho_copy(rho_input, rho_output, auxbas_pw_pool, mspin) + + TYPE(qs_rho_type), POINTER :: rho_input, rho_output + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + INTEGER, INTENT(IN) :: mspin + + CHARACTER(len=*), PARAMETER :: routineN = 'qs_rho_copy', routineP = moduleN//':'//routineN + + INTEGER :: handle, i, ii, nspins, rebuild_each_in + LOGICAL :: drho_g_valid_in, drho_r_valid_in, rho_g_valid_in, rho_r_valid_in, soft_valid_in, & + tau_g_valid_in, tau_r_valid_in + REAL(KIND=dp) :: ospin + REAL(KIND=dp), DIMENSION(:), POINTER :: tot_rho_g_in, tot_rho_g_out, & + tot_rho_r_in, tot_rho_r_out + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ao_im_in, rho_ao_in, rho_ao_out + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: rho_ao_kp_in + TYPE(pw_p_type), DIMENSION(:), POINTER :: drho_g_in, drho_g_out, drho_r_in, drho_r_out, & + rho_g_in, rho_g_out, rho_r_in, rho_r_out, tau_g_in, tau_g_out, tau_r_in, tau_r_out + TYPE(pw_p_type), POINTER :: rho_r_sccs_in, rho_r_sccs_out + + CALL timeset(routineN, handle) + + CPASSERT(ASSOCIATED(rho_input)) + CPASSERT(ASSOCIATED(rho_output)) + + CPASSERT(mspin == 1 .OR. mspin == 2) + ospin = 1._dp/REAL(mspin, KIND=dp) + + CALL qs_rho_clear(rho_output) + + NULLIFY (rho_ao_in, rho_ao_kp_in, rho_ao_im_in, rho_r_in, rho_g_in, drho_r_in, & + drho_g_in, tau_r_in, tau_g_in, tot_rho_r_in, tot_rho_g_in, rho_r_sccs_in) + + CALL qs_rho_get(rho_input, & + rho_ao=rho_ao_in, & + rho_ao_kp=rho_ao_kp_in, & + rho_ao_im=rho_ao_im_in, & + rho_r=rho_r_in, & + rho_g=rho_g_in, & + drho_r=drho_r_in, & + drho_g=drho_g_in, & + tau_r=tau_r_in, & + tau_g=tau_g_in, & + tot_rho_r=tot_rho_r_in, & + tot_rho_g=tot_rho_g_in, & + rho_g_valid=rho_g_valid_in, & + rho_r_valid=rho_r_valid_in, & + drho_g_valid=drho_g_valid_in, & + drho_r_valid=drho_r_valid_in, & + tau_r_valid=tau_r_valid_in, & + tau_g_valid=tau_g_valid_in, & + rho_r_sccs=rho_r_sccs_in, & + soft_valid=soft_valid_in, & + rebuild_each=rebuild_each_in) + + NULLIFY (rho_ao_out, rho_r_out, rho_g_out, drho_r_out, & + drho_g_out, tau_r_out, tau_g_out, tot_rho_r_out, tot_rho_g_out, rho_r_sccs_out) + ! rho_ao + IF (ASSOCIATED(rho_ao_in)) THEN + nspins = SIZE(rho_ao_in) + CPASSERT(mspin >= nspins) + CALL dbcsr_allocate_matrix_set(rho_ao_out, mspin) + CALL qs_rho_set(rho_output, rho_ao=rho_ao_out) + IF (mspin > nspins) THEN + DO i = 1, mspin + ALLOCATE (rho_ao_out(i)%matrix) + CALL dbcsr_copy(rho_ao_out(i)%matrix, rho_ao_in(1)%matrix, name="RHO copy") + CALL dbcsr_scale(rho_ao_out(i)%matrix, ospin) + END DO + ELSE + DO i = 1, nspins + ALLOCATE (rho_ao_out(i)%matrix) + CALL dbcsr_copy(rho_ao_out(i)%matrix, rho_ao_in(i)%matrix, name="RHO copy") + END DO + END IF + END IF + + ! rho_ao_kp + ! only for non-kp, we could probably just copy this pointer, should work also for non-kp? + !IF (ASSOCIATED(rho_ao_kp_in)) THEN + ! CPABORT("Copy not available") + !END IF + + ! rho_ao_im + IF (ASSOCIATED(rho_ao_im_in)) THEN + CPABORT("Copy not available") + END IF + + ! rho_r + IF (ASSOCIATED(rho_r_in)) THEN + nspins = SIZE(rho_r_in) + CPASSERT(mspin >= nspins) + ALLOCATE (rho_r_out(mspin)) + CALL qs_rho_set(rho_output, rho_r=rho_r_out) + IF (mspin > nspins) THEN + DO i = 1, mspin + CALL pw_pool_create_pw(auxbas_pw_pool, rho_r_out(i)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + rho_r_out(i)%pw%cr3d(:, :, :) = rho_r_in(1)%pw%cr3d(:, :, :)*ospin + END DO + ELSE + DO i = 1, nspins + CALL pw_pool_create_pw(auxbas_pw_pool, rho_r_out(i)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + rho_r_out(i)%pw%cr3d(:, :, :) = rho_r_in(i)%pw%cr3d(:, :, :) + END DO + END IF + END IF + + ! rho_g + IF (ASSOCIATED(rho_g_in)) THEN + nspins = SIZE(rho_g_in) + CPASSERT(mspin >= nspins) + ALLOCATE (rho_g_out(mspin)) + CALL qs_rho_set(rho_output, rho_g=rho_g_out) + IF (mspin > nspins) THEN + DO i = 1, mspin + CALL pw_pool_create_pw(auxbas_pw_pool, rho_g_out(i)%pw, & + use_data=COMPLEXDATA1D, & + in_space=RECIPROCALSPACE) + rho_g_out(i)%pw%cc(:) = rho_g_in(1)%pw%cc(:)*ospin + END DO + ELSE + DO i = 1, nspins + CALL pw_pool_create_pw(auxbas_pw_pool, rho_g_out(i)%pw, & + use_data=COMPLEXDATA1D, & + in_space=RECIPROCALSPACE) + rho_g_out(i)%pw%cc(:) = rho_g_in(i)%pw%cc(:) + END DO + END IF + END IF + + ! SCCS + IF (ASSOCIATED(rho_r_sccs_in)) THEN + CALL qs_rho_set(rho_output, rho_r_sccs=rho_r_sccs_out) + CALL pw_pool_create_pw(auxbas_pw_pool, rho_r_sccs_out%pw, & + in_space=REALSPACE, & + use_data=REALDATA3D) + rho_r_sccs_out%pw%cr3d(:, :, :) = rho_r_sccs_in%pw%cr3d(:, :, :) + END IF + + ! drho_r + IF (ASSOCIATED(drho_r_in)) THEN + nspins = SIZE(drho_r_in) + CPASSERT(mspin >= nspins) + ALLOCATE (drho_r_out(3*mspin)) + CALL qs_rho_set(rho_output, drho_r=drho_r_out) + IF (mspin > nspins) THEN + DO i = 1, 3*mspin + ii = (i + 1)/2 + CALL pw_pool_create_pw(auxbas_pw_pool, drho_r_out(i)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + drho_r_out(i)%pw%cr3d(:, :, :) = drho_r_in(ii)%pw%cr3d(:, :, :)*ospin + END DO + ELSE + DO i = 1, 3*nspins + CALL pw_pool_create_pw(auxbas_pw_pool, drho_r_out(i)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + drho_r_out(i)%pw%cr3d(:, :, :) = drho_r_in(i)%pw%cr3d(:, :, :) + END DO + END IF + END IF + + ! drho_g + IF (ASSOCIATED(drho_g_in)) THEN + nspins = SIZE(drho_g_in) + CPASSERT(mspin >= nspins) + ALLOCATE (drho_g_out(3*mspin)) + CALL qs_rho_set(rho_output, drho_g=drho_g_out) + IF (mspin > nspins) THEN + DO i = 1, 3*mspin + ii = (i + 1)/2 + CALL pw_pool_create_pw(auxbas_pw_pool, drho_g_out(i)%pw, & + use_data=COMPLEXDATA1D, & + in_space=RECIPROCALSPACE) + drho_g_out(i)%pw%cc(:) = drho_g_in(ii)%pw%cc(:)*ospin + END DO + ELSE + DO i = 1, 3*nspins + CALL pw_pool_create_pw(auxbas_pw_pool, drho_g_out(i)%pw, & + use_data=COMPLEXDATA1D, & + in_space=RECIPROCALSPACE) + drho_g_out(i)%pw%cc(:) = drho_g_in(i)%pw%cc(:) + END DO + END IF + END IF + + ! tau_r + IF (ASSOCIATED(tau_r_in)) THEN + nspins = SIZE(tau_r_in) + CPASSERT(mspin >= nspins) + ALLOCATE (tau_r_out(mspin)) + CALL qs_rho_set(rho_output, tau_r=tau_r_out) + IF (mspin > nspins) THEN + DO i = 1, mspin + CALL pw_pool_create_pw(auxbas_pw_pool, tau_r_out(i)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + tau_r_out(i)%pw%cr3d(:, :, :) = tau_r_in(1)%pw%cr3d(:, :, :)*ospin + END DO + ELSE + DO i = 1, nspins + CALL pw_pool_create_pw(auxbas_pw_pool, tau_r_out(i)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + tau_r_out(i)%pw%cr3d(:, :, :) = tau_r_in(i)%pw%cr3d(:, :, :) + END DO + END IF + END IF + + ! tau_g + IF (ASSOCIATED(tau_g_in)) THEN + nspins = SIZE(tau_g_in) + CPASSERT(mspin >= nspins) + ALLOCATE (tau_g_out(mspin)) + CALL qs_rho_set(rho_output, tau_g=tau_g_out) + IF (mspin > nspins) THEN + DO i = 1, mspin + CALL pw_pool_create_pw(auxbas_pw_pool, tau_g_out(i)%pw, & + use_data=COMPLEXDATA1D, & + in_space=RECIPROCALSPACE) + tau_g_out(i)%pw%cc(:) = tau_g_in(1)%pw%cc(:)*ospin + END DO + ELSE + DO i = 1, nspins + CALL pw_pool_create_pw(auxbas_pw_pool, tau_g_out(i)%pw, & + use_data=COMPLEXDATA1D, & + in_space=RECIPROCALSPACE) + tau_g_out(i)%pw%cc(:) = tau_g_in(i)%pw%cc(:) + END DO + END IF + END IF + + ! tot_rho_r + IF (ASSOCIATED(tot_rho_r_in)) THEN + nspins = SIZE(tot_rho_r_in) + CPASSERT(mspin >= nspins) + ALLOCATE (tot_rho_r_out(mspin)) + CALL qs_rho_set(rho_output, tot_rho_r=tot_rho_r_out) + IF (mspin > nspins) THEN + DO i = 1, mspin + tot_rho_r_out(i) = tot_rho_r_in(1)*ospin + END DO + ELSE + DO i = 1, nspins + tot_rho_r_out(i) = tot_rho_r_in(i) + END DO + END IF + END IF + + ! tot_rho_g + IF (ASSOCIATED(tot_rho_g_in)) THEN + nspins = SIZE(tot_rho_g_in) + CPASSERT(mspin >= nspins) + ALLOCATE (tot_rho_g_out(mspin)) + CALL qs_rho_set(rho_output, tot_rho_g=tot_rho_g_out) + IF (mspin > nspins) THEN + DO i = 1, mspin + tot_rho_g_out(i) = tot_rho_g_in(1)*ospin + END DO + ELSE + DO i = 1, nspins + tot_rho_g_out(i) = tot_rho_g_in(i) + END DO + END IF + END IF + + CALL qs_rho_set(rho_output, & + rho_g_valid=rho_g_valid_in, & + rho_r_valid=rho_r_valid_in, & + drho_g_valid=drho_g_valid_in, & + drho_r_valid=drho_r_valid_in, & + tau_r_valid=tau_r_valid_in, & + tau_g_valid=tau_g_valid_in, & + soft_valid=soft_valid_in, & + rebuild_each=rebuild_each_in) + + CALL timestop(handle) + + END SUBROUTINE qs_rho_copy + +! ************************************************************************************************** +!> \brief rhoa = alpha*rhoa+beta*rhob +!> \param rhoa ... +!> \param rhob ... +!> \param alpha ... +!> \param beta ... +! ************************************************************************************************** + SUBROUTINE qs_rho_scale_and_add(rhoa, rhob, alpha, beta) + + TYPE(qs_rho_type), POINTER :: rhoa, rhob + REAL(KIND=dp), INTENT(IN) :: alpha, beta + + CHARACTER(len=*), PARAMETER :: routineN = 'qs_rho_scale_and_add', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, i, ndims, nspina, nspinb, nspins + REAL(KIND=dp), DIMENSION(:), POINTER :: tot_rho_g_a, tot_rho_g_b, tot_rho_r_a, & + tot_rho_r_b + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ao_a, rho_ao_b, rho_ao_im_a, & + rho_ao_im_b + TYPE(pw_p_type), DIMENSION(:), POINTER :: drho_g_a, drho_g_b, drho_r_a, drho_r_b, & + rho_g_a, rho_g_b, rho_r_a, rho_r_b, & + tau_g_a, tau_g_b, tau_r_a, tau_r_b + TYPE(pw_p_type), POINTER :: rho_r_sccs_a, rho_r_sccs_b + + CALL timeset(routineN, handle) + + CPASSERT(ASSOCIATED(rhoa)) + CPASSERT(ASSOCIATED(rhob)) + + NULLIFY (rho_ao_a, rho_ao_im_a, rho_r_a, rho_g_a, drho_r_a, & + drho_g_a, tau_r_a, tau_g_a, tot_rho_r_a, tot_rho_g_a, rho_r_sccs_a) + + CALL qs_rho_get(rhoa, & + rho_ao=rho_ao_a, & + rho_ao_im=rho_ao_im_a, & + rho_r=rho_r_a, & + rho_g=rho_g_a, & + drho_r=drho_r_a, & + drho_g=drho_g_a, & + tau_r=tau_r_a, & + tau_g=tau_g_a, & + tot_rho_r=tot_rho_r_a, & + tot_rho_g=tot_rho_g_a, & + rho_r_sccs=rho_r_sccs_a) + + NULLIFY (rho_ao_b, rho_ao_im_b, rho_r_b, rho_g_b, drho_r_b, & + drho_g_b, tau_r_b, tau_g_b, tot_rho_r_b, tot_rho_g_b, rho_r_sccs_b) + + CALL qs_rho_get(rhob, & + rho_ao=rho_ao_b, & + rho_ao_im=rho_ao_im_b, & + rho_r=rho_r_b, & + rho_g=rho_g_b, & + drho_r=drho_r_b, & + drho_g=drho_g_b, & + tau_r=tau_r_b, & + tau_g=tau_g_b, & + tot_rho_r=tot_rho_r_b, & + tot_rho_g=tot_rho_g_b, & + rho_r_sccs=rho_r_sccs_b) + ! rho_ao + IF (ASSOCIATED(rho_ao_a) .AND. ASSOCIATED(rho_ao_b)) THEN + nspina = SIZE(rho_ao_a) + nspinb = SIZE(rho_ao_b) + nspins = MIN(nspina, nspinb) + DO i = 1, nspins + CALL dbcsr_add(rho_ao_a(i)%matrix, rho_ao_b(i)%matrix, alpha, beta) + END DO + END IF + + ! rho_ao_im + IF (ASSOCIATED(rho_ao_im_a) .AND. ASSOCIATED(rho_ao_im_b)) THEN + CPABORT("Add not available") + END IF + + ! rho_r + IF (ASSOCIATED(rho_r_a) .AND. ASSOCIATED(rho_r_b)) THEN + nspina = SIZE(rho_ao_a) + nspinb = SIZE(rho_ao_b) + nspins = MIN(nspina, nspinb) + DO i = 1, nspins + rho_r_a(i)%pw%cr3d(:, :, :) = alpha*rho_r_a(i)%pw%cr3d(:, :, :) + beta*rho_r_b(i)%pw%cr3d(:, :, :) + END DO + END IF + + ! rho_g + IF (ASSOCIATED(rho_g_a) .AND. ASSOCIATED(rho_g_b)) THEN + nspina = SIZE(rho_ao_a) + nspinb = SIZE(rho_ao_b) + nspins = MIN(nspina, nspinb) + DO i = 1, nspins + rho_g_a(i)%pw%cc(:) = alpha*rho_g_a(i)%pw%cc(:) + beta*rho_g_b(i)%pw%cc(:) + END DO + END IF + + ! SCCS + IF (ASSOCIATED(rho_r_sccs_a) .AND. ASSOCIATED(rho_r_sccs_b)) THEN + rho_r_sccs_a%pw%cr3d(:, :, :) = alpha*rho_r_sccs_a%pw%cr3d(:, :, :) + beta*rho_r_sccs_b%pw%cr3d(:, :, :) + END IF + + ! drho_r + IF (ASSOCIATED(drho_r_a) .AND. ASSOCIATED(drho_r_b)) THEN + ndims = SIZE(drho_r_a) + CPASSERT(ndims == SIZE(drho_r_b)) ! not implemented + DO i = 1, ndims + drho_r_a(i)%pw%cr3d(:, :, :) = alpha*drho_r_a(i)%pw%cr3d(:, :, :) + beta*drho_r_b(i)%pw%cr3d(:, :, :) + END DO + END IF + + ! drho_g + IF (ASSOCIATED(drho_g_a) .AND. ASSOCIATED(drho_g_b)) THEN + ndims = SIZE(drho_g_a) + CPASSERT(ndims == SIZE(drho_r_b)) ! not implemented + DO i = 1, ndims + drho_g_a(i)%pw%cc(:) = alpha*drho_g_a(i)%pw%cc(:) + beta*drho_g_b(i)%pw%cc(:) + END DO + END IF + + ! tau_r + IF (ASSOCIATED(tau_r_a) .AND. ASSOCIATED(tau_r_b)) THEN + nspina = SIZE(rho_ao_a) + nspinb = SIZE(rho_ao_b) + nspins = MIN(nspina, nspinb) + DO i = 1, nspins + tau_r_a(i)%pw%cr3d(:, :, :) = alpha*tau_r_a(i)%pw%cr3d(:, :, :) + beta*tau_r_b(i)%pw%cr3d(:, :, :) + END DO + END IF + + ! tau_g + IF (ASSOCIATED(tau_g_a) .AND. ASSOCIATED(tau_g_b)) THEN + nspina = SIZE(rho_ao_a) + nspinb = SIZE(rho_ao_b) + nspins = MIN(nspina, nspinb) + DO i = 1, nspins + tau_g_a(i)%pw%cc(:) = alpha*tau_g_a(i)%pw%cc(:) + beta*tau_g_b(i)%pw%cc(:) + END DO + END IF + + ! tot_rho_r + IF (ASSOCIATED(tot_rho_r_a) .AND. ASSOCIATED(tot_rho_r_b)) THEN + nspina = SIZE(rho_ao_a) + nspinb = SIZE(rho_ao_b) + nspins = MIN(nspina, nspinb) + DO i = 1, nspins + tot_rho_r_a(i) = alpha*tot_rho_r_a(i) + beta*tot_rho_r_b(i) + END DO + END IF + + ! tot_rho_g + IF (ASSOCIATED(tot_rho_g_a) .AND. ASSOCIATED(tot_rho_g_b)) THEN + nspina = SIZE(rho_ao_a) + nspinb = SIZE(rho_ao_b) + nspins = MIN(nspina, nspinb) + DO i = 1, nspins + tot_rho_g_a(i) = alpha*tot_rho_g_a(i) + beta*tot_rho_g_b(i) + END DO + END IF + + CALL timestop(handle) + + END SUBROUTINE qs_rho_scale_and_add + ! ************************************************************************************************** !> \brief Duplicates a pointer physically !> \param rho_input The rho structure to be duplicated diff --git a/src/qs_rho_types.F b/src/qs_rho_types.F index 8a7efa93e0..0724bff265 100644 --- a/src/qs_rho_types.F +++ b/src/qs_rho_types.F @@ -68,7 +68,7 @@ MODULE qs_rho_types TYPE qs_rho_type PRIVATE TYPE(kpoint_transitional_type) :: rho_ao - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ao_im => Null() + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ao_im => Null() TYPE(pw_p_type), DIMENSION(:), POINTER :: rho_g => Null(), & rho_r => Null(), & drho_g => Null(), & diff --git a/src/qs_scf.F b/src/qs_scf.F index a01ed3516a..5e10bae3d3 100644 --- a/src/qs_scf.F +++ b/src/qs_scf.F @@ -112,6 +112,7 @@ MODULE qs_scf restart_inverse_jacobian USE qs_cdft_types, ONLY: cdft_control_type USE qs_charges_types, ONLY: qs_charges_type + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_density_mixing_types, ONLY: gspace_mixing_nr USE qs_diis, ONLY: qs_diis_b_clear,& qs_diis_b_create @@ -125,8 +126,7 @@ MODULE qs_scf USE qs_ks_types, ONLY: qs_ks_did_change,& qs_ks_env_type USE qs_mo_io, ONLY: write_mo_set_to_restart - USE qs_mo_methods, ONLY: calculate_density_matrix,& - make_basis_simple,& + USE qs_mo_methods, ONLY: make_basis_simple,& make_basis_sm USE qs_mo_occupation, ONLY: set_mo_occupation USE qs_mo_types, ONLY: deallocate_mo_set,& diff --git a/src/qs_scf_diagonalization.F b/src/qs_scf_diagonalization.F index 0d44bc2ab4..bea88d3b40 100644 --- a/src/qs_scf_diagonalization.F +++ b/src/qs_scf_diagonalization.F @@ -70,6 +70,7 @@ MODULE qs_scf_diagonalization m_walltime USE preconditioner, ONLY: prepare_preconditioner,& restart_preconditioner + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_density_mixing_types, ONLY: direct_mixing_nr,& gspace_mixing_nr USE qs_diis, ONLY: qs_diis_b_step @@ -86,8 +87,7 @@ MODULE qs_scf_diagonalization mixing_allocate,& mixing_init,& self_consistency_check - USE qs_mo_methods, ONLY: calculate_density_matrix,& - calculate_subspace_eigenvalues + USE qs_mo_methods, ONLY: calculate_subspace_eigenvalues USE qs_mo_occupation, ONLY: set_mo_occupation USE qs_mo_types, ONLY: get_mo_set,& mo_set_p_type diff --git a/src/qs_scf_loop_utils.F b/src/qs_scf_loop_utils.F index 944efea267..7c2007e79f 100644 --- a/src/qs_scf_loop_utils.F +++ b/src/qs_scf_loop_utils.F @@ -20,6 +20,7 @@ MODULE qs_scf_loop_utils USE kinds, ONLY: default_string_length,& dp USE kpoint_types, ONLY: kpoint_type + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_density_mixing_types, ONLY: broyden_mixing_new_nr,& broyden_mixing_nr,& direct_mixing_nr,& @@ -35,7 +36,6 @@ MODULE qs_scf_loop_utils USE qs_ks_types, ONLY: qs_ks_did_change,& qs_ks_env_type USE qs_mixing_utils, ONLY: self_consistency_check - USE qs_mo_methods, ONLY: calculate_density_matrix USE qs_mo_occupation, ONLY: set_mo_occupation USE qs_mo_types, ONLY: mo_set_p_type USE qs_mom_methods, ONLY: do_mom_diag diff --git a/src/qs_scf_output.F b/src/qs_scf_output.F index 107423ad9d..411f0a0b89 100644 --- a/src/qs_scf_output.F +++ b/src/qs_scf_output.F @@ -752,6 +752,11 @@ CONTAINS WRITE (UNIT=output_unit, FMT="(T3,A,T56,F25.14)") & "Mulliken restraint energy: ", energy%mulliken END IF + IF (qs_env%excited_state) THEN + IF (energy%excited_state /= 0.0_dp) & + WRITE (UNIT=output_unit, FMT="(T3,A,T56,F25.14)") & + "Excited State energy: ", energy%excited_state + END IF IF (dft_control%qs_control%semi_empirical) THEN WRITE (UNIT=output_unit, FMT="(/,(T3,A,T56,F25.14))") & "Total energy [eV]: ", energy%total*evolt diff --git a/src/qs_scf_post_gpw.F b/src/qs_scf_post_gpw.F index 6c9128f3c6..2aa8f38745 100644 --- a/src/qs_scf_post_gpw.F +++ b/src/qs_scf_post_gpw.F @@ -52,7 +52,8 @@ MODULE qs_scf_post_gpw cp_print_key_unit_nr USE cp_para_types, ONLY: cp_para_env_type USE cp_realspace_grid_cube, ONLY: cp_pw_to_cube - USE dbcsr_api, ONLY: dbcsr_p_type,& + USE dbcsr_api, ONLY: dbcsr_add,& + dbcsr_p_type,& dbcsr_type USE dct, ONLY: pw_shrink USE et_coupling_types, ONLY: set_et_coupling_type @@ -184,6 +185,7 @@ MODULE qs_scf_post_gpw mpole_rho_atom,& rho0_mpole_type USE qs_rho_atom_types, ONLY: rho_atom_type + USE qs_rho_methods, ONLY: qs_rho_update_rho USE qs_rho_types, ONLY: qs_rho_get,& qs_rho_type USE qs_scf_csr_write, ONLY: write_ks_matrix_csr,& @@ -248,7 +250,7 @@ CONTAINS nhomo, nlumo, nlumo_stm, nlumo_tddft, & nlumos, nmo, output_unit, unit_nr INTEGER, DIMENSION(:, :, :), POINTER :: marked_states - LOGICAL :: check_write, compute_lumos, do_homo, do_kpoints, do_mo_cubes, do_stm, & + LOGICAL :: check_write, compute_lumos, do_homo, do_kpoints, do_mo_cubes, do_mp2, do_stm, & do_wannier_cubes, has_homo, has_lumo, loc_explicit, loc_print_explicit, my_localized_wfn, & p_loc, p_loc_homo, p_loc_lumo REAL(dp) :: e_kin @@ -262,7 +264,8 @@ CONTAINS mo_loc_history, occupied_orbs, unoccupied_orbs, unoccupied_orbs_stm TYPE(cp_fm_type), POINTER :: mo_coeff TYPE(cp_logger_type), POINTER :: logger - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: ks_rmpv, matrix_s, mo_derivs + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: ks_rmpv, matrix_p_mp2, matrix_s, & + mo_derivs TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: kinetic_m, rho_ao TYPE(dft_control_type), POINTER :: dft_control TYPE(mo_set_p_type), DIMENSION(:), POINTER :: mos @@ -289,6 +292,7 @@ CONTAINS output_unit = cp_logger_get_default_io_unit(logger) ! Print out the type of wavefunction to distinguish between SCF and post-SCF + do_mp2 = .FALSE. IF (PRESENT(wf_type)) THEN IF (output_unit > 0) THEN WRITE (UNIT=output_unit, FMT='(/,(T1,A))') REPEAT("-", 40) @@ -335,8 +339,17 @@ CONTAINS CALL qs_rho_get(rho, rho_ao_kp=rho_ao) - ! In MP2 case update the Hartree potential - IF (ASSOCIATED(qs_env%mp2_env)) CALL update_hartree_with_mp2(rho, qs_env) + IF (do_mp2) THEN + ! Get the HF+MP2 density + CALL get_qs_env(qs_env, matrix_p_mp2=matrix_p_mp2) + DO ispin = 1, dft_control%nspins + CALL dbcsr_add(rho_ao(ispin, 1)%matrix, matrix_p_mp2(ispin)%matrix, 1.0_dp, 1.0_dp) + END DO + CALL qs_rho_update_rho(rho, qs_env=qs_env) + CALL qs_ks_did_change(qs_env%ks_env, rho_changed=.TRUE.) + ! In MP2 case update the Hartree potential + CALL update_hartree_with_mp2(rho, qs_env) + END IF ! **** the kinetic energy IF (cp_print_key_should_output(logger%iter_info, input, & @@ -733,6 +746,15 @@ CONTAINS ! Do active space calculation CALL active_space_main(input, logger, qs_env) + IF (do_mp2) THEN + ! Get everything back + DO ispin = 1, dft_control%nspins + CALL dbcsr_add(rho_ao(ispin, 1)%matrix, matrix_p_mp2(ispin)%matrix, 1.0_dp, -1.0_dp) + END DO + CALL qs_rho_update_rho(rho, qs_env=qs_env) + CALL qs_ks_did_change(qs_env%ks_env, rho_changed=.TRUE.) + END IF + CALL timestop(handle) END SUBROUTINE scf_post_calculation_gpw diff --git a/src/qs_tddfpt2_eigensolver.F b/src/qs_tddfpt2_eigensolver.F index 554b4bf00a..f6ba6b91e5 100644 --- a/src/qs_tddfpt2_eigensolver.F +++ b/src/qs_tddfpt2_eigensolver.F @@ -30,6 +30,7 @@ MODULE qs_tddfpt2_eigensolver dbcsr_p_type,& dbcsr_type USE input_constants, ONLY: tddfpt_kernel_full,& + tddfpt_kernel_none,& tddfpt_kernel_stda USE input_section_types, ONLY: section_vals_type USE kinds, ONLY: dp,& @@ -40,7 +41,8 @@ MODULE qs_tddfpt2_eigensolver USE physcon, ONLY: evolt USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type - USE qs_kernel_types, ONLY: full_kernel_env_type + USE qs_kernel_types, ONLY: full_kernel_env_type,& + kernel_env_type USE qs_scf_methods, ONLY: eigensolver USE qs_tddfpt2_fhxc, ONLY: fhxc_kernel,& stda_kernel @@ -48,8 +50,7 @@ MODULE qs_tddfpt2_eigensolver tddfpt_apply_hfx USE qs_tddfpt2_restart, ONLY: tddfpt_write_restart USE qs_tddfpt2_subgroups, ONLY: tddfpt_subgroup_env_type - USE qs_tddfpt2_types, ONLY: kernel_env_type,& - tddfpt_ground_state_mos,& + USE qs_tddfpt2_types, ONLY: tddfpt_ground_state_mos,& tddfpt_work_matrices USE qs_tddfpt2_utils, ONLY: tddfpt_total_number_of_states #include "./base/base_uses.f90" @@ -290,7 +291,6 @@ CONTAINS !> in primary basis set !> \param gs_mos molecular orbitals optimised for the ground state !> \param tddfpt_control control section for tddfpt -!> \param do_hfx flag that activates computation of exact-exchange terms !> \param matrix_ks Kohn-Sham matrix !> \param qs_env Quickstep environment !> \param kernel_env kernel environment @@ -301,13 +301,12 @@ CONTAINS !> * 03.2017 refactored [Sergey Chulkov] ! ************************************************************************************************** SUBROUTINE tddfpt_compute_Aop_evects(Aop_evects, evects, S_evects, gs_mos, tddfpt_control, & - do_hfx, matrix_ks, qs_env, kernel_env, & + matrix_ks, qs_env, kernel_env, & sub_env, work_matrices) TYPE(cp_fm_p_type), DIMENSION(:, :), INTENT(in) :: Aop_evects, evects, S_evects TYPE(tddfpt_ground_state_mos), DIMENSION(:), & INTENT(in) :: gs_mos TYPE(tddfpt2_control_type), POINTER :: tddfpt_control - LOGICAL, INTENT(in) :: do_hfx TYPE(dbcsr_p_type), DIMENSION(:), INTENT(in) :: matrix_ks TYPE(qs_environment_type), POINTER :: qs_env TYPE(kernel_env_type), INTENT(in) :: kernel_env @@ -318,7 +317,7 @@ CONTAINS INTEGER :: handle, ispin, ivect, nspins, nvects INTEGER, DIMENSION(maxspins) :: nmo_occ - LOGICAL :: do_admm, is_rks_triplets, is_stda + LOGICAL :: do_admm, do_hfx, is_rks_triplets TYPE(cp_para_env_type), POINTER :: para_env TYPE(full_kernel_env_type), POINTER :: full_kernel_env, kernel_env_admm_aux @@ -328,7 +327,8 @@ CONTAINS nspins = SIZE(evects, 1) nvects = SIZE(evects, 2) - do_admm = ASSOCIATED(sub_env%admm_A) + do_hfx = tddfpt_control%do_hfx + do_admm = tddfpt_control%do_admm IF (do_admm) THEN kernel_env_admm_aux => kernel_env%admm_kernel ELSE @@ -362,14 +362,20 @@ CONTAINS IF (tddfpt_control%kernel == tddfpt_kernel_full) THEN ! full TDDFPT kernel - CALL fhxc_kernel(Aop_evects, evects, is_rks_triplets, do_hfx, qs_env, & - full_kernel_env, kernel_env_admm_aux, sub_env, work_matrices) - is_stda = .FALSE. + CALL fhxc_kernel(Aop_evects, evects, is_rks_triplets, do_hfx, do_admm, qs_env, & + full_kernel_env, kernel_env_admm_aux, sub_env, work_matrices, & + tddfpt_control%admm_symm) 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, & kernel_env%stda_kernel, sub_env, work_matrices) - is_stda = .TRUE. + ELSE IF (tddfpt_control%kernel == tddfpt_kernel_none) THEN + ! No kernel + DO ivect = 1, nvects + DO ispin = 1, nspins + CALL cp_fm_set_all(Aop_evects(ispin, ivect)%matrix, 0.0_dp) + END DO + END DO ELSE CPABORT("Kernel type not implemented") END IF @@ -387,10 +393,21 @@ CONTAINS CALL tddfpt_apply_energy_diff(Aop_evects=Aop_evects, evects=evects, S_evects=S_evects, & gs_mos=gs_mos, matrix_ks=matrix_ks) - IF (do_hfx .AND. .NOT. is_stda) THEN - CALL tddfpt_apply_hfx(Aop_evects=Aop_evects, evects=evects, gs_mos=gs_mos, do_admm=do_admm, & - qs_env=qs_env, work_rho_ia_ao=work_matrices%hfx_rho_ao, & - work_hmat=work_matrices%hfx_hmat, wfm_rho_orb=work_matrices%hfx_fm_ao_ao) + IF (do_hfx) THEN + IF (tddfpt_control%kernel == tddfpt_kernel_full) THEN + ! full TDDFPT kernel + CALL tddfpt_apply_hfx(Aop_evects=Aop_evects, evects=evects, gs_mos=gs_mos, do_admm=do_admm, & + qs_env=qs_env, work_rho_ia_ao=work_matrices%hfx_rho_ao, & + work_hmat=work_matrices%hfx_hmat, wfm_rho_orb=work_matrices%hfx_fm_ao_ao) + ELSE IF (tddfpt_control%kernel == tddfpt_kernel_stda) THEN + ! sTDA kernel + ! special treatment of HFX term + ELSE IF (tddfpt_control%kernel == tddfpt_kernel_none) THEN + ! No kernel + ! drop kernel contribution of HFX term + ELSE + CPABORT("Kernel type not implemented") + END IF END IF END IF @@ -615,7 +632,6 @@ CONTAINS !> \param evals TDDFPT eigenvalues (modified on exit) !> \param S_evects cached matrix product S * evects (modified on exit) !> \param gs_mos molecular orbitals optimised for the ground state -!> \param do_hfx flag that activates computation of exact-exchange terms !> \param tddfpt_control TDDFPT control parameters !> \param matrix_ks Kohn-Sham matrix !> \param qs_env Quickstep environment @@ -633,7 +649,7 @@ CONTAINS !> \note Based on the subroutines apply_op() and iterative_solver() originally created by !> Thomas Chassaing in 2002. ! ************************************************************************************************** - FUNCTION tddfpt_davidson_solver(evects, evals, S_evects, gs_mos, do_hfx, tddfpt_control, & + FUNCTION tddfpt_davidson_solver(evects, evals, S_evects, gs_mos, tddfpt_control, & matrix_ks, qs_env, kernel_env, & sub_env, logger, iter_unit, energy_unit, & tddfpt_print_section, work_matrices) RESULT(conv) @@ -642,7 +658,6 @@ CONTAINS TYPE(cp_fm_p_type), DIMENSION(:, :), INTENT(inout) :: S_evects TYPE(tddfpt_ground_state_mos), DIMENSION(:), & INTENT(in) :: gs_mos - LOGICAL, INTENT(in) :: do_hfx TYPE(tddfpt2_control_type), POINTER :: tddfpt_control TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks TYPE(qs_environment_type), POINTER :: qs_env @@ -660,7 +675,7 @@ CONTAINS max_krylov_vects, nspins, nstates, & nstates_conv, nvects_exist, nvects_new INTEGER(kind=int_8) :: nstates_total - LOGICAL :: is_nonortho + LOGICAL :: do_hfx, is_nonortho REAL(kind=dp) :: t1, t2 REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: evals_last REAL(kind=dp), DIMENSION(:, :), POINTER :: Atilde @@ -673,6 +688,7 @@ CONTAINS nspins = SIZE(gs_mos) nstates = tddfpt_control%nstates nstates_total = tddfpt_total_number_of_states(gs_mos) + do_hfx = tddfpt_control%do_hfx IF (debug_this_module) THEN CPASSERT(SIZE(evects, 1) == nspins) @@ -732,7 +748,7 @@ CONTAINS evects=krylov_vects(:, nvects_exist + 1:nvects_exist + nvects_new), & S_evects=S_krylov(:, nvects_exist + 1:nvects_exist + nvects_new), & gs_mos=gs_mos, tddfpt_control=tddfpt_control, & - do_hfx=do_hfx, matrix_ks=matrix_ks, & + matrix_ks=matrix_ks, & qs_env=qs_env, kernel_env=kernel_env, & sub_env=sub_env, & work_matrices=work_matrices) diff --git a/src/qs_tddfpt2_fhxc.F b/src/qs_tddfpt2_fhxc.F index 3c8fc25ff8..f74cf38876 100644 --- a/src/qs_tddfpt2_fhxc.F +++ b/src/qs_tddfpt2_fhxc.F @@ -7,18 +7,29 @@ MODULE qs_tddfpt2_fhxc USE cp_control_types, ONLY: stda_control_type + USE cp_dbcsr_cp2k_link, ONLY: cp_dbcsr_alloc_block_from_nbl USE cp_dbcsr_operations, ONLY: copy_fm_to_dbcsr,& cp_dbcsr_sm_fm_multiply - USE cp_fm_types, ONLY: cp_fm_get_info,& - cp_fm_p_type + USE cp_fm_types, ONLY: cp_fm_create,& + cp_fm_get_info,& + cp_fm_p_type,& + cp_fm_release,& + cp_fm_type USE cp_gemm_interface, ONLY: cp_gemm - USE dbcsr_api, ONLY: dbcsr_p_type,& - dbcsr_set + USE dbcsr_api, ONLY: & + dbcsr_add, dbcsr_copy, dbcsr_create, dbcsr_deallocate_matrix, dbcsr_get_info, & + dbcsr_p_type, dbcsr_release, dbcsr_set, dbcsr_type, dbcsr_type_symmetric USE kinds, ONLY: dp + USE pw_env_types, ONLY: pw_env_get USE pw_methods, ONLY: pw_axpy,& pw_scale,& pw_zero - USE pw_types, ONLY: pw_p_type + USE pw_pool_types, ONLY: pw_pool_create_pw,& + pw_pool_give_back_pw,& + pw_pool_type + USE pw_types, ONLY: REALDATA3D,& + REALSPACE,& + pw_p_type USE qs_environment_types, ONLY: qs_environment_type USE qs_integrate_potential, ONLY: integrate_v_rspace USE qs_kernel_types, ONLY: full_kernel_env_type @@ -54,41 +65,52 @@ CONTAINS !> \param is_rks_triplets indicates that a triplet excited states calculation using !> spin-unpolarised molecular orbitals has been requested !> \param do_hfx flag that activates computation of exact-exchange terms +!> \param do_admm ... !> \param qs_env Quickstep environment !> \param kernel_env kernel environment !> \param kernel_env_admm_aux kernel environment for ADMM correction !> \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 !> \par History !> * 06.2016 created [Sergey Chulkov] !> * 03.2017 refactored [Sergey Chulkov] !> * 04.2019 refactored [JHU] ! ************************************************************************************************** SUBROUTINE fhxc_kernel(Aop_evects, evects, is_rks_triplets, & - do_hfx, qs_env, kernel_env, kernel_env_admm_aux, & - sub_env, work_matrices) + do_hfx, do_admm, qs_env, kernel_env, kernel_env_admm_aux, & + sub_env, work_matrices, admm_symm) TYPE(cp_fm_p_type), DIMENSION(:, :) :: Aop_evects, evects - LOGICAL, INTENT(in) :: is_rks_triplets, do_hfx + 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 CHARACTER(LEN=*), PARAMETER :: routineN = 'fhxc_kernel' - INTEGER :: handle, ispin, ivect, nao, nspins, nvects + INTEGER :: handle, ispin, ivect, nao, nao_aux, & + nspins, nvects + INTEGER, DIMENSION(:), POINTER :: blk_sizes INTEGER, DIMENSION(maxspins) :: nactive - LOGICAL :: do_admm - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ia_ao, rho_ia_ao_aux_fit + TYPE(cp_fm_type), POINTER :: work_aux_orb, work_orb_orb + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: A_xc_munu_sub, rho_ia_ao, & + rho_ia_ao_aux_fit + TYPE(dbcsr_type), POINTER :: dbwork TYPE(pw_p_type), DIMENSION(:), POINTER :: rho_ia_g, rho_ia_g_aux_fit, rho_ia_r, & rho_ia_r_aux_fit, tau_ia_r, & - tau_ia_r_aux_fit + tau_ia_r_aux_fit, V_rspace_sub + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool CALL timeset(routineN, handle) nspins = SIZE(evects, 1) nvects = SIZE(evects, 2) - do_admm = ASSOCIATED(sub_env%admm_A) + IF (do_admm) THEN + CPASSERT(do_hfx) + CPASSERT(ASSOCIATED(sub_env%admm_A)) + END IF CALL cp_fm_get_info(evects(1, 1)%matrix, nrow_global=nao) DO ispin = 1, nspins @@ -166,11 +188,77 @@ CONTAINS wfm_aux_orb=work_matrices%wfm_aux_orb_sub) ! - C_{HF} d^{2}E_{x, ADMM}^{DFT}[\hat{\rho}] / d\hat{\rho}^2 - 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) + 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 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) + 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="AUX_FIT", & + task_list_external=sub_env%task_list_aux_fit) + END DO + 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) + END IF END IF ! electron-hole Coulomb interaction diff --git a/src/qs_tddfpt2_fhxc_forces.F b/src/qs_tddfpt2_fhxc_forces.F new file mode 100644 index 0000000000..7b9e42ffe4 --- /dev/null +++ b/src/qs_tddfpt2_fhxc_forces.F @@ -0,0 +1,1385 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +MODULE qs_tddfpt2_fhxc_forces + USE admm_types, ONLY: admm_type + USE atomic_kind_types, ONLY: atomic_kind_type,& + get_atomic_kind_set + USE atprop_types, ONLY: atprop_type + USE cell_types, ONLY: cell_type,& + pbc + USE cp_control_types, ONLY: dft_control_type,& + stda_control_type,& + tddfpt2_control_type + USE cp_dbcsr_cp2k_link, ONLY: cp_dbcsr_alloc_block_from_nbl + USE cp_dbcsr_operations, ONLY: copy_dbcsr_to_fm,& + copy_fm_to_dbcsr,& + cp_dbcsr_plus_fm_fm_t,& + cp_dbcsr_sm_fm_multiply,& + dbcsr_allocate_matrix_set,& + dbcsr_deallocate_matrix_set + USE cp_fm_basic_linalg, ONLY: cp_fm_row_scale,& + cp_fm_schur_product + USE cp_fm_pool_types, ONLY: fm_pool_create_fm,& + fm_pool_give_back_fm + USE cp_fm_struct, ONLY: cp_fm_struct_create,& + cp_fm_struct_release,& + cp_fm_struct_type + USE cp_fm_types, ONLY: cp_fm_create,& + cp_fm_get_info,& + cp_fm_p_type,& + cp_fm_release,& + cp_fm_to_fm,& + cp_fm_type,& + cp_fm_vectorssum + USE cp_gemm_interface, ONLY: cp_gemm + USE cp_log_handling, ONLY: cp_get_default_logger,& + cp_logger_get_default_unit_nr,& + cp_logger_type + USE cp_para_types, ONLY: cp_para_env_type + USE dbcsr_api, ONLY: & + dbcsr_add, dbcsr_copy, dbcsr_create, dbcsr_deallocate_matrix, dbcsr_filter, & + dbcsr_get_block_p, dbcsr_iterator_blocks_left, dbcsr_iterator_next_block, & + dbcsr_iterator_start, dbcsr_iterator_stop, dbcsr_iterator_type, dbcsr_p_type, & + dbcsr_release, dbcsr_scale, dbcsr_set, dbcsr_transposed, dbcsr_type, dbcsr_type_no_symmetry + USE ewald_environment_types, ONLY: ewald_env_get,& + ewald_environment_type + USE ewald_methods_tb, ONLY: tb_ewald_overlap,& + tb_spme_evaluate + USE ewald_pw_types, ONLY: ewald_pw_type + USE exstates_types, ONLY: excited_energy_type + USE hfx_derivatives, ONLY: derivatives_four_center + USE hfx_energy_potential, ONLY: integrate_four_center + USE hfx_types, ONLY: hfx_type + USE input_constants, ONLY: do_admm_aux_exch_func_none,& + tddfpt_kernel_full,& + xc_kernel_method_analytic,& + xc_kernel_method_best,& + xc_kernel_method_numeric,& + xc_none + USE input_section_types, ONLY: section_vals_get,& + section_vals_get_subs_vals,& + section_vals_type,& + section_vals_val_get + USE kinds, ONLY: dp + USE mathconstants, ONLY: oorootpi + USE message_passing, ONLY: mp_sum + USE particle_methods, ONLY: get_particle_set + USE particle_types, ONLY: particle_type + USE pw_env_types, ONLY: pw_env_get,& + pw_env_type + USE pw_methods, ONLY: pw_axpy,& + pw_scale,& + pw_transfer,& + pw_zero + USE pw_poisson_methods, ONLY: pw_poisson_solve + USE pw_poisson_types, ONLY: pw_poisson_type + USE pw_pool_types, ONLY: pw_pool_create_pw,& + pw_pool_give_back_pw,& + pw_pool_type + USE pw_types, ONLY: COMPLEXDATA1D,& + REALDATA3D,& + REALSPACE,& + RECIPROCALSPACE,& + pw_p_type + USE qs_collocate_density, ONLY: calculate_rho_elec + USE qs_environment_types, ONLY: get_qs_env,& + qs_environment_type + USE qs_force_types, ONLY: add_qs_force,& + qs_force_type + USE qs_fxc, ONLY: qs_fgxc_create,& + qs_fgxc_release + USE qs_integrate_potential, ONLY: integrate_v_rspace + USE qs_kernel_types, ONLY: full_kernel_env_type + USE qs_kind_types, ONLY: qs_kind_type + USE qs_ks_types, ONLY: qs_ks_env_type + USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type + USE qs_overlap, ONLY: build_overlap_force,& + build_overlap_matrix + USE qs_rho_types, ONLY: qs_rho_create,& + qs_rho_get,& + qs_rho_release,& + qs_rho_set,& + qs_rho_type + USE qs_tddfpt2_stda_types, ONLY: stda_env_type + USE qs_tddfpt2_stda_utils, ONLY: get_lowdin_x,& + setup_gamma + USE qs_tddfpt2_subgroups, ONLY: tddfpt_subgroup_env_type + USE qs_tddfpt2_types, ONLY: tddfpt_ground_state_mos,& + tddfpt_work_matrices + USE task_list_types, ONLY: task_list_type + USE util, ONLY: get_limit + USE virial_types, ONLY: virial_type +#include "./base/base_uses.f90" + + IMPLICIT NONE + + PRIVATE + + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_tddfpt2_fhxc_forces' + + PUBLIC :: fhxc_force, stda_force + +! ************************************************************************************************** + +CONTAINS + +! ************************************************************************************************** +!> \brief Calculate direct tddft forces +!> \param qs_env ... +!> \param ex_env ... +!> \param gs_mos ... +!> \param full_kernel ... +!> \param debug_forces ... +!> \par History +!> * 01.2020 screated [JGH] +! ************************************************************************************************** + SUBROUTINE fhxc_force(qs_env, ex_env, gs_mos, full_kernel, debug_forces) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(excited_energy_type), POINTER :: ex_env + TYPE(tddfpt_ground_state_mos), DIMENSION(:), & + POINTER :: gs_mos + TYPE(full_kernel_env_type), INTENT(IN) :: full_kernel + LOGICAL, INTENT(IN) :: debug_forces + + CHARACTER(LEN=*), PARAMETER :: routineN = 'fhxc_force', routineP = moduleN//':'//routineN + + INTEGER :: handle, iounit, ispin, mspin, myfun, & + n_rep_hf, nao, nao_aux, norb, nspins + LOGICAL :: distribute_fock_matrix, do_admm, do_analytic, do_hfx, do_numeric, & + hfx_treat_lsd_in_core, is_rks_triplets, s_mstruct_changed, use_virial + REAL(KIND=dp) :: eh1, focc, fval, total_rhox, & + total_rhox_aux, xehartree + REAL(KIND=dp), DIMENSION(3) :: fodeb + TYPE(admm_type), POINTER :: admm_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: cpmos, evect + TYPE(cp_fm_struct_type), POINTER :: fm_struct, fm_struct_mat + TYPE(cp_fm_type), POINTER :: cvcmat, mos, vcvec + TYPE(cp_logger_type), POINTER :: logger + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_fx, matrix_gx, matrix_hfx, & + matrix_hfx_admm, matrix_hx, matrix_p, matrix_p_admm, matrix_px1, matrix_px1_admm, & + matrix_s, matrix_s_aux_fit, matrix_wx1, mdum, mfx, mgx + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: mhe, mpe + TYPE(dbcsr_type), POINTER :: dbwork + TYPE(dft_control_type), POINTER :: dft_control + TYPE(hfx_type), DIMENSION(:, :), POINTER :: x_data + TYPE(neighbor_list_set_p_type), DIMENSION(:), & + POINTER :: sab_orb + TYPE(pw_env_type), POINTER :: pw_env + TYPE(pw_p_type) :: rhox_tot_gspace, xv_hartree_gspace, & + xv_hartree_rspace + TYPE(pw_p_type), DIMENSION(:), POINTER :: fxc_rho, fxc_tau, gxc_rho, gxc_tau, & + rho_g_aux, rho_r_aux, rhox_g, & + rhox_g_aux, rhox_r, rhox_r_aux, & + tau_r_aux + TYPE(pw_poisson_type), POINTER :: poisson_env + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + TYPE(qs_force_type), DIMENSION(:), POINTER :: force + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(qs_rho_type), POINTER :: rho, rho_aux_fit, rhox, rhox_aux + TYPE(section_vals_type), POINTER :: hfx_section, xc_section + TYPE(task_list_type), POINTER :: task_list_aux_fit + TYPE(tddfpt2_control_type), POINTER :: tddfpt_control + + CALL timeset(routineN, handle) + + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF + + CALL get_qs_env(qs_env, dft_control=dft_control) + tddfpt_control => dft_control%tddfpt2_control + nspins = dft_control%nspins + is_rks_triplets = tddfpt_control%rks_triplets .AND. (nspins == 1) + CPASSERT(tddfpt_control%kernel == tddfpt_kernel_full) + do_hfx = tddfpt_control%do_hfx + do_admm = tddfpt_control%do_admm + + evect => ex_env%evect + matrix_px1 => ex_env%matrix_px1 + matrix_px1_admm => ex_env%matrix_px1_admm + + focc = 1.0_dp + IF (nspins == 2) focc = 0.5_dp + DO ispin = 1, nspins + CALL dbcsr_set(matrix_px1(ispin)%matrix, 0.0_dp) + CALL cp_fm_get_info(evect(ispin)%matrix, ncol_global=norb) + CALL cp_dbcsr_plus_fm_fm_t(matrix_px1(ispin)%matrix, & + matrix_v=gs_mos(ispin)%mos_occ, & + matrix_g=evect(ispin)%matrix, & + ncol=norb, alpha=focc) + CALL cp_dbcsr_plus_fm_fm_t(matrix_px1(ispin)%matrix, & + matrix_v=evect(ispin)%matrix, & + matrix_g=gs_mos(ispin)%mos_occ, & + ncol=norb, alpha=focc) + ENDDO + ! + IF (do_admm) THEN + CALL get_qs_env(qs_env, admm_env=admm_env) + nao_aux = admm_env%nao_aux_fit + nao = admm_env%nao_orb + ! + DO ispin = 1, nspins + CALL copy_dbcsr_to_fm(matrix_px1(ispin)%matrix, admm_env%work_orb_orb) + CALL cp_gemm('N', 'N', nao_aux, nao, nao, & + 1.0_dp, admm_env%A, admm_env%work_orb_orb, 0.0_dp, & + admm_env%work_aux_orb) + CALL cp_gemm('N', 'T', nao_aux, nao_aux, nao, & + 1.0_dp, admm_env%work_aux_orb, admm_env%A, 0.0_dp, & + admm_env%work_aux_aux) + CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, matrix_px1_admm(ispin)%matrix, & + keep_sparsity=.TRUE.) + END DO + END IF + ! + CALL get_qs_env(qs_env, ks_env=ks_env, pw_env=pw_env) + CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, & + poisson_env=poisson_env) + + ALLOCATE (rhox_r(nspins), rhox_g(nspins)) + DO ispin = 1, nspins + NULLIFY (rhox_r(ispin)%pw, rhox_g(ispin)%pw) + CALL pw_pool_create_pw(auxbas_pw_pool, rhox_r(ispin)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + CALL pw_pool_create_pw(auxbas_pw_pool, rhox_g(ispin)%pw, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + ENDDO + CALL pw_pool_create_pw(auxbas_pw_pool, rhox_tot_gspace%pw, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + + CALL pw_zero(rhox_tot_gspace%pw) + DO ispin = 1, nspins + IF (nspins == 2) CALL dbcsr_scale(matrix_px1(ispin)%matrix, 2.0_dp) + CALL calculate_rho_elec(ks_env=ks_env, matrix_p=matrix_px1(ispin)%matrix, & + rho=rhox_r(ispin), rho_gspace=rhox_g(ispin), & + total_rho=total_rhox) + CALL pw_axpy(rhox_g(ispin)%pw, rhox_tot_gspace%pw) + IF (nspins == 2) CALL dbcsr_scale(matrix_px1(ispin)%matrix, 0.5_dp) + END DO + + CALL get_qs_env(qs_env, matrix_s=matrix_s, force=force, para_env=para_env) + + IF (.NOT. is_rks_triplets) THEN + CALL pw_pool_create_pw(auxbas_pw_pool, xv_hartree_rspace%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + CALL pw_pool_create_pw(auxbas_pw_pool, xv_hartree_gspace%pw, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + ! calculate associated hartree potential + CALL pw_poisson_solve(poisson_env, rhox_tot_gspace%pw, xehartree, & + xv_hartree_gspace%pw) + CALL pw_transfer(xv_hartree_gspace%pw, xv_hartree_rspace%pw) + CALL pw_scale(xv_hartree_rspace%pw, xv_hartree_rspace%pw%pw_grid%dvol) + ! + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + NULLIFY (matrix_hx) + CALL dbcsr_allocate_matrix_set(matrix_hx, nspins) + DO ispin = 1, nspins + ALLOCATE (matrix_hx(ispin)%matrix) + CALL dbcsr_create(matrix_hx(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(matrix_hx(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(matrix_hx(ispin)%matrix, 0.0_dp) + CALL integrate_v_rspace(qs_env=qs_env, v_rspace=xv_hartree_rspace, & + pmat=matrix_px1(ispin), & + hmat=matrix_hx(ispin), calculate_forces=.TRUE.) + END DO + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Px*dKh[X] ", fodeb + END IF + END IF + + ! XC + NULLIFY (fxc_rho, fxc_tau, gxc_rho, gxc_tau) + xc_section => full_kernel%xc_section + CALL section_vals_val_get(xc_section, "XC_FUNCTIONAL%_SECTION_PARAMETERS_", & + i_val=myfun) + IF (myfun /= xc_none) THEN + SELECT CASE (ex_env%xc_kernel_method) + CASE (xc_kernel_method_best) + do_analytic = .TRUE. + do_numeric = .TRUE. + CASE (xc_kernel_method_analytic) + do_analytic = .TRUE. + do_numeric = .FALSE. + CASE (xc_kernel_method_numeric) + do_analytic = .FALSE. + do_numeric = .TRUE. + CASE DEFAULT + CPABORT("invalid xc_kernel_method") + END SELECT + + NULLIFY (rho, ks_env) + CALL get_qs_env(qs_env=qs_env, ks_env=ks_env, rho=rho) + CALL qs_rho_get(rho, rho_ao=matrix_p) + NULLIFY (rhox) + CALL qs_rho_create(rhox) + CALL qs_rho_set(rho_struct=rhox, rho_ao=matrix_px1, rho_r=rhox_r, rho_g=rhox_g, & + rho_r_valid=.TRUE., rho_g_valid=.TRUE.) + IF (do_analytic .AND. .NOT. do_numeric) THEN + CPABORT("Analytic 3rd EXC derivatives not available") + ELSE + CALL qs_fgxc_create(ks_env, rho, rhox, xc_section, 6, is_rks_triplets, & + fxc_rho, fxc_tau, gxc_rho, gxc_tau) + END IF + CALL qs_rho_set(rho_struct=rhox, rho_ao=NULL(), rho_r=NULL(), rho_g=NULL()) + CALL qs_rho_release(rhox) + IF (nspins == 2) THEN + DO ispin = 1, nspins + CALL pw_scale(gxc_rho(ispin)%pw, 0.5_dp) + IF (ASSOCIATED(gxc_tau)) CALL pw_scale(gxc_tau(ispin)%pw, 0.5_dp) + END DO + END IF + + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + NULLIFY (matrix_fx) + CALL dbcsr_allocate_matrix_set(matrix_fx, nspins) + DO ispin = 1, nspins + ALLOCATE (matrix_fx(ispin)%matrix) + CALL dbcsr_create(matrix_fx(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(matrix_fx(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(matrix_fx(ispin)%matrix, 0.0_dp) + CALL pw_scale(fxc_rho(ispin)%pw, fxc_rho(ispin)%pw%pw_grid%dvol) + CALL integrate_v_rspace(qs_env=qs_env, v_rspace=fxc_rho(ispin), & + pmat=matrix_px1(ispin), & + hmat=matrix_fx(ispin), calculate_forces=.TRUE.) + END DO + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Px*dKf[X] ", fodeb + END IF + + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + NULLIFY (matrix_gx) + CALL dbcsr_allocate_matrix_set(matrix_gx, nspins) + DO ispin = 1, nspins + ALLOCATE (matrix_gx(ispin)%matrix) + CALL dbcsr_create(matrix_gx(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(matrix_gx(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(matrix_gx(ispin)%matrix, 0.0_dp) + CALL pw_scale(gxc_rho(ispin)%pw, gxc_rho(ispin)%pw%pw_grid%dvol) + CALL pw_scale(gxc_rho(ispin)%pw, 0.5_dp) + CALL integrate_v_rspace(qs_env=qs_env, v_rspace=gxc_rho(ispin), & + pmat=matrix_p(ispin), & + hmat=matrix_gx(ispin), calculate_forces=.TRUE.) + CALL dbcsr_scale(matrix_gx(ispin)%matrix, 2.0_dp) + END DO + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: P*dKg[X] ", fodeb + END IF + CALL qs_fgxc_release(ks_env, fxc_rho, fxc_tau, gxc_rho, gxc_tau) + + IF (do_admm) THEN + IF (dft_control%admm_control%aux_exch_func == do_admm_aux_exch_func_none) THEN + ! nothing to do + ELSE + IF (.NOT. tddfpt_control%admm_symm) THEN + CALL cp_warn(__LOCATION__, "Forces need symmetric ADMM kernel corrections") + CPABORT("ADMM KERNEL CORRECTION") + END IF + xc_section => admm_env%xc_section_aux + CALL get_qs_env(qs_env, admm_env=admm_env, rho_aux_fit=rho_aux_fit, & + matrix_s_aux_fit=matrix_s_aux_fit, & + task_list_aux_fit=task_list_aux_fit) + ! + NULLIFY (mfx, mgx) + CALL dbcsr_allocate_matrix_set(mfx, nspins) + CALL dbcsr_allocate_matrix_set(mgx, nspins) + DO ispin = 1, nspins + ALLOCATE (mfx(ispin)%matrix, mgx(ispin)%matrix) + CALL dbcsr_create(mfx(ispin)%matrix, template=matrix_s_aux_fit(1)%matrix) + CALL dbcsr_copy(mfx(ispin)%matrix, matrix_s_aux_fit(1)%matrix) + CALL dbcsr_set(mfx(ispin)%matrix, 0.0_dp) + CALL dbcsr_create(mgx(ispin)%matrix, template=matrix_s_aux_fit(1)%matrix) + CALL dbcsr_copy(mgx(ispin)%matrix, matrix_s_aux_fit(1)%matrix) + CALL dbcsr_set(mgx(ispin)%matrix, 0.0_dp) + END DO + + NULLIFY (rho_g_aux, rho_r_aux, tau_r_aux, rhox_g_aux, rhox_r_aux) + CALL qs_rho_get(rho_aux_fit, rho_r=rho_r_aux, rho_g=rho_g_aux, tau_r=tau_r_aux) + CALL qs_rho_get(rho_aux_fit, rho_ao=matrix_p_admm) + ! rhox_aux + ALLOCATE (rhox_r_aux(nspins), rhox_g_aux(nspins)) + DO ispin = 1, nspins + NULLIFY (rhox_r_aux(ispin)%pw, rhox_g_aux(ispin)%pw) + CALL pw_pool_create_pw(auxbas_pw_pool, rhox_r_aux(ispin)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + CALL pw_pool_create_pw(auxbas_pw_pool, rhox_g_aux(ispin)%pw, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + ENDDO + DO ispin = 1, nspins + CALL calculate_rho_elec(ks_env=ks_env, matrix_p=matrix_px1_admm(ispin)%matrix, & + rho=rhox_r_aux(ispin), rho_gspace=rhox_g_aux(ispin), & + total_rho=total_rhox_aux, basis_type="AUX_FIT", & + task_list_external=task_list_aux_fit) + END DO + ! + NULLIFY (rhox_aux) + CALL qs_rho_create(rhox_aux) + CALL qs_rho_set(rho_struct=rhox_aux, rho_ao=matrix_px1_admm, & + rho_r=rhox_r_aux, rho_g=rhox_g_aux, & + rho_r_valid=.TRUE., rho_g_valid=.TRUE.) + IF (do_analytic .AND. .NOT. do_numeric) THEN + CPABORT("Analytic 3rd derivatives of EXC not available") + ELSE + CALL qs_fgxc_create(ks_env, rho_aux_fit, rhox_aux, xc_section, & + 6, is_rks_triplets, fxc_rho, fxc_tau, gxc_rho, gxc_tau) + END IF + CALL qs_rho_set(rho_struct=rhox_aux, rho_ao=NULL(), rho_r=NULL(), rho_g=NULL()) + CALL qs_rho_release(rhox_aux) + DO ispin = 1, nspins + CALL pw_pool_give_back_pw(auxbas_pw_pool, rhox_r_aux(ispin)%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, rhox_g_aux(ispin)%pw) + END DO + DEALLOCATE (rhox_r_aux, rhox_g_aux) + IF (nspins == 2) THEN + DO ispin = 1, nspins + CALL pw_scale(gxc_rho(ispin)%pw, 0.5_dp) + IF (ASSOCIATED(gxc_tau)) CALL pw_scale(gxc_tau(ispin)%pw, 0.5_dp) + END DO + END IF + ! + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + DO ispin = 1, nspins + CALL pw_scale(fxc_rho(ispin)%pw, fxc_rho(ispin)%pw%pw_grid%dvol) + CALL integrate_v_rspace(qs_env=qs_env, v_rspace=fxc_rho(ispin), & + hmat=mfx(ispin), & + pmat=matrix_px1_admm(ispin), & + basis_type="AUX_FIT", & + calculate_forces=.TRUE., & + task_list_external=task_list_aux_fit) + END DO + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Px*dKf[X]ADMM", fodeb + END IF + + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + DO ispin = 1, nspins + CALL pw_scale(gxc_rho(ispin)%pw, gxc_rho(ispin)%pw%pw_grid%dvol) + CALL pw_scale(gxc_rho(ispin)%pw, 0.5_dp) + CALL integrate_v_rspace(qs_env=qs_env, v_rspace=gxc_rho(ispin), & + hmat=mgx(ispin), & + pmat=matrix_p_admm(ispin), & + basis_type="AUX_FIT", & + calculate_forces=.TRUE., & + task_list_external=task_list_aux_fit) + CALL dbcsr_scale(mgx(ispin)%matrix, 2.0_dp) + END DO + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: P*dKg[X]ADMM", fodeb + END IF + CALL qs_fgxc_release(ks_env, fxc_rho, fxc_tau, gxc_rho, gxc_tau) + ! + ! A' fx A - Forces + ! + IF (debug_forces) fodeb(1:3) = force(1)%overlap_admm(1:3, 1) + fval = 2.0_dp*REAL(nspins, KIND=dp) + CALL admm_projection_derivative(qs_env, admm_env, mfx, matrix_px1, fval) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%overlap_admm(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: P*dfXC(P)*S' ", fodeb + END IF + IF (debug_forces) fodeb(1:3) = force(1)%overlap_admm(1:3, 1) + fval = 2.0_dp*REAL(nspins, KIND=dp) + CALL admm_projection_derivative(qs_env, admm_env, mgx, matrix_p, fval) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%overlap_admm(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: P*dgXC(P)*S' ", fodeb + END IF + ! + ! Add ADMM fx/gx to the full basis fx/gx + nao = admm_env%nao_orb + nao_aux = admm_env%nao_aux_fit + ALLOCATE (dbwork) + CALL dbcsr_create(dbwork, template=matrix_fx(1)%matrix) + DO ispin = 1, nspins + ! fx + CALL cp_dbcsr_sm_fm_multiply(mfx(ispin)%matrix, admm_env%A, & + admm_env%work_aux_orb, nao) + CALL cp_gemm('T', 'N', nao, nao, nao_aux, & + 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, & + admm_env%work_orb_orb) + CALL dbcsr_copy(dbwork, matrix_fx(1)%matrix) + CALL dbcsr_set(dbwork, 0.0_dp) + CALL copy_fm_to_dbcsr(admm_env%work_orb_orb, dbwork, keep_sparsity=.TRUE.) + CALL dbcsr_add(matrix_fx(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp) + ! gx + CALL cp_dbcsr_sm_fm_multiply(mgx(ispin)%matrix, admm_env%A, & + admm_env%work_aux_orb, nao) + CALL cp_gemm('T', 'N', nao, nao, nao_aux, & + 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, & + admm_env%work_orb_orb) + CALL dbcsr_set(dbwork, 0.0_dp) + CALL copy_fm_to_dbcsr(admm_env%work_orb_orb, dbwork, keep_sparsity=.TRUE.) + CALL dbcsr_add(matrix_gx(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp) + END DO + CALL dbcsr_release(dbwork) + DEALLOCATE (dbwork) + CALL dbcsr_deallocate_matrix_set(mfx) + CALL dbcsr_deallocate_matrix_set(mgx) + END IF + END IF + + END IF + + CALL pw_pool_give_back_pw(auxbas_pw_pool, rhox_tot_gspace%pw) + DO ispin = 1, nspins + CALL pw_pool_give_back_pw(auxbas_pw_pool, rhox_r(ispin)%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, rhox_g(ispin)%pw) + END DO + DEALLOCATE (rhox_r, rhox_g) + IF (.NOT. is_rks_triplets) THEN + CALL pw_pool_give_back_pw(auxbas_pw_pool, xv_hartree_rspace%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, xv_hartree_gspace%pw) + END IF + + ! HFX + IF (do_hfx) THEN + NULLIFY (matrix_hfx) + CALL dbcsr_allocate_matrix_set(matrix_hfx, nspins) + DO ispin = 1, nspins + ALLOCATE (matrix_hfx(ispin)%matrix) + CALL dbcsr_create(matrix_hfx(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(matrix_hfx(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(matrix_hfx(ispin)%matrix, 0.0_dp) + END DO + ! + xc_section => full_kernel%xc_section + hfx_section => section_vals_get_subs_vals(xc_section, "HF") + CALL section_vals_get(hfx_section, n_repetition=n_rep_hf) + CPASSERT(n_rep_hf == 1) + CALL section_vals_val_get(hfx_section, "TREAT_LSD_IN_CORE", l_val=hfx_treat_lsd_in_core, & + i_rep_section=1) + mspin = 1 + IF (hfx_treat_lsd_in_core) mspin = nspins + ! + CALL get_qs_env(qs_env=qs_env, x_data=x_data, s_mstruct_changed=s_mstruct_changed) + distribute_fock_matrix = .TRUE. + ! + IF (do_admm) THEN + CALL get_qs_env(qs_env=qs_env, matrix_s_aux_fit=matrix_s_aux_fit) + NULLIFY (matrix_hfx_admm) + CALL dbcsr_allocate_matrix_set(matrix_hfx_admm, nspins) + DO ispin = 1, nspins + ALLOCATE (matrix_hfx_admm(ispin)%matrix) + CALL dbcsr_create(matrix_hfx_admm(ispin)%matrix, template=matrix_s_aux_fit(1)%matrix) + CALL dbcsr_copy(matrix_hfx_admm(ispin)%matrix, matrix_s_aux_fit(1)%matrix) + CALL dbcsr_set(matrix_hfx_admm(ispin)%matrix, 0.0_dp) + END DO + ! + NULLIFY (mpe, mhe) + ALLOCATE (mpe(nspins, 1), mhe(nspins, 1)) + DO ispin = 1, nspins + mhe(ispin, 1)%matrix => matrix_hfx_admm(ispin)%matrix + mpe(ispin, 1)%matrix => matrix_px1_admm(ispin)%matrix + END DO + DO ispin = 1, mspin + eh1 = 0.0 + CALL integrate_four_center(qs_env, x_data, mhe, eh1, mpe, hfx_section, & + para_env, s_mstruct_changed, 1, distribute_fock_matrix, & + ispin=ispin) + END DO + ! + nao = admm_env%nao_orb + nao_aux = admm_env%nao_aux_fit + ALLOCATE (dbwork) + CALL dbcsr_create(dbwork, template=matrix_hfx(1)%matrix) + DO ispin = 1, nspins + CALL cp_dbcsr_sm_fm_multiply(matrix_hfx_admm(ispin)%matrix, admm_env%A, & + admm_env%work_aux_orb, nao) + CALL cp_gemm('T', 'N', nao, nao, nao_aux, & + 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, & + admm_env%work_orb_orb) + CALL dbcsr_copy(dbwork, matrix_hfx(1)%matrix) + CALL dbcsr_set(dbwork, 0.0_dp) + CALL copy_fm_to_dbcsr(admm_env%work_orb_orb, dbwork, keep_sparsity=.TRUE.) + CALL dbcsr_add(matrix_hfx(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp) + END DO + CALL dbcsr_release(dbwork) + DEALLOCATE (dbwork) + ! forces + ! ADMM Projection force + IF (debug_forces) fodeb(1:3) = force(1)%overlap_admm(1:3, 1) + fval = 4.0_dp*REAL(nspins, KIND=dp) + CALL admm_projection_derivative(qs_env, admm_env, matrix_hfx_admm, matrix_px1, fval) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%overlap_admm(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: P*Hx(P)*S' ", fodeb + END IF + ! + use_virial = .FALSE. + NULLIFY (mdum) + fval = 2.0_dp*REAL(nspins, KIND=dp) + IF (debug_forces) fodeb(1:3) = force(1)%fock_4c(1:3, 1) + CALL derivatives_four_center(qs_env, mpe, mdum, hfx_section, para_env, 1, use_virial, & + adiabatic_rescale_factor=fval) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%fock_4c(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Px*hfx'*Px ", fodeb + END IF + ! + DEALLOCATE (mpe, mhe) + ! + CALL dbcsr_deallocate_matrix_set(matrix_hfx_admm) + ELSE + NULLIFY (mpe, mhe) + ALLOCATE (mpe(nspins, 1), mhe(nspins, 1)) + DO ispin = 1, nspins + mhe(ispin, 1)%matrix => matrix_hfx(ispin)%matrix + mpe(ispin, 1)%matrix => matrix_px1(ispin)%matrix + END DO + DO ispin = 1, mspin + eh1 = 0.0 + CALL integrate_four_center(qs_env, x_data, mhe, eh1, mpe, hfx_section, & + para_env, s_mstruct_changed, 1, distribute_fock_matrix, & + ispin=ispin) + END DO + ! forces + use_virial = .FALSE. + NULLIFY (mdum) + fval = 2.0_dp*REAL(nspins, KIND=dp) + IF (debug_forces) fodeb(1:3) = force(1)%fock_4c(1:3, 1) + CALL derivatives_four_center(qs_env, mpe, mdum, hfx_section, para_env, 1, use_virial, & + adiabatic_rescale_factor=fval) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%fock_4c(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Px*hfx'*Px ", fodeb + END IF + ! + DEALLOCATE (mpe, mhe) + END IF + fval = 2.0_dp*REAL(nspins, KIND=dp) + DO ispin = 1, nspins + CALL dbcsr_scale(matrix_hfx(ispin)%matrix, fval) + END DO + END IF + + CALL get_qs_env(qs_env, sab_orb=sab_orb) + NULLIFY (matrix_wx1) + CALL dbcsr_allocate_matrix_set(matrix_wx1, nspins) + cpmos => ex_env%cpmos + focc = 2.0_dp + IF (nspins == 2) focc = 1.0_dp + DO ispin = 1, nspins + mos => gs_mos(ispin)%mos_occ + CALL cp_fm_get_info(evect(ispin)%matrix, ncol_global=norb) + CALL cp_fm_create(vcvec, mos%matrix_struct, "vcvec") + CALL cp_fm_get_info(vcvec, matrix_struct=fm_struct, nrow_global=nao) + CALL cp_fm_struct_create(fm_struct_mat, context=fm_struct%context, nrow_global=norb, & + ncol_global=norb, para_env=fm_struct%para_env) + CALL cp_fm_create(cvcmat, fm_struct_mat) + CALL cp_fm_struct_release(fm_struct_mat) + ! + ALLOCATE (matrix_wx1(ispin)%matrix) + CALL dbcsr_create(matrix=matrix_wx1(ispin)%matrix, template=matrix_s(1)%matrix) + CALL cp_dbcsr_alloc_block_from_nbl(matrix_wx1(ispin)%matrix, sab_orb) + CALL dbcsr_set(matrix_wx1(ispin)%matrix, 0.0_dp) + ! + IF (.NOT. is_rks_triplets) THEN + CALL cp_dbcsr_sm_fm_multiply(matrix_hx(ispin)%matrix, evect(ispin)%matrix, & + cpmos(ispin)%matrix, norb, alpha=focc, beta=1.0_dp) + CALL cp_dbcsr_sm_fm_multiply(matrix_hx(ispin)%matrix, mos, vcvec, norb, alpha=1.0_dp, beta=0.0_dp) + CALL cp_gemm("T", "N", norb, norb, nao, 1.0_dp, mos, vcvec, 0.0_dp, cvcmat) + CALL cp_gemm("N", "N", nao, norb, norb, 1.0_dp, evect(ispin)%matrix, cvcmat, 0.0_dp, vcvec) + CALL cp_dbcsr_sm_fm_multiply(matrix_s(1)%matrix, vcvec, cpmos(ispin)%matrix, & + norb, alpha=-focc, beta=1.0_dp) + ! + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=mos, matrix_g=vcvec, & + ncol=norb, alpha=1.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=vcvec, matrix_g=mos, & + ncol=norb, alpha=1.0_dp) + END IF + ! + IF (myfun /= xc_none) THEN + CALL cp_dbcsr_sm_fm_multiply(matrix_fx(ispin)%matrix, evect(ispin)%matrix, & + cpmos(ispin)%matrix, norb, alpha=focc, beta=1.0_dp) + CALL cp_dbcsr_sm_fm_multiply(matrix_fx(ispin)%matrix, mos, vcvec, norb, alpha=1.0_dp, beta=0.0_dp) + CALL cp_gemm("T", "N", norb, norb, nao, 1.0_dp, mos, vcvec, 0.0_dp, cvcmat) + CALL cp_gemm("N", "N", nao, norb, norb, 1.0_dp, evect(ispin)%matrix, cvcmat, 0.0_dp, vcvec) + CALL cp_dbcsr_sm_fm_multiply(matrix_s(1)%matrix, vcvec, cpmos(ispin)%matrix, & + norb, alpha=-focc, beta=1.0_dp) + ! + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=mos, matrix_g=vcvec, & + ncol=norb, alpha=1.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=vcvec, matrix_g=mos, & + ncol=norb, alpha=1.0_dp) + ! + CALL cp_dbcsr_sm_fm_multiply(matrix_gx(ispin)%matrix, mos, & + cpmos(ispin)%matrix, norb, alpha=focc, beta=1.0_dp) + ! + CALL cp_dbcsr_sm_fm_multiply(matrix_gx(ispin)%matrix, mos, vcvec, norb, alpha=1.0_dp, beta=0.0_dp) + CALL cp_gemm("T", "N", norb, norb, nao, 1.0_dp, mos, vcvec, 0.0_dp, cvcmat) + CALL cp_gemm("N", "N", nao, norb, norb, 1.0_dp, mos, cvcmat, 0.0_dp, vcvec) + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=mos, matrix_g=vcvec, & + ncol=norb, alpha=0.5_dp) + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=vcvec, matrix_g=mos, & + ncol=norb, alpha=0.5_dp) + END IF + ! + IF (do_hfx) THEN + CALL cp_dbcsr_sm_fm_multiply(matrix_hfx(ispin)%matrix, evect(ispin)%matrix, & + cpmos(ispin)%matrix, norb, alpha=focc, beta=1.0_dp) + CALL cp_dbcsr_sm_fm_multiply(matrix_hfx(ispin)%matrix, mos, vcvec, norb, alpha=1.0_dp, beta=0.0_dp) + CALL cp_gemm("T", "N", norb, norb, nao, 1.0_dp, mos, vcvec, 0.0_dp, cvcmat) + CALL cp_gemm("N", "N", nao, norb, norb, 1.0_dp, evect(ispin)%matrix, cvcmat, 0.0_dp, vcvec) + CALL cp_dbcsr_sm_fm_multiply(matrix_s(1)%matrix, vcvec, cpmos(ispin)%matrix, & + norb, alpha=-focc, beta=1.0_dp) + ! + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=mos, matrix_g=vcvec, & + ncol=norb, alpha=1.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=vcvec, matrix_g=mos, & + ncol=norb, alpha=1.0_dp) + END IF + ! + CALL cp_fm_release(vcvec) + CALL cp_fm_release(cvcmat) + END DO + + IF (.NOT. is_rks_triplets) THEN + CALL dbcsr_deallocate_matrix_set(matrix_hx) + END IF + IF (ASSOCIATED(ex_env%matrix_wx1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_wx1) + ex_env%matrix_wx1 => matrix_wx1 + IF (myfun /= xc_none) THEN + CALL dbcsr_deallocate_matrix_set(matrix_fx) + CALL dbcsr_deallocate_matrix_set(matrix_gx) + END IF + IF (do_hfx) THEN + CALL dbcsr_deallocate_matrix_set(matrix_hfx) + END IF + + CALL timestop(handle) + + END SUBROUTINE fhxc_force + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param admm_env ... +!> \param matrix_hfx ... +!> \param matrix_pe ... +!> \param fval ... +! ************************************************************************************************** + SUBROUTINE admm_projection_derivative(qs_env, admm_env, matrix_hfx, matrix_pe, fval) + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(admm_type), POINTER :: admm_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_hfx, matrix_pe + REAL(KIND=dp), INTENT(IN) :: fval + + CHARACTER(LEN=*), PARAMETER :: routineN = 'admm_projection_derivative', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, ispin, nao, natom, naux, nspins + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: admm_force + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s_aux_fit, matrix_s_aux_fit_vs_orb + TYPE(dbcsr_type), POINTER :: matrix_w_q, matrix_w_s + TYPE(neighbor_list_set_p_type), DIMENSION(:), & + POINTER :: sab_aux_fit_asymm, sab_aux_fit_vs_orb + TYPE(qs_force_type), DIMENSION(:), POINTER :: force + TYPE(qs_ks_env_type), POINTER :: ks_env + + CALL timeset(routineN, handle) + + CPASSERT(ASSOCIATED(qs_env)) + CPASSERT(ASSOCIATED(admm_env)) + CPASSERT(ASSOCIATED(matrix_hfx)) + CPASSERT(ASSOCIATED(matrix_pe)) + + CALL get_qs_env(qs_env, & + ks_env=ks_env, & + matrix_s_aux_fit=matrix_s_aux_fit, & + matrix_s_aux_fit_vs_orb=matrix_s_aux_fit_vs_orb, & + sab_aux_fit_vs_orb=sab_aux_fit_vs_orb, & + sab_aux_fit_asymm=sab_aux_fit_asymm) + + ALLOCATE (matrix_w_q) + CALL dbcsr_copy(matrix_w_q, matrix_s_aux_fit_vs_orb(1)%matrix, & + "W MATRIX AUX Q") + CALL cp_dbcsr_alloc_block_from_nbl(matrix_w_q, sab_aux_fit_vs_orb) + ALLOCATE (matrix_w_s) + CALL dbcsr_create(matrix_w_s, template=matrix_s_aux_fit(1)%matrix, & + name='W MATRIX AUX S', & + matrix_type=dbcsr_type_no_symmetry) + CALL cp_dbcsr_alloc_block_from_nbl(matrix_w_s, sab_aux_fit_asymm) + + CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set, & + natom=natom, force=force) + ALLOCATE (admm_force(3, natom)) + + nspins = SIZE(matrix_pe) + nao = admm_env%nao_orb + naux = admm_env%nao_aux_fit + DO ispin = 1, nspins + CALL copy_dbcsr_to_fm(matrix_hfx(ispin)%matrix, admm_env%work_aux_aux) + + CALL cp_gemm("N", "N", naux, naux, naux, 1.0_dp, admm_env%s_inv, & + admm_env%work_aux_aux, 0.0_dp, admm_env%work_aux_aux2) + CALL cp_gemm("N", "N", naux, nao, naux, 1.0_dp, admm_env%work_aux_aux2, & + admm_env%A, 0.0_dp, admm_env%work_aux_orb) + CALL copy_dbcsr_to_fm(matrix_pe(ispin)%matrix, admm_env%work_orb_orb) + ! admm_env%work_aux_orb2 = S-1*H(P)*A*P + CALL cp_gemm("N", "N", naux, nao, nao, 1.0_dp, admm_env%work_aux_orb, & + admm_env%work_orb_orb, 0.0_dp, admm_env%work_aux_orb2) + ! admm_env%work_aux_aux = [S-1*H(P)*A*P]*A(T) + CALL cp_gemm("N", "T", naux, naux, nao, 1.0_dp, admm_env%work_aux_orb2, & + admm_env%A, 0.0_dp, admm_env%work_aux_aux) + ! + CALL copy_fm_to_dbcsr(admm_env%work_aux_orb2, matrix_w_q, keep_sparsity=.TRUE.) + CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, matrix_w_s, keep_sparsity=.TRUE.) + ! + CALL dbcsr_scale(matrix_w_q, -fval) + CALL dbcsr_scale(matrix_w_s, fval) + ! + admm_force = 0.0_dp + CALL build_overlap_force(ks_env, admm_force, & + basis_type_a="AUX_FIT", basis_type_b="AUX_FIT", & + sab_nl=sab_aux_fit_asymm, matrix_p=matrix_w_s) + CALL build_overlap_force(ks_env, admm_force, & + basis_type_a="AUX_FIT", basis_type_b="ORB", & + sab_nl=sab_aux_fit_vs_orb, matrix_p=matrix_w_q) + ! add forces + CALL add_qs_force(admm_force, force, "overlap_admm", atomic_kind_set) + END DO + + DEALLOCATE (admm_force) + CALL dbcsr_deallocate_matrix(matrix_w_s) + CALL dbcsr_deallocate_matrix(matrix_w_q) + + CALL timestop(handle) + + END SUBROUTINE admm_projection_derivative + +! ************************************************************************************************** +!> \brief Simplified Tamm Dancoff approach (sTDA). Kernel contribution to forces +!> \param qs_env ... +!> \param ex_env ... +!> \param gs_mos ... +!> \param stda_env ... +!> \param sub_env ... +!> \param work ... +!> \param debug_forces ... +! ************************************************************************************************** + SUBROUTINE stda_force(qs_env, ex_env, gs_mos, stda_env, sub_env, work, debug_forces) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(excited_energy_type), POINTER :: ex_env + TYPE(tddfpt_ground_state_mos), DIMENSION(:), & + POINTER :: gs_mos + TYPE(stda_env_type), POINTER :: stda_env + TYPE(tddfpt_subgroup_env_type) :: sub_env + TYPE(tddfpt_work_matrices) :: work + LOGICAL, INTENT(IN) :: debug_forces + + CHARACTER(len=*), PARAMETER :: routineN = 'stda_force', routineP = moduleN//':'//routineN + + INTEGER :: atom_i, atom_j, blk, ewald_type, handle, i, ia, iatom, idimk, ikind, iounit, is, & + ispin, jatom, jkind, jspin, nao, natom, norb, nsgf, nspins + INTEGER, ALLOCATABLE, DIMENSION(:) :: atom_of_kind, first_sgf, kind_of, & + last_sgf + INTEGER, DIMENSION(2) :: nactive, nlim + LOGICAL :: calculate_forces, do_coulomb, do_ewald, & + found, is_rks_triplets, use_virial + REAL(KIND=dp) :: alpha, bp, dgabr, dr, eta, fdim, gabr, & + hfx, rbeta, spinfac, xfac + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: tcharge, tv + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: gtcharge + REAL(KIND=dp), DIMENSION(3) :: fij, fodeb, rij + REAL(KIND=dp), DIMENSION(:, :), POINTER :: gab, pblock + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(atprop_type), POINTER :: atprop + TYPE(cell_type), POINTER :: cell + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: cpmos, X, xtransformed + TYPE(cp_fm_struct_type), POINTER :: fmstruct, fmstruct_mat, fmstructjspin + TYPE(cp_fm_type), POINTER :: ct, ctjspin, cvcmat, cvec, cvecjspin, & + t0matrix, t1matrix, ucmatrix, & + uxmatrix, vcvec, xt, xvec + TYPE(cp_logger_type), POINTER :: logger + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_iterator_type) :: iter + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: gamma_matrix, matrix_plo, matrix_s, & + matrix_wx1, scrm + TYPE(dbcsr_type) :: pdens, ptrans + TYPE(dbcsr_type), POINTER :: tempmat + TYPE(dft_control_type), POINTER :: dft_control + TYPE(ewald_environment_type), POINTER :: ewald_env + TYPE(ewald_pw_type), POINTER :: ewald_pw + TYPE(neighbor_list_set_p_type), DIMENSION(:), & + POINTER :: n_list, sab_orb + TYPE(particle_type), DIMENSION(:), POINTER :: particle_set + TYPE(qs_force_type), DIMENSION(:), POINTER :: force + TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(stda_control_type), POINTER :: stda_control + TYPE(tddfpt2_control_type), POINTER :: tddfpt_control + TYPE(virial_type), POINTER :: virial + + CALL timeset(routineN, handle) + + CPASSERT(ASSOCIATED(ex_env)) + CPASSERT(ASSOCIATED(gs_mos)) + + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF + + CALL get_qs_env(qs_env, dft_control=dft_control) + tddfpt_control => dft_control%tddfpt2_control + stda_control => tddfpt_control%stda_control + nspins = dft_control%nspins + is_rks_triplets = tddfpt_control%rks_triplets .AND. (nspins == 1) + + X => ex_env%evect + + nactive(:) = stda_env%nactive(:) + xfac = 2.0_dp + spinfac = 2.0_dp + IF (nspins == 2) spinfac = 1.0_dp + NULLIFY (matrix_wx1) + CALL dbcsr_allocate_matrix_set(matrix_wx1, nspins) + NULLIFY (matrix_plo) + CALL dbcsr_allocate_matrix_set(matrix_plo, nspins) + + IF (nspins == 1 .AND. is_rks_triplets) THEN + do_coulomb = .FALSE. + ELSE + do_coulomb = .TRUE. + END IF + do_ewald = stda_control%do_ewald + + CALL get_qs_env(qs_env, para_env=para_env, force=force) + + CALL get_qs_env(qs_env, natom=natom, cell=cell, & + particle_set=particle_set, qs_kind_set=qs_kind_set) + ALLOCATE (first_sgf(natom)) + ALLOCATE (last_sgf(natom)) + CALL get_particle_set(particle_set, qs_kind_set, first_sgf=first_sgf, last_sgf=last_sgf) + + CALL get_qs_env(qs_env, ks_env=ks_env, matrix_s=matrix_s, sab_orb=sab_orb) + + ! calculate Loewdin transformed Davidson trial vector tilde(X)=S^1/2*X + ! and tilde(tilde(X))=S^1/2_A*tilde(X)_A + ALLOCATE (xtransformed(nspins)) + DO ispin = 1, nspins + NULLIFY (fmstruct) + ct => work%ctransformed(ispin)%matrix + CALL cp_fm_get_info(ct, matrix_struct=fmstruct) + CALL cp_fm_create(matrix=xtransformed(ispin)%matrix, matrix_struct=fmstruct, name="XTRANSFORMED") + ENDDO + CALL get_lowdin_x(work%shalf, X, xtransformed) + + ALLOCATE (tcharge(natom), gtcharge(natom, 4)) + + cpmos => ex_env%cpmos + + DO ispin = 1, nspins + ct => work%ctransformed(ispin)%matrix + CALL cp_fm_get_info(ct, matrix_struct=fmstruct, nrow_global=nsgf) + ALLOCATE (tv(nsgf)) + CALL cp_fm_create(cvec, fmstruct) + CALL cp_fm_create(xvec, fmstruct) + ! + ALLOCATE (matrix_wx1(ispin)%matrix) + CALL dbcsr_create(matrix=matrix_wx1(ispin)%matrix, template=matrix_s(1)%matrix) + CALL cp_dbcsr_alloc_block_from_nbl(matrix_wx1(ispin)%matrix, sab_orb) + CALL dbcsr_set(matrix_wx1(ispin)%matrix, 0.0_dp) + ALLOCATE (matrix_plo(ispin)%matrix) + CALL dbcsr_create(matrix=matrix_plo(ispin)%matrix, template=matrix_s(1)%matrix) + CALL cp_dbcsr_alloc_block_from_nbl(matrix_plo(ispin)%matrix, sab_orb) + CALL dbcsr_set(matrix_plo(ispin)%matrix, 0.0_dp) + ! + ! *** Coulomb contribution + ! + IF (do_coulomb) THEN + ! + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + ! + ALLOCATE (kind_of(natom), atom_of_kind(natom)) + CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set) + CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, kind_of=kind_of, & + atom_of_kind=atom_of_kind) + ! + tcharge(:) = 0.0_dp + DO jspin = 1, nspins + ctjspin => work%ctransformed(jspin)%matrix + xt => xtransformed(jspin)%matrix + CALL cp_fm_get_info(ctjspin, matrix_struct=fmstructjspin) + CALL cp_fm_get_info(ctjspin, matrix_struct=fmstructjspin, nrow_global=nsgf) + CALL cp_fm_create(cvecjspin, fmstructjspin) + ! CV(mu,j) = CT(mu,j)*XT(mu,j) + CALL cp_fm_schur_product(ctjspin, xt, cvecjspin) + ! TV(mu) = SUM_j CV(mu,j) + CALL cp_fm_vectorssum(cvecjspin, tv, "R") + ! contract charges + ! TC(a) = SUM_(mu of a) TV(mu) + DO ia = 1, natom + DO is = first_sgf(ia), last_sgf(ia) + tcharge(ia) = tcharge(ia) + tv(is) + END DO + END DO + CALL cp_fm_release(cvecjspin) + ENDDO !jspin + ! Apply tcharge*gab -> gtcharge + ! gT(b) = SUM_a g(a,b)*TC(a) + ! gab = work%gamma_exchange(1)%matrix + gtcharge = 0.0_dp + ! short range contribution + NULLIFY (gamma_matrix) + CALL setup_gamma(qs_env, stda_env, sub_env, gamma_matrix, ndim=4) + tempmat => gamma_matrix(1)%matrix + CALL dbcsr_iterator_start(iter, tempmat) + DO WHILE (dbcsr_iterator_blocks_left(iter)) + CALL dbcsr_iterator_next_block(iter, iatom, jatom, gab, blk) + gtcharge(iatom, 1) = gtcharge(iatom, 1) + gab(1, 1)*tcharge(jatom) + IF (iatom /= jatom) THEN + gtcharge(jatom, 1) = gtcharge(jatom, 1) + gab(1, 1)*tcharge(iatom) + END IF + DO idimk = 2, 4 + fdim = -1.0_dp + CALL dbcsr_get_block_p(matrix=gamma_matrix(idimk)%matrix, & + row=iatom, col=jatom, block=gab, found=found) + IF (found) THEN + gtcharge(iatom, idimk) = gtcharge(iatom, idimk) + gab(1, 1)*tcharge(jatom) + IF (iatom /= jatom) THEN + gtcharge(jatom, idimk) = gtcharge(jatom, idimk) + fdim*gab(1, 1)*tcharge(iatom) + END IF + END IF + END DO + END DO + CALL dbcsr_iterator_stop(iter) + CALL dbcsr_deallocate_matrix_set(gamma_matrix) + ! Ewald long range contribution + IF (do_ewald) THEN + ewald_env => work%ewald_env + ewald_pw => work%ewald_pw + CALL ewald_env_get(ewald_env, alpha=alpha, ewald_type=ewald_type) + CALL get_qs_env(qs_env=qs_env, sab_orb=n_list, virial=virial, atprop=atprop) + use_virial = .FALSE. + calculate_forces = .FALSE. + CALL tb_ewald_overlap(gtcharge, tcharge, alpha, n_list, virial, use_virial, atprop) + CALL tb_spme_evaluate(ewald_env, ewald_pw, particle_set, cell, & + gtcharge, tcharge, calculate_forces, virial, use_virial, atprop) + ! add self charge interaction contribution + IF (para_env%ionode) THEN + gtcharge(:, 1) = gtcharge(:, 1) - 2._dp*alpha*oorootpi*tcharge(:) + END IF + ELSE + nlim = get_limit(natom, para_env%num_pe, para_env%mepos) + DO iatom = nlim(1), nlim(2) + DO jatom = 1, iatom - 1 + rij = particle_set(iatom)%r - particle_set(jatom)%r + rij = pbc(rij, cell) + dr = SQRT(SUM(rij(:)**2)) + IF (dr > 1.e-6_dp) THEN + gtcharge(iatom, 1) = gtcharge(iatom, 1) + tcharge(jatom)/dr + gtcharge(jatom, 1) = gtcharge(jatom, 1) + tcharge(iatom)/dr + DO idimk = 2, 4 + gtcharge(iatom, idimk) = gtcharge(iatom, idimk) + rij(idimk - 1)*tcharge(jatom)/dr**3 + gtcharge(jatom, idimk) = gtcharge(jatom, idimk) - rij(idimk - 1)*tcharge(iatom)/dr**3 + END DO + END IF + END DO + END DO + END IF + CALL mp_sum(gtcharge(:, 1), para_env%group) + ! expand charges + ! TV(mu) = TC(a of mu) + tv(1:nsgf) = 0.0_dp + DO ia = 1, natom + DO is = first_sgf(ia), last_sgf(ia) + tv(is) = gtcharge(ia, 1) + END DO + END DO + ! + DO iatom = 1, natom + ikind = kind_of(iatom) + atom_i = atom_of_kind(iatom) + DO i = 1, 3 + fij(i) = spinfac*spinfac*gtcharge(iatom, i + 1)*tcharge(iatom) + END DO + force(ikind)%rho_elec(1, atom_i) = force(ikind)%rho_elec(1, atom_i) - fij(1) + force(ikind)%rho_elec(2, atom_i) = force(ikind)%rho_elec(2, atom_i) - fij(2) + force(ikind)%rho_elec(3, atom_i) = force(ikind)%rho_elec(3, atom_i) - fij(3) + END DO + ! + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Coul[X] ", fodeb + END IF + norb = nactive(ispin) + ! forces from Lowdin charge derivative + CALL cp_fm_get_info(work%S_C0_C0T(ispin)%matrix, matrix_struct=fmstruct) + CALL cp_fm_create(t0matrix, matrix_struct=fmstruct, name="T0 SCRATCH") + CALL cp_fm_create(t1matrix, matrix_struct=fmstruct, name="T1 SCRATCH") + CALL fm_pool_create_fm(work%fm_pool_ao_mo_occ(ispin)%pool, ucmatrix) + CALL fm_pool_create_fm(work%fm_pool_ao_mo_occ(ispin)%pool, uxmatrix) + ct => work%ctransformed(ispin)%matrix + CALL cp_fm_to_fm(ct, cvec) + CALL cp_fm_row_scale(cvec, tv) + CALL cp_gemm('T', 'N', nsgf, norb, nsgf, 1.0_dp, work%S_eigenvectors, & + cvec, 0.0_dp, ucmatrix) + CALL cp_gemm('T', 'N', nsgf, norb, nsgf, 1.0_dp, work%S_eigenvectors, & + X(ispin)%matrix, 0.0_dp, uxmatrix) + CALL cp_gemm('N', 'T', nsgf, nsgf, norb, 1.0_dp, uxmatrix, ucmatrix, 0.0_dp, t0matrix) + xt => xtransformed(ispin)%matrix + CALL cp_fm_to_fm(xt, cvec) + CALL cp_fm_row_scale(cvec, tv) + CALL cp_gemm('T', 'N', nsgf, norb, nsgf, 1.0_dp, work%S_eigenvectors, & + cvec, 0.0_dp, uxmatrix) + CALL cp_gemm('T', 'N', nsgf, norb, nsgf, 1.0_dp, work%S_eigenvectors, & + gs_mos(ispin)%mos_occ, 0.0_dp, ucmatrix) + CALL cp_gemm('N', 'T', nsgf, nsgf, norb, 1.0_dp, ucmatrix, uxmatrix, 1.0_dp, t0matrix) + CALL cp_fm_schur_product(work%slambda, t0matrix, t1matrix) + ! + CALL cp_gemm('N', 'N', nsgf, nsgf, nsgf, spinfac, work%S_eigenvectors, t1matrix, & + 0.0_dp, t0matrix) + CALL cp_dbcsr_plus_fm_fm_t(matrix_plo(ispin)%matrix, matrix_v=t0matrix, & + matrix_g=work%S_eigenvectors, ncol=nsgf, alpha=1.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(matrix_plo(ispin)%matrix, matrix_v=work%S_eigenvectors, & + matrix_g=t0matrix, ncol=nsgf, alpha=1.0_dp) + CALL fm_pool_give_back_fm(work%fm_pool_ao_mo_occ(ispin)%pool, ucmatrix) + CALL fm_pool_give_back_fm(work%fm_pool_ao_mo_occ(ispin)%pool, uxmatrix) + CALL cp_fm_release(t0matrix) + CALL cp_fm_release(t1matrix) + ! + ! CV(mu,i) = TV(mu)*XT(mu,i) + xt => xtransformed(ispin)%matrix + CALL cp_fm_to_fm(xt, cvec) + CALL cp_fm_row_scale(cvec, tv) + CALL cp_dbcsr_sm_fm_multiply(work%shalf, cvec, cpmos(ispin)%matrix, norb, 2.0_dp*spinfac, 1.0_dp) + ! CV(mu,i) = TV(mu)*CT(mu,i) + ct => work%ctransformed(ispin)%matrix + CALL cp_fm_to_fm(ct, cvec) + CALL cp_fm_row_scale(cvec, tv) + ! Shalf(nu,mu)*CV(mu,i) + CALL cp_fm_get_info(cvec, matrix_struct=fmstruct, nrow_global=nao) + CALL cp_fm_create(vcvec, fmstruct) + CALL cp_dbcsr_sm_fm_multiply(work%shalf, cvec, vcvec, norb, 1.0_dp, 0.0_dp) + CALL cp_fm_struct_create(fmstruct_mat, context=fmstruct%context, nrow_global=norb, & + ncol_global=norb, para_env=fmstruct%para_env) + CALL cp_fm_create(cvcmat, fmstruct_mat) + CALL cp_fm_struct_release(fmstruct_mat) + CALL cp_gemm("T", "N", norb, norb, nao, 1.0_dp, gs_mos(ispin)%mos_occ, vcvec, 0.0_dp, cvcmat) + CALL cp_gemm("N", "N", nao, norb, norb, 1.0_dp, X(ispin)%matrix, cvcmat, 0.0_dp, vcvec) + CALL cp_dbcsr_sm_fm_multiply(matrix_s(1)%matrix, vcvec, cpmos(ispin)%matrix, & + nactive(ispin), alpha=-2.0_dp*spinfac, beta=1.0_dp) + ! wx1 + alpha = 2.0_dp + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=gs_mos(ispin)%mos_occ, & + matrix_g=vcvec, ncol=norb, alpha=alpha) + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=vcvec, & + matrix_g=gs_mos(ispin)%mos_occ, ncol=norb, alpha=alpha) + CALL cp_fm_release(vcvec) + CALL cp_fm_release(cvcmat) + DEALLOCATE (atom_of_kind, kind_of) + END IF + ! + ! *** Exchange contribution + ! + IF (stda_env%hfx_fraction > 0.0_dp) THEN + ! + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + ! + norb = nactive(ispin) + ! + ALLOCATE (kind_of(natom), atom_of_kind(natom)) + CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set) + CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, kind_of=kind_of, & + atom_of_kind=atom_of_kind) + ! + tempmat => work%shalf + CALL dbcsr_create(pdens, template=tempmat, matrix_type=dbcsr_type_no_symmetry) + ! P(nu,mu) = SUM_j XT(nu,j)*CT(mu,j) + ct => work%ctransformed(ispin)%matrix + xt => xtransformed(ispin)%matrix + CALL dbcsr_set(pdens, 0.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(pdens, xt, ct, nactive(ispin), & + 1.0_dp, keep_sparsity=.FALSE.) + CALL dbcsr_filter(pdens, stda_env%eps_td_filter) + ! Apply PP*gab -> PP; gab = gamma_coulomb + ! P(nu,mu) = P(nu,mu)*g(a of nu,b of mu) + bp = stda_env%beta_param + hfx = stda_env%hfx_fraction + CALL dbcsr_iterator_start(iter, pdens) + DO WHILE (dbcsr_iterator_blocks_left(iter)) + CALL dbcsr_iterator_next_block(iter, iatom, jatom, pblock, blk) + rij = particle_set(iatom)%r - particle_set(jatom)%r + rij = pbc(rij, cell) + dr = SQRT(SUM(rij(:)**2)) + ikind = kind_of(iatom) + jkind = kind_of(jatom) + eta = (stda_env%kind_param_set(ikind)%kind_param%hardness_param + & + stda_env%kind_param_set(jkind)%kind_param%hardness_param)/2.0_dp + rbeta = dr**bp + gabr = (1._dp/(rbeta + (hfx*eta)**(-bp)))**(1._dp/bp) + ! forces + IF (dr > 1.0e-6_dp) THEN + dgabr = -(1._dp/bp)*(1._dp/(rbeta + (hfx*eta)**(-bp)))**(1._dp/bp + 1._dp) + dgabr = bp*rbeta/dr**2*dgabr + dgabr = SUM(pblock**2)*dgabr + atom_i = atom_of_kind(iatom) + atom_j = atom_of_kind(jatom) + DO i = 1, 3 + fij(i) = dgabr*rij(i) + END DO + force(ikind)%rho_elec(1, atom_i) = force(ikind)%rho_elec(1, atom_i) - fij(1) + force(ikind)%rho_elec(2, atom_i) = force(ikind)%rho_elec(2, atom_i) - fij(2) + force(ikind)%rho_elec(3, atom_i) = force(ikind)%rho_elec(3, atom_i) - fij(3) + force(jkind)%rho_elec(1, atom_j) = force(jkind)%rho_elec(1, atom_j) + fij(1) + force(jkind)%rho_elec(2, atom_j) = force(jkind)%rho_elec(2, atom_j) + fij(2) + force(jkind)%rho_elec(3, atom_j) = force(jkind)%rho_elec(3, atom_j) + fij(3) + END IF + ! + pblock = gabr*pblock + END DO + CALL dbcsr_iterator_stop(iter) + ! + ! Transpose pdens matrix + CALL dbcsr_create(ptrans, template=pdens) + CALL dbcsr_transposed(ptrans, pdens) + ! + ! forces from Lowdin charge derivative + CALL cp_fm_get_info(work%S_C0_C0T(ispin)%matrix, matrix_struct=fmstruct) + CALL cp_fm_create(t0matrix, matrix_struct=fmstruct, name="T0 SCRATCH") + CALL cp_fm_create(t1matrix, matrix_struct=fmstruct, name="T1 SCRATCH") + CALL fm_pool_create_fm(work%fm_pool_ao_mo_occ(ispin)%pool, ucmatrix) + CALL fm_pool_create_fm(work%fm_pool_ao_mo_occ(ispin)%pool, uxmatrix) + ct => work%ctransformed(ispin)%matrix + CALL cp_dbcsr_sm_fm_multiply(pdens, ct, cvec, norb, 1.0_dp, 0.0_dp) + CALL cp_gemm('T', 'N', nsgf, norb, nsgf, 1.0_dp, work%S_eigenvectors, & + cvec, 0.0_dp, ucmatrix) + CALL cp_gemm('T', 'N', nsgf, norb, nsgf, 1.0_dp, work%S_eigenvectors, & + X(ispin)%matrix, 0.0_dp, uxmatrix) + CALL cp_gemm('N', 'T', nsgf, nsgf, norb, 1.0_dp, uxmatrix, ucmatrix, 0.0_dp, t0matrix) + xt => xtransformed(ispin)%matrix + CALL cp_dbcsr_sm_fm_multiply(ptrans, xt, cvec, norb, 1.0_dp, 0.0_dp) + CALL cp_gemm('T', 'N', nsgf, norb, nsgf, 1.0_dp, work%S_eigenvectors, & + cvec, 0.0_dp, uxmatrix) + CALL cp_gemm('T', 'N', nsgf, norb, nsgf, 1.0_dp, work%S_eigenvectors, & + gs_mos(ispin)%mos_occ, 0.0_dp, ucmatrix) + CALL cp_gemm('N', 'T', nsgf, nsgf, norb, 1.0_dp, ucmatrix, uxmatrix, 1.0_dp, t0matrix) + CALL cp_fm_schur_product(work%slambda, t0matrix, t1matrix) + CALL cp_gemm('N', 'N', nsgf, nsgf, nsgf, -1.0_dp, work%S_eigenvectors, t1matrix, & + 0.0_dp, t0matrix) + CALL cp_dbcsr_plus_fm_fm_t(matrix_plo(ispin)%matrix, matrix_v=t0matrix, & + matrix_g=work%S_eigenvectors, ncol=nsgf, alpha=1.0_dp) + CALL cp_dbcsr_plus_fm_fm_t(matrix_plo(ispin)%matrix, matrix_v=work%S_eigenvectors, & + matrix_g=t0matrix, ncol=nsgf, alpha=1.0_dp) + CALL fm_pool_give_back_fm(work%fm_pool_ao_mo_occ(ispin)%pool, ucmatrix) + CALL fm_pool_give_back_fm(work%fm_pool_ao_mo_occ(ispin)%pool, uxmatrix) + CALL cp_fm_release(t0matrix) + CALL cp_fm_release(t1matrix) + + ! RHS contribution to response matrix + ! CV(nu,i) = P(nu,mu)*XT(mu,i) + CALL cp_dbcsr_sm_fm_multiply(ptrans, xt, cvec, norb, 1.0_dp, 0.0_dp) + CALL cp_dbcsr_sm_fm_multiply(work%shalf, cvec, cpmos(ispin)%matrix, norb, & + alpha=-xfac, beta=1.0_dp) + ! + CALL cp_fm_get_info(cvec, matrix_struct=fmstruct, nrow_global=nao) + CALL cp_fm_create(vcvec, fmstruct) + ! CV(nu,i) = P(nu,mu)*CT(mu,i) + CALL cp_dbcsr_sm_fm_multiply(ptrans, ct, cvec, norb, 1.0_dp, 0.0_dp) + CALL cp_dbcsr_sm_fm_multiply(work%shalf, cvec, vcvec, norb, 1.0_dp, 0.0_dp) + CALL cp_fm_struct_create(fmstruct_mat, context=fmstruct%context, nrow_global=norb, & + ncol_global=norb, para_env=fmstruct%para_env) + CALL cp_fm_create(cvcmat, fmstruct_mat) + CALL cp_fm_struct_release(fmstruct_mat) + CALL cp_gemm("T", "N", norb, norb, nao, 1.0_dp, gs_mos(ispin)%mos_occ, vcvec, 0.0_dp, cvcmat) + CALL cp_gemm("N", "N", nao, norb, norb, 1.0_dp, X(ispin)%matrix, cvcmat, 0.0_dp, vcvec) + CALL cp_dbcsr_sm_fm_multiply(matrix_s(1)%matrix, vcvec, cpmos(ispin)%matrix, & + norb, alpha=xfac, beta=1.0_dp) + ! wx1 + IF (nspins == 2) THEN + alpha = -2.0_dp + ELSE + alpha = -1.0_dp + END IF + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=gs_mos(ispin)%mos_occ, & + matrix_g=vcvec, & + ncol=norb, alpha=alpha) + CALL cp_dbcsr_plus_fm_fm_t(matrix_wx1(ispin)%matrix, matrix_v=vcvec, & + matrix_g=gs_mos(ispin)%mos_occ, & + ncol=norb, alpha=alpha) + CALL cp_fm_release(vcvec) + CALL cp_fm_release(cvcmat) + ! + CALL dbcsr_release(pdens) + CALL dbcsr_release(ptrans) + DEALLOCATE (kind_of, atom_of_kind) + ! + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Exch[X] ", fodeb + END IF + END IF + ! + CALL cp_fm_release(cvec) + CALL cp_fm_release(xvec) + DEALLOCATE (tv) + ENDDO + + DO ispin = 1, nspins + CALL cp_fm_release(matrix=xtransformed(ispin)%matrix) + END DO + DEALLOCATE (xtransformed) + DEALLOCATE (tcharge, gtcharge) + DEALLOCATE (first_sgf, last_sgf) + + ! Lowdin forces + IF (nspins == 2) THEN + CALL dbcsr_add(matrix_plo(1)%matrix, matrix_plo(2)%matrix, & + alpha_scalar=1.0_dp, beta_scalar=1.0_dp) + END IF + CALL dbcsr_scale(matrix_plo(1)%matrix, -1.0_dp) + NULLIFY (scrm) + IF (debug_forces) fodeb(1:3) = force(1)%overlap(1:3, 1) + CALL build_overlap_matrix(ks_env, matrix_s=scrm, & + matrix_name="OVERLAP MATRIX", & + basis_type_a="ORB", basis_type_b="ORB", & + sab_nl=sab_orb, calculate_forces=.TRUE., & + matrix_p=matrix_plo(1)%matrix) + CALL dbcsr_deallocate_matrix_set(scrm) + CALL dbcsr_deallocate_matrix_set(matrix_plo) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%overlap(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Lowdin ", fodeb + END IF + + IF (ASSOCIATED(ex_env%matrix_wx1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_wx1) + ex_env%matrix_wx1 => matrix_wx1 + + CALL timestop(handle) + + END SUBROUTINE stda_force + +! ************************************************************************************************** + +END MODULE qs_tddfpt2_fhxc_forces diff --git a/src/qs_tddfpt2_forces.F b/src/qs_tddfpt2_forces.F new file mode 100644 index 0000000000..b0b4f8bca9 --- /dev/null +++ b/src/qs_tddfpt2_forces.F @@ -0,0 +1,1023 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +MODULE qs_tddfpt2_forces + USE admm_types, ONLY: admm_type + USE atomic_kind_types, ONLY: atomic_kind_type,& + get_atomic_kind,& + get_atomic_kind_set + USE cp_control_types, ONLY: dft_control_type,& + tddfpt2_control_type + USE cp_dbcsr_cp2k_link, ONLY: cp_dbcsr_alloc_block_from_nbl + USE cp_dbcsr_operations, ONLY: copy_dbcsr_to_fm,& + copy_fm_to_dbcsr,& + cp_dbcsr_plus_fm_fm_t,& + cp_dbcsr_sm_fm_multiply,& + dbcsr_allocate_matrix_set,& + dbcsr_deallocate_matrix_set + USE cp_fm_struct, ONLY: cp_fm_struct_create,& + cp_fm_struct_release,& + cp_fm_struct_type + USE cp_fm_types, ONLY: cp_fm_copy_general,& + cp_fm_create,& + cp_fm_get_info,& + cp_fm_p_type,& + cp_fm_release,& + cp_fm_type + USE cp_gemm_interface, ONLY: cp_gemm + USE cp_log_handling, ONLY: cp_get_default_logger,& + cp_logger_get_default_unit_nr,& + cp_logger_type + USE cp_para_types, ONLY: cp_para_env_type + USE dbcsr_api, ONLY: & + dbcsr_add, dbcsr_copy, dbcsr_create, dbcsr_dot, dbcsr_p_type, dbcsr_release, dbcsr_scale, & + dbcsr_set, dbcsr_type + USE exstates_types, ONLY: excited_energy_type + USE hfx_energy_potential, ONLY: integrate_four_center + USE hfx_types, ONLY: hfx_type + USE input_constants, ONLY: do_admm_aux_exch_func_none,& + tddfpt_kernel_full,& + tddfpt_kernel_none,& + tddfpt_kernel_stda + USE input_section_types, ONLY: section_get_lval,& + section_vals_get,& + section_vals_get_subs_vals,& + section_vals_type,& + section_vals_val_get + USE kinds, ONLY: dp + USE message_passing, ONLY: mp_sum + USE mulliken, ONLY: ao_charges + USE particle_types, ONLY: particle_type + USE pw_env_types, ONLY: pw_env_get,& + pw_env_type + USE pw_methods, ONLY: pw_axpy,& + pw_scale,& + pw_transfer,& + pw_zero + USE pw_poisson_methods, ONLY: pw_poisson_solve + USE pw_poisson_types, ONLY: pw_poisson_type + USE pw_pool_types, ONLY: pw_pool_create_pw,& + pw_pool_give_back_pw,& + pw_pool_type + USE pw_types, ONLY: COMPLEXDATA1D,& + REALDATA3D,& + REALSPACE,& + RECIPROCALSPACE,& + pw_p_type,& + pw_release + USE qs_collocate_density, ONLY: calculate_rho_elec + USE qs_density_matrices, ONLY: calculate_wx_matrix,& + calculate_xwx_matrix + USE qs_environment_types, ONLY: get_qs_env,& + qs_environment_type,& + set_qs_env + USE qs_force_types, ONLY: allocate_qs_force,& + deallocate_qs_force,& + qs_force_type,& + sum_qs_force,& + total_qs_force,& + zero_qs_force + USE qs_fxc, ONLY: qs_fxc_analytic,& + qs_fxc_fdiff + USE qs_integrate_potential, ONLY: integrate_v_rspace + USE qs_kernel_types, ONLY: kernel_env_type + USE qs_kind_types, ONLY: get_qs_kind,& + 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_p_type + USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type + USE qs_overlap, ONLY: build_overlap_matrix + USE qs_rho_types, ONLY: qs_rho_create,& + qs_rho_get,& + qs_rho_set,& + qs_rho_type + USE qs_tddfpt2_fhxc_forces, ONLY: fhxc_force,& + stda_force + USE qs_tddfpt2_subgroups, ONLY: tddfpt_subgroup_env_type + USE qs_tddfpt2_types, ONLY: tddfpt_ground_state_mos,& + tddfpt_work_matrices + USE response_solver, ONLY: ks_ref_potential + USE task_list_types, ONLY: task_list_type + USE xtb_ehess, ONLY: xtb_coulomb_hessian + USE xtb_types, ONLY: get_xtb_atom_param,& + xtb_atom_type +#include "./base/base_uses.f90" + + IMPLICIT NONE + + PRIVATE + + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_tddfpt2_forces' + + PUBLIC :: tddfpt_forces, & + tddfpt_resvec1, tddfpt_resvec1_admm, & + tddfpt_resvec2, tddfpt_resvec2_xtb, & + tddfpt_resvec3 + +! ************************************************************************************************** + +CONTAINS + +! ************************************************************************************************** +!> \brief Calculate direct tddft forces +!> \param qs_env ... +!> \param ex_env ... +!> \param gs_mos ... +!> \param kernel_env ... +!> \param sub_env ... +!> \param work_matrices ... +!> \par History +!> * 01.2020 screated [JGH] +! ************************************************************************************************** + SUBROUTINE tddfpt_forces(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(excited_energy_type), POINTER :: ex_env + TYPE(tddfpt_ground_state_mos), DIMENSION(:), & + POINTER :: gs_mos + TYPE(kernel_env_type), INTENT(IN) :: kernel_env + TYPE(tddfpt_subgroup_env_type) :: sub_env + TYPE(tddfpt_work_matrices) :: work_matrices + + CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_forces', routineP = moduleN//':'//routineN + LOGICAL, PARAMETER :: debug_forces = .TRUE. + + INTEGER :: handle, iab, nkind + INTEGER, ALLOCATABLE, DIMENSION(:) :: natom_of_kind + REAL(KIND=dp) :: ehartree, exc + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(dft_control_type), POINTER :: dft_control + TYPE(pw_p_type), DIMENSION(:), POINTER :: vadmm_rspace, vtau_rspace, vxc_rspace + TYPE(pw_p_type), POINTER :: vh_rspace + TYPE(qs_force_type), DIMENSION(:), POINTER :: ks_force, td_force + + CALL timeset(routineN, handle) + + ! prepare force array + CALL get_qs_env(qs_env, dft_control=dft_control, force=ks_force, & + atomic_kind_set=atomic_kind_set) + nkind = SIZE(atomic_kind_set) + ALLOCATE (natom_of_kind(nkind)) + CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, natom_of_kind=natom_of_kind) + NULLIFY (td_force) + CALL allocate_qs_force(td_force, natom_of_kind) + DEALLOCATE (natom_of_kind) + CALL zero_qs_force(td_force) + CALL set_qs_env(qs_env, force=td_force) + ! + IF (dft_control%qs_control%xtb) THEN + CALL tddfpt_force_direct(qs_env, ex_env, gs_mos, kernel_env, sub_env, & + work_matrices, debug_forces) + ELSE + vh_rspace => ex_env%vh_rspace + vxc_rspace => ex_env%vxc_rspace + vtau_rspace => ex_env%vtau_rspace + vadmm_rspace => ex_env%vadmm_rspace + IF (ASSOCIATED(vh_rspace)) THEN + CALL pw_release(vh_rspace%pw) + DEALLOCATE (vh_rspace) + END IF + IF (ASSOCIATED(vxc_rspace)) THEN + DO iab = 1, SIZE(vxc_rspace) + CALL pw_release(vxc_rspace(iab)%pw) + END DO + DEALLOCATE (vxc_rspace) + END IF + IF (ASSOCIATED(vtau_rspace)) THEN + DO iab = 1, SIZE(vtau_rspace) + CALL pw_release(vtau_rspace(iab)%pw) + END DO + DEALLOCATE (vtau_rspace) + END IF + IF (ASSOCIATED(vadmm_rspace)) THEN + DO iab = 1, SIZE(vadmm_rspace) + CALL pw_release(vadmm_rspace(iab)%pw) + END DO + DEALLOCATE (vadmm_rspace) + END IF + ! + NULLIFY (vh_rspace, vxc_rspace, vtau_rspace, vadmm_rspace) + CALL ks_ref_potential(qs_env, vh_rspace, vxc_rspace, vtau_rspace, vadmm_rspace, ehartree, exc) + ex_env%vh_rspace => vh_rspace + ex_env%vxc_rspace => vxc_rspace + ex_env%vtau_rspace => vtau_rspace + ex_env%vadmm_rspace => vadmm_rspace + ! + CALL tddfpt_force_direct(qs_env, ex_env, gs_mos, kernel_env, sub_env, & + work_matrices, debug_forces) + END IF + ! + ! add TD and KS forces + CALL get_qs_env(qs_env, force=td_force) + CALL sum_qs_force(ks_force, td_force) + CALL set_qs_env(qs_env, force=ks_force) + CALL deallocate_qs_force(td_force) + ! + CALL timestop(handle) + + END SUBROUTINE tddfpt_forces + +! ************************************************************************************************** +!> \brief Calculate direct tddft forces +!> \param qs_env ... +!> \param ex_env ... +!> \param gs_mos ... +!> \param kernel_env ... +!> \param sub_env ... +!> \param work_matrices ... +!> \param debug_forces ... +!> \par History +!> * 01.2020 screated [JGH] +! ************************************************************************************************** + SUBROUTINE tddfpt_force_direct(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices, & + debug_forces) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(excited_energy_type), POINTER :: ex_env + TYPE(tddfpt_ground_state_mos), DIMENSION(:), & + POINTER :: gs_mos + TYPE(kernel_env_type), INTENT(IN) :: kernel_env + TYPE(tddfpt_subgroup_env_type) :: sub_env + TYPE(tddfpt_work_matrices) :: work_matrices + LOGICAL :: debug_forces + + CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_force_direct', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, iounit, ispin, natom, norb, & + nspins + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: ftot1, ftot2 + REAL(KIND=dp), DIMENSION(3) :: fodeb + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: evect + TYPE(cp_logger_type), POINTER :: logger + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks, matrix_s, matrix_wx1, & + matrix_wz, scrm + TYPE(dft_control_type), POINTER :: dft_control + TYPE(neighbor_list_set_p_type), DIMENSION(:), & + POINTER :: sab_orb + TYPE(qs_force_type), DIMENSION(:), POINTER :: force + TYPE(qs_ks_env_type), POINTER :: ks_env + + CALL timeset(routineN, handle) + + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF + + evect => ex_env%evect + + CALL get_qs_env(qs_env=qs_env, ks_env=ks_env, para_env=para_env, & + sab_orb=sab_orb, dft_control=dft_control, force=force) + nspins = dft_control%nspins + + IF (debug_forces) THEN + CALL get_qs_env(qs_env, natom=natom, atomic_kind_set=atomic_kind_set) + ALLOCATE (ftot1(3, natom)) + CALL total_qs_force(ftot1, force, atomic_kind_set) + END IF + + CALL tddfpt_kernel_force(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices, debug_forces) + + ! Overlap matrix + matrix_wx1 => ex_env%matrix_wx1 + CALL get_qs_env(qs_env=qs_env, matrix_s=matrix_s, matrix_ks=matrix_ks) + NULLIFY (matrix_wz) + CALL dbcsr_allocate_matrix_set(matrix_wz, nspins) + DO ispin = 1, nspins + ALLOCATE (matrix_wz(ispin)%matrix) + CALL dbcsr_create(matrix=matrix_wz(ispin)%matrix, template=matrix_s(1)%matrix) + CALL cp_dbcsr_alloc_block_from_nbl(matrix_wz(ispin)%matrix, sab_orb) + CALL dbcsr_set(matrix_wz(ispin)%matrix, 0.0_dp) + CALL cp_fm_get_info(gs_mos(ispin)%mos_occ, ncol_global=norb) + CALL cp_dbcsr_plus_fm_fm_t(matrix_wz(ispin)%matrix, matrix_v=evect(ispin)%matrix, ncol=norb) + CALL dbcsr_scale(matrix_wz(ispin)%matrix, ex_env%evalue) + CALL calculate_wx_matrix(gs_mos(ispin)%mos_occ, evect(ispin)%matrix, matrix_ks(ispin)%matrix, & + matrix_wz(ispin)%matrix) + END DO + IF (nspins == 2) THEN + CALL dbcsr_add(matrix_wz(1)%matrix, matrix_wz(2)%matrix, & + alpha_scalar=1.0_dp, beta_scalar=1.0_dp) + END IF + NULLIFY (scrm) + IF (debug_forces) fodeb(1:3) = force(1)%overlap(1:3, 1) + CALL build_overlap_matrix(ks_env, matrix_s=scrm, & + matrix_name="OVERLAP MATRIX", & + basis_type_a="ORB", basis_type_b="ORB", & + sab_nl=sab_orb, calculate_forces=.TRUE., & + matrix_p=matrix_wz(1)%matrix) + CALL dbcsr_deallocate_matrix_set(scrm) + CALL dbcsr_deallocate_matrix_set(matrix_wz) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%overlap(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Wx*dS ", fodeb + END IF + + ! Overlap matrix + CALL get_qs_env(qs_env=qs_env, matrix_s=matrix_s, matrix_ks=matrix_ks) + NULLIFY (matrix_wz) + CALL dbcsr_allocate_matrix_set(matrix_wz, nspins) + DO ispin = 1, nspins + ALLOCATE (matrix_wz(ispin)%matrix) + CALL dbcsr_create(matrix=matrix_wz(ispin)%matrix, template=matrix_s(1)%matrix) + CALL cp_dbcsr_alloc_block_from_nbl(matrix_wz(ispin)%matrix, sab_orb) + CALL dbcsr_set(matrix_wz(ispin)%matrix, 0.0_dp) + CALL cp_fm_get_info(gs_mos(ispin)%mos_occ, ncol_global=norb) + CALL calculate_xwx_matrix(gs_mos(ispin)%mos_occ, evect(ispin)%matrix, matrix_s(1)%matrix, & + matrix_ks(ispin)%matrix, matrix_wz(ispin)%matrix, ex_env%evalue) + END DO + IF (nspins == 2) THEN + CALL dbcsr_add(matrix_wz(1)%matrix, matrix_wz(2)%matrix, & + alpha_scalar=1.0_dp, beta_scalar=1.0_dp) + END IF + NULLIFY (scrm) + IF (debug_forces) fodeb(1:3) = force(1)%overlap(1:3, 1) + CALL build_overlap_matrix(ks_env, matrix_s=scrm, & + matrix_name="OVERLAP MATRIX", & + basis_type_a="ORB", basis_type_b="ORB", & + sab_nl=sab_orb, calculate_forces=.TRUE., & + matrix_p=matrix_wz(1)%matrix) + CALL dbcsr_deallocate_matrix_set(scrm) + CALL dbcsr_deallocate_matrix_set(matrix_wz) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%overlap(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: xWx*dS ", fodeb + END IF + + ! Overlap matrix + IF (ASSOCIATED(matrix_wx1)) THEN + IF (nspins == 2) THEN + CALL dbcsr_add(matrix_wx1(1)%matrix, matrix_wx1(2)%matrix, & + alpha_scalar=0.5_dp, beta_scalar=0.5_dp) + END IF + NULLIFY (scrm) + IF (debug_forces) fodeb(1:3) = force(1)%overlap(1:3, 1) + CALL build_overlap_matrix(ks_env, matrix_s=scrm, & + matrix_name="OVERLAP MATRIX", & + basis_type_a="ORB", basis_type_b="ORB", & + sab_nl=sab_orb, calculate_forces=.TRUE., & + matrix_p=matrix_wx1(1)%matrix) + CALL dbcsr_deallocate_matrix_set(scrm) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%overlap(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: WK*dS ", fodeb + END IF + END IF + + IF (debug_forces) THEN + ALLOCATE (ftot2(3, natom)) + CALL total_qs_force(ftot2, force, atomic_kind_set) + fodeb(1:3) = ftot2(1:3, 1) - ftot1(1:3, 1) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T30,3F16.8)") "DEBUG:: Excitation Force", fodeb + DEALLOCATE (ftot1, ftot2) + END IF + + CALL timestop(handle) + + END SUBROUTINE tddfpt_force_direct + +! ************************************************************************************************** +!> \brief ... +!> \param evect ... +!> \param mos_occ ... +!> \param matrix_s ... +!> \param matrix_pe ... +! ************************************************************************************************** + SUBROUTINE tddfpt_resvec1(evect, mos_occ, matrix_s, matrix_pe) + + TYPE(cp_fm_type), POINTER :: evect, mos_occ + TYPE(dbcsr_type), POINTER :: matrix_s, matrix_pe + + CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_resvec1', routineP = moduleN//':'//routineN + + INTEGER :: handle, iounit, nao, norb + REAL(KIND=dp) :: tmp + TYPE(cp_fm_struct_type), POINTER :: fmstruct, fmstruct2 + TYPE(cp_fm_type), POINTER :: cxmat, xxmat + TYPE(cp_logger_type), POINTER :: logger + + CALL timeset(routineN, handle) + ! X*X^T + CALL cp_fm_get_info(mos_occ, nrow_global=nao, ncol_global=norb) + CALL cp_dbcsr_plus_fm_fm_t(matrix_pe, matrix_v=evect, ncol=norb) + ! X^T*S*X + CALL cp_fm_get_info(evect, matrix_struct=fmstruct) + NULLIFY (fmstruct2) + CALL cp_fm_struct_create(fmstruct=fmstruct2, template_fmstruct=fmstruct, & + nrow_global=norb, ncol_global=norb) + CALL cp_fm_create(xxmat, matrix_struct=fmstruct2) + CALL cp_fm_struct_release(fmstruct2) + CALL cp_fm_create(cxmat, matrix_struct=fmstruct) + CALL cp_dbcsr_sm_fm_multiply(matrix_s, evect, cxmat, norb, alpha=1.0_dp, beta=0.0_dp) + CALL cp_gemm('T', 'N', norb, norb, nao, 1.0_dp, cxmat, evect, 0.0_dp, xxmat) + CALL cp_gemm('N', 'N', nao, norb, norb, 1.0_dp, mos_occ, xxmat, 0.0_dp, cxmat) + CALL cp_fm_release(xxmat) + ! C*C^T*XX + CALL cp_dbcsr_plus_fm_fm_t(matrix_pe, matrix_v=mos_occ, matrix_g=cxmat, & + ncol=norb, alpha=-0.5_dp) + CALL cp_dbcsr_plus_fm_fm_t(matrix_pe, matrix_g=mos_occ, matrix_v=cxmat, & + ncol=norb, alpha=-0.5_dp) + CALL cp_fm_release(cxmat) + ! + ! Test for Tr(Pe*S)=0 + CALL dbcsr_dot(matrix_pe, matrix_s, tmp) + IF (ABS(tmp) > 1.e-08_dp) THEN + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF + CPWARN("Electron count of excitation density matrix is non-zero.") + IF (iounit > 0) THEN + WRITE (iounit, "(T2,A,T61,G20.10)") "Measured electron count is ", tmp + WRITE (iounit, "(T2,A,/)") REPEAT("*", 79) + END IF + END IF + ! + + CALL timestop(handle) + + END SUBROUTINE tddfpt_resvec1 + +! ************************************************************************************************** +!> \brief PA = A * P * A(T) +!> \param matrix_pe ... +!> \param admm_env ... +!> \param matrix_pe_admm ... +! ************************************************************************************************** + SUBROUTINE tddfpt_resvec1_admm(matrix_pe, admm_env, matrix_pe_admm) + + TYPE(dbcsr_type), POINTER :: matrix_pe + TYPE(admm_type), POINTER :: admm_env + TYPE(dbcsr_type), POINTER :: matrix_pe_admm + + CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_resvec1_admm', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, nao, nao_aux + + CALL timeset(routineN, handle) + ! + nao_aux = admm_env%nao_aux_fit + nao = admm_env%nao_orb + ! + CALL copy_dbcsr_to_fm(matrix_pe, admm_env%work_orb_orb) + CALL cp_gemm('N', 'N', nao_aux, nao, nao, & + 1.0_dp, admm_env%A, admm_env%work_orb_orb, 0.0_dp, & + admm_env%work_aux_orb) + CALL cp_gemm('N', 'T', nao_aux, nao_aux, nao, & + 1.0_dp, admm_env%work_aux_orb, admm_env%A, 0.0_dp, & + admm_env%work_aux_aux) + CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, matrix_pe_admm, keep_sparsity=.TRUE.) + ! + CALL timestop(handle) + + END SUBROUTINE tddfpt_resvec1_admm + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param matrix_pe ... +!> \param matrix_pe_admm ... +!> \param gs_mos ... +!> \param matrix_hz ... +!> \param cpmos ... +! ************************************************************************************************** + SUBROUTINE tddfpt_resvec2(qs_env, matrix_pe, matrix_pe_admm, gs_mos, matrix_hz, cpmos) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pe, matrix_pe_admm + TYPE(tddfpt_ground_state_mos), DIMENSION(:), & + POINTER :: gs_mos + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_hz + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: cpmos + + CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_resvec2', routineP = moduleN//':'//routineN + + INTEGER :: handle, iounit, ispin, mspin, n_rep_hf, & + nao, nao_aux, norb, nspins + LOGICAL :: deriv2_analytic, distribute_fock_matrix, & + do_hfx, hfx_treat_lsd_in_core, & + s_mstruct_changed + REAL(KIND=dp) :: eh1, focc, thartree, total_rho, & + total_rhoz_aux + TYPE(admm_type), POINTER :: admm_env + TYPE(cp_fm_type), POINTER :: mos + TYPE(cp_logger_type), POINTER :: logger + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: msaux + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: mhz, mpe + TYPE(dbcsr_type), POINTER :: dbwork + TYPE(dft_control_type), POINTER :: dft_control + TYPE(hfx_type), DIMENSION(:, :), POINTER :: x_data + TYPE(pw_env_type), POINTER :: pw_env + TYPE(pw_p_type) :: rho_tot_gspace, v_hartree_gspace, & + v_hartree_rspace + TYPE(pw_p_type), DIMENSION(:), POINTER :: rho_g, rho_g_aux, rho_r, rho_r_aux, & + rhoz_g_aux, rhoz_r_aux, tau_r, & + tau_r_aux, trho_g, trho_r, v_xc + TYPE(pw_poisson_type), POINTER :: poisson_env + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(qs_rho_type), POINTER :: rho, rho_aux_fit, rhoz_aux, trho + TYPE(section_vals_type), POINTER :: hfx_section, input, xc_section + TYPE(task_list_type), POINTER :: task_list_aux_fit + + CALL timeset(routineN, handle) + + NULLIFY (pw_env) + CALL get_qs_env(qs_env=qs_env, pw_env=pw_env, ks_env=ks_env, dft_control=dft_control) + CPASSERT(ASSOCIATED(pw_env)) + nspins = dft_control%nspins + + NULLIFY (auxbas_pw_pool, poisson_env) + ! gets the tmp grids + CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, & + poisson_env=poisson_env) + + NULLIFY (v_hartree_gspace%pw, rho_tot_gspace%pw, v_hartree_rspace%pw) + CALL pw_pool_create_pw(auxbas_pw_pool, v_hartree_gspace%pw, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + CALL pw_pool_create_pw(auxbas_pw_pool, rho_tot_gspace%pw, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + CALL pw_pool_create_pw(auxbas_pw_pool, v_hartree_rspace%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + + ALLOCATE (trho_r(nspins), trho_g(nspins)) + DO ispin = 1, nspins + NULLIFY (trho_r(ispin)%pw, trho_g(ispin)%pw) + CALL pw_pool_create_pw(auxbas_pw_pool, trho_r(ispin)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + CALL pw_pool_create_pw(auxbas_pw_pool, trho_g(ispin)%pw, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + ENDDO + CALL pw_zero(rho_tot_gspace%pw) + DO ispin = 1, nspins + CALL calculate_rho_elec(ks_env=ks_env, matrix_p=matrix_pe(ispin)%matrix, & + rho=trho_r(ispin), & + rho_gspace=trho_g(ispin), & + total_rho=total_rho) + CALL pw_axpy(trho_g(ispin)%pw, rho_tot_gspace%pw) + IF (ABS(total_rho) > 1.e-08_dp) THEN + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF + CPWARN("Real space electron count of excitation density is non-zero.") + IF (iounit > 0) THEN + WRITE (iounit, "(T2,A,T61,G20.10)") "Measured electron count is ", total_rho + WRITE (iounit, "(T2,A,/)") REPEAT("*", 79) + END IF + END IF + END DO + ! calculate associated hartree potential + CALL pw_poisson_solve(poisson_env, rho_tot_gspace%pw, thartree, & + v_hartree_gspace%pw) + CALL pw_transfer(v_hartree_gspace%pw, v_hartree_rspace%pw) + CALL pw_scale(v_hartree_rspace%pw, v_hartree_rspace%pw%pw_grid%dvol) + + ! Fxc*drho term + CALL get_qs_env(qs_env, rho=rho) + CALL qs_rho_get(rho, rho_r=rho_r, rho_g=rho_g, tau_r=tau_r) + ! + CALL get_qs_env(qs_env, input=input) + IF (dft_control%do_admm) THEN + CALL get_qs_env(qs_env, admm_env=admm_env) + xc_section => admm_env%xc_section_primary + ELSE + xc_section => section_vals_get_subs_vals(input, "DFT%XC") + END IF + ! + NULLIFY (v_xc) + deriv2_analytic = section_get_lval(xc_section, "2ND_DERIV_ANALYTICAL") + IF (deriv2_analytic) THEN + CALL qs_fxc_analytic(rho, trho_r, xc_section, auxbas_pw_pool, .FALSE., v_xc) + ELSE + CPABORT("NYA 00006") + NULLIFY (trho) + CALL qs_rho_create(trho) + CALL qs_rho_set(trho, rho_r=trho_r, rho_g=trho_g) + CALL qs_fxc_fdiff(ks_env, rho, trho, xc_section, 6, .FALSE., v_xc, tau_r) + DEALLOCATE (trho) + END IF + ! vtot = v_xc(ispin) + v_hartree + DO ispin = 1, nspins + CALL dbcsr_set(matrix_hz(ispin)%matrix, 0.0_dp) + CALL pw_scale(v_xc(ispin)%pw, v_xc(ispin)%pw%pw_grid%dvol) + CALL pw_axpy(v_hartree_rspace%pw, v_xc(ispin)%pw) + CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_xc(ispin), & + hmat=matrix_hz(ispin), & + calculate_forces=.FALSE.) + END DO + + CALL pw_pool_give_back_pw(auxbas_pw_pool, v_hartree_gspace%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, v_hartree_rspace%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, rho_tot_gspace%pw) + DO ispin = 1, nspins + CALL pw_pool_give_back_pw(auxbas_pw_pool, trho_r(ispin)%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, trho_g(ispin)%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, v_xc(ispin)%pw) + END DO + DEALLOCATE (trho_r, trho_g, v_xc) + + IF (dft_control%do_admm) THEN + IF (dft_control%admm_control%aux_exch_func == do_admm_aux_exch_func_none) THEN + ! nothing to do + ELSE + ! add ADMM xc_section_aux terms: f_x[rhoz_ADMM] + CALL get_qs_env(qs_env, admm_env=admm_env, rho_aux_fit=rho_aux_fit, & + matrix_s_aux_fit=msaux, task_list_aux_fit=task_list_aux_fit) + ! + NULLIFY (mpe, mhz) + ALLOCATE (mpe(nspins, 1)) + CALL dbcsr_allocate_matrix_set(mhz, nspins, 1) + DO ispin = 1, nspins + ALLOCATE (mhz(ispin, 1)%matrix) + CALL dbcsr_create(mhz(ispin, 1)%matrix, template=msaux(1)%matrix) + CALL dbcsr_copy(mhz(ispin, 1)%matrix, msaux(1)%matrix) + CALL dbcsr_set(mhz(ispin, 1)%matrix, 0.0_dp) + mpe(ispin, 1)%matrix => matrix_pe_admm(ispin)%matrix + END DO + ! + xc_section => admm_env%xc_section_aux + ! + NULLIFY (rho_g_aux, rho_r_aux, tau_r_aux, rhoz_g_aux, rhoz_r_aux) + CALL qs_rho_get(rho_aux_fit, rho_r=rho_r_aux, rho_g=rho_g_aux, tau_r=tau_r_aux) + ! rhoz_aux + ALLOCATE (rhoz_r_aux(nspins), rhoz_g_aux(nspins)) + DO ispin = 1, nspins + NULLIFY (rhoz_r_aux(ispin)%pw, rhoz_g_aux(ispin)%pw) + CALL pw_pool_create_pw(auxbas_pw_pool, rhoz_r_aux(ispin)%pw, & + use_data=REALDATA3D, in_space=REALSPACE) + CALL pw_pool_create_pw(auxbas_pw_pool, rhoz_g_aux(ispin)%pw, & + use_data=COMPLEXDATA1D, in_space=RECIPROCALSPACE) + ENDDO + DO ispin = 1, nspins + CALL calculate_rho_elec(ks_env=ks_env, matrix_p=mpe(ispin, 1)%matrix, & + rho=rhoz_r_aux(ispin), rho_gspace=rhoz_g_aux(ispin), & + total_rho=total_rhoz_aux, basis_type="AUX_FIT", & + task_list_external=task_list_aux_fit) + END DO + ! + NULLIFY (v_xc) + deriv2_analytic = section_get_lval(xc_section, "2ND_DERIV_ANALYTICAL") + IF (deriv2_analytic) THEN + CALL qs_fxc_analytic(rho_aux_fit, rhoz_r_aux, xc_section, auxbas_pw_pool, .FALSE., v_xc) + ELSE + CPABORT("NYA 00007") + NULLIFY (rhoz_aux) + CALL qs_rho_create(rhoz_aux) + CALL qs_rho_set(rhoz_aux, rho_r=rhoz_r_aux, rho_g=rhoz_g_aux) + CALL qs_fxc_fdiff(ks_env, rho_aux_fit, rhoz_aux, xc_section, 6, .FALSE., v_xc, tau_r) + DEALLOCATE (rhoz_aux) + END IF + ! + DO ispin = 1, nspins + CALL pw_scale(v_xc(ispin)%pw, v_xc(ispin)%pw%pw_grid%dvol) + CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_xc(ispin), & + hmat=mhz(ispin, 1), basis_type="AUX_FIT", & + calculate_forces=.FALSE., & + task_list_external=task_list_aux_fit) + END DO + DO ispin = 1, nspins + CALL pw_pool_give_back_pw(auxbas_pw_pool, v_xc(ispin)%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, rhoz_r_aux(ispin)%pw) + CALL pw_pool_give_back_pw(auxbas_pw_pool, rhoz_g_aux(ispin)%pw) + END DO + DEALLOCATE (v_xc, rhoz_r_aux, rhoz_g_aux) + ! + nao = admm_env%nao_orb + nao_aux = admm_env%nao_aux_fit + ALLOCATE (dbwork) + CALL dbcsr_create(dbwork, template=matrix_hz(1)%matrix) + DO ispin = 1, nspins + CALL cp_dbcsr_sm_fm_multiply(mhz(ispin, 1)%matrix, admm_env%A, & + admm_env%work_aux_orb, nao) + CALL cp_gemm('T', 'N', nao, nao, nao_aux, & + 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, & + admm_env%work_orb_orb) + CALL dbcsr_copy(dbwork, matrix_hz(1)%matrix) + CALL dbcsr_set(dbwork, 0.0_dp) + CALL copy_fm_to_dbcsr(admm_env%work_orb_orb, dbwork, keep_sparsity=.TRUE.) + CALL dbcsr_add(matrix_hz(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp) + END DO + CALL dbcsr_release(dbwork) + DEALLOCATE (dbwork) + CALL dbcsr_deallocate_matrix_set(mhz) + DEALLOCATE (mpe) + END IF + END IF + + ! HFX + hfx_section => section_vals_get_subs_vals(xc_section, "HF") + CALL section_vals_get(hfx_section, explicit=do_hfx) + IF (do_hfx) THEN + CALL section_vals_get(hfx_section, n_repetition=n_rep_hf) + CPASSERT(n_rep_hf == 1) + CALL section_vals_val_get(hfx_section, "TREAT_LSD_IN_CORE", l_val=hfx_treat_lsd_in_core, & + i_rep_section=1) + mspin = 1 + IF (hfx_treat_lsd_in_core) mspin = nspins + ! + CALL get_qs_env(qs_env=qs_env, rho=rho, x_data=x_data, para_env=para_env, & + s_mstruct_changed=s_mstruct_changed) + distribute_fock_matrix = .TRUE. + IF (dft_control%do_admm) THEN + CALL get_qs_env(qs_env, admm_env=admm_env, matrix_s_aux_fit=msaux) + NULLIFY (mpe, mhz) + ALLOCATE (mpe(nspins, 1)) + CALL dbcsr_allocate_matrix_set(mhz, nspins, 1) + DO ispin = 1, nspins + ALLOCATE (mhz(ispin, 1)%matrix) + CALL dbcsr_create(mhz(ispin, 1)%matrix, template=msaux(1)%matrix) + CALL dbcsr_copy(mhz(ispin, 1)%matrix, msaux(1)%matrix) + CALL dbcsr_set(mhz(ispin, 1)%matrix, 0.0_dp) + mpe(ispin, 1)%matrix => matrix_pe_admm(ispin)%matrix + END DO + DO ispin = 1, mspin + eh1 = 0.0 + CALL integrate_four_center(qs_env, x_data, mhz, eh1, mpe, hfx_section, & + para_env, s_mstruct_changed, 1, distribute_fock_matrix, & + ispin=ispin) + END DO + ! + CPASSERT(ASSOCIATED(admm_env%work_aux_orb)) + CPASSERT(ASSOCIATED(admm_env%work_orb_orb)) + nao = admm_env%nao_orb + nao_aux = admm_env%nao_aux_fit + ALLOCATE (dbwork) + CALL dbcsr_create(dbwork, template=matrix_hz(1)%matrix) + DO ispin = 1, nspins + CALL cp_dbcsr_sm_fm_multiply(mhz(ispin, 1)%matrix, admm_env%A, & + admm_env%work_aux_orb, nao) + CALL cp_gemm('T', 'N', nao, nao, nao_aux, & + 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, & + admm_env%work_orb_orb) + CALL dbcsr_copy(dbwork, matrix_hz(ispin)%matrix) + CALL dbcsr_set(dbwork, 0.0_dp) + CALL copy_fm_to_dbcsr(admm_env%work_orb_orb, dbwork, keep_sparsity=.TRUE.) + CALL dbcsr_add(matrix_hz(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp) + END DO + CALL dbcsr_release(dbwork) + DEALLOCATE (dbwork) + CALL dbcsr_deallocate_matrix_set(mhz) + DEALLOCATE (mpe) + ELSE + NULLIFY (mpe, mhz) + ALLOCATE (mpe(nspins, 1), mhz(nspins, 1)) + DO ispin = 1, nspins + mhz(ispin, 1)%matrix => matrix_hz(ispin)%matrix + mpe(ispin, 1)%matrix => matrix_pe(ispin)%matrix + END DO + DO ispin = 1, mspin + eh1 = 0.0 + CALL integrate_four_center(qs_env, x_data, mhz, eh1, mpe, hfx_section, & + para_env, s_mstruct_changed, 1, distribute_fock_matrix, & + ispin=ispin) + END DO + DEALLOCATE (mpe, mhz) + END IF + END IF + + focc = 4.0_dp + IF (nspins == 2) focc = 2.0_dp + DO ispin = 1, nspins + mos => gs_mos(ispin)%mos_occ + CALL cp_fm_get_info(mos, ncol_global=norb) + CALL cp_dbcsr_sm_fm_multiply(matrix_hz(ispin)%matrix, mos, cpmos(ispin)%matrix, & + norb, alpha=focc, beta=0.0_dp) + END DO + + CALL timestop(handle) + + END SUBROUTINE tddfpt_resvec2 + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param matrix_pe ... +!> \param gs_mos ... +!> \param matrix_hz ... +!> \param cpmos ... +! ************************************************************************************************** + SUBROUTINE tddfpt_resvec2_xtb(qs_env, matrix_pe, gs_mos, matrix_hz, cpmos) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pe + TYPE(tddfpt_ground_state_mos), DIMENSION(:), & + POINTER :: gs_mos + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_hz + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: cpmos + + CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_resvec2_xtb', & + routineP = moduleN//':'//routineN + + INTEGER :: atom_a, handle, iatom, ikind, is, ispin, & + na, natom, natorb, nkind, norb, ns, & + nsgf, nspins + INTEGER, DIMENSION(25) :: lao + INTEGER, DIMENSION(5) :: occ + REAL(dp), ALLOCATABLE, DIMENSION(:) :: mcharge, mcharge1 + REAL(dp), ALLOCATABLE, DIMENSION(:, :) :: aocg, aocg1, charges, charges1 + REAL(KIND=dp) :: focc + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(cp_fm_type), POINTER :: mos + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: p_matrix + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_p, matrix_s + TYPE(dbcsr_type), POINTER :: s_matrix + TYPE(dft_control_type), POINTER :: dft_control + TYPE(particle_type), DIMENSION(:), POINTER :: particle_set + TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set + TYPE(qs_rho_type), POINTER :: rho + TYPE(xtb_atom_type), POINTER :: xtb_kind + + CALL timeset(routineN, handle) + + CPASSERT(ASSOCIATED(matrix_pe)) + + CALL get_qs_env(qs_env=qs_env, dft_control=dft_control) + nspins = dft_control%nspins + + DO ispin = 1, nspins + CALL dbcsr_set(matrix_hz(ispin)%matrix, 0.0_dp) + END DO + + IF (dft_control%qs_control%xtb_control%coulomb_interaction) THEN + ! Mulliken charges + CALL get_qs_env(qs_env, rho=rho, particle_set=particle_set, & + matrix_s_kp=matrix_s, para_env=para_env) + natom = SIZE(particle_set) + CALL qs_rho_get(rho, rho_ao_kp=matrix_p) + ALLOCATE (mcharge(natom), charges(natom, 5)) + ALLOCATE (mcharge1(natom), charges1(natom, 5)) + charges = 0.0_dp + charges1 = 0.0_dp + CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set) + nkind = SIZE(atomic_kind_set) + CALL get_qs_kind_set(qs_kind_set, maxsgf=nsgf) + ALLOCATE (aocg(nsgf, natom)) + aocg = 0.0_dp + ALLOCATE (aocg1(nsgf, natom)) + aocg1 = 0.0_dp + p_matrix => matrix_p(:, 1) + s_matrix => matrix_s(1, 1)%matrix + CALL ao_charges(p_matrix, s_matrix, aocg, para_env) + CALL ao_charges(matrix_pe, s_matrix, aocg1, para_env) + DO ikind = 1, nkind + CALL get_atomic_kind(atomic_kind_set(ikind), natom=na) + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind) + CALL get_xtb_atom_param(xtb_kind, natorb=natorb, lao=lao, occupation=occ) + DO iatom = 1, na + atom_a = atomic_kind_set(ikind)%atom_list(iatom) + charges(atom_a, :) = REAL(occ(:), KIND=dp) + DO is = 1, natorb + ns = lao(is) + 1 + charges(atom_a, ns) = charges(atom_a, ns) - aocg(is, atom_a) + charges1(atom_a, ns) = charges1(atom_a, ns) - aocg1(is, atom_a) + END DO + END DO + END DO + DEALLOCATE (aocg, aocg1) + DO iatom = 1, natom + mcharge(iatom) = SUM(charges(iatom, :)) + mcharge1(iatom) = SUM(charges1(iatom, :)) + END DO + ! Coulomb Kernel + CALL xtb_coulomb_hessian(qs_env, matrix_hz, charges1, mcharge1, mcharge) + ! + DEALLOCATE (charges, mcharge, charges1, mcharge1) + END IF + + focc = 2.0_dp + IF (nspins == 2) focc = 1.0_dp + DO ispin = 1, nspins + mos => gs_mos(ispin)%mos_occ + CALL cp_fm_get_info(mos, ncol_global=norb) + CALL cp_dbcsr_sm_fm_multiply(matrix_hz(ispin)%matrix, mos, cpmos(ispin)%matrix, & + norb, alpha=focc, beta=0.0_dp) + END DO + + CALL timestop(handle) + + END SUBROUTINE tddfpt_resvec2_xtb + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param cpmos ... +!> \param work ... +! ************************************************************************************************** + SUBROUTINE tddfpt_resvec3(qs_env, cpmos, work) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: cpmos + TYPE(tddfpt_work_matrices) :: work + + CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_resvec3', routineP = moduleN//':'//routineN + + INTEGER :: handle, ispin, nao, norb, nspins + TYPE(cp_fm_struct_type), POINTER :: fmstruct + TYPE(cp_fm_type), POINTER :: cvec, omos, rvecs, scmat, umat + TYPE(dft_control_type), POINTER :: dft_control + TYPE(mo_set_p_type), DIMENSION(:), POINTER :: mos + + CALL timeset(routineN, handle) + + CALL get_qs_env(qs_env, mos=mos, dft_control=dft_control) + nspins = dft_control%nspins + + DO ispin = 1, nspins + CALL get_mo_set(mos(ispin)%mo_set, mo_coeff=omos) + scmat => work%S_C0(ispin)%matrix + rvecs => cpmos(ispin)%matrix + CALL cp_fm_get_info(rvecs, nrow_global=nao, ncol_global=norb) + CALL cp_fm_create(cvec, rvecs%matrix_struct, "cvec") + CALL cp_fm_struct_create(fmstruct, context=rvecs%matrix_struct%context, nrow_global=norb, & + ncol_global=norb, para_env=rvecs%matrix_struct%para_env) + CALL cp_fm_create(umat, fmstruct, "umat") + CALL cp_fm_struct_release(fmstruct) + ! + CALL cp_gemm("T", "N", norb, norb, nao, 1.0_dp, omos, scmat, 0.0_dp, umat) + CALL cp_fm_copy_general(rvecs, cvec, rvecs%matrix_struct%para_env) + CALL cp_gemm("N", "T", nao, norb, norb, 1.0_dp, cvec, umat, 0.0_dp, rvecs) + CALL cp_fm_release(cvec) + CALL cp_fm_release(umat) + END DO + + CALL timestop(handle) + + END SUBROUTINE tddfpt_resvec3 + +! ************************************************************************************************** +!> \brief Calculate direct tddft forces +!> \param qs_env ... +!> \param ex_env ... +!> \param gs_mos ... +!> \param kernel_env ... +!> \param sub_env ... +!> \param work_matrices ... +!> \param debug_forces ... +!> \par History +!> * 01.2020 screated [JGH] +! ************************************************************************************************** + SUBROUTINE tddfpt_kernel_force(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices, debug_forces) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(excited_energy_type), POINTER :: ex_env + TYPE(tddfpt_ground_state_mos), DIMENSION(:), & + POINTER :: gs_mos + TYPE(kernel_env_type), INTENT(IN) :: kernel_env + TYPE(tddfpt_subgroup_env_type) :: sub_env + TYPE(tddfpt_work_matrices) :: work_matrices + LOGICAL, INTENT(IN) :: debug_forces + + CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_kernel_force', & + routineP = moduleN//':'//routineN + + INTEGER :: handle + TYPE(dft_control_type), POINTER :: dft_control + TYPE(tddfpt2_control_type), POINTER :: tddfpt_control + + MARK_USED(work_matrices) + + CALL timeset(routineN, handle) + + CALL get_qs_env(qs_env, dft_control=dft_control) + tddfpt_control => dft_control%tddfpt2_control + + IF (tddfpt_control%kernel == tddfpt_kernel_full) THEN + ! full Kernel + CALL fhxc_force(qs_env, ex_env, gs_mos, kernel_env%full_kernel, debug_forces) + ELSE IF (tddfpt_control%kernel == tddfpt_kernel_stda) THEN + ! sTDA Kernel + CALL stda_force(qs_env, ex_env, gs_mos, kernel_env%stda_kernel, sub_env, work_matrices, debug_forces) + ELSE IF (tddfpt_control%kernel == tddfpt_kernel_none) THEN + ! nothing to be done here + ex_env%matrix_wx1 => NULL() + ELSE + CPABORT('Unknown kernel type') + END IF + + CALL timestop(handle) + + END SUBROUTINE tddfpt_kernel_force + +END MODULE qs_tddfpt2_forces diff --git a/src/qs_tddfpt2_methods.F b/src/qs_tddfpt2_methods.F index aedbc9e191..f293b7e542 100644 --- a/src/qs_tddfpt2_methods.F +++ b/src/qs_tddfpt2_methods.F @@ -15,11 +15,16 @@ MODULE qs_tddfpt2_methods USE cp_blacs_env, ONLY: cp_blacs_env_type USE cp_control_types, ONLY: dft_control_type,& tddfpt2_control_type - USE cp_dbcsr_operations, ONLY: dbcsr_deallocate_matrix_set + USE cp_dbcsr_operations, ONLY: dbcsr_allocate_matrix_set,& + dbcsr_deallocate_matrix_set USE cp_fm_pool_types, ONLY: fm_pool_create_fm - USE cp_fm_types, ONLY: cp_fm_get_info,& + USE cp_fm_struct, ONLY: cp_fm_struct_type + USE cp_fm_types, ONLY: cp_fm_create,& + cp_fm_get_info,& cp_fm_p_type,& - cp_fm_release + cp_fm_release,& + cp_fm_set_all,& + cp_fm_to_fm USE cp_log_handling, ONLY: cp_get_default_logger,& cp_logger_get_default_io_unit,& cp_logger_type @@ -28,10 +33,15 @@ MODULE qs_tddfpt2_methods cp_print_key_finished_output,& cp_print_key_unit_nr,& cp_rm_iter_level - USE dbcsr_api, ONLY: dbcsr_p_type + USE dbcsr_api, ONLY: dbcsr_copy,& + dbcsr_create,& + dbcsr_p_type,& + dbcsr_set + USE exstates_types, ONLY: excited_energy_type USE header, ONLY: tddfpt_header USE input_constants, ONLY: tddfpt_dipole_velocity,& tddfpt_kernel_full,& + tddfpt_kernel_none,& tddfpt_kernel_stda USE input_section_types, ONLY: section_vals_get,& section_vals_get_subs_vals,& @@ -43,6 +53,7 @@ MODULE qs_tddfpt2_methods qs_environment_type USE qs_kernel_methods, ONLY: create_kernel_env USE qs_kernel_types, ONLY: full_kernel_env_type,& + kernel_env_type,& release_kernel_env USE qs_mo_types, ONLY: mo_set_p_type USE qs_scf_methods, ONLY: eigensolver @@ -52,6 +63,12 @@ MODULE qs_tddfpt2_methods USE qs_tddfpt2_eigensolver, ONLY: tddfpt_davidson_solver,& tddfpt_orthogonalize_psi1_psi0,& tddfpt_orthonormalize_psi1_psi1 + USE qs_tddfpt2_forces, ONLY: tddfpt_forces,& + tddfpt_resvec1,& + tddfpt_resvec1_admm,& + tddfpt_resvec2,& + tddfpt_resvec2_xtb,& + tddfpt_resvec3 USE qs_tddfpt2_properties, ONLY: tddfpt_dipole_operator,& tddfpt_print_excitation_analysis,& tddfpt_print_nto_analysis,& @@ -66,8 +83,7 @@ MODULE qs_tddfpt2_methods USE qs_tddfpt2_subgroups, ONLY: tddfpt_sub_env_init,& tddfpt_sub_env_release,& tddfpt_subgroup_env_type - USE qs_tddfpt2_types, ONLY: kernel_env_type,& - stda_create_work_matrices,& + USE qs_tddfpt2_types, ONLY: stda_create_work_matrices,& tddfpt_create_work_matrices,& tddfpt_ground_state_mos,& tddfpt_release_work_matrices,& @@ -99,14 +115,16 @@ CONTAINS ! ************************************************************************************************** !> \brief Perform TDDFPT calculation. !> \param qs_env Quickstep environment +!> \param calc_forces ... !> \par History !> * 05.2016 created [Sergey Chulkov] !> * 06.2016 refactored to be used with Davidson eigensolver [Sergey Chulkov] !> * 03.2017 cleaned and refactored [Sergey Chulkov] !> \note Based on the subroutines tddfpt_env_init(), and tddfpt_env_deallocate(). ! ************************************************************************************************** - SUBROUTINE tddfpt(qs_env) + SUBROUTINE tddfpt(qs_env, calc_forces) TYPE(qs_environment_type), POINTER :: qs_env + LOGICAL, INTENT(IN) :: calc_forces CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt' @@ -122,9 +140,12 @@ CONTAINS TYPE(cell_type), POINTER :: cell TYPE(cp_blacs_env_type), POINTER :: blacs_env TYPE(cp_fm_p_type), ALLOCATABLE, DIMENSION(:, :) :: dipole_op_mos_occ, evects, S_evects + TYPE(cp_fm_struct_type), POINTER :: matrix_struct TYPE(cp_logger_type), POINTER :: logger - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks, matrix_ks_oep, matrix_s + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks, matrix_ks_oep, matrix_s, & + matrix_s_aux_fit TYPE(dft_control_type), POINTER :: dft_control + TYPE(excited_energy_type), POINTER :: ex_env TYPE(full_kernel_env_type), TARGET :: full_kernel_env, kernel_env_admm_aux TYPE(kernel_env_type) :: kernel_env TYPE(mo_set_p_type), DIMENSION(:), POINTER :: mos @@ -144,11 +165,15 @@ CONTAINS logger => cp_get_default_logger() ! input section print/xc + NULLIFY (tddfpt_section) + tddfpt_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%TDDFPT") CALL tddfpt_input(qs_env, do_hfx, do_admm, xc_section, tddfpt_print_section) CALL get_qs_env(qs_env, blacs_env=blacs_env, cell=cell, dft_control=dft_control, & matrix_ks=matrix_ks, matrix_s=matrix_s, mos=mos, scf_env=scf_env) tddfpt_control => dft_control%tddfpt2_control + tddfpt_control%do_hfx = do_hfx + tddfpt_control%do_admm = do_admm CALL cite_reference(Iannuzzi2005) IF (tddfpt_control%kernel == tddfpt_kernel_stda) THEN @@ -165,7 +190,7 @@ CONTAINS CALL tddfpt_init_mos(qs_env, gs_mos) ! obtain corrected KS-matrix - CALL tddfpt_oecorr(qs_env, gs_mos, matrix_ks_oep, do_hfx) + CALL tddfpt_oecorr(qs_env, gs_mos, matrix_ks_oep) NULLIFY (admm_env) IF (do_admm) CALL get_qs_env(qs_env, admm_env=admm_env) @@ -205,7 +230,7 @@ CONTAINS ! allocate pools and work matrices nstates = tddfpt_control%nstates - CALL tddfpt_create_work_matrices(work_matrices, gs_mos, nstates, do_hfx, qs_env, sub_env) + CALL tddfpt_create_work_matrices(work_matrices, gs_mos, nstates, do_hfx, do_admm, qs_env, sub_env) CALL tddfpt_construct_ground_state_orb_density(rho_orb_struct=work_matrices%rho_orb_struct_sub, & is_rks_triplets=tddfpt_control%rks_triplets, & @@ -260,6 +285,13 @@ CONTAINS kernel_env%stda_kernel => stda_kernel NULLIFY (kernel_env%full_kernel) NULLIFY (kernel_env%admm_kernel) + ELSE IF (tddfpt_control%kernel == tddfpt_kernel_none) THEN + ! allocate pools and work matrices + nstates = tddfpt_control%nstates + CALL stda_create_work_matrices(work_matrices, gs_mos, nstates, qs_env, sub_env) + NULLIFY (kernel_env%full_kernel) + NULLIFY (kernel_env%admm_kernel) + NULLIFY (kernel_env%stda_kernel) ELSE CPABORT('Unknown kernel type') END IF @@ -315,7 +347,7 @@ CONTAINS DO ! *** perform Davidson iterations *** conv = tddfpt_davidson_solver(evects=evects, evals=evals, S_evects=S_evects, gs_mos=gs_mos, & - do_hfx=do_hfx, tddfpt_control=tddfpt_control, & + tddfpt_control=tddfpt_control, & matrix_ks=matrix_ks, qs_env=qs_env, & kernel_env=kernel_env, & sub_env=sub_env, logger=logger, & @@ -385,9 +417,112 @@ CONTAINS CALL tddfpt_print_nto_analysis(qs_env, evects, evals, gs_mos, matrix_s(1)%matrix, & tddfpt_print_section) - ! -- clean up all useless stuff - DO istate = SIZE(evects, 2), 1, -1 - DO ispin = nspins, 1, -1 + ! excited state potential energy surface + IF (qs_env%excited_state) THEN + CALL get_qs_env(qs_env, exstate_env=ex_env) + IF (ex_env%state > nstates) THEN + CALL cp_warn(__LOCATION__, "There were not enough excited states calculated.") + CPABORT("excited state potential energy surface") + END IF + ! + ! energy + ex_env%evalue = evals(ex_env%state) + ! excitation vector + IF (ASSOCIATED(ex_env%evect)) THEN + DO ispin = 1, SIZE(ex_env%evect) + CALL cp_fm_release(ex_env%evect(ispin)%matrix) + END DO + DEALLOCATE (ex_env%evect) + END IF + ALLOCATE (ex_env%evect(nspins)) + DO ispin = 1, nspins + CALL cp_fm_get_info(matrix=evects(ispin, 1)%matrix, matrix_struct=matrix_struct) + NULLIFY (ex_env%evect(ispin)%matrix) + CALL cp_fm_create(ex_env%evect(ispin)%matrix, matrix_struct) + CALL cp_fm_to_fm(evects(ispin, ex_env%state)%matrix, ex_env%evect(ispin)%matrix) + END DO + IF (calc_forces) THEN + ! rhs of linres equation + IF (ASSOCIATED(ex_env%cpmos)) THEN + DO ispin = 1, SIZE(ex_env%cpmos) + CALL cp_fm_release(ex_env%cpmos(ispin)%matrix) + END DO + DEALLOCATE (ex_env%cpmos) + END IF + ALLOCATE (ex_env%cpmos(nspins)) + DO ispin = 1, nspins + CALL cp_fm_get_info(matrix=evects(ispin, 1)%matrix, matrix_struct=matrix_struct) + NULLIFY (ex_env%cpmos(ispin)%matrix) + CALL cp_fm_create(ex_env%cpmos(ispin)%matrix, matrix_struct) + CALL cp_fm_set_all(ex_env%cpmos(ispin)%matrix, 0.0_dp) + END DO + CALL get_qs_env(qs_env=qs_env, matrix_s=matrix_s) + CALL dbcsr_allocate_matrix_set(ex_env%matrix_pe, nspins) + DO ispin = 1, nspins + ALLOCATE (ex_env%matrix_pe(ispin)%matrix) + CALL dbcsr_create(ex_env%matrix_pe(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(ex_env%matrix_pe(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(ex_env%matrix_pe(ispin)%matrix, 0.0_dp) + CALL tddfpt_resvec1(ex_env%evect(ispin)%matrix, gs_mos(ispin)%mos_occ, & + matrix_s(1)%matrix, ex_env%matrix_pe(ispin)%matrix) + END DO + ! + ! ground state ADMM! + IF (dft_control%do_admm) THEN + CALL get_qs_env(qs_env, admm_env=admm_env, matrix_s_aux_fit=matrix_s_aux_fit) + CALL dbcsr_allocate_matrix_set(ex_env%matrix_pe_admm, nspins) + DO ispin = 1, nspins + ALLOCATE (ex_env%matrix_pe_admm(ispin)%matrix) + CALL dbcsr_create(ex_env%matrix_pe_admm(ispin)%matrix, template=matrix_s_aux_fit(1)%matrix) + CALL dbcsr_copy(ex_env%matrix_pe_admm(ispin)%matrix, matrix_s_aux_fit(1)%matrix) + CALL dbcsr_set(ex_env%matrix_pe_admm(ispin)%matrix, 0.0_dp) + CALL tddfpt_resvec1_admm(ex_env%matrix_pe(ispin)%matrix, & + admm_env, ex_env%matrix_pe_admm(ispin)%matrix) + END DO + END IF + ! + CALL dbcsr_allocate_matrix_set(ex_env%matrix_hz, nspins) + DO ispin = 1, nspins + ALLOCATE (ex_env%matrix_hz(ispin)%matrix) + CALL dbcsr_create(ex_env%matrix_hz(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(ex_env%matrix_hz(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(ex_env%matrix_hz(ispin)%matrix, 0.0_dp) + END DO + IF (dft_control%qs_control%xtb) THEN + CALL tddfpt_resvec2_xtb(qs_env, ex_env%matrix_pe, gs_mos, ex_env%matrix_hz, ex_env%cpmos) + ELSE + CALL tddfpt_resvec2(qs_env, ex_env%matrix_pe, ex_env%matrix_pe_admm, & + gs_mos, ex_env%matrix_hz, ex_env%cpmos) + END IF + ! + CALL dbcsr_allocate_matrix_set(ex_env%matrix_px1, nspins) + DO ispin = 1, nspins + ALLOCATE (ex_env%matrix_px1(ispin)%matrix) + CALL dbcsr_create(ex_env%matrix_px1(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(ex_env%matrix_px1(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(ex_env%matrix_px1(ispin)%matrix, 0.0_dp) + END DO + ! Kernel ADMM + IF (tddfpt_control%do_admm) THEN + CALL get_qs_env(qs_env, admm_env=admm_env, matrix_s_aux_fit=matrix_s_aux_fit) + CALL dbcsr_allocate_matrix_set(ex_env%matrix_px1_admm, nspins) + DO ispin = 1, nspins + ALLOCATE (ex_env%matrix_px1_admm(ispin)%matrix) + CALL dbcsr_create(ex_env%matrix_px1_admm(ispin)%matrix, template=matrix_s_aux_fit(1)%matrix) + CALL dbcsr_copy(ex_env%matrix_px1_admm(ispin)%matrix, matrix_s_aux_fit(1)%matrix) + CALL dbcsr_set(ex_env%matrix_px1_admm(ispin)%matrix, 0.0_dp) + END DO + END IF + ! TDA forces + CALL tddfpt_forces(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices) + ! Rotate res vector cpmos into original frame of occupied orbitals + CALL tddfpt_resvec3(qs_env, ex_env%cpmos, work_matrices) + END IF + END IF + + ! clean up + DO istate = 1, SIZE(evects, 2) + DO ispin = 1, nspins CALL cp_fm_release(evects(ispin, istate)%matrix) CALL cp_fm_release(S_evects(ispin, istate)%matrix) END DO @@ -399,6 +534,8 @@ CONTAINS CALL release_kernel_env(kernel_env%full_kernel) ELSE IF (tddfpt_control%kernel == tddfpt_kernel_stda) THEN CALL deallocate_stda_env(stda_kernel) + ELSE IF (tddfpt_control%kernel == tddfpt_kernel_none) THEN + ! ELSE CPABORT('Unknown kernel type') END IF @@ -464,30 +601,35 @@ CONTAINS tddfpt_section => section_vals_get_subs_vals(input, "PROPERTIES%TDDFPT") tddfpt_print_section => section_vals_get_subs_vals(tddfpt_section, "PRINT") - NULLIFY (xc_section) - xc_section => section_vals_get_subs_vals(tddfpt_section, "XC%XC_FUNCTIONAL") - CALL section_vals_get(xc_section, explicit=explicit_xc) - IF (explicit_xc) THEN - xc_section => section_vals_get_subs_vals(tddfpt_section, "XC") - ELSE - xc_section => section_vals_get_subs_vals(input, "DFT%XC") - END IF - hfx_section => section_vals_get_subs_vals(xc_section, "HF") - - CALL section_vals_get(hfx_section, explicit=do_hfx) - IF (do_hfx) THEN - CALL section_vals_val_get(hfx_section, "FRACTION", r_val=C_hf) - do_hfx = (C_hf /= 0.0_dp) - END IF - - do_admm = do_hfx .AND. dft_control%do_admm - IF (do_admm) THEN + IF (tddfpt_control%kernel == tddfpt_kernel_full) THEN + NULLIFY (xc_section) + xc_section => section_vals_get_subs_vals(tddfpt_section, "XC%XC_FUNCTIONAL") + CALL section_vals_get(xc_section, explicit=explicit_xc) IF (explicit_xc) THEN - ! 'admm_env%xc_section_primary' and 'admm_env%xc_section_aux' need to be redefined - CALL cp_abort(__LOCATION__, & - "ADMM is not implemented for a TDDFT kernel XC-functional which is different from "// & - "the one used for the ground-state calculation. A ground-state 'admm_env' cannot be reused.") + xc_section => section_vals_get_subs_vals(tddfpt_section, "XC") + ELSE + xc_section => section_vals_get_subs_vals(input, "DFT%XC") END IF + hfx_section => section_vals_get_subs_vals(xc_section, "HF") + + CALL section_vals_get(hfx_section, explicit=do_hfx) + IF (do_hfx) THEN + CALL section_vals_val_get(hfx_section, "FRACTION", r_val=C_hf) + do_hfx = (C_hf /= 0.0_dp) + END IF + do_admm = do_hfx .AND. dft_control%do_admm + + IF (do_admm) THEN + IF (explicit_xc) THEN + ! 'admm_env%xc_section_primary' and 'admm_env%xc_section_aux' need to be redefined + CALL cp_abort(__LOCATION__, & + "ADMM is not implemented for a TDDFT kernel XC-functional which is different from "// & + "the one used for the ground-state calculation. A ground-state 'admm_env' cannot be reused.") + END IF + END IF + ELSE + do_hfx = .FALSE. + do_admm = .FALSE. END IF ! reset rks_triplets if UKS is in use diff --git a/src/qs_tddfpt2_restart.F b/src/qs_tddfpt2_restart.F index 875be494e9..8502759361 100644 --- a/src/qs_tddfpt2_restart.F +++ b/src/qs_tddfpt2_restart.F @@ -173,6 +173,8 @@ CONTAINS CALL timeset(routineN, handle) + CPASSERT(ASSOCIATED(tddfpt_section)) + ! generate restart file name CALL section_vals_val_get(tddfpt_section, "WFN_RESTART_FILE_NAME", n_rep_val=n_rep_val) IF (n_rep_val > 0) THEN diff --git a/src/qs_tddfpt2_stda_utils.F b/src/qs_tddfpt2_stda_utils.F index bf3c5ac63f..2533d8b71d 100644 --- a/src/qs_tddfpt2_stda_utils.F +++ b/src/qs_tddfpt2_stda_utils.F @@ -24,18 +24,14 @@ MODULE qs_tddfpt2_stda_utils dbcsr_allocate_matrix_set USE cp_fm_basic_linalg, ONLY: cp_fm_row_scale,& cp_fm_schur_product - USE cp_fm_diag, ONLY: cp_fm_power + USE cp_fm_diag, ONLY: choose_eigv_solver,& + cp_fm_power USE cp_fm_struct, ONLY: cp_fm_struct_create,& cp_fm_struct_release,& cp_fm_struct_type - USE cp_fm_types, ONLY: cp_fm_create,& - cp_fm_get_info,& - cp_fm_p_type,& - cp_fm_release,& - cp_fm_set_all,& - cp_fm_to_fm,& - cp_fm_type,& - cp_fm_vectorssum + USE cp_fm_types, ONLY: & + cp_fm_create, cp_fm_get_info, cp_fm_p_type, cp_fm_release, cp_fm_set_all, & + cp_fm_set_submatrix, cp_fm_to_fm, cp_fm_type, cp_fm_vectorssum USE cp_log_handling, ONLY: cp_get_default_logger,& cp_logger_get_default_io_unit,& cp_logger_type @@ -44,7 +40,8 @@ MODULE qs_tddfpt2_stda_utils dbcsr_add_on_diag, dbcsr_create, dbcsr_distribution_type, dbcsr_filter, dbcsr_finalize, & dbcsr_get_block_p, dbcsr_iterator_blocks_left, dbcsr_iterator_next_block, & dbcsr_iterator_start, dbcsr_iterator_stop, dbcsr_iterator_type, dbcsr_p_type, & - dbcsr_release, dbcsr_set, dbcsr_type, dbcsr_type_no_symmetry, dbcsr_type_symmetric + dbcsr_release, dbcsr_set, dbcsr_type, dbcsr_type_antisymmetric, dbcsr_type_no_symmetry, & + dbcsr_type_symmetric USE ewald_environment_types, ONLY: ewald_env_create,& ewald_env_get,& ewald_env_set,& @@ -86,7 +83,7 @@ MODULE qs_tddfpt2_stda_utils CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_tddfpt2_stda_utils' - PUBLIC:: stda_init_matrices, stda_calculate_kernel + PUBLIC:: stda_init_matrices, stda_calculate_kernel, get_lowdin_x, setup_gamma CONTAINS @@ -151,27 +148,28 @@ CONTAINS !> \param stda_env ... !> \param sub_env ... !> \param gamma_matrix sTDA exchange-type contributions +!> \param ndim ... !> \note Note the specific sTDA notation exchange-type integrals (ia|jb) refer to Coulomb interaction ! ************************************************************************************************** - SUBROUTINE setup_gamma(qs_env, stda_env, sub_env, gamma_matrix) + SUBROUTINE setup_gamma(qs_env, stda_env, sub_env, gamma_matrix, ndim) TYPE(qs_environment_type), POINTER :: qs_env TYPE(stda_env_type) :: stda_env TYPE(tddfpt_subgroup_env_type), INTENT(in) :: sub_env TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: gamma_matrix + INTEGER, INTENT(IN), OPTIONAL :: ndim CHARACTER(len=*), PARAMETER :: routineN = 'setup_gamma' REAL(KIND=dp), PARAMETER :: rsmooth = 1.0_dp - CHARACTER(len=20) :: cstring - INTEGER :: handle, iatom, icol, ikind, irow, jatom, & - jkind, natom, nmat + INTEGER :: handle, i, iatom, icol, ikind, imat, & + irow, jatom, jkind, natom, nmat INTEGER, DIMENSION(:), POINTER :: row_blk_sizes LOGICAL :: found - REAL(KIND=dp) :: dr, eta, fcut, r, ralpha, rcut, rcuta, & - rcutb, x + REAL(KIND=dp) :: dfcut, dgb, dr, eta, fcut, r, rcut, & + rcuta, rcutb, x REAL(KIND=dp), DIMENSION(3) :: rij - REAL(KIND=dp), DIMENSION(:, :), POINTER :: gblock + REAL(KIND=dp), DIMENSION(:, :), POINTER :: dgblock, gblock TYPE(dbcsr_distribution_type), POINTER :: dbcsr_dist TYPE(neighbor_list_iterator_p_type), & DIMENSION(:), POINTER :: nl_iterator @@ -180,28 +178,42 @@ CONTAINS CALL timeset(routineN, handle) - cstring = "GAMMA EXCHANGE MATRIX" + CALL get_qs_env(qs_env=qs_env, natom=natom) dbcsr_dist => sub_env%dbcsr_dist n_list => sub_env%sab_orb - CALL get_qs_env(qs_env=qs_env, natom=natom) + CALL get_qs_env(qs_env=qs_env, dbcsr_dist=dbcsr_dist, sab_orb=n_list) - nmat = 1 - NULLIFY (gamma_matrix) + IF (PRESENT(ndim)) THEN + nmat = ndim + ELSE + nmat = 1 + END IF + CPASSERT(nmat == 1 .OR. nmat == 4) + CPASSERT(.NOT. ASSOCIATED(gamma_matrix)) CALL dbcsr_allocate_matrix_set(gamma_matrix, nmat) ALLOCATE (row_blk_sizes(natom)) row_blk_sizes(1:natom) = 1 - ALLOCATE (gamma_matrix(1)%matrix) + DO imat = 1, nmat + ALLOCATE (gamma_matrix(imat)%matrix) + END DO - CALL dbcsr_create(gamma_matrix(1)%matrix, name=TRIM(ADJUSTL(cstring)), dist=dbcsr_dist, & + CALL dbcsr_create(gamma_matrix(1)%matrix, name="gamma", dist=dbcsr_dist, & matrix_type=dbcsr_type_symmetric, row_blk_size=row_blk_sizes, & - col_blk_size=row_blk_sizes, nze=0, mutable_work=.TRUE.) + col_blk_size=row_blk_sizes, nze=0) + DO imat = 2, nmat + CALL dbcsr_create(gamma_matrix(imat)%matrix, name="dgamma", dist=dbcsr_dist, & + matrix_type=dbcsr_type_antisymmetric, row_blk_size=row_blk_sizes, & + col_blk_size=row_blk_sizes, nze=0) + END DO DEALLOCATE (row_blk_sizes) ! setup the matrices using the neighbor list - CALL cp_dbcsr_alloc_block_from_nbl(gamma_matrix(1)%matrix, n_list) - CALL dbcsr_set(gamma_matrix(1)%matrix, 0.0_dp) + DO imat = 1, nmat + CALL cp_dbcsr_alloc_block_from_nbl(gamma_matrix(imat)%matrix, n_list) + CALL dbcsr_set(gamma_matrix(imat)%matrix, 0.0_dp) + END DO NULLIFY (nl_iterator) CALL neighbor_list_iterator_create(nl_iterator, n_list) @@ -242,16 +254,59 @@ CONTAINS x = r/rsmooth fcut = -6._dp*x**5 + 15._dp*x**4 - 10._dp*x**3 + 1._dp END IF - ralpha = dr**stda_env%alpha_param gblock(:, :) = gblock(:, :) + & fcut*(1._dp/(dr**(stda_env%alpha_param) + eta**(-stda_env%alpha_param))) & **(1._dp/stda_env%alpha_param) - fcut/dr END IF + IF (nmat > 1) THEN + !> Computes the short-range gamma parameter from + !> Nataga-Mishimoto-Ohno-Klopman formula equivalently as it is done for xTB + !> Derivatives + IF (dr < 1.e-6 .OR. dr > rcut) THEN + ! on site terms or beyond cutoff + dgb = 0.0_dp + ELSE + IF (dr < rcut - rsmooth) THEN + fcut = 1.0_dp + dfcut = 0.0_dp + ELSE + r = dr - (rcut - rsmooth) + x = r/rsmooth + fcut = -6._dp*x**5 + 15._dp*x**4 - 10._dp*x**3 + 1._dp + dfcut = -30._dp*x**4 + 60._dp*x**3 - 30._dp*x**2 + dfcut = dfcut/rsmooth + END IF + dgb = dfcut*(1._dp/(dr**(stda_env%alpha_param) + eta**(-stda_env%alpha_param))) & + **(1._dp/stda_env%alpha_param) + dgb = dgb - dfcut/dr + fcut/dr**2 + dgb = dgb - fcut*(1._dp/(dr**(stda_env%alpha_param) + eta**(-stda_env%alpha_param))) & + **(1._dp/stda_env%alpha_param + 1._dp)*dr**(stda_env%alpha_param - 1._dp) + END IF + DO imat = 2, nmat + NULLIFY (dgblock) + CALL dbcsr_get_block_p(matrix=gamma_matrix(imat)%matrix, & + row=irow, col=icol, BLOCK=dgblock, found=found) + IF (found) THEN + IF (dr > 1.e-6) THEN + i = imat - 1 + IF (irow == iatom) THEN + dgblock(:, :) = dgblock(:, :) + dgb*rij(i)/dr + ELSE + dgblock(:, :) = dgblock(:, :) - dgb*rij(i)/dr + END IF + END IF + END IF + END DO + END IF + END DO CALL neighbor_list_iterator_release(nl_iterator) - CALL dbcsr_finalize(gamma_matrix(1)%matrix) + + DO imat = 1, nmat + CALL dbcsr_finalize(gamma_matrix(imat)%matrix) + END DO CALL timestop(handle) @@ -271,11 +326,13 @@ CONTAINS CHARACTER(len=*), PARAMETER :: routineN = 'get_lowdin_mo_coefficients' - INTEGER :: handle, iounit, ispin, max_iter_lanczos, & - nactive, ndep, nsgf, nspins, & - order_lanczos + INTEGER :: handle, i, iounit, ispin, j, & + max_iter_lanczos, nactive, ndep, nsgf, & + nspins, order_lanczos LOGICAL :: converged - REAL(KIND=dp) :: eps_lanczos, threshold + REAL(KIND=dp) :: eps_lanczos, sij, threshold + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: slam + REAL(KIND=dp), DIMENSION(:, :), POINTER :: local_data TYPE(cp_fm_struct_type), POINTER :: fmstruct TYPE(cp_fm_type), POINTER :: fm_s_half, fm_work1 TYPE(cp_logger_type), POINTER :: logger @@ -360,6 +417,36 @@ CONTAINS work%ctransformed(ispin)%matrix, nactive, alpha=1.0_dp, beta=0.0_dp) ENDDO + ! for Lowdin forces + CALL cp_fm_create(matrix=fm_work1, matrix_struct=work%S_eigenvectors%matrix_struct, name="TMP MATRIX") + CALL copy_dbcsr_to_fm(sm_s, fm_work1) + CALL choose_eigv_solver(fm_work1, work%S_eigenvectors, work%S_eigenvalues) + CALL cp_fm_release(matrix=fm_work1) + ! + ALLOCATE (slam(nsgf, 1)) + DO i = 1, nsgf + IF (work%S_eigenvalues(i) > 0._dp) THEN + slam(i, 1) = SQRT(work%S_eigenvalues(i)) + ELSE + CPABORT("S matrix not positive definit") + END IF + END DO + DO i = 1, nsgf + CALL cp_fm_set_submatrix(work%slambda, slam, 1, i, nsgf, 1, 1.0_dp, 0.0_dp) + END DO + DO i = 1, nsgf + CALL cp_fm_set_submatrix(work%slambda, slam, i, 1, 1, nsgf, 1.0_dp, 1.0_dp, .TRUE.) + END DO + CALL cp_fm_get_info(work%slambda, local_data=local_data) + DO i = 1, SIZE(local_data, 2) + DO j = 1, SIZE(local_data, 1) + sij = local_data(j, i) + IF (sij > 0.0_dp) sij = 1.0_dp/sij + local_data(j, i) = sij + END DO + END DO + DEALLOCATE (slam) + CALL timestop(handle) END SUBROUTINE get_lowdin_mo_coefficients @@ -596,6 +683,7 @@ CONTAINS ! P(nu,mu) = SUM_j XT(nu,j)*CT(mu,j) ct => work%ctransformed(ispin)%matrix xt => xtransformed(ispin)%matrix + CALL dbcsr_set(pdens, 0.0_dp) CALL cp_dbcsr_plus_fm_fm_t(pdens, xt, ct, nactive(ispin), & 1.0_dp, keep_sparsity=.FALSE.) CALL dbcsr_filter(pdens, stda_env%eps_td_filter) diff --git a/src/qs_tddfpt2_subgroups.F b/src/qs_tddfpt2_subgroups.F index cd8092d500..4f03d6f64a 100644 --- a/src/qs_tddfpt2_subgroups.F +++ b/src/qs_tddfpt2_subgroups.F @@ -45,6 +45,7 @@ MODULE qs_tddfpt2_subgroups distribution_2d_type USE distribution_methods, ONLY: distribute_molecules_2d USE input_constants, ONLY: tddfpt_kernel_full,& + tddfpt_kernel_none,& tddfpt_kernel_stda USE input_section_types, ONLY: section_vals_type,& section_vals_val_get @@ -323,6 +324,24 @@ CONTAINS ELSE CALL get_qs_env(qs_env, dbcsr_dist=sub_env%dbcsr_dist, sab_orb=sub_env%sab_orb) END IF + ELSE IF (kernel == tddfpt_kernel_none) THEN + sub_env%is_mgrid = .FALSE. + NULLIFY (sub_env%dbcsr_dist, sub_env%dist_2d) + NULLIFY (sub_env%sab_orb, sub_env%sab_aux_fit) + NULLIFY (sub_env%task_list_orb, sub_env%task_list_aux_fit) + NULLIFY (sub_env%pw_env) + IF (sub_env%is_split) THEN + CALL tddfpt_build_distribution_2d(distribution_2d=sub_env%dist_2d, dbcsr_dist=sub_env%dbcsr_dist, & + blacs_env=sub_env%blacs_env, qs_env=qs_env) + ! maybe we don't need task_list, just sab_orb + CALL tddfpt_build_tasklist(task_list=sub_env%task_list_orb, sab=sub_env%sab_orb, basis_type="ORB", & + distribution_2d=sub_env%dist_2d, pw_env=sub_env%pw_env, qs_env=qs_env, & + skip_load_balance=qs_control%skip_load_balance_distributed, & + reorder_grid_ranks=.TRUE.) + CPABORT('subsys missing') + ELSE + CALL get_qs_env(qs_env, dbcsr_dist=sub_env%dbcsr_dist, sab_orb=sub_env%sab_orb) + END IF ELSE CPABORT("Unknown kernel type") END IF diff --git a/src/qs_tddfpt2_types.F b/src/qs_tddfpt2_types.F index 23ca806b1b..f7afc587d6 100644 --- a/src/qs_tddfpt2_types.F +++ b/src/qs_tddfpt2_types.F @@ -21,6 +21,7 @@ MODULE qs_tddfpt2_types cp_fm_struct_release,& cp_fm_struct_type USE cp_fm_types, ONLY: cp_fm_create,& + cp_fm_get_info,& cp_fm_p_type,& cp_fm_release,& cp_fm_type @@ -39,6 +40,11 @@ MODULE qs_tddfpt2_types ewald_environment_type USE ewald_pw_types, ONLY: ewald_pw_release,& ewald_pw_type + USE input_section_types, ONLY: section_get_ival,& + section_get_lval,& + section_get_rval,& + section_vals_get_subs_vals,& + section_vals_type USE kinds, ONLY: dp USE pw_env_types, ONLY: pw_env_get USE pw_pool_types, ONLY: pw_pool_create_pw,& @@ -55,12 +61,17 @@ MODULE qs_tddfpt2_types USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type USE qs_rho_methods, ONLY: qs_rho_rebuild USE qs_rho_types, ONLY: qs_rho_create,& + qs_rho_get,& qs_rho_release,& qs_rho_set,& qs_rho_type - USE qs_tddfpt2_stda_types, ONLY: stda_env_type USE qs_tddfpt2_subgroups, ONLY: tddfpt_dbcsr_create_by_dist,& tddfpt_subgroup_env_type + USE xc, ONLY: xc_prep_2nd_deriv + USE xc_derivative_set_types, ONLY: xc_dset_release + USE xc_derivatives, ONLY: xc_functionals_get_needs + USE xc_rho_set_types, ONLY: xc_rho_set_create,& + xc_rho_set_release #include "./base/base_uses.f90" IMPLICIT NONE @@ -74,7 +85,7 @@ MODULE qs_tddfpt2_types INTEGER, PARAMETER, PRIVATE :: nderivs = 3 INTEGER, PARAMETER, PRIVATE :: maxspins = 2 - PUBLIC :: tddfpt_ground_state_mos, tddfpt_work_matrices, kernel_env_type + PUBLIC :: tddfpt_ground_state_mos, tddfpt_work_matrices PUBLIC :: tddfpt_create_work_matrices, stda_create_work_matrices, tddfpt_release_work_matrices ! ************************************************************************************************** @@ -175,22 +186,15 @@ MODULE qs_tddfpt2_types TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: ctransformed !S^1/2 TYPE(dbcsr_type), POINTER :: shalf + !Eigenvalues/eigenvectors of the overlap matrix, used in sTDA forces (Lowdin derivatives) + REAL(KIND=dp), DIMENSION(:), POINTER :: S_eigenvalues + TYPE(cp_fm_type), POINTER :: S_eigenvectors + TYPE(cp_fm_type), POINTER :: slambda !Ewald environments TYPE(ewald_environment_type), POINTER :: ewald_env TYPE(ewald_pw_type), POINTER :: ewald_pw END TYPE tddfpt_work_matrices -! ************************************************************************************************** -!> \brief Type to hold environments for the different kernels -!> \par History -!> * 04.2019 created [JHU] -! ************************************************************************************************** - TYPE kernel_env_type - TYPE(full_kernel_env_type), POINTER :: full_kernel => Null() - TYPE(full_kernel_env_type), POINTER :: admm_kernel => Null() - TYPE(stda_env_type), POINTER :: stda_kernel => Null() - END TYPE kernel_env_type - CONTAINS ! ************************************************************************************************** @@ -200,17 +204,19 @@ CONTAINS !> \param nstates number of excited states to converge !> \param do_hfx flag that requested to allocate work matrices required for computation !> of exact-exchange terms +!> \param do_admm ... !> \param qs_env Quickstep environment !> \param sub_env parallel group environment !> \par History !> * 02.2017 created [Sergey Chulkov] ! ************************************************************************************************** - SUBROUTINE tddfpt_create_work_matrices(work_matrices, gs_mos, nstates, do_hfx, qs_env, sub_env) + SUBROUTINE tddfpt_create_work_matrices(work_matrices, gs_mos, nstates, do_hfx, do_admm, & + qs_env, sub_env) TYPE(tddfpt_work_matrices), INTENT(out) :: work_matrices TYPE(tddfpt_ground_state_mos), DIMENSION(:), & INTENT(in) :: gs_mos INTEGER, INTENT(in) :: nstates - LOGICAL, INTENT(in) :: do_hfx + LOGICAL, INTENT(in) :: do_hfx, do_admm TYPE(qs_environment_type), POINTER :: qs_env TYPE(tddfpt_subgroup_env_type), INTENT(in) :: sub_env @@ -219,7 +225,6 @@ CONTAINS INTEGER :: handle, igroup, ispin, istate, nao, & nao_aux, ngroups, nspins INTEGER, DIMENSION(maxspins) :: nmo_occ, nmo_virt - LOGICAL :: do_admm TYPE(cp_blacs_env_type), POINTER :: blacs_env TYPE(cp_fm_struct_p_type), DIMENSION(maxspins) :: fm_struct_evects TYPE(cp_fm_struct_type), POINTER :: fm_struct @@ -239,6 +244,9 @@ CONTAINS NULLIFY (work_matrices%ewald_pw) NULLIFY (work_matrices%gamma_exchange) NULLIFY (work_matrices%ctransformed) + NULLIFY (work_matrices%S_eigenvalues) + NULLIFY (work_matrices%S_eigenvectors) + NULLIFY (work_matrices%slambda) nspins = SIZE(gs_mos) CALL get_qs_env(qs_env, blacs_env=blacs_env, matrix_s=matrix_s) @@ -249,8 +257,9 @@ CONTAINS nmo_virt(ispin) = SIZE(gs_mos(ispin)%evals_virt) END DO - do_admm = do_hfx .AND. ASSOCIATED(sub_env%admm_A) IF (do_admm) THEN + CPASSERT(do_hfx) + CPASSERT(ASSOCIATED(sub_env%admm_A)) CALL get_qs_env(qs_env, matrix_s_aux_fit=matrix_s_aux_fit) CALL dbcsr_get_info(matrix_s_aux_fit(1)%matrix, nfullrows_total=nao_aux) END IF @@ -526,6 +535,13 @@ CONTAINS NULLIFY (work_matrices%shalf) CALL dbcsr_init_p(work_matrices%shalf) CALL dbcsr_create(work_matrices%shalf, template=matrix_s(1)%matrix) + ! forces + ALLOCATE (work_matrices%S_eigenvalues(nao)) + NULLIFY (fm_struct) + CALL cp_fm_struct_create(fm_struct, nrow_global=nao, ncol_global=nao, context=blacs_env) + CALL cp_fm_create(work_matrices%S_eigenvectors, fm_struct) + CALL cp_fm_create(work_matrices%slambda, fm_struct) + CALL cp_fm_struct_release(fm_struct) DO ispin = nspins, 1, -1 CALL cp_fm_struct_release(fm_struct_evects(ispin)%struct) @@ -642,6 +658,13 @@ CONTAINS NULLIFY (work_matrices%ctransformed) ENDIF CALL dbcsr_release_p(work_matrices%shalf) + ! + IF (ASSOCIATED(work_matrices%S_eigenvectors)) & + CALL cp_fm_release(work_matrices%S_eigenvectors) + IF (ASSOCIATED(work_matrices%slambda)) & + CALL cp_fm_release(work_matrices%slambda) + IF (ASSOCIATED(work_matrices%S_eigenvalues)) & + DEALLOCATE (work_matrices%S_eigenvalues) ! Ewald CALL ewald_env_release(work_matrices%ewald_env) CALL ewald_pw_release(work_matrices%ewald_pw) @@ -650,4 +673,125 @@ CONTAINS END SUBROUTINE tddfpt_release_work_matrices +! ************************************************************************************************** +!> \brief Create kernel environment. +!> \param kernel_env kernel environment (allocated and initialised on exit) +!> \param rho_struct_sub ground state charge density +!> \param xc_section input section which defines an exchange-correlation functional +!> \param is_rks_triplets indicates that the triplet excited states calculation using +!> spin-unpolarised molecular orbitals has been requested +!> \param sub_env parallel group environment +!> \par History +!> * 02.2017 created [Sergey Chulkov] +!> * 06.2018 the charge density needs to be provided via a dummy argument [Sergey Chulkov] +! ************************************************************************************************** + SUBROUTINE tddfpt_create_kernel_env(kernel_env, rho_struct_sub, xc_section, is_rks_triplets, sub_env) + TYPE(full_kernel_env_type), INTENT(out) :: kernel_env + TYPE(qs_rho_type), POINTER :: rho_struct_sub + TYPE(section_vals_type), POINTER :: xc_section + LOGICAL, INTENT(in) :: is_rks_triplets + TYPE(tddfpt_subgroup_env_type), INTENT(in) :: sub_env + + CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_create_kernel_env' + + INTEGER :: handle, ispin, nao, nspins + INTEGER, DIMENSION(maxspins) :: nmo_occ + LOGICAL :: lsd + TYPE(pw_p_type), DIMENSION(:), POINTER :: rho_ij_r, rho_ij_r2, tau_ij_r, tau_ij_r2 + TYPE(pw_pool_type), POINTER :: auxbas_pw_pool + TYPE(section_vals_type), POINTER :: xc_fun_section + + CALL timeset(routineN, handle) + + nspins = SIZE(sub_env%mos_occ) + lsd = (nspins > 1) .OR. is_rks_triplets + + DO ispin = 1, nspins + CALL cp_fm_get_info(sub_env%mos_occ(ispin)%matrix, nrow_global=nao, ncol_global=nmo_occ(ispin)) + END DO + + CALL pw_env_get(sub_env%pw_env, auxbas_pw_pool=auxbas_pw_pool) + + CALL qs_rho_get(rho_struct_sub, rho_r=rho_ij_r, tau_r=tau_ij_r) + + NULLIFY (kernel_env%xc_rho_set, kernel_env%xc_rho1_set, kernel_env%xc_deriv_set) + + IF (is_rks_triplets) THEN + ! we are about to compute triplet states using spin-restricted reference MOs; + ! we still need the beta-spin density component in order to compute the TDDFT kernel + ALLOCATE (rho_ij_r2(2)) + rho_ij_r2(1)%pw => rho_ij_r(1)%pw + rho_ij_r2(2)%pw => rho_ij_r(1)%pw + + IF (ASSOCIATED(tau_ij_r)) THEN + ALLOCATE (tau_ij_r2(2)) + tau_ij_r2(1)%pw => tau_ij_r(1)%pw + tau_ij_r2(2)%pw => tau_ij_r(1)%pw + END IF + + CALL xc_prep_2nd_deriv(kernel_env%xc_deriv_set, kernel_env%xc_rho_set, rho_ij_r2, & + auxbas_pw_pool, xc_section=xc_section, tau_r=tau_ij_r2) + + IF (ASSOCIATED(tau_ij_r)) DEALLOCATE (tau_ij_r2) + + DEALLOCATE (rho_ij_r2) + ELSE + CALL xc_prep_2nd_deriv(kernel_env%xc_deriv_set, kernel_env%xc_rho_set, rho_ij_r, & + auxbas_pw_pool, xc_section=xc_section, tau_r=tau_ij_r) + END IF + + ! ++ allocate structure for response density + kernel_env%xc_section => xc_section + kernel_env%deriv_method_id = section_get_ival(xc_section, "XC_GRID%XC_DERIV") + kernel_env%rho_smooth_id = section_get_ival(xc_section, "XC_GRID%XC_SMOOTH_RHO") + + xc_fun_section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL") + kernel_env%xc_rho1_cflags = xc_functionals_get_needs(functionals=xc_fun_section, lsd=lsd, & + add_basic_components=.TRUE.) + + CALL xc_rho_set_create(kernel_env%xc_rho1_set, auxbas_pw_pool%pw_grid%bounds_local, & + rho_cutoff=section_get_rval(xc_section, "DENSITY_CUTOFF"), & + drho_cutoff=section_get_rval(xc_section, "GRADIENT_CUTOFF"), & + tau_cutoff=section_get_rval(xc_section, "TAU_CUTOFF")) + + kernel_env%alpha = 1.0_dp + kernel_env%beta = 0.0_dp + + ! kernel_env%beta is taken into account in spin-restricted case only + IF (nspins == 1) THEN + IF (is_rks_triplets) THEN + ! K_{triplets} = K_{alpha,alpha} - K_{alpha,beta} + kernel_env%beta = -1.0_dp + ELSE + ! alpha beta + ! K_{singlets} = K_{alpha,alpha} + K_{alpha,beta} = 2 * K_{alpha,alpha} + 0 * K_{alpha,beta}, + ! due to the following relation : K_{alpha,alpha,singlets} == K_{alpha,beta,singlets} + kernel_env%alpha = 2.0_dp + END IF + END IF + + ! finite differences + kernel_env%deriv2_analytic = section_get_lval(xc_section, "2ND_DERIV_ANALYTICAL") + + CALL timestop(handle) + + END SUBROUTINE tddfpt_create_kernel_env + +! ************************************************************************************************** +!> \brief Release kernel environment. +!> \param kernel_env kernel environment (destroyed on exit) +!> \par History +!> * 02.2017 created [Sergey Chulkov] +! ************************************************************************************************** + SUBROUTINE tddfpt_release_kernel_env(kernel_env) + TYPE(full_kernel_env_type), POINTER :: kernel_env + + IF (ASSOCIATED(kernel_env)) THEN + CALL xc_rho_set_release(kernel_env%xc_rho1_set) + CALL xc_dset_release(kernel_env%xc_deriv_set) + CALL xc_rho_set_release(kernel_env%xc_rho_set) + END IF + + END SUBROUTINE tddfpt_release_kernel_env + END MODULE qs_tddfpt2_types diff --git a/src/qs_tddfpt2_utils.F b/src/qs_tddfpt2_utils.F index 748f1f76c0..6c03690d14 100644 --- a/src/qs_tddfpt2_utils.F +++ b/src/qs_tddfpt2_utils.F @@ -48,6 +48,7 @@ MODULE qs_tddfpt2_utils cholesky_dbcsr, cholesky_inverse, cholesky_off, cholesky_restore, oe_gllb, oe_lb, oe_none, & oe_saop, oe_shift USE input_section_types, ONLY: section_vals_create,& + section_vals_get,& section_vals_get_subs_vals,& section_vals_release,& section_vals_retain,& @@ -482,19 +483,18 @@ CONTAINS !> \param qs_env Quickstep environment !> \param gs_mos ... !> \param matrix_ks_oep ... -!> \param do_hfx ... ! ************************************************************************************************** - SUBROUTINE tddfpt_oecorr(qs_env, gs_mos, matrix_ks_oep, do_hfx) + SUBROUTINE tddfpt_oecorr(qs_env, gs_mos, matrix_ks_oep) TYPE(qs_environment_type), POINTER :: qs_env TYPE(tddfpt_ground_state_mos), DIMENSION(:), & POINTER :: gs_mos TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks_oep - LOGICAL, INTENT(IN) :: do_hfx CHARACTER(LEN=*), PARAMETER :: routineN = 'tddfpt_oecorr' INTEGER :: handle, iounit, ispin, nao, nmo_occ, & nspins + LOGICAL :: do_hfx TYPE(cp_blacs_env_type), POINTER :: blacs_env TYPE(cp_fm_struct_type), POINTER :: ao_mo_occ_fm_struct, & mo_occ_mo_occ_fm_struct @@ -502,7 +502,8 @@ CONTAINS TYPE(cp_logger_type), POINTER :: logger TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks TYPE(dft_control_type), POINTER :: dft_control - TYPE(section_vals_type), POINTER :: xc_fun_empty, xc_fun_original + TYPE(section_vals_type), POINTER :: hfx_section, xc_fun_empty, & + xc_fun_original TYPE(tddfpt2_control_type), POINTER :: tddfpt_control CALL timeset(routineN, handle) @@ -530,6 +531,8 @@ CONTAINS "Orbital energy correction potential is an experimental feature. "// & "Use it with extreme care") + hfx_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%HF") + CALL section_vals_get(hfx_section, explicit=do_hfx) IF (do_hfx) THEN CALL cp_abort(__LOCATION__, & "Implementation of orbital energy correction XC-potentials is "// & diff --git a/src/qs_vxc.F b/src/qs_vxc.F index 2a47cbe123..f632226ff8 100644 --- a/src/qs_vxc.F +++ b/src/qs_vxc.F @@ -115,7 +115,8 @@ CONTAINS CHARACTER(len=*), PARAMETER :: routineN = 'qs_vxc_create' - INTEGER :: handle, ispin, myfun, nelec_spin(2), vdw + INTEGER :: handle, ispin, mspin, myfun, & + nelec_spin(2), vdw LOGICAL :: compute_virial, do_adiabatic_rescaling, my_just_energy, rho_g_valid, & sic_scaling_b_zero, tau_r_valid, uf_grid, vdW_nl REAL(KIND=dp) :: exc_m, factor, & @@ -193,6 +194,10 @@ CONTAINS CPASSERT(ASSOCIATED(rho_struct)) IF (dft_control%nspins /= 1 .AND. dft_control%nspins /= 2) & CPABORT("nspins must be 1 or 2") + mspin = SIZE(rho_struct_r) + IF (dft_control%nspins == 2 .AND. mspin == 1) & + CPABORT("Spin count mismatch") + ! there are some options related to SIC here. ! Normal DFT computes E(rho_alpha,rho_beta) (or its variant E(2*rho_alpha) for non-LSD) ! SIC can E(rho_alpha,rho_beta)-b*(E(rho_alpha,rho_beta)-E(rho_beta,rho_beta)) @@ -228,15 +233,15 @@ CONTAINS CALL pw_env_get(pw_env, xc_pw_pool=xc_pw_pool, auxbas_pw_pool=auxbas_pw_pool) uf_grid = .NOT. pw_grid_compare(auxbas_pw_pool%pw_grid, xc_pw_pool%pw_grid) - ALLOCATE (rho_r(dft_control%nspins)) + ALLOCATE (rho_r(mspin)) IF (.NOT. uf_grid) THEN - DO ispin = 1, dft_control%nspins + DO ispin = 1, mspin rho_r(ispin)%pw => rho_struct_r(ispin)%pw END DO IF (tau_r_valid) THEN - ALLOCATE (tau(dft_control%nspins)) - DO ispin = 1, dft_control%nspins + ALLOCATE (tau(mspin)) + DO ispin = 1, mspin tau(ispin)%pw => tau_struct_r(ispin)%pw END DO END IF @@ -244,20 +249,20 @@ CONTAINS ! for gradient corrected functional the density in g space might ! be useful so if we have it, we pass it in IF (rho_g_valid) THEN - ALLOCATE (rho_g(dft_control%nspins)) - DO ispin = 1, dft_control%nspins + ALLOCATE (rho_g(mspin)) + DO ispin = 1, mspin rho_g(ispin)%pw => rho_struct_g(ispin)%pw END DO END IF ELSE CPASSERT(rho_g_valid) - ALLOCATE (rho_g(dft_control%nspins)) - DO ispin = 1, dft_control%nspins + ALLOCATE (rho_g(mspin)) + DO ispin = 1, mspin CALL pw_pool_create_pw(xc_pw_pool, rho_g(ispin)%pw, & in_space=RECIPROCALSPACE, use_data=COMPLEXDATA1D) CALL pw_transfer(rho_struct_g(ispin)%pw, rho_g(ispin)%pw) END DO - DO ispin = 1, dft_control%nspins + DO ispin = 1, mspin CALL pw_pool_create_pw(xc_pw_pool, rho_r(ispin)%pw, & in_space=REALSPACE, use_data=REALDATA3D) CALL pw_transfer(rho_g(ispin)%pw, rho_r(ispin)%pw) @@ -267,10 +272,9 @@ CONTAINS CPABORT("tau with finer grids") ! ALLOCATE(tau(dft_control%nspins),stat=stat) ! CPPostcondition(stat==0,cp_failure_level,routineP,failure) -! DO ispin=1,dft_control%nspins +! DO ispin=1,mspin ! CALL pw_pool_create_pw(xc_pw_pool,tau(ispin)%pw,& ! in_space=REALSPACE, use_data=REALDATA3D) -! ! CALL pw_pool_create_pw(xc_pw_pool,tmp_g,& ! in_space=RECIPROCALSPACE,use_data=COMPLEXDATA1D) ! CALL pw_pool_create_pw(auxbas_pw_pool,tmp_g2,& @@ -287,7 +291,7 @@ CONTAINS ! add the nlcc densities IF (ASSOCIATED(rho_nlcc)) THEN factor = 1.0_dp - DO ispin = 1, dft_control%nspins + DO ispin = 1, mspin CALL pw_axpy(rho_nlcc%pw, rho_r(ispin)%pw, factor) CALL pw_axpy(rho_nlcc_g%pw, rho_g(ispin)%pw, factor) ENDDO @@ -314,7 +318,7 @@ CONTAINS ! remove the nlcc densities (keep stuff in original state) IF (ASSOCIATED(rho_nlcc)) THEN factor = -1.0_dp - DO ispin = 1, dft_control%nspins + DO ispin = 1, mspin CALL pw_axpy(rho_nlcc%pw, rho_r(ispin)%pw, factor) CALL pw_axpy(rho_nlcc_g%pw, rho_g(ispin)%pw, factor) ENDDO @@ -367,15 +371,15 @@ CONTAINS ! we have pw data for the xc, qs_ks requests coeff structure, here we transfer ! pw -> coeff IF (ASSOCIATED(my_vxc_rho)) THEN - ALLOCATE (vxc_rho(dft_control%nspins)) - DO ispin = 1, dft_control%nspins + ALLOCATE (vxc_rho(mspin)) + DO ispin = 1, mspin vxc_rho(ispin)%pw => my_vxc_rho(ispin)%pw END DO DEALLOCATE (my_vxc_rho) END IF IF (ASSOCIATED(my_vxc_tau)) THEN - ALLOCATE (vxc_tau(dft_control%nspins)) - DO ispin = 1, dft_control%nspins + ALLOCATE (vxc_tau(mspin)) + DO ispin = 1, mspin vxc_tau(ispin)%pw => my_vxc_tau(ispin)%pw END DO DEALLOCATE (my_vxc_tau) @@ -566,7 +570,6 @@ CONTAINS DO ispin = 1, SIZE(vxc_rho) CALL pw_pool_create_pw(auxbas_pw_pool, tmp_pw, & in_space=REALSPACE, use_data=REALDATA3D) - CALL pw_pool_create_pw(xc_pw_pool, tmp_g, & in_space=RECIPROCALSPACE, use_data=COMPLEXDATA1D) CALL pw_pool_create_pw(auxbas_pw_pool, tmp_g2, & @@ -576,9 +579,6 @@ CONTAINS CALL pw_transfer(tmp_g2, tmp_pw) CALL pw_pool_give_back_pw(auxbas_pw_pool, tmp_g2) CALL pw_pool_give_back_pw(xc_pw_pool, tmp_g) - !FM CALL pw_zero(tmp_pw) - !FM CALL pw_restrict_s3(vxc_rho(ispin)%pw,tmp_pw,& - !FM auxbas_pw_pool,param_section=interp_section) CALL pw_pool_give_back_pw(xc_pw_pool, vxc_rho(ispin)%pw) vxc_rho(ispin)%pw => tmp_pw NULLIFY (tmp_pw) @@ -588,7 +588,6 @@ CONTAINS DO ispin = 1, SIZE(vxc_tau) CALL pw_pool_create_pw(auxbas_pw_pool, tmp_pw, & in_space=REALSPACE, use_data=REALDATA3D) - CALL pw_pool_create_pw(xc_pw_pool, tmp_g, & in_space=RECIPROCALSPACE, use_data=COMPLEXDATA1D) CALL pw_pool_create_pw(auxbas_pw_pool, tmp_g2, & @@ -598,9 +597,6 @@ CONTAINS CALL pw_transfer(tmp_g2, tmp_pw) CALL pw_pool_give_back_pw(auxbas_pw_pool, tmp_g2) CALL pw_pool_give_back_pw(xc_pw_pool, tmp_g) - !FM CALL pw_zero(tmp_pw) - !FM CALL pw_restrict_s3(vxc_rho(ispin)%pw,tmp_pw,& - !FM auxbas_pw_pool,param_section=interp_section) CALL pw_pool_give_back_pw(xc_pw_pool, vxc_tau(ispin)%pw) vxc_tau(ispin)%pw => tmp_pw NULLIFY (tmp_pw) diff --git a/src/qs_wf_history_methods.F b/src/qs_wf_history_methods.F index ecc4664065..de23164cac 100644 --- a/src/qs_wf_history_methods.F +++ b/src/qs_wf_history_methods.F @@ -69,14 +69,14 @@ MODULE qs_wf_history_methods REALSPACE,& RECIPROCALSPACE,& pw_p_type + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type,& set_qs_env USE qs_ks_types, ONLY: qs_ks_did_change USE qs_matrix_pools, ONLY: mpools_get,& qs_matrix_pools_type - USE qs_mo_methods, ONLY: calculate_density_matrix,& - make_basis_cholesky,& + USE qs_mo_methods, ONLY: make_basis_cholesky,& make_basis_lowdin,& make_basis_simple,& make_basis_sm diff --git a/src/response_solver.F b/src/response_solver.F index 3156ff102b..f63d11fbfc 100644 --- a/src/response_solver.F +++ b/src/response_solver.F @@ -16,7 +16,8 @@ ! ************************************************************************************************** MODULE response_solver USE admm_types, ONLY: admm_type - USE atomic_kind_types, ONLY: atomic_kind_type + USE atomic_kind_types, ONLY: atomic_kind_type,& + get_atomic_kind USE cell_types, ONLY: cell_type USE core_ppl, ONLY: build_core_ppl USE core_ppnl, ONLY: build_core_ppnl @@ -25,13 +26,10 @@ MODULE response_solver USE cp_dbcsr_cp2k_link, ONLY: cp_dbcsr_alloc_block_from_nbl USE cp_dbcsr_operations, ONLY: copy_dbcsr_to_fm,& copy_fm_to_dbcsr,& - cp_dbcsr_plus_fm_fm_t,& cp_dbcsr_sm_fm_multiply,& dbcsr_allocate_matrix_set,& dbcsr_deallocate_matrix_set - USE cp_fm_struct, ONLY: cp_fm_struct_create,& - cp_fm_struct_release,& - cp_fm_struct_type + USE cp_fm_struct, ONLY: cp_fm_struct_type USE cp_fm_types, ONLY: cp_fm_create,& cp_fm_get_info,& cp_fm_init_random,& @@ -52,6 +50,7 @@ MODULE response_solver USE ec_methods, ONLY: create_kernel,& ec_mos_init USE ec_orth_solver, ONLY: ec_response_ao + USE exstates_types, ONLY: excited_energy_type USE hfx_derivatives, ONLY: derivatives_four_center USE hfx_energy_potential, ONLY: integrate_four_center USE hfx_types, ONLY: hfx_type @@ -60,7 +59,8 @@ MODULE response_solver kg_tnadd_embed_ri, ls_s_sqrt_ns, ls_s_sqrt_proot, ot_precond_full_all, & ot_precond_full_kinetic, ot_precond_full_single, ot_precond_full_single_inverse, & ot_precond_none, ot_precond_s_inverse, precond_mlp - USE input_section_types, ONLY: section_vals_get,& + USE input_section_types, ONLY: section_get_lval,& + section_vals_get,& section_vals_get_subs_vals,& section_vals_type,& section_vals_val_get @@ -71,6 +71,7 @@ MODULE response_solver USE machine, ONLY: m_flush USE mathlib, ONLY: det_3x3 USE message_passing, ONLY: mp_sum + USE mulliken, ONLY: ao_charges USE particle_types, ONLY: particle_type USE physcon, ONLY: pascal USE pw_env_types, ONLY: pw_env_get,& @@ -97,15 +98,22 @@ MODULE response_solver USE qs_collocate_density, ONLY: calculate_rho_elec USE qs_core_energies, ONLY: calculate_ecore_overlap,& calculate_ecore_self + USE qs_density_matrices, ONLY: calculate_whz_matrix,& + calculate_wz_matrix + USE qs_energy_types, ONLY: qs_energy_type USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type,& set_qs_env USE qs_force_types, ONLY: add_qs_force,& qs_force_type,& total_qs_force + USE qs_fxc, ONLY: qs_fxc_analytic,& + qs_fxc_fdiff USE qs_integrate_potential, ONLY: integrate_v_core_rspace,& integrate_v_rspace - USE qs_kind_types, ONLY: qs_kind_type + USE qs_kind_types, ONLY: get_qs_kind,& + get_qs_kind_set,& + qs_kind_type USE qs_kinetic, ONLY: build_kinetic_matrix USE qs_ks_methods, ONLY: calc_rho_tot_gspace USE qs_ks_types, ONLY: qs_ks_env_type @@ -117,8 +125,7 @@ MODULE response_solver USE qs_mo_methods, ONLY: make_basis_sm USE qs_mo_types, ONLY: deallocate_mo_set,& get_mo_set,& - mo_set_p_type,& - mo_set_type + mo_set_p_type USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type USE qs_overlap, ONLY: build_overlap_force,& build_overlap_matrix @@ -126,18 +133,19 @@ MODULE response_solver p_env_psi0_changed USE qs_p_env_types, ONLY: p_env_release,& qs_p_env_type - USE qs_rho_types, ONLY: qs_rho_get,& + USE qs_rho_types, ONLY: qs_rho_create,& + qs_rho_get,& + qs_rho_set,& qs_rho_type USE qs_vxc, ONLY: qs_vxc_create USE task_list_types, ONLY: task_list_type USE virial_methods, ONLY: one_third_sum_diag USE virial_types, ONLY: virial_type - USE xc, ONLY: xc_calc_2nd_deriv,& - xc_prep_2nd_deriv - USE xc_derivative_set_types, ONLY: xc_derivative_set_type,& - xc_dset_release - USE xc_rho_set_types, ONLY: xc_rho_set_release,& - xc_rho_set_type + USE xtb_ehess, ONLY: xtb_coulomb_hessian + USE xtb_ehess_force, ONLY: calc_xtb_ehess_force + USE xtb_matrices, ONLY: xtb_hab_force + USE xtb_types, ONLY: get_xtb_atom_param,& + xtb_atom_type #include "./base/base_uses.f90" IMPLICIT NONE @@ -149,10 +157,12 @@ MODULE response_solver CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'response_solver' LOGICAL, PARAMETER :: debug_stress = .FALSE. - LOGICAL, PARAMETER :: debug_forces = .FALSE. + LOGICAL, PARAMETER :: debug_forces = .TRUE. - PUBLIC :: calculate_whz_matrix, ks_ref_potential, response_calculation, & - response_equation, response_force + PUBLIC :: response_calculation, response_equation, response_force, response_force_xtb, & + ks_ref_potential, admm_projection_derivative + +! ************************************************************************************************** CONTAINS @@ -188,6 +198,7 @@ CONTAINS TYPE(mo_set_p_type), DIMENSION(:), POINTER :: mos TYPE(neighbor_list_set_p_type), DIMENSION(:), & POINTER :: sab_orb + TYPE(qs_energy_type), POINTER :: energy TYPE(qs_p_env_type), POINTER :: p_env TYPE(qs_rho_type), POINTER :: rho TYPE(section_vals_type), POINTER :: input, solver_section @@ -300,6 +311,8 @@ CONTAINS linres_control=linres_control) CALL set_qs_env(qs_env, linres_control=linres_control) CALL p_env_psi0_changed(ec_env%p_env, qs_env) + CALL get_qs_env(qs_env, energy=energy) + energy%total = ec_env%etotal ! p_env => ec_env%p_env ! @@ -348,7 +361,7 @@ CONTAINS alpha=focc, beta=0.0_dp) END DO - CALL response_equation(qs_env, p_env, cpmos, unit_nr) + CALL response_equation_new(qs_env, p_env, cpmos, unit_nr) ! Get the response density matrix, ! and energy-weighted response density matrix @@ -357,8 +370,13 @@ CONTAINS CALL dbcsr_copy(ec_env%matrix_wz(ispin)%matrix, p_env%w1(ispin)%matrix) END DO IF (dft_control%do_admm) THEN - CALL get_qs_env(qs_env, admm_env=admm_env) - CALL dbcsr_copy(ec_env%z_admm(ispin)%matrix, p_env%p1_admm(ispin)%matrix) + CALL dbcsr_allocate_matrix_set(ec_env%z_admm, nspins) + DO ispin = 1, nspins + ALLOCATE (ec_env%z_admm(ispin)%matrix) + CALL dbcsr_create(matrix=ec_env%z_admm(ispin)%matrix, template=matrix_s_aux(1)%matrix) + CALL get_qs_env(qs_env, admm_env=admm_env) + CALL dbcsr_copy(ec_env%z_admm(ispin)%matrix, p_env%p1_admm(ispin)%matrix) + END DO END IF DO ispin = 1, nspins @@ -380,6 +398,11 @@ CONTAINS END IF CASE (ec_ls_solver) + IF (dft_control%do_admm) THEN + CALL cp_warn(__LOCATION__, "ADMM not possible with AO based response solver. "// & + "Use the MO solver: RESPONSE_SOLVER/METOD MO_SOLVER") + CPABORT("response_calculation") + END IF ! AO ortho solver CALL ec_response_ao(qs_env, & ec_env%matrix_hz, & @@ -497,13 +520,13 @@ CONTAINS !> \param cpmos ... !> \param iounit ... ! ************************************************************************************************** - SUBROUTINE response_equation(qs_env, p_env, cpmos, iounit) + SUBROUTINE response_equation_new(qs_env, p_env, cpmos, iounit) TYPE(qs_environment_type), POINTER :: qs_env TYPE(qs_p_env_type), POINTER :: p_env TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: cpmos INTEGER, INTENT(IN) :: iounit - CHARACTER(LEN=*), PARAMETER :: routineN = 'response_equation', & + CHARACTER(LEN=*), PARAMETER :: routineN = 'response_equation_new', & routineP = moduleN//':'//routineN INTEGER :: handle, ispin, nao, nao_aux, nspins @@ -574,7 +597,6 @@ CONTAINS CALL calculate_wz_matrix(mos(ispin)%mo_set, psi1(ispin)%matrix, matrix_ks(ispin)%matrix, & p_env%w1(ispin)%matrix) END DO - DO ispin = 1, nspins CALL cp_fm_release(cpmos(ispin)%matrix) CALL cp_fm_release(psi1(ispin)%matrix) @@ -583,6 +605,169 @@ CONTAINS CALL timestop(handle) + END SUBROUTINE response_equation_new + +! ************************************************************************************************** +!> \brief Initializes vectors for MO-coefficient based linear response solver +!> and calculates response density, and energy-weighted response density matrix +!> +!> \param qs_env ... +!> \param p_env ... +!> \param cpmos RHS of equation as Ax + b = 0 (sign of b) +!> \param iounit ... +!> \param p1_mat ... +!> \param lr_section ... +! ************************************************************************************************** + SUBROUTINE response_equation(qs_env, p_env, cpmos, iounit, p1_mat, lr_section) + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(qs_p_env_type), POINTER :: p_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: cpmos + INTEGER, INTENT(IN) :: iounit + TYPE(cp_fm_p_type), DIMENSION(:), OPTIONAL, & + POINTER :: p1_mat + TYPE(section_vals_type), OPTIONAL, POINTER :: lr_section + + CHARACTER(LEN=*), PARAMETER :: routineN = 'response_equation', & + routineP = moduleN//':'//routineN + + INTEGER :: handle, ispin, nao, nao_aux, nspins + LOGICAL :: should_stop + TYPE(admm_type), POINTER :: admm_env + TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: psi0, psi1 + TYPE(cp_fm_struct_type), POINTER :: fm_struct + TYPE(cp_fm_type), POINTER :: mo_coeff + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks, matrix_s, matrix_s_aux + TYPE(dft_control_type), POINTER :: dft_control + TYPE(linres_control_type), POINTER :: linres_control + TYPE(mo_set_p_type), DIMENSION(:), POINTER :: mos + TYPE(neighbor_list_set_p_type), DIMENSION(:), & + POINTER :: sab_orb + + CALL timeset(routineN, handle) + + ! initialized linres_control + NULLIFY (linres_control) + CALL linres_control_create(linres_control) + linres_control%do_kernel = .TRUE. + linres_control%lr_triplet = .FALSE. + IF (PRESENT(lr_section)) THEN + CALL section_vals_val_get(lr_section, "RESTART", l_val=linres_control%linres_restart) + CALL section_vals_val_get(lr_section, "MAX_ITER", i_val=linres_control%max_iter) + CALL section_vals_val_get(lr_section, "EPS", r_val=linres_control%eps) + CALL section_vals_val_get(lr_section, "EPS_FILTER", r_val=linres_control%eps_filter) + CALL section_vals_val_get(lr_section, "RESTART_EVERY", i_val=linres_control%restart_every) + CALL section_vals_val_get(lr_section, "PRECONDITIONER", i_val=linres_control%preconditioner_type) + CALL section_vals_val_get(lr_section, "ENERGY_GAP", r_val=linres_control%energy_gap) + ELSE + linres_control%linres_restart = .FALSE. + linres_control%max_iter = 100 + linres_control%eps = 1.0e-10_dp + linres_control%eps_filter = 1.0e-15_dp + linres_control%restart_every = 50 + linres_control%preconditioner_type = ot_precond_full_single_inverse + linres_control%energy_gap = 0.02_dp + END IF + + ! initialized p_env + CALL p_env_release(p_env) + CALL p_env_create(p_env, qs_env, orthogonal_orbitals=.TRUE., & + linres_control=linres_control) + CALL set_qs_env(qs_env, linres_control=linres_control) + CALL p_env_psi0_changed(p_env, qs_env) + p_env%os_valid = .FALSE. + p_env%new_preconditioner = .TRUE. + + CALL get_qs_env(qs_env, dft_control=dft_control, mos=mos) + ! + nspins = dft_control%nspins + + ! Initialize vectors: + ! psi0 : The ground-state MO-coefficients + ! psi1 : The "perturbed" linear response orbitals + ALLOCATE (psi0(nspins), psi1(nspins)) + DO ispin = 1, nspins + CALL get_mo_set(mo_set=mos(ispin)%mo_set, mo_coeff=mo_coeff) + psi0(ispin)%matrix => mo_coeff + CALL cp_fm_get_info(mo_coeff, matrix_struct=fm_struct) + NULLIFY (psi1(ispin)%matrix) + CALL cp_fm_create(psi1(ispin)%matrix, fm_struct) + CALL cp_fm_set_all(psi1(ispin)%matrix, 0.0_dp) + END DO + + should_stop = .FALSE. + ! The response solver + CALL get_qs_env(qs_env, matrix_s=matrix_s, sab_orb=sab_orb) + CALL dbcsr_allocate_matrix_set(p_env%p1, nspins) + CALL dbcsr_allocate_matrix_set(p_env%w1, nspins) + DO ispin = 1, nspins + ALLOCATE (p_env%p1(ispin)%matrix, p_env%w1(ispin)%matrix) + CALL dbcsr_create(matrix=p_env%p1(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_create(matrix=p_env%w1(ispin)%matrix, template=matrix_s(1)%matrix) + CALL cp_dbcsr_alloc_block_from_nbl(p_env%p1(ispin)%matrix, sab_orb) + CALL cp_dbcsr_alloc_block_from_nbl(p_env%w1(ispin)%matrix, sab_orb) + END DO + IF (dft_control%do_admm) THEN + CALL get_qs_env(qs_env, matrix_s_aux_fit=matrix_s_aux) + CALL dbcsr_allocate_matrix_set(p_env%p1_admm, nspins) + DO ispin = 1, nspins + ALLOCATE (p_env%p1_admm(ispin)%matrix) + CALL dbcsr_create(p_env%p1_admm(ispin)%matrix, & + template=matrix_s_aux(1)%matrix) + CALL dbcsr_copy(p_env%p1_admm(ispin)%matrix, matrix_s_aux(1)%matrix) + CALL dbcsr_set(p_env%p1_admm(ispin)%matrix, 0.0_dp) + END DO + END IF + + CALL linres_solver(p_env, qs_env, psi1, cpmos, psi0, iounit, should_stop) + + ! Building the response density matrix + DO ispin = 1, nspins + CALL dbcsr_copy(p_env%p1(ispin)%matrix, matrix_s(1)%matrix) + END DO + CALL build_dm_response(psi0, psi1, p_env%p1) + DO ispin = 1, nspins + CALL dbcsr_scale(p_env%p1(ispin)%matrix, 0.5_dp) + END DO + IF (dft_control%do_admm) THEN + CALL get_qs_env(qs_env, admm_env=admm_env) + CPASSERT(ASSOCIATED(admm_env%work_orb_orb)) + CPASSERT(ASSOCIATED(admm_env%work_aux_orb)) + CPASSERT(ASSOCIATED(admm_env%work_aux_aux)) + nao = admm_env%nao_orb + nao_aux = admm_env%nao_aux_fit + DO ispin = 1, nspins + CALL copy_dbcsr_to_fm(p_env%p1(ispin)%matrix, admm_env%work_orb_orb) + CALL cp_gemm('N', 'N', nao_aux, nao, nao, & + 1.0_dp, admm_env%A, admm_env%work_orb_orb, 0.0_dp, & + admm_env%work_aux_orb) + CALL cp_gemm('N', 'T', nao_aux, nao_aux, nao, & + 1.0_dp, admm_env%work_aux_orb, admm_env%A, 0.0_dp, & + admm_env%work_aux_aux) + CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, p_env%p1_admm(ispin)%matrix, & + keep_sparsity=.TRUE.) + END DO + END IF + + ! Calculate Wz = 0.5*(psi1*eps*psi0^T + psi0*eps*psi1^T) + CALL get_qs_env(qs_env, matrix_ks=matrix_ks) + DO ispin = 1, nspins + CALL calculate_wz_matrix(mos(ispin)%mo_set, psi1(ispin)%matrix, matrix_ks(ispin)%matrix, & + p_env%w1(ispin)%matrix) + END DO + IF (PRESENT(p1_mat)) THEN + CPASSERT(.NOT. ASSOCIATED(p1_mat)) + p1_mat => psi1 + ELSE + DO ispin = 1, nspins + CALL cp_fm_release(psi1(ispin)%matrix) + ENDDO + DEALLOCATE (psi1) + END IF + DEALLOCATE (psi0) + CALL linres_control_release(linres_control) + + CALL timestop(handle) + END SUBROUTINE response_equation ! ************************************************************************************************** @@ -594,19 +779,24 @@ CONTAINS !> \param vadmm_rspace ... !> \param matrix_hz Right-hand-side of linear response equation !> \param matrix_pz Linear response density matrix +!> \param matrix_pz_admm Linear response density matrix in ADMM basis !> \param matrix_wz Energy-weighted linear response density !> \param zehartree Hartree volume response contribution to stress tensor !> \param zexc XC volume response contribution to stress tensor !> \param p_env ... +!> \param ex_env ... ! ************************************************************************************************** SUBROUTINE response_force(qs_env, vh_rspace, vxc_rspace, vtau_rspace, vadmm_rspace, & - matrix_hz, matrix_pz, matrix_wz, zehartree, zexc, p_env) + matrix_hz, matrix_pz, matrix_pz_admm, matrix_wz, & + zehartree, zexc, p_env, ex_env) TYPE(qs_environment_type), POINTER :: qs_env TYPE(pw_p_type), POINTER :: vh_rspace TYPE(pw_p_type), DIMENSION(:), POINTER :: vxc_rspace, vtau_rspace, vadmm_rspace - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_hz, matrix_pz, matrix_wz + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_hz, matrix_pz, matrix_pz_admm, & + matrix_wz REAL(KIND=dp), OPTIONAL :: zehartree, zexc TYPE(qs_p_env_type), OPTIONAL, POINTER :: p_env + TYPE(excited_energy_type), OPTIONAL, POINTER :: ex_env CHARACTER(LEN=*), PARAMETER :: routineN = 'response_force' @@ -614,9 +804,8 @@ CONTAINS nao, nao_aux, natom, nder, nimages, & nspins INTEGER, DIMENSION(:, :, :), POINTER :: cell_to_index - LOGICAL :: distribute_fock_matrix, do_hfx, & - hfx_treat_lsd_in_core, resp_only, & - s_mstruct_changed, use_virial + LOGICAL :: deriv2_analytic, distribute_fock_matrix, do_ex, do_hfx, hfx_treat_lsd_in_core, & + resp_only, s_mstruct_changed, use_virial REAL(KIND=dp) :: eh1, ehartree, ekin_mol, eps_filter, & eps_ppnl, exc, fconv, focc, & total_rhoz, total_rhoz_aux @@ -629,8 +818,10 @@ CONTAINS TYPE(cp_logger_type), POINTER :: logger TYPE(cp_para_env_type), POINTER :: para_env TYPE(dbcsr_distribution_type), POINTER :: dbcsr_dist - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: scrm - TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_h, matrix_p, mhz, mpz + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pd, matrix_pza, matrix_s, mpa, & + scrm + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_h, matrix_p, mhd, mhx, mhy, mhz, & + mpd, mpz TYPE(dbcsr_type), POINTER :: dbwork TYPE(dft_control_type), POINTER :: dft_control TYPE(hfx_type), DIMENSION(:, :), POINTER :: x_data @@ -651,30 +842,39 @@ CONTAINS TYPE(qs_force_type), DIMENSION(:), POINTER :: force TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set TYPE(qs_ks_env_type), POINTER :: ks_env - TYPE(qs_rho_type), POINTER :: rho, rho_aux_fit + TYPE(qs_rho_type), POINTER :: rho, rho_aux_fit, rhoz_aux TYPE(section_vals_type), POINTER :: hfx_section, xc_section TYPE(task_list_type), POINTER :: task_list_aux_fit TYPE(virial_type), POINTER :: virial - TYPE(xc_derivative_set_type), POINTER :: deriv_set - TYPE(xc_rho_set_type), POINTER :: rho_set CALL timeset(routineN, handle) logger => cp_get_default_logger() - iounit = cp_logger_get_default_unit_nr(logger) + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF - CPASSERT(ASSOCIATED(qs_env)) + do_ex = .FALSE. + IF (PRESENT(ex_env)) do_ex = .TRUE. + IF (do_ex) THEN + CPASSERT(PRESENT(p_env)) + END IF - NULLIFY (cell_to_index, ks_env, sab_orb, sac_ppl, sap_ppnl, virial) + NULLIFY (ks_env, sab_orb, sac_ppl, sap_ppnl, virial) CALL get_qs_env(qs_env=qs_env, & cell=cell, & force=force, & ks_env=ks_env, & + dft_control=dft_control, & para_env=para_env, & sab_orb=sab_orb, & sac_ppl=sac_ppl, & sap_ppnl=sap_ppnl, & virial=virial) + nspins = dft_control%nspins IF (debug_forces) THEN CALL get_qs_env(qs_env, natom=natom, atomic_kind_set=atomic_kind_set) @@ -690,12 +890,27 @@ CONTAINS sttot = virial%pv_virial END IF - nspins = SIZE(matrix_pz, 1) ! *** If LSD, then combine alpha density and beta density to ! *** total density: alpha <- alpha + beta and + NULLIFY (mpa) + IF (do_ex) THEN + CALL dbcsr_allocate_matrix_set(mpa, nspins) + DO ispin = 1, nspins + ALLOCATE (mpa(ispin)%matrix) + CALL dbcsr_create(mpa(ispin)%matrix, template=p_env%p1(ispin)%matrix) + CALL dbcsr_copy(mpa(ispin)%matrix, p_env%p1(ispin)%matrix) + CALL dbcsr_add(mpa(ispin)%matrix, ex_env%matrix_pe(ispin)%matrix, 1.0_dp, 1.0_dp) + CALL dbcsr_set(matrix_hz(ispin)%matrix, 0.0_dp) + END DO + ELSE + mpa => matrix_pz + END IF + + ! + ! START OF Tr(P+Z)Hcore + ! IF (nspins == 2) THEN - CALL dbcsr_add(matrix_pz(1)%matrix, matrix_pz(2)%matrix, & - alpha_scalar=1.0_dp, beta_scalar=1.0_dp) + CALL dbcsr_add(mpa(1)%matrix, mpa(2)%matrix, 1.0_dp, 1.0_dp) END IF nimages = 1 @@ -707,7 +922,7 @@ CONTAINS matrix_name="KINETIC ENERGY MATRIX", & basis_type="ORB", & sab_nl=sab_orb, calculate_forces=.TRUE., & - matrix_p=matrix_pz(1)%matrix) + matrix_p=mpa(1)%matrix) IF (debug_forces) THEN fodeb(1:3) = force(1)%kinetic(1:3, 1) - fodeb(1:3) CALL mp_sum(fodeb, para_env%group) @@ -721,16 +936,28 @@ CONTAINS END IF IF (nspins == 2) THEN - CALL dbcsr_add(matrix_pz(1)%matrix, matrix_pz(2)%matrix, & - alpha_scalar=1.0_dp, beta_scalar=-1.0_dp) + CALL dbcsr_add(mpa(1)%matrix, mpa(2)%matrix, 1.0_dp, -1.0_dp) END IF + CALL dbcsr_deallocate_matrix_set(scrm) + + ! Initialize a matrix scrm, later used for scratch purposes + CALL get_qs_env(qs_env=qs_env, matrix_s=matrix_s) + CALL dbcsr_allocate_matrix_set(scrm, nspins) + DO ispin = 1, nspins + ALLOCATE (scrm(ispin)%matrix) + CALL dbcsr_create(scrm(ispin)%matrix, template=matrix_s(1)%matrix) + CALL dbcsr_copy(scrm(ispin)%matrix, matrix_s(1)%matrix) + CALL dbcsr_set(scrm(ispin)%matrix, 0.0_dp) + END DO CALL get_qs_env(qs_env, qs_kind_set=qs_kind_set, particle_set=particle_set, & - atomic_kind_set=atomic_kind_set, dft_control=dft_control, force=force) + atomic_kind_set=atomic_kind_set) - ALLOCATE (matrix_p(nspins, 1), matrix_h(1, 1)) + NULLIFY (cell_to_index) + ALLOCATE (matrix_p(nspins, 1), matrix_h(nspins, 1)) DO ispin = 1, nspins - matrix_p(ispin, 1)%matrix => matrix_pz(ispin)%matrix + matrix_p(ispin, 1)%matrix => mpa(ispin)%matrix + matrix_h(ispin, 1)%matrix => scrm(ispin)%matrix END DO matrix_h(1, 1)%matrix => scrm(1)%matrix @@ -842,8 +1069,12 @@ CONTAINS ! save current total viral, does not contain volume terms yet sttot2 = virial%pv_virial END IF - - ! Vhxc + ! + ! END OF Tr(P+Z)Hcore + ! + ! + ! Vhxc (KS potentials calculated externally) + ! CALL get_qs_env(qs_env, pw_env=pw_env) CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, & poisson_env=poisson_env) @@ -862,11 +1093,11 @@ CONTAINS CALL pw_transfer(vh_rspace%pw, vhxc_rspace%pw) CALL pw_axpy(vxc_rspace(ispin)%pw, vhxc_rspace%pw) CALL integrate_v_rspace(v_rspace=vhxc_rspace, & - hmat=scrm(ispin), pmat=matrix_pz(ispin), & + hmat=scrm(ispin), pmat=mpa(ispin), & qs_env=qs_env, calculate_forces=.TRUE.) IF (ASSOCIATED(vtau_rspace)) THEN CALL integrate_v_rspace(v_rspace=vtau_rspace(ispin), & - hmat=scrm(ispin), pmat=matrix_pz(ispin), & + hmat=scrm(ispin), pmat=mpa(ispin), & qs_env=qs_env, calculate_forces=.TRUE., compute_tau=.TRUE.) END IF END DO @@ -905,8 +1136,7 @@ CONTAINS ekin_mol=ekin_mol, & calc_force=.TRUE., & do_kernel=.FALSE., & - pmat_ext=matrix_pz) - + pmat_ext=mpa) IF (debug_forces) THEN fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) CALL mp_sum(fodeb, para_env%group) @@ -941,6 +1171,9 @@ CONTAINS CALL dbcsr_deallocate_matrix_set(scrm) + ! + ! Hartree potential of response density + ! ALLOCATE (rhoz_r(nspins), rhoz_g(nspins)) DO ispin = 1, nspins NULLIFY (rhoz_r(ispin)%pw, rhoz_g(ispin)%pw) @@ -958,7 +1191,7 @@ CONTAINS CALL pw_zero(rhoz_tot_gspace%pw) DO ispin = 1, nspins - CALL calculate_rho_elec(ks_env=ks_env, matrix_p=matrix_pz(ispin)%matrix, & + CALL calculate_rho_elec(ks_env=ks_env, matrix_p=mpa(ispin)%matrix, & rho=rhoz_r(ispin), rho_gspace=rhoz_g(ispin), & total_rho=total_rhoz) CALL pw_axpy(rhoz_g(ispin)%pw, rhoz_tot_gspace%pw) @@ -1072,8 +1305,9 @@ CONTAINS IF (use_virial) THEN virial%pv_xc = 0.0_dp END IF - + ! NULLIFY (v_xc) + CALL create_kernel(qs_env, & vxc=v_xc, & rho=rho, & @@ -1208,27 +1442,42 @@ CONTAINS IF (dft_control%do_admm) THEN IF (dft_control%admm_control%aux_exch_func == do_admm_aux_exch_func_none) THEN ! nothing to do + NULLIFY (mpz, mhz, mhx, mhy) ELSE ! add ADMM xc_section_aux terms: Pz*Vxc + P0*K0[rhoz] CALL get_qs_env(qs_env, admm_env=admm_env, rho_aux_fit=rho_aux_fit, & matrix_s_aux_fit=scrm, task_list_aux_fit=task_list_aux_fit) ! - NULLIFY (mpz, mhz) - ALLOCATE (mpz(nspins, 1)) - CALL dbcsr_allocate_matrix_set(mhz, nspins, 1) + NULLIFY (mpz, mhz, mhx, mhy) + CALL dbcsr_allocate_matrix_set(mhx, nspins, 1) + CALL dbcsr_allocate_matrix_set(mhy, nspins, 1) + CALL dbcsr_allocate_matrix_set(mpz, nspins, 1) DO ispin = 1, nspins - ALLOCATE (mhz(ispin, 1)%matrix) - CALL dbcsr_create(mhz(ispin, 1)%matrix, template=scrm(1)%matrix) - CALL dbcsr_copy(mhz(ispin, 1)%matrix, scrm(1)%matrix) - mpz(ispin, 1)%matrix => p_env%p1_admm(ispin)%matrix + ALLOCATE (mhx(ispin, 1)%matrix) + CALL dbcsr_create(mhx(ispin, 1)%matrix, template=scrm(1)%matrix) + CALL dbcsr_copy(mhx(ispin, 1)%matrix, scrm(1)%matrix) + CALL dbcsr_set(mhx(ispin, 1)%matrix, 0.0_dp) + ALLOCATE (mhy(ispin, 1)%matrix) + CALL dbcsr_create(mhy(ispin, 1)%matrix, template=scrm(1)%matrix) + CALL dbcsr_copy(mhy(ispin, 1)%matrix, scrm(1)%matrix) + CALL dbcsr_set(mhy(ispin, 1)%matrix, 0.0_dp) + ALLOCATE (mpz(ispin, 1)%matrix) + IF (do_ex) THEN + CALL dbcsr_create(mpz(ispin, 1)%matrix, template=p_env%p1_admm(ispin)%matrix) + CALL dbcsr_copy(mpz(ispin, 1)%matrix, p_env%p1_admm(ispin)%matrix) + CALL dbcsr_add(mpz(ispin, 1)%matrix, ex_env%matrix_pe_admm(ispin)%matrix, & + 1.0_dp, 1.0_dp) + ELSE + CALL dbcsr_create(mpz(ispin, 1)%matrix, template=matrix_pz_admm(ispin)%matrix) + CALL dbcsr_copy(mpz(ispin, 1)%matrix, matrix_pz_admm(ispin)%matrix) + END IF END DO ! xc_section => admm_env%xc_section_aux IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) DO ispin = 1, nspins - CALL dbcsr_set(mhz(ispin, 1)%matrix, 0.0_dp) CALL integrate_v_rspace(v_rspace=vadmm_rspace(ispin), & - hmat=mhz(ispin, 1), pmat=mpz(ispin, 1), & + hmat=mhx(ispin, 1), pmat=mpz(ispin, 1), & qs_env=qs_env, calculate_forces=.TRUE., & basis_type="AUX_FIT", task_list_external=task_list_aux_fit) CALL pw_pool_give_back_pw(auxbas_pw_pool, vadmm_rspace(ispin)%pw) @@ -1240,6 +1489,7 @@ CONTAINS IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Pz*Vxc(rho_admm)", fodeb END IF ! + NULLIFY (rho_g_aux, rho_r_aux, tau_r_aux, rhoz_g_aux, rhoz_r_aux) CALL qs_rho_get(rho_aux_fit, rho_r=rho_r_aux, rho_g=rho_g_aux, tau_r=tau_r_aux) ! rhoz_aux NULLIFY (rhoz_g_aux, rhoz_r_aux) @@ -1258,20 +1508,26 @@ CONTAINS task_list_external=task_list_aux_fit) END DO ! - NULLIFY (deriv_set, rho_set) - CALL xc_prep_2nd_deriv(deriv_set, rho_set, rho_r_aux, auxbas_pw_pool, xc_section=xc_section) - - CALL xc_calc_2nd_deriv(v_xc, deriv_set, rho_set, & - rhoz_r_aux, rhoz_g_aux, auxbas_pw_pool, xc_section=xc_section, gapw=.FALSE.) - CALL xc_dset_release(deriv_set) - CALL xc_rho_set_release(rho_set) + NULLIFY (v_xc) + deriv2_analytic = section_get_lval(xc_section, "2ND_DERIV_ANALYTICAL") + IF (deriv2_analytic) THEN + CALL qs_fxc_analytic(rho_aux_fit, rhoz_r_aux, xc_section, auxbas_pw_pool, .FALSE., v_xc) + ELSE + CPABORT("NYA 00005") + NULLIFY (rhoz_aux) + CALL qs_rho_create(rhoz_aux) + CALL qs_rho_set(rhoz_aux, rho_r=rhoz_r_aux, rho_g=rhoz_g_aux) + CALL qs_fxc_fdiff(ks_env, rho_aux_fit, rhoz_aux, xc_section, 6, .FALSE., v_xc, tau_r) + DEALLOCATE (rhoz_aux) + END IF ! CALL qs_rho_get(rho_aux_fit, rho_ao_kp=matrix_p) IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) DO ispin = 1, nspins + CALL dbcsr_set(mhy(ispin, 1)%matrix, 0.0_dp) CALL pw_scale(v_xc(ispin)%pw, v_xc(ispin)%pw%pw_grid%dvol) CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_xc(ispin), & - hmat=mhz(ispin, 1), pmat=matrix_p(ispin, 1), & + hmat=mhy(ispin, 1), pmat=matrix_p(ispin, 1), & calculate_forces=.TRUE., basis_type="AUX_FIT", & task_list_external=task_list_aux_fit) END DO @@ -1292,7 +1548,7 @@ CONTAINS ALLOCATE (dbwork) CALL dbcsr_create(dbwork, template=matrix_hz(1)%matrix) DO ispin = 1, nspins - CALL cp_dbcsr_sm_fm_multiply(mhz(ispin, 1)%matrix, admm_env%A, & + CALL cp_dbcsr_sm_fm_multiply(mhy(ispin, 1)%matrix, admm_env%A, & admm_env%work_aux_orb, nao) CALL cp_gemm('T', 'N', nao, nao, nao_aux, & 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, & @@ -1304,8 +1560,7 @@ CONTAINS END DO CALL dbcsr_release(dbwork) DEALLOCATE (dbwork) - CALL dbcsr_deallocate_matrix_set(mhz) - DEALLOCATE (mpz) + CALL dbcsr_deallocate_matrix_set(mpz) END IF END IF @@ -1324,32 +1579,49 @@ CONTAINS s_mstruct_changed=s_mstruct_changed) distribute_fock_matrix = .TRUE. IF (dft_control%do_admm) THEN - CALL get_qs_env(qs_env, admm_env=admm_env) + CALL get_qs_env(qs_env=qs_env, admm_env=admm_env) CALL get_qs_env(qs_env=qs_env, matrix_s_aux_fit=scrm) - NULLIFY (mpz, mhz) - ALLOCATE (mpz(nspins, 1)) + CALL get_qs_env(qs_env=qs_env, rho_aux_fit=rho_aux_fit) + CALL qs_rho_get(rho_aux_fit, rho_ao_kp=matrix_p) + NULLIFY (mpz, mhz, mpd, mhd) + CALL dbcsr_allocate_matrix_set(mpz, nspins, 1) CALL dbcsr_allocate_matrix_set(mhz, nspins, 1) + CALL dbcsr_allocate_matrix_set(mpd, nspins, 1) + CALL dbcsr_allocate_matrix_set(mhd, nspins, 1) DO ispin = 1, nspins - ALLOCATE (mhz(ispin, 1)%matrix) + ALLOCATE (mhz(ispin, 1)%matrix, mhd(ispin, 1)%matrix) CALL dbcsr_create(mhz(ispin, 1)%matrix, template=scrm(1)%matrix) + CALL dbcsr_create(mhd(ispin, 1)%matrix, template=scrm(1)%matrix) CALL dbcsr_copy(mhz(ispin, 1)%matrix, scrm(1)%matrix) + CALL dbcsr_copy(mhd(ispin, 1)%matrix, scrm(1)%matrix) CALL dbcsr_set(mhz(ispin, 1)%matrix, 0.0_dp) - mpz(ispin, 1)%matrix => p_env%p1_admm(ispin)%matrix + CALL dbcsr_set(mhd(ispin, 1)%matrix, 0.0_dp) + ALLOCATE (mpz(ispin, 1)%matrix) + IF (do_ex) THEN + CALL dbcsr_create(mpz(ispin, 1)%matrix, template=scrm(1)%matrix) + CALL dbcsr_copy(mpz(ispin, 1)%matrix, p_env%p1_admm(ispin)%matrix) + CALL dbcsr_add(mpz(ispin, 1)%matrix, ex_env%matrix_pe_admm(ispin)%matrix, & + 1.0_dp, 1.0_dp) + ELSE + CALL dbcsr_create(mpz(ispin, 1)%matrix, template=scrm(1)%matrix) + CALL dbcsr_copy(mpz(ispin, 1)%matrix, matrix_pz_admm(ispin)%matrix) + END IF + mpd(ispin, 1)%matrix => matrix_p(ispin, 1)%matrix END DO - ELSE - ALLOCATE (mpz(nspins, 1), mhz(nspins, 1)) - DO ispin = 1, nspins - mhz(ispin, 1)%matrix => matrix_hz(ispin)%matrix - mpz(ispin, 1)%matrix => matrix_pz(ispin)%matrix + ! + DO ispin = 1, mspin + eh1 = 0.0 + CALL integrate_four_center(qs_env, x_data, mhz, eh1, mpz, hfx_section, & + para_env, s_mstruct_changed, 1, distribute_fock_matrix, & + ispin=ispin) END DO - END IF - DO ispin = 1, mspin - eh1 = 0.0 - CALL integrate_four_center(qs_env, x_data, mhz, eh1, mpz, hfx_section, & - para_env, s_mstruct_changed, 1, distribute_fock_matrix, & - ispin=ispin) - END DO - IF (dft_control%do_admm) THEN + DO ispin = 1, mspin + eh1 = 0.0 + CALL integrate_four_center(qs_env, x_data, mhd, eh1, mpd, hfx_section, & + para_env, s_mstruct_changed, 1, distribute_fock_matrix, & + ispin=ispin) + END DO + ! CALL get_qs_env(qs_env, admm_env=admm_env) CPASSERT(ASSOCIATED(admm_env%work_aux_orb)) CPASSERT(ASSOCIATED(admm_env%work_orb_orb)) @@ -1372,63 +1644,95 @@ CONTAINS DEALLOCATE (dbwork) ! derivatives Tr (Pz [A(T)H dA/dR]) IF (debug_forces) fodeb(1:3) = force(1)%overlap_admm(1:3, 1) - CALL admm_projection_derivative(qs_env, admm_env, mhz, matrix_pz) + IF (ASSOCIATED(mhx) .AND. ASSOCIATED(mhy)) THEN + DO ispin = 1, nspins + CALL dbcsr_add(mhd(ispin, 1)%matrix, mhx(ispin, 1)%matrix, 1.0_dp, 1.0_dp) + CALL dbcsr_add(mhz(ispin, 1)%matrix, mhy(ispin, 1)%matrix, 1.0_dp, 1.0_dp) + END DO + END IF + CALL qs_rho_get(rho, rho_ao=matrix_pd) + CALL admm_projection_derivative(qs_env, admm_env, mhd, mhz, matrix_pd, mpa) IF (debug_forces) THEN fodeb(1:3) = force(1)%overlap_admm(1:3, 1) - fodeb(1:3) CALL mp_sum(fodeb, para_env%group) IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Pz*hfx*S' ", fodeb END IF + CALL dbcsr_deallocate_matrix_set(mpz) + CALL dbcsr_deallocate_matrix_set(mhz) + CALL dbcsr_deallocate_matrix_set(mhd) + IF (ASSOCIATED(mhx) .AND. ASSOCIATED(mhy)) THEN + CALL dbcsr_deallocate_matrix_set(mhx) + CALL dbcsr_deallocate_matrix_set(mhy) + END IF + DEALLOCATE (mpd) + ELSE + ALLOCATE (mpz(nspins, 1), mhz(nspins, 1)) + DO ispin = 1, nspins + mhz(ispin, 1)%matrix => matrix_hz(ispin)%matrix + mpz(ispin, 1)%matrix => mpa(ispin)%matrix + END DO + DO ispin = 1, mspin + eh1 = 0.0 + CALL integrate_four_center(qs_env, x_data, mhz, eh1, mpz, hfx_section, & + para_env, s_mstruct_changed, 1, distribute_fock_matrix, & + ispin=ispin) + END DO + DEALLOCATE (mhz, mpz) END IF - IF (dft_control%do_admm) THEN - CALL get_qs_env(qs_env=qs_env, rho_aux_fit=rho_aux_fit) - CALL qs_rho_get(rho_aux_fit, rho_ao_kp=matrix_p) - matrix_pz => p_env%p1_admm - ELSE - CALL qs_rho_get(rho, rho_ao_kp=matrix_p) - END IF resp_only = .TRUE. IF (debug_forces) fodeb(1:3) = force(1)%fock_4c(1:3, 1) - CALL derivatives_four_center(qs_env, matrix_p, matrix_pz, hfx_section, para_env, & - 1, use_virial, resp_only=resp_only) + IF (dft_control%do_admm) THEN + CALL qs_rho_get(rho_aux_fit, rho_ao_kp=matrix_p) + NULLIFY (matrix_pza) + CALL dbcsr_allocate_matrix_set(matrix_pza, nspins) + DO ispin = 1, nspins + ALLOCATE (matrix_pza(ispin)%matrix) + IF (do_ex) THEN + CALL dbcsr_create(matrix_pza(ispin)%matrix, template=p_env%p1_admm(ispin)%matrix) + CALL dbcsr_copy(matrix_pza(ispin)%matrix, p_env%p1_admm(ispin)%matrix) + CALL dbcsr_add(matrix_pza(ispin)%matrix, ex_env%matrix_pe_admm(ispin)%matrix, & + 1.0_dp, 1.0_dp) + ELSE + CALL dbcsr_create(matrix_pza(ispin)%matrix, template=matrix_pz_admm(ispin)%matrix) + CALL dbcsr_copy(matrix_pza(ispin)%matrix, matrix_pz_admm(ispin)%matrix) + END IF + END DO + CALL derivatives_four_center(qs_env, matrix_p, matrix_pza, hfx_section, para_env, & + 1, use_virial, resp_only=resp_only) + CALL dbcsr_deallocate_matrix_set(matrix_pza) + ELSE + CALL qs_rho_get(rho, rho_ao_kp=matrix_p) + CALL derivatives_four_center(qs_env, matrix_p, mpa, hfx_section, para_env, & + 1, use_virial, resp_only=resp_only) + END IF IF (debug_forces) THEN fodeb(1:3) = force(1)%fock_4c(1:3, 1) - fodeb(1:3) CALL mp_sum(fodeb, para_env%group) IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Pz*hfx ", fodeb END IF - IF (dft_control%do_admm) THEN - CALL dbcsr_deallocate_matrix_set(mhz) - DEALLOCATE (mpz) - ELSE - DEALLOCATE (mpz, mhz) - END IF - matrix_pz => p_env%p1 END IF ! Overlap matrix ! H(drho+dz) + Wz - ! If ground-state density matrix solved by diagonalization, then use this - IF (.NOT. dft_control%qs_control%do_ls_scf .AND. nspins == 1) THEN - - focc = 1.0_dp - IF (nspins == 1) focc = 2.0_dp - - CALL get_qs_env(qs_env, mos=mos) - DO ispin = 1, nspins - CALL calculate_whz_matrix(mos(ispin)%mo_set, matrix_hz(ispin)%matrix, & - matrix_wz(ispin)%matrix, focc) - END DO - - ELSE - + IF (dft_control%qs_control%do_ls_scf) THEN ! Ground-state density has been calculated by LS eps_filter = dft_control%qs_control%eps_filter_matrix CALL calculate_whz_ao_matrix(qs_env, matrix_hz, matrix_wz, eps_filter) - + ELSE + IF (do_ex) THEN + matrix_wz => p_env%w1 + END IF + focc = 1.0_dp + IF (nspins == 1) focc = 2.0_dp + CALL get_qs_env(qs_env, mos=mos) + DO ispin = 1, nspins + CALL calculate_whz_matrix(mos(ispin)%mo_set%mo_coeff, matrix_hz(ispin)%matrix, & + matrix_wz(ispin)%matrix, focc) + END DO END IF - - IF (SIZE(matrix_wz, 1) == 2) THEN + IF (nspins == 2) THEN CALL dbcsr_add(matrix_wz(1)%matrix, matrix_wz(2)%matrix, & alpha_scalar=1.0_dp, beta_scalar=1.0_dp) END IF @@ -1471,6 +1775,10 @@ CONTAINS DEALLOCATE (ftot1, ftot2, ftot3) END IF + IF (do_ex) THEN + CALL dbcsr_deallocate_matrix_set(mpa) + END IF + CALL timestop(handle) END SUBROUTINE response_force @@ -1478,17 +1786,217 @@ CONTAINS ! ************************************************************************************************** !> \brief ... !> \param qs_env ... -!> \param admm_env ... +!> \param p_env ... !> \param matrix_hz ... +!> \param ex_env ... +! ************************************************************************************************** + SUBROUTINE response_force_xtb(qs_env, p_env, matrix_hz, ex_env) + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(qs_p_env_type), POINTER :: p_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_hz + TYPE(excited_energy_type), OPTIONAL, POINTER :: ex_env + + CHARACTER(LEN=*), PARAMETER :: routineN = 'response_force_xtb' + + INTEGER :: atom_a, handle, iatom, ikind, iounit, & + is, ispin, na, natom, natorb, nimages, & + nkind, ns, nsgf, nspins + INTEGER, DIMENSION(25) :: lao + INTEGER, DIMENSION(5) :: occ + LOGICAL :: do_ex, use_virial + REAL(KIND=dp) :: focc + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: mcharge, mcharge1 + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: aocg, aocg1, charges, charges1, ftot1, & + ftot2 + REAL(KIND=dp), DIMENSION(3) :: fodeb + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(cp_logger_type), POINTER :: logger + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pz, matrix_wz, mpa, p_matrix, scrm + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_p, matrix_s + TYPE(dbcsr_type), POINTER :: s_matrix + TYPE(dft_control_type), POINTER :: dft_control + TYPE(mo_set_p_type), DIMENSION(:), POINTER :: mos + TYPE(neighbor_list_set_p_type), DIMENSION(:), & + POINTER :: sab_orb + TYPE(particle_type), DIMENSION(:), POINTER :: particle_set + TYPE(qs_force_type), DIMENSION(:), POINTER :: force + TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(qs_rho_type), POINTER :: rho + TYPE(xtb_atom_type), POINTER :: xtb_kind + + CALL timeset(routineN, handle) + + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF + + do_ex = .FALSE. + IF (PRESENT(ex_env)) do_ex = .TRUE. + + NULLIFY (ks_env, sab_orb) + CALL get_qs_env(qs_env=qs_env, ks_env=ks_env, dft_control=dft_control, & + sab_orb=sab_orb) + CALL get_qs_env(qs_env=qs_env, para_env=para_env, force=force) + nspins = dft_control%nspins + + IF (debug_forces) THEN + CALL get_qs_env(qs_env, natom=natom, atomic_kind_set=atomic_kind_set) + ALLOCATE (ftot1(3, natom)) + ALLOCATE (ftot2(3, natom)) + CALL total_qs_force(ftot1, force, atomic_kind_set) + END IF + + matrix_pz => p_env%p1 + NULLIFY (mpa) + IF (do_ex) THEN + CALL dbcsr_allocate_matrix_set(mpa, nspins) + DO ispin = 1, nspins + ALLOCATE (mpa(ispin)%matrix) + CALL dbcsr_create(mpa(ispin)%matrix, template=matrix_pz(ispin)%matrix) + CALL dbcsr_copy(mpa(ispin)%matrix, matrix_pz(ispin)%matrix) + CALL dbcsr_add(mpa(ispin)%matrix, ex_env%matrix_pe(ispin)%matrix, 1.0_dp, 1.0_dp) + CALL dbcsr_set(matrix_hz(ispin)%matrix, 0.0_dp) + END DO + ELSE + mpa => p_env%p1 + END IF + ! + ! START OF Tr(P+Z)Hcore + ! + IF (nspins == 2) THEN + CALL dbcsr_add(mpa(1)%matrix, mpa(2)%matrix, 1.0_dp, 1.0_dp) + END IF + ! Hcore matrix + IF (debug_forces) fodeb(1:3) = force(1)%all_potential(1:3, 1) + CALL xtb_hab_force(qs_env, mpa(1)%matrix) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%all_potential(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Pz*dHcore ", fodeb + END IF + IF (nspins == 2) THEN + CALL dbcsr_add(mpa(1)%matrix, mpa(2)%matrix, 1.0_dp, -1.0_dp) + END IF + ! + ! END OF Tr(P+Z)Hcore + ! + use_virial = .FALSE. + nimages = 1 + ! + ! Hartree potential of response density + ! + IF (dft_control%qs_control%xtb_control%coulomb_interaction) THEN + ! Mulliken charges + CALL get_qs_env(qs_env, rho=rho, particle_set=particle_set, matrix_s_kp=matrix_s) + natom = SIZE(particle_set) + CALL qs_rho_get(rho, rho_ao_kp=matrix_p) + ALLOCATE (mcharge(natom), charges(natom, 5)) + ALLOCATE (mcharge1(natom), charges1(natom, 5)) + charges = 0.0_dp + charges1 = 0.0_dp + CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set) + nkind = SIZE(atomic_kind_set) + CALL get_qs_kind_set(qs_kind_set, maxsgf=nsgf) + ALLOCATE (aocg(nsgf, natom)) + aocg = 0.0_dp + ALLOCATE (aocg1(nsgf, natom)) + aocg1 = 0.0_dp + p_matrix => matrix_p(:, 1) + s_matrix => matrix_s(1, 1)%matrix + CALL ao_charges(p_matrix, s_matrix, aocg, para_env) + CALL ao_charges(mpa, s_matrix, aocg1, para_env) + DO ikind = 1, nkind + CALL get_atomic_kind(atomic_kind_set(ikind), natom=na) + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind) + CALL get_xtb_atom_param(xtb_kind, natorb=natorb, lao=lao, occupation=occ) + DO iatom = 1, na + atom_a = atomic_kind_set(ikind)%atom_list(iatom) + charges(atom_a, :) = REAL(occ(:), KIND=dp) + DO is = 1, natorb + ns = lao(is) + 1 + charges(atom_a, ns) = charges(atom_a, ns) - aocg(is, atom_a) + charges1(atom_a, ns) = charges1(atom_a, ns) - aocg1(is, atom_a) + END DO + END DO + END DO + DEALLOCATE (aocg, aocg1) + DO iatom = 1, natom + mcharge(iatom) = SUM(charges(iatom, :)) + mcharge1(iatom) = SUM(charges1(iatom, :)) + END DO + ! Coulomb Kernel + CALL xtb_coulomb_hessian(qs_env, matrix_hz, charges1, mcharge1, mcharge) + CALL calc_xtb_ehess_force(qs_env, p_matrix, mpa, charges, mcharge, charges1, & + mcharge1, debug_forces) + ! + DEALLOCATE (charges, mcharge, charges1, mcharge1) + END IF + ! Overlap matrix + ! H(drho+dz) + Wz + matrix_wz => p_env%w1 + focc = 0.5_dp + IF (nspins == 1) focc = 1.0_dp + CALL get_qs_env(qs_env, mos=mos) + DO ispin = 1, nspins + CALL calculate_whz_matrix(mos(ispin)%mo_set%mo_coeff, matrix_hz(ispin)%matrix, & + matrix_wz(ispin)%matrix, focc) + END DO + IF (nspins == 2) THEN + CALL dbcsr_add(matrix_wz(1)%matrix, matrix_wz(2)%matrix, & + alpha_scalar=1.0_dp, beta_scalar=1.0_dp) + END IF + IF (debug_forces) fodeb(1:3) = force(1)%overlap(1:3, 1) + NULLIFY (scrm) + CALL build_overlap_matrix(ks_env, matrix_s=scrm, & + matrix_name="OVERLAP MATRIX", & + basis_type_a="ORB", basis_type_b="ORB", & + sab_nl=sab_orb, calculate_forces=.TRUE., & + matrix_p=matrix_wz(1)%matrix) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%overlap(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Wz*dS ", fodeb + END IF + CALL dbcsr_deallocate_matrix_set(scrm) + + IF (debug_forces) THEN + CALL total_qs_force(ftot2, force, atomic_kind_set) + fodeb(1:3) = ftot2(1:3, 1) - ftot1(1:3, 1) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T30,3F16.8)") "DEBUG:: Response Force", fodeb + DEALLOCATE (ftot1, ftot2) + END IF + + IF (do_ex) THEN + CALL dbcsr_deallocate_matrix_set(mpa) + END IF + + CALL timestop(handle) + + END SUBROUTINE response_force_xtb + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param admm_env ... +!> \param matrix_hd ... +!> \param matrix_hz ... +!> \param matrix_pd ... !> \param matrix_pz ... ! ************************************************************************************************** - SUBROUTINE admm_projection_derivative(qs_env, admm_env, matrix_hz, matrix_pz) + SUBROUTINE admm_projection_derivative(qs_env, admm_env, matrix_hd, matrix_hz, matrix_pd, matrix_pz) TYPE(qs_environment_type), POINTER :: qs_env TYPE(admm_type), POINTER :: admm_env - TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_hz - TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pz + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_hd, matrix_hz + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pd, matrix_pz - CHARACTER(LEN=*), PARAMETER :: routineN = 'admm_projection_derivative' + CHARACTER(LEN=*), PARAMETER :: routineN = 'admm_projection_derivative', & + routineP = moduleN//':'//routineN INTEGER :: handle, ispin, nao, natom, naux, nspins REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: admm_force @@ -1504,6 +2012,8 @@ CONTAINS CPASSERT(ASSOCIATED(qs_env)) CPASSERT(ASSOCIATED(admm_env)) + CPASSERT(ASSOCIATED(matrix_hd)) + CPASSERT(ASSOCIATED(matrix_pd)) CPASSERT(ASSOCIATED(matrix_hz)) CPASSERT(ASSOCIATED(matrix_pz)) @@ -1517,6 +2027,7 @@ CONTAINS ALLOCATE (matrix_w_q) CALL dbcsr_copy(matrix_w_q, matrix_s_aux_fit_vs_orb(1)%matrix, & "W MATRIX AUX Q") + CALL cp_dbcsr_alloc_block_from_nbl(matrix_w_q, sab_aux_fit_vs_orb) ALLOCATE (matrix_w_s) CALL dbcsr_create(matrix_w_s, template=matrix_s_aux_fit(1)%matrix, & name='W MATRIX AUX S', & @@ -1531,22 +2042,35 @@ CONTAINS nao = admm_env%nao_orb naux = admm_env%nao_aux_fit DO ispin = 1, nspins - CALL copy_dbcsr_to_fm(matrix_hz(ispin, 1)%matrix, admm_env%work_aux_aux) + CALL copy_dbcsr_to_fm(matrix_hd(ispin, 1)%matrix, admm_env%work_aux_aux) CALL cp_gemm("N", "N", naux, naux, naux, 1.0_dp, admm_env%s_inv, & admm_env%work_aux_aux, 0.0_dp, admm_env%work_aux_aux2) CALL cp_gemm("N", "N", naux, nao, naux, 1.0_dp, admm_env%work_aux_aux2, & admm_env%A, 0.0_dp, admm_env%work_aux_orb) CALL copy_dbcsr_to_fm(matrix_pz(ispin)%matrix, admm_env%work_orb_orb) - ! admm_env%work_aux_orb2 = S-1*H*A*P + ! admm_env%work_aux_orb2 = S-1*H(D)*A*PZ CALL cp_gemm("N", "N", naux, nao, nao, 1.0_dp, admm_env%work_aux_orb, & admm_env%work_orb_orb, 0.0_dp, admm_env%work_aux_orb2) - ! admm_env%work_aux_aux = S-1*H*A*P*A(T) - CALL cp_gemm("N", "T", naux, naux, nao, 2.0_dp, admm_env%work_aux_orb2, & + + CALL copy_dbcsr_to_fm(matrix_hz(ispin, 1)%matrix, admm_env%work_aux_aux) + CALL cp_gemm("N", "N", naux, naux, naux, 1.0_dp, admm_env%s_inv, & + admm_env%work_aux_aux, 0.0_dp, admm_env%work_aux_aux2) + CALL cp_gemm("N", "N", naux, nao, naux, 1.0_dp, admm_env%work_aux_aux2, & + admm_env%A, 0.0_dp, admm_env%work_aux_orb) + CALL copy_dbcsr_to_fm(matrix_pd(ispin)%matrix, admm_env%work_orb_orb) + ! admm_env%work_aux_orb2 = S-1*H(Z)*A*PD + CALL cp_gemm("N", "N", naux, nao, nao, 1.0_dp, admm_env%work_aux_orb, & + admm_env%work_orb_orb, 1.0_dp, admm_env%work_aux_orb2) + + ! admm_env%work_aux_aux = [S-1*H(D)*A*PZ+S-1*H(Z)*A*PD]*A(T) + CALL cp_gemm("N", "T", naux, naux, nao, 1.0_dp, admm_env%work_aux_orb2, & admm_env%A, 0.0_dp, admm_env%work_aux_aux) ! CALL copy_fm_to_dbcsr(admm_env%work_aux_orb2, matrix_w_q, keep_sparsity=.TRUE.) CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, matrix_w_s, keep_sparsity=.TRUE.) - CALL dbcsr_scale(matrix_w_s, -2.0_dp) +! focc = 2? + CALL dbcsr_scale(matrix_w_q, -2.0_dp) + CALL dbcsr_scale(matrix_w_s, 2.0_dp) ! admm_force = 0.0_dp CALL build_overlap_force(ks_env, admm_force, & @@ -1566,101 +2090,6 @@ CONTAINS CALL timestop(handle) END SUBROUTINE admm_projection_derivative -! ************************************************************************************************** -!> \brief Calculate the response W matrix from the MO eigenvectors, MO eigenvalues, -!> and the MO occupation numbers. Only works if they are eigenstates -!> \param mo_set type containing the full matrix of the MO and the eigenvalues -!> \param psi1 response orbitals -!> \param ks_matrix Kohn-Sham sparse matrix -!> \param w_matrix sparse matrix -!> \par History -!> adapted from calculate_w_matrix_1 -!> \author JGH -! ************************************************************************************************** - SUBROUTINE calculate_wz_matrix(mo_set, psi1, ks_matrix, w_matrix) - - TYPE(mo_set_type), POINTER :: mo_set - TYPE(cp_fm_type), POINTER :: psi1 - TYPE(dbcsr_type), POINTER :: ks_matrix, w_matrix - - CHARACTER(len=*), PARAMETER :: routineN = 'calculate_wz_matrix' - - INTEGER :: handle, ncol, nrow - TYPE(cp_fm_struct_type), POINTER :: fm_struct_tmp - TYPE(cp_fm_type), POINTER :: ksmat, scrv - - CALL timeset(routineN, handle) - - CALL cp_fm_get_info(matrix=mo_set%mo_coeff, ncol_global=ncol, nrow_global=nrow) - CALL cp_fm_create(scrv, mo_set%mo_coeff%matrix_struct, "scr vectors") - CALL cp_fm_struct_create(fm_struct_tmp, nrow_global=ncol, ncol_global=ncol, & - para_env=mo_set%mo_coeff%matrix_struct%para_env, & - context=mo_set%mo_coeff%matrix_struct%context) - CALL cp_fm_create(ksmat, fm_struct_tmp, name="KS") - CALL cp_fm_struct_release(fm_struct_tmp) - CALL cp_dbcsr_sm_fm_multiply(ks_matrix, mo_set%mo_coeff, scrv, ncol) - CALL cp_gemm("T", "N", ncol, ncol, nrow, 1.0_dp, mo_set%mo_coeff, scrv, 0.0_dp, ksmat) - CALL cp_gemm("N", "N", nrow, ncol, ncol, 1.0_dp, mo_set%mo_coeff, ksmat, 0.0_dp, scrv) - CALL dbcsr_set(w_matrix, 0.0_dp) - CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=scrv, matrix_g=psi1, & - ncol=mo_set%homo, alpha=0.5_dp) - CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=psi1, matrix_g=scrv, & - ncol=mo_set%homo, alpha=0.5_dp) - CALL cp_fm_release(scrv) - CALL cp_fm_release(ksmat) - - CALL timestop(handle) - - END SUBROUTINE calculate_wz_matrix - -! ************************************************************************************************** -!> \brief Calculate the Wz matrix from the MO eigenvectors, MO eigenvalues, -!> and the MO occupation numbers. Only works if they are eigenstates -!> \param mo_set type containing the full matrix of the MO and the eigenvalues -!> \param hzm ... -!> \param w_matrix sparse matrix -!> \param focc ... -!> \par History -!> adapted from calculate_w_matrix_1 -!> \author JGH -! ************************************************************************************************** - SUBROUTINE calculate_whz_matrix(mo_set, hzm, w_matrix, focc) - - TYPE(mo_set_type), POINTER :: mo_set - TYPE(dbcsr_type) :: hzm, w_matrix - REAL(KIND=dp), INTENT(IN) :: focc - - CHARACTER(len=*), PARAMETER :: routineN = 'calculate_whz_matrix' - - INTEGER :: handle, nao, norb - REAL(KIND=dp) :: falpha - TYPE(cp_fm_struct_type), POINTER :: fm_struct, fm_struct_mat - TYPE(cp_fm_type), POINTER :: c0vec, chcmat, hcvec - - CALL timeset(routineN, handle) - - falpha = focc - - c0vec => mo_set%mo_coeff - CALL cp_fm_create(hcvec, c0vec%matrix_struct, "hcvec") - CALL cp_fm_get_info(hcvec, matrix_struct=fm_struct, nrow_global=nao, ncol_global=norb) - CALL cp_fm_struct_create(fm_struct_mat, context=fm_struct%context, nrow_global=norb, & - ncol_global=norb, para_env=fm_struct%para_env) - CALL cp_fm_create(chcmat, fm_struct_mat) - CALL cp_fm_struct_release(fm_struct_mat) - - CALL cp_dbcsr_sm_fm_multiply(hzm, c0vec, hcvec, norb) - CALL cp_gemm("T", "N", norb, norb, nao, 1.0_dp, c0vec, hcvec, 0.0_dp, chcmat) - CALL cp_gemm("N", "N", nao, norb, norb, 1.0_dp, c0vec, chcmat, 0.0_dp, hcvec) - - CALL cp_dbcsr_plus_fm_fm_t(w_matrix, matrix_v=hcvec, matrix_g=c0vec, ncol=norb, alpha=falpha) - - CALL cp_fm_release(hcvec) - CALL cp_fm_release(chcmat) - - CALL timestop(handle) - - END SUBROUTINE calculate_whz_matrix ! ************************************************************************************************** !> \brief calculate the Kohn-Sham reference potential diff --git a/src/xas_restart.F b/src/xas_restart.F index ed5b835640..5e09c0bf38 100644 --- a/src/xas_restart.F +++ b/src/xas_restart.F @@ -47,12 +47,12 @@ MODULE xas_restart default_string_length,& dp USE message_passing, ONLY: mp_bcast + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_environment_types, ONLY: get_qs_env,& qs_environment_type USE qs_ks_types, ONLY: qs_ks_did_change USE qs_mixing_utils, ONLY: mixing_init USE qs_mo_io, ONLY: wfn_restart_file_name - USE qs_mo_methods, ONLY: calculate_density_matrix USE qs_mo_occupation, ONLY: set_mo_occupation USE qs_mo_types, ONLY: get_mo_set,& mo_set_p_type,& diff --git a/src/xas_tdp_atom.F b/src/xas_tdp_atom.F index 1dd451c655..d2329b3d4c 100644 --- a/src/xas_tdp_atom.F +++ b/src/xas_tdp_atom.F @@ -1174,6 +1174,11 @@ CONTAINS dga2 => xas_atom_env%dga2(atom_kind)%array dgr1 => xas_atom_env%dgr1(atom_kind)%array dgr2 => xas_atom_env%dgr2(atom_kind)%array + ELSE + dga1 => xas_atom_env%dga1(atom_kind)%array + dga2 => xas_atom_env%dga2(atom_kind)%array + dgr1 => xas_atom_env%dgr1(atom_kind)%array + dgr2 => xas_atom_env%dgr2(atom_kind)%array END IF ! Need to express the ri_dcoeffs in terms of so (and not sgf) diff --git a/src/xas_tp_scf.F b/src/xas_tp_scf.F index ca38b986c3..2ed03d355d 100644 --- a/src/xas_tp_scf.F +++ b/src/xas_tp_scf.F @@ -56,6 +56,7 @@ MODULE xas_tp_scf init_preconditioner,& preconditioner_type USE qs_charges_types, ONLY: qs_charges_type + USE qs_density_matrices, ONLY: calculate_density_matrix USE qs_density_mixing_types, ONLY: broyden_mixing_new_nr,& broyden_mixing_nr,& direct_mixing_nr,& @@ -76,8 +77,7 @@ MODULE xas_tp_scf localized_wfn_control_type,& qs_loc_env_new_type USE qs_mixing_utils, ONLY: self_consistency_check - USE qs_mo_methods, ONLY: calculate_density_matrix,& - calculate_subspace_eigenvalues + USE qs_mo_methods, ONLY: calculate_subspace_eigenvalues USE qs_mo_occupation, ONLY: set_mo_occupation USE qs_mo_types, ONLY: get_mo_set,& mo_set_p_type diff --git a/src/xc/xc_xwpbe.F b/src/xc/xc_xwpbe.F index 5865ab0e30..425eba4e36 100644 --- a/src/xc/xc_xwpbe.F +++ b/src/xc/xc_xwpbe.F @@ -200,6 +200,7 @@ CONTAINS CALL xc_derivative_get(deriv, deriv_data=e_ndrho) END IF IF (order >= 2 .OR. order == -2) THEN + CPABORT("derivatives bigger than 1 do not work correctly") deriv => xc_dset_get_derivative(deriv_set, "(rho)(rho)", & allocate_deriv=.TRUE.) CALL xc_derivative_get(deriv, deriv_data=e_rho_rho) diff --git a/src/xtb_coulomb.F b/src/xtb_coulomb.F index 0ec1fa4858..f18a9d00a5 100644 --- a/src/xtb_coulomb.F +++ b/src/xtb_coulomb.F @@ -83,7 +83,7 @@ MODULE xtb_coulomb CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xtb_coulomb' - PUBLIC :: build_xtb_coulomb, gamma_rab_sr, xtb_dsint_list + PUBLIC :: build_xtb_coulomb, gamma_rab_sr, dgamma_rab_sr, xtb_dsint_list CONTAINS @@ -255,52 +255,54 @@ CONTAINS ! 1/R contribution - do_ewald = dft_control%qs_control%xtb_control%do_ewald - IF (do_ewald) THEN - ! Ewald sum - NULLIFY (ewald_env, ewald_pw) - CALL get_qs_env(qs_env=qs_env, & - ewald_env=ewald_env, ewald_pw=ewald_pw) - CALL get_cell(cell=cell, periodic=periodic, deth=deth) - CALL ewald_env_get(ewald_env, alpha=alpha, ewald_type=ewald_type) - CALL get_qs_env(qs_env=qs_env, sab_tbe=n_list) - CALL tb_ewald_overlap(gmcharge, mcharge, alpha, n_list, virial, use_virial, atprop) - SELECT CASE (ewald_type) - CASE DEFAULT - CPABORT("Invalid Ewald type") - CASE (do_ewald_none) - CPABORT("Not allowed with DFTB") - CASE (do_ewald_ewald) - CPABORT("Standard Ewald not implemented in DFTB") - CASE (do_ewald_pme) - CPABORT("PME not implemented in DFTB") - CASE (do_ewald_spme) - CALL tb_spme_evaluate(ewald_env, ewald_pw, particle_set, cell, & - gmcharge, mcharge, calculate_forces, virial, use_virial, atprop) - END SELECT - ELSE - ! direct sum - CALL get_qs_env(qs_env=qs_env, & - local_particles=local_particles) - DO ikind = 1, SIZE(local_particles%n_el) - DO ia = 1, local_particles%n_el(ikind) - iatom = local_particles%list(ikind)%array(ia) - DO jatom = 1, iatom - 1 - rij = particle_set(iatom)%r - particle_set(jatom)%r - rij = pbc(rij, cell) - dr = SQRT(SUM(rij(:)**2)) - IF (dr > 1.e-6_dp) THEN - gmcharge(iatom, 1) = gmcharge(iatom, 1) + mcharge(jatom)/dr - gmcharge(jatom, 1) = gmcharge(jatom, 1) + mcharge(iatom)/dr - DO i = 2, nmat - gmcharge(iatom, i) = gmcharge(iatom, i) + rij(i - 1)*mcharge(jatom)/dr**3 - gmcharge(jatom, i) = gmcharge(jatom, i) - rij(i - 1)*mcharge(iatom)/dr**3 - END DO - END IF + IF (dft_control%qs_control%xtb_control%coulomb_lr) THEN + do_ewald = dft_control%qs_control%xtb_control%do_ewald + IF (do_ewald) THEN + ! Ewald sum + NULLIFY (ewald_env, ewald_pw) + CALL get_qs_env(qs_env=qs_env, & + ewald_env=ewald_env, ewald_pw=ewald_pw) + CALL get_cell(cell=cell, periodic=periodic, deth=deth) + CALL ewald_env_get(ewald_env, alpha=alpha, ewald_type=ewald_type) + CALL get_qs_env(qs_env=qs_env, sab_tbe=n_list) + CALL tb_ewald_overlap(gmcharge, mcharge, alpha, n_list, virial, use_virial, atprop) + SELECT CASE (ewald_type) + CASE DEFAULT + CPABORT("Invalid Ewald type") + CASE (do_ewald_none) + CPABORT("Not allowed with DFTB") + CASE (do_ewald_ewald) + CPABORT("Standard Ewald not implemented in DFTB") + CASE (do_ewald_pme) + CPABORT("PME not implemented in DFTB") + CASE (do_ewald_spme) + CALL tb_spme_evaluate(ewald_env, ewald_pw, particle_set, cell, & + gmcharge, mcharge, calculate_forces, virial, use_virial, atprop) + END SELECT + ELSE + ! direct sum + CALL get_qs_env(qs_env=qs_env, & + local_particles=local_particles) + DO ikind = 1, SIZE(local_particles%n_el) + DO ia = 1, local_particles%n_el(ikind) + iatom = local_particles%list(ikind)%array(ia) + DO jatom = 1, iatom - 1 + rij = particle_set(iatom)%r - particle_set(jatom)%r + rij = pbc(rij, cell) + dr = SQRT(SUM(rij(:)**2)) + IF (dr > 1.e-6_dp) THEN + gmcharge(iatom, 1) = gmcharge(iatom, 1) + mcharge(jatom)/dr + gmcharge(jatom, 1) = gmcharge(jatom, 1) + mcharge(iatom)/dr + DO i = 2, nmat + gmcharge(iatom, i) = gmcharge(iatom, i) + rij(i - 1)*mcharge(jatom)/dr**3 + gmcharge(jatom, i) = gmcharge(jatom, i) - rij(i - 1)*mcharge(iatom)/dr**3 + END DO + END IF + END DO END DO END DO - END DO - CPASSERT(.NOT. use_virial) + CPASSERT(.NOT. use_virial) + END IF END IF ! global sum of gamma*p arrays @@ -310,11 +312,13 @@ CONTAINS CALL mp_sum(gmcharge(:, 1), para_env%group) CALL mp_sum(gchrg(:, :, 1), para_env%group) - IF (do_ewald) THEN - ! add self charge interaction and background charge contribution - gmcharge(:, 1) = gmcharge(:, 1) - 2._dp*alpha*oorootpi*mcharge(:) - IF (ANY(periodic(:) == 1)) THEN - gmcharge(:, 1) = gmcharge(:, 1) - pi/alpha**2/deth + IF (dft_control%qs_control%xtb_control%coulomb_lr) THEN + IF (do_ewald) THEN + ! add self charge interaction and background charge contribution + gmcharge(:, 1) = gmcharge(:, 1) - 2._dp*alpha*oorootpi*mcharge(:) + IF (ANY(periodic(:) == 1)) THEN + gmcharge(:, 1) = gmcharge(:, 1) - pi/alpha**2/deth + END IF END IF END IF diff --git a/src/xtb_ehess.F b/src/xtb_ehess.F index 67bcbf20a2..62a207e3b6 100644 --- a/src/xtb_ehess.F +++ b/src/xtb_ehess.F @@ -171,48 +171,50 @@ CONTAINS ! 1/R contribution - do_ewald = dft_control%qs_control%xtb_control%do_ewald - IF (do_ewald) THEN - ! Ewald sum - NULLIFY (ewald_env, ewald_pw) - NULLIFY (virial, atprop) - CALL get_qs_env(qs_env=qs_env, & - ewald_env=ewald_env, ewald_pw=ewald_pw) - CALL get_cell(cell=cell, periodic=periodic, deth=deth) - CALL ewald_env_get(ewald_env, alpha=alpha, ewald_type=ewald_type) - CALL get_qs_env(qs_env=qs_env, sab_tbe=n_list) - CALL tb_ewald_overlap(gmcharge, mcharge1, alpha, n_list, virial, .FALSE., atprop) - SELECT CASE (ewald_type) - CASE DEFAULT - CPABORT("Invalid Ewald type") - CASE (do_ewald_none) - CPABORT("Not allowed with DFTB") - CASE (do_ewald_ewald) - CPABORT("Standard Ewald not implemented in DFTB") - CASE (do_ewald_pme) - CPABORT("PME not implemented in DFTB") - CASE (do_ewald_spme) - CALL tb_spme_evaluate(ewald_env, ewald_pw, particle_set, cell, & - gmcharge, mcharge1, .FALSE., virial, .FALSE., atprop) - END SELECT - ELSE - ! direct sum - CALL get_qs_env(qs_env=qs_env, & - local_particles=local_particles) - DO ikind = 1, SIZE(local_particles%n_el) - DO ia = 1, local_particles%n_el(ikind) - iatom = local_particles%list(ikind)%array(ia) - DO jatom = 1, iatom - 1 - rij = particle_set(iatom)%r - particle_set(jatom)%r - rij = pbc(rij, cell) - dr = SQRT(SUM(rij(:)**2)) - IF (dr > 1.e-6_dp) THEN - gmcharge(iatom, 1) = gmcharge(iatom, 1) + mcharge1(jatom)/dr - gmcharge(jatom, 1) = gmcharge(jatom, 1) + mcharge1(iatom)/dr - END IF + IF (dft_control%qs_control%xtb_control%coulomb_lr) THEN + do_ewald = dft_control%qs_control%xtb_control%do_ewald + IF (do_ewald) THEN + ! Ewald sum + NULLIFY (ewald_env, ewald_pw) + NULLIFY (virial, atprop) + CALL get_qs_env(qs_env=qs_env, & + ewald_env=ewald_env, ewald_pw=ewald_pw) + CALL get_cell(cell=cell, periodic=periodic, deth=deth) + CALL ewald_env_get(ewald_env, alpha=alpha, ewald_type=ewald_type) + CALL get_qs_env(qs_env=qs_env, sab_tbe=n_list) + CALL tb_ewald_overlap(gmcharge, mcharge1, alpha, n_list, virial, .FALSE., atprop) + SELECT CASE (ewald_type) + CASE DEFAULT + CPABORT("Invalid Ewald type") + CASE (do_ewald_none) + CPABORT("Not allowed with DFTB") + CASE (do_ewald_ewald) + CPABORT("Standard Ewald not implemented in DFTB") + CASE (do_ewald_pme) + CPABORT("PME not implemented in DFTB") + CASE (do_ewald_spme) + CALL tb_spme_evaluate(ewald_env, ewald_pw, particle_set, cell, & + gmcharge, mcharge1, .FALSE., virial, .FALSE., atprop) + END SELECT + ELSE + ! direct sum + CALL get_qs_env(qs_env=qs_env, & + local_particles=local_particles) + DO ikind = 1, SIZE(local_particles%n_el) + DO ia = 1, local_particles%n_el(ikind) + iatom = local_particles%list(ikind)%array(ia) + DO jatom = 1, iatom - 1 + rij = particle_set(iatom)%r - particle_set(jatom)%r + rij = pbc(rij, cell) + dr = SQRT(SUM(rij(:)**2)) + IF (dr > 1.e-6_dp) THEN + gmcharge(iatom, 1) = gmcharge(iatom, 1) + mcharge1(jatom)/dr + gmcharge(jatom, 1) = gmcharge(jatom, 1) + mcharge1(iatom)/dr + END IF + END DO END DO END DO - END DO + END IF END IF ! global sum of gamma*p arrays @@ -220,11 +222,13 @@ CONTAINS CALL mp_sum(gmcharge(:, 1), para_env%group) CALL mp_sum(gchrg(:, :, 1), para_env%group) - IF (do_ewald) THEN - ! add self charge interaction and background charge contribution - gmcharge(:, 1) = gmcharge(:, 1) - 2._dp*alpha*oorootpi*mcharge1(:) - IF (ANY(periodic(:) == 1)) THEN - gmcharge(:, 1) = gmcharge(:, 1) - pi/alpha**2/deth + IF (dft_control%qs_control%xtb_control%coulomb_lr) THEN + IF (do_ewald) THEN + ! add self charge interaction and background charge contribution + gmcharge(:, 1) = gmcharge(:, 1) - 2._dp*alpha*oorootpi*mcharge1(:) + IF (ANY(periodic(:) == 1)) THEN + gmcharge(:, 1) = gmcharge(:, 1) - pi/alpha**2/deth + END IF END IF END IF diff --git a/src/xtb_ehess_force.F b/src/xtb_ehess_force.F new file mode 100644 index 0000000000..f1bb7f3208 --- /dev/null +++ b/src/xtb_ehess_force.F @@ -0,0 +1,529 @@ +!--------------------------------------------------------------------------------------------------! +! CP2K: A general program to perform molecular dynamics simulations ! +! Copyright 2000-2021 CP2K developers group ! +! ! +! SPDX-License-Identifier: GPL-2.0-or-later ! +!--------------------------------------------------------------------------------------------------! + +! ************************************************************************************************** +!> \brief Calculation of forces for Coulomb contributions in response xTB +!> \author JGH +! ************************************************************************************************** +MODULE xtb_ehess_force + USE atomic_kind_types, ONLY: atomic_kind_type,& + get_atomic_kind_set + USE atprop_types, ONLY: atprop_type + USE cell_types, ONLY: cell_type,& + get_cell,& + pbc + USE cp_control_types, ONLY: dft_control_type + USE cp_log_handling, ONLY: cp_get_default_logger,& + cp_logger_get_default_unit_nr,& + cp_logger_type + USE cp_para_types, ONLY: cp_para_env_type + USE dbcsr_api, ONLY: & + dbcsr_add, dbcsr_get_block_p, dbcsr_iterator_blocks_left, dbcsr_iterator_next_block, & + dbcsr_iterator_start, dbcsr_iterator_stop, dbcsr_iterator_type, dbcsr_p_type, dbcsr_type + USE distribution_1d_types, ONLY: distribution_1d_type + USE ewald_environment_types, ONLY: ewald_env_get,& + ewald_environment_type + USE ewald_methods_tb, ONLY: tb_ewald_overlap,& + tb_spme_zforce + USE ewald_pw_types, ONLY: ewald_pw_type + USE kinds, ONLY: dp + USE mathconstants, ONLY: oorootpi,& + pi + USE message_passing, ONLY: mp_sum + USE particle_types, ONLY: particle_type + USE pw_poisson_types, ONLY: do_ewald_ewald,& + do_ewald_none,& + do_ewald_pme,& + do_ewald_spme + USE qs_energy_types, ONLY: qs_energy_type + USE qs_environment_types, ONLY: get_qs_env,& + qs_environment_type + USE qs_force_types, ONLY: qs_force_type + USE qs_kind_types, ONLY: get_qs_kind,& + qs_kind_type + USE qs_neighbor_list_types, ONLY: get_iterator_info,& + neighbor_list_iterate,& + neighbor_list_iterator_create,& + neighbor_list_iterator_p_type,& + neighbor_list_iterator_release,& + neighbor_list_set_p_type + USE qs_rho_types, ONLY: qs_rho_type + USE virial_types, ONLY: virial_type + USE xtb_coulomb, ONLY: dgamma_rab_sr,& + gamma_rab_sr + USE xtb_types, ONLY: get_xtb_atom_param,& + xtb_atom_type +#include "./base/base_uses.f90" + + IMPLICIT NONE + + PRIVATE + + CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xtb_ehess_force' + + PUBLIC :: calc_xtb_ehess_force + +! ************************************************************************************************** + +CONTAINS + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param matrix_p0 ... +!> \param matrix_p1 ... +!> \param charges0 ... +!> \param mcharge0 ... +!> \param charges1 ... +!> \param mcharge1 ... +!> \param debug_forces ... +! ************************************************************************************************** + SUBROUTINE calc_xtb_ehess_force(qs_env, matrix_p0, matrix_p1, charges0, mcharge0, & + charges1, mcharge1, debug_forces) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_p0, matrix_p1 + REAL(KIND=dp), DIMENSION(:, :), INTENT(in) :: charges0 + REAL(KIND=dp), DIMENSION(:), INTENT(in) :: mcharge0 + REAL(KIND=dp), DIMENSION(:, :), INTENT(in) :: charges1 + REAL(KIND=dp), DIMENSION(:), INTENT(in) :: mcharge1 + LOGICAL, INTENT(IN) :: debug_forces + + CHARACTER(len=*), PARAMETER :: routineN = 'calc_xtb_ehess_force' + + INTEGER :: atom_i, atom_j, blk, ewald_type, handle, i, ia, iatom, icol, ikind, iounit, irow, & + j, jatom, jkind, la, lb, lmaxa, lmaxb, natom, natorb_a, natorb_b, ni, nimg, nj, nkind, & + nmat, za, zb + INTEGER, DIMENSION(25) :: laoa, laob + INTEGER, DIMENSION(3) :: cellind, periodic + INTEGER, DIMENSION(:), POINTER :: atom_of_kind, kind_of + LOGICAL :: calculate_forces, defined, do_ewald, & + found, just_energy, use_virial + REAL(KIND=dp) :: alpha, deth, dr, etaa, etab, fi, gmij0, & + gmij1, kg, rcut, rcuta, rcutb + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: xgamma + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: gammab, gcij0, gcij1, gmcharge0, & + gmcharge1 + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: gchrg0, gchrg1 + REAL(KIND=dp), DIMENSION(3) :: fij, fodeb, rij + REAL(KIND=dp), DIMENSION(5) :: kappaa, kappab + REAL(KIND=dp), DIMENSION(:, :), POINTER :: dsblock, pblock0, pblock1, sblock + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(atprop_type), POINTER :: atprop + TYPE(cell_type), POINTER :: cell + TYPE(cp_logger_type), POINTER :: logger + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_iterator_type) :: iter + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_s + TYPE(dft_control_type), POINTER :: dft_control + TYPE(distribution_1d_type), POINTER :: local_particles + TYPE(ewald_environment_type), POINTER :: ewald_env + TYPE(ewald_pw_type), POINTER :: ewald_pw + TYPE(neighbor_list_iterator_p_type), & + DIMENSION(:), POINTER :: nl_iterator + TYPE(neighbor_list_set_p_type), DIMENSION(:), & + POINTER :: n_list + TYPE(particle_type), DIMENSION(:), POINTER :: particle_set + TYPE(qs_energy_type), POINTER :: energy + TYPE(qs_force_type), DIMENSION(:), POINTER :: force + TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set + TYPE(qs_rho_type), POINTER :: rho + TYPE(virial_type), POINTER :: virial + TYPE(xtb_atom_type), POINTER :: xtb_atom_a, xtb_atom_b, xtb_kind + + CALL timeset(routineN, handle) + + logger => cp_get_default_logger() + IF (logger%para_env%ionode) THEN + iounit = cp_logger_get_default_unit_nr(logger, local=.TRUE.) + ELSE + iounit = -1 + ENDIF + + CPASSERT(ASSOCIATED(matrix_p1)) + + CALL get_qs_env(qs_env, & + qs_kind_set=qs_kind_set, & + particle_set=particle_set, & + cell=cell, & + rho=rho, & + energy=energy, & + virial=virial, & + atprop=atprop, & + dft_control=dft_control) + + calculate_forces = .TRUE. + just_energy = .FALSE. + use_virial = .FALSE. + nmat = 4 + nimg = dft_control%nimages + IF (nimg > 1) THEN + CPABORT('xTB-sTDA forces for k-points not available') + END IF + + CALL get_qs_env(qs_env, nkind=nkind, natom=natom) + ALLOCATE (gchrg0(natom, 5, nmat)) + gchrg0 = 0._dp + ALLOCATE (gmcharge0(natom, nmat)) + gmcharge0 = 0._dp + ALLOCATE (gchrg1(natom, 5, nmat)) + gchrg1 = 0._dp + ALLOCATE (gmcharge1(natom, nmat)) + gmcharge1 = 0._dp + + ! short range contribution (gamma) + ! loop over all atom pairs with a non-zero overlap (sab_orb) + kg = dft_control%qs_control%xtb_control%kg + NULLIFY (n_list) + CALL get_qs_env(qs_env=qs_env, sab_orb=n_list) + CALL neighbor_list_iterator_create(nl_iterator, n_list) + DO WHILE (neighbor_list_iterate(nl_iterator) == 0) + CALL get_iterator_info(nl_iterator, ikind=ikind, jkind=jkind, & + iatom=iatom, jatom=jatom, r=rij, cell=cellind) + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom_a) + CALL get_xtb_atom_param(xtb_atom_a, defined=defined, natorb=natorb_a) + IF (.NOT. defined .OR. natorb_a < 1) CYCLE + CALL get_qs_kind(qs_kind_set(jkind), xtb_parameter=xtb_atom_b) + CALL get_xtb_atom_param(xtb_atom_b, defined=defined, natorb=natorb_b) + IF (.NOT. defined .OR. natorb_b < 1) CYCLE + ! atomic parameters + CALL get_xtb_atom_param(xtb_atom_a, eta=etaa, lmax=lmaxa, kappa=kappaa, rcut=rcuta) + CALL get_xtb_atom_param(xtb_atom_b, eta=etab, lmax=lmaxb, kappa=kappab, rcut=rcutb) + ! gamma matrix + ni = lmaxa + 1 + nj = lmaxb + 1 + ALLOCATE (gammab(ni, nj)) + rcut = rcuta + rcutb + dr = SQRT(SUM(rij(:)**2)) + CALL gamma_rab_sr(gammab, dr, ni, kappaa, etaa, nj, kappab, etab, kg, rcut) + gchrg0(iatom, 1:ni, 1) = gchrg0(iatom, 1:ni, 1) + MATMUL(gammab, charges0(jatom, 1:nj)) + gchrg1(iatom, 1:ni, 1) = gchrg1(iatom, 1:ni, 1) + MATMUL(gammab, charges1(jatom, 1:nj)) + IF (iatom /= jatom) THEN + gchrg0(jatom, 1:nj, 1) = gchrg0(jatom, 1:nj, 1) + MATMUL(charges0(iatom, 1:ni), gammab) + gchrg1(jatom, 1:nj, 1) = gchrg1(jatom, 1:nj, 1) + MATMUL(charges1(iatom, 1:ni), gammab) + END IF + IF (dr > 1.e-6_dp) THEN + CALL dgamma_rab_sr(gammab, dr, ni, kappaa, etaa, nj, kappab, etab, kg, rcut) + DO i = 1, 3 + gchrg0(iatom, 1:ni, i + 1) = gchrg0(iatom, 1:ni, i + 1) & + + MATMUL(gammab, charges0(jatom, 1:nj))*rij(i)/dr + gchrg1(iatom, 1:ni, i + 1) = gchrg1(iatom, 1:ni, i + 1) & + + MATMUL(gammab, charges1(jatom, 1:nj))*rij(i)/dr + IF (iatom /= jatom) THEN + gchrg0(jatom, 1:nj, i + 1) = gchrg0(jatom, 1:nj, i + 1) & + - MATMUL(charges0(iatom, 1:ni), gammab)*rij(i)/dr + gchrg1(jatom, 1:nj, i + 1) = gchrg1(jatom, 1:nj, i + 1) & + - MATMUL(charges1(iatom, 1:ni), gammab)*rij(i)/dr + END IF + END DO + END IF + DEALLOCATE (gammab) + END DO + CALL neighbor_list_iterator_release(nl_iterator) + + ! 1/R contribution + + IF (dft_control%qs_control%xtb_control%coulomb_lr) THEN + do_ewald = dft_control%qs_control%xtb_control%do_ewald + IF (do_ewald) THEN + ! Ewald sum + NULLIFY (ewald_env, ewald_pw) + CALL get_qs_env(qs_env=qs_env, & + ewald_env=ewald_env, ewald_pw=ewald_pw) + CALL get_cell(cell=cell, periodic=periodic, deth=deth) + CALL ewald_env_get(ewald_env, alpha=alpha, ewald_type=ewald_type) + CALL get_qs_env(qs_env=qs_env, sab_tbe=n_list) + CALL tb_ewald_overlap(gmcharge0, mcharge0, alpha, n_list, virial, use_virial, atprop) + CALL tb_ewald_overlap(gmcharge1, mcharge1, alpha, n_list, virial, use_virial, atprop) + SELECT CASE (ewald_type) + CASE DEFAULT + CPABORT("Invalid Ewald type") + CASE (do_ewald_none) + CPABORT("Not allowed with DFTB") + CASE (do_ewald_ewald) + CPABORT("Standard Ewald not implemented in DFTB") + CASE (do_ewald_pme) + CPABORT("PME not implemented in DFTB") + CASE (do_ewald_spme) + CALL tb_spme_zforce(ewald_env, ewald_pw, particle_set, cell, gmcharge0, mcharge0) + CALL tb_spme_zforce(ewald_env, ewald_pw, particle_set, cell, gmcharge1, mcharge1) + END SELECT + ELSE + ! direct sum + CALL get_qs_env(qs_env=qs_env, local_particles=local_particles) + DO ikind = 1, SIZE(local_particles%n_el) + DO ia = 1, local_particles%n_el(ikind) + iatom = local_particles%list(ikind)%array(ia) + DO jatom = 1, iatom - 1 + rij = particle_set(iatom)%r - particle_set(jatom)%r + rij = pbc(rij, cell) + dr = SQRT(SUM(rij(:)**2)) + IF (dr > 1.e-6_dp) THEN + gmcharge0(iatom, 1) = gmcharge0(iatom, 1) + mcharge0(jatom)/dr + gmcharge0(jatom, 1) = gmcharge0(jatom, 1) + mcharge0(iatom)/dr + gmcharge1(iatom, 1) = gmcharge1(iatom, 1) + mcharge1(jatom)/dr + gmcharge1(jatom, 1) = gmcharge1(jatom, 1) + mcharge1(iatom)/dr + DO i = 2, nmat + gmcharge0(iatom, i) = gmcharge0(iatom, i) + rij(i - 1)*mcharge0(jatom)/dr**3 + gmcharge0(jatom, i) = gmcharge0(jatom, i) - rij(i - 1)*mcharge0(iatom)/dr**3 + gmcharge1(iatom, i) = gmcharge1(iatom, i) + rij(i - 1)*mcharge1(jatom)/dr**3 + gmcharge1(jatom, i) = gmcharge1(jatom, i) - rij(i - 1)*mcharge1(iatom)/dr**3 + END DO + END IF + END DO + END DO + END DO + CPASSERT(.NOT. use_virial) + END IF + END IF + + ! global sum of gamma*p arrays + CALL get_qs_env(qs_env=qs_env, & + atomic_kind_set=atomic_kind_set, & + force=force, para_env=para_env) + CALL mp_sum(gmcharge0(:, 1), para_env%group) + CALL mp_sum(gchrg0(:, :, 1), para_env%group) + CALL mp_sum(gmcharge1(:, 1), para_env%group) + CALL mp_sum(gchrg1(:, :, 1), para_env%group) + + IF (dft_control%qs_control%xtb_control%coulomb_lr) THEN + IF (do_ewald) THEN + ! add self charge interaction and background charge contribution + gmcharge0(:, 1) = gmcharge0(:, 1) - 2._dp*alpha*oorootpi*mcharge0(:) + IF (ANY(periodic(:) == 1)) THEN + gmcharge0(:, 1) = gmcharge0(:, 1) - pi/alpha**2/deth + END IF + gmcharge1(:, 1) = gmcharge1(:, 1) - 2._dp*alpha*oorootpi*mcharge1(:) + IF (ANY(periodic(:) == 1)) THEN + gmcharge1(:, 1) = gmcharge1(:, 1) - pi/alpha**2/deth + END IF + END IF + END IF + + ALLOCATE (atom_of_kind(natom), kind_of(natom)) + CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, & + kind_of=kind_of, & + atom_of_kind=atom_of_kind) + + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + DO iatom = 1, natom + ikind = kind_of(iatom) + atom_i = atom_of_kind(iatom) + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind) + CALL get_xtb_atom_param(xtb_kind, lmax=ni) + ni = ni + 1 + ! short range + fij = 0.0_dp + DO i = 1, 3 + fij(i) = SUM(charges0(iatom, 1:ni)*gchrg1(iatom, 1:ni, i + 1)) + & + SUM(charges1(iatom, 1:ni)*gchrg0(iatom, 1:ni, i + 1)) + END DO + force(ikind)%rho_elec(1, atom_i) = force(ikind)%rho_elec(1, atom_i) - fij(1) + force(ikind)%rho_elec(2, atom_i) = force(ikind)%rho_elec(2, atom_i) - fij(2) + force(ikind)%rho_elec(3, atom_i) = force(ikind)%rho_elec(3, atom_i) - fij(3) + ! long range + fij = 0.0_dp + DO i = 1, 3 + fij(i) = gmcharge1(iatom, i + 1)*mcharge0(iatom) + & + gmcharge0(iatom, i + 1)*mcharge1(iatom) + END DO + force(ikind)%rho_elec(1, atom_i) = force(ikind)%rho_elec(1, atom_i) - fij(1) + force(ikind)%rho_elec(2, atom_i) = force(ikind)%rho_elec(2, atom_i) - fij(2) + force(ikind)%rho_elec(3, atom_i) = force(ikind)%rho_elec(3, atom_i) - fij(3) + END DO + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: P*dH[Pz] ", fodeb + END IF + + CALL get_qs_env(qs_env=qs_env, matrix_s_kp=matrix_s) + + IF (SIZE(matrix_p0) == 2) THEN + CALL dbcsr_add(matrix_p0(1)%matrix, matrix_p0(2)%matrix, & + alpha_scalar=1.0_dp, beta_scalar=1.0_dp) + CALL dbcsr_add(matrix_p1(1)%matrix, matrix_p1(2)%matrix, & + alpha_scalar=1.0_dp, beta_scalar=1.0_dp) + END IF + + ! no k-points; all matrices have been transformed to periodic bsf + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + CALL dbcsr_iterator_start(iter, matrix_s(1, 1)%matrix) + DO WHILE (dbcsr_iterator_blocks_left(iter)) + CALL dbcsr_iterator_next_block(iter, irow, icol, sblock, blk) + ikind = kind_of(irow) + jkind = kind_of(icol) + + ! atomic parameters + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom_a) + CALL get_qs_kind(qs_kind_set(jkind), xtb_parameter=xtb_atom_b) + CALL get_xtb_atom_param(xtb_atom_a, z=za, lao=laoa) + CALL get_xtb_atom_param(xtb_atom_b, z=zb, lao=laob) + + ni = SIZE(sblock, 1) + nj = SIZE(sblock, 2) + ALLOCATE (gcij0(ni, nj)) + ALLOCATE (gcij1(ni, nj)) + DO i = 1, ni + DO j = 1, nj + la = laoa(i) + 1 + lb = laob(j) + 1 + gcij0(i, j) = 0.5_dp*(gchrg0(irow, la, 1) + gchrg0(icol, lb, 1)) + gcij1(i, j) = 0.5_dp*(gchrg1(irow, la, 1) + gchrg1(icol, lb, 1)) + END DO + END DO + gmij0 = 0.5_dp*(gmcharge0(irow, 1) + gmcharge0(icol, 1)) + gmij1 = 0.5_dp*(gmcharge1(irow, 1) + gmcharge1(icol, 1)) + atom_i = atom_of_kind(irow) + atom_j = atom_of_kind(icol) + NULLIFY (pblock0) + CALL dbcsr_get_block_p(matrix=matrix_p0(1)%matrix, & + row=irow, col=icol, block=pblock0, found=found) + CPASSERT(found) + NULLIFY (pblock1) + CALL dbcsr_get_block_p(matrix=matrix_p1(1)%matrix, & + row=irow, col=icol, block=pblock1, found=found) + CPASSERT(found) + DO i = 1, 3 + NULLIFY (dsblock) + CALL dbcsr_get_block_p(matrix=matrix_s(1 + i, 1)%matrix, & + row=irow, col=icol, block=dsblock, found=found) + CPASSERT(found) + ! short range + fi = -2.0_dp*SUM(pblock0*dsblock*gcij1) - 2.0_dp*SUM(pblock1*dsblock*gcij0) + force(ikind)%rho_elec(i, atom_i) = force(ikind)%rho_elec(i, atom_i) + fi + force(jkind)%rho_elec(i, atom_j) = force(jkind)%rho_elec(i, atom_j) - fi + ! long range + fi = -2.0_dp*gmij1*SUM(pblock0*dsblock) - 2.0_dp*gmij0*SUM(pblock1*dsblock) + force(ikind)%rho_elec(i, atom_i) = force(ikind)%rho_elec(i, atom_i) + fi + force(jkind)%rho_elec(i, atom_j) = force(jkind)%rho_elec(i, atom_j) - fi + END DO + DEALLOCATE (gcij0, gcij1) + ENDDO + CALL dbcsr_iterator_stop(iter) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Pz*H[P]*dS ", fodeb + END IF + + IF (dft_control%qs_control%xtb_control%tb3_interaction) THEN + CALL get_qs_env(qs_env, nkind=nkind) + ALLOCATE (xgamma(nkind)) + DO ikind = 1, nkind + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind) + CALL get_xtb_atom_param(xtb_kind, xgamma=xgamma(ikind)) + END DO + ! Diagonal 3rd order correction (DFTB3) + IF (debug_forces) fodeb(1:3) = force(1)%rho_elec(1:3, 1) + CALL dftb3_diagonal_hessian_force(qs_env, mcharge0, mcharge1, & + matrix_p0(1)%matrix, matrix_p1(1)%matrix, xgamma) + IF (debug_forces) THEN + fodeb(1:3) = force(1)%rho_elec(1:3, 1) - fodeb(1:3) + CALL mp_sum(fodeb, para_env%group) + IF (iounit > 0) WRITE (iounit, "(T3,A,T33,3F16.8)") "DEBUG:: Pz*H3[P] ", fodeb + END IF + DEALLOCATE (xgamma) + END IF + + IF (SIZE(matrix_p0) == 2) THEN + CALL dbcsr_add(matrix_p0(1)%matrix, matrix_p0(2)%matrix, & + alpha_scalar=1.0_dp, beta_scalar=-1.0_dp) + CALL dbcsr_add(matrix_p1(1)%matrix, matrix_p1(2)%matrix, & + alpha_scalar=1.0_dp, beta_scalar=-1.0_dp) + END IF + + ! QMMM + IF (qs_env%qmmm .AND. qs_env%qmmm_periodic) THEN + CPABORT("Not Available") + END IF + + DEALLOCATE (gmcharge0, gchrg0, gmcharge1, gchrg1) + DEALLOCATE (atom_of_kind, kind_of) + + CALL timestop(handle) + + END SUBROUTINE calc_xtb_ehess_force + +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param mcharge0 ... +!> \param mcharge1 ... +!> \param matrixp0 ... +!> \param matrixp1 ... +!> \param xgamma ... +! ************************************************************************************************** + SUBROUTINE dftb3_diagonal_hessian_force(qs_env, mcharge0, mcharge1, & + matrixp0, matrixp1, xgamma) + + TYPE(qs_environment_type), POINTER :: qs_env + REAL(dp), DIMENSION(:) :: mcharge0, mcharge1 + TYPE(dbcsr_type), POINTER :: matrixp0, matrixp1 + REAL(dp), DIMENSION(:) :: xgamma + + CHARACTER(len=*), PARAMETER :: routineN = 'dftb3_diagonal_hessian_force' + + INTEGER :: atom_i, atom_j, blk, handle, i, icol, & + ikind, irow, jkind, natom + INTEGER, DIMENSION(:), POINTER :: atom_of_kind, kind_of + LOGICAL :: found + REAL(KIND=dp) :: fi, gmijp, gmijq, ui, uj + REAL(KIND=dp), DIMENSION(:, :), POINTER :: dsblock, p0block, p1block, sblock + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(dbcsr_iterator_type) :: iter + TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s + TYPE(qs_force_type), DIMENSION(:), POINTER :: force + + CALL timeset(routineN, handle) + CALL get_qs_env(qs_env=qs_env, matrix_s=matrix_s, natom=natom) + ALLOCATE (atom_of_kind(natom), kind_of(natom)) + CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set) + CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, & + kind_of=kind_of, atom_of_kind=atom_of_kind) + CALL get_qs_env(qs_env=qs_env, force=force) + ! no k-points; all matrices have been transformed to periodic bsf + CALL dbcsr_iterator_start(iter, matrix_s(1)%matrix) + DO WHILE (dbcsr_iterator_blocks_left(iter)) + CALL dbcsr_iterator_next_block(iter, irow, icol, sblock, blk) + ikind = kind_of(irow) + atom_i = atom_of_kind(irow) + ui = xgamma(ikind) + jkind = kind_of(icol) + atom_j = atom_of_kind(icol) + uj = xgamma(jkind) + ! + gmijp = ui*mcharge0(irow)*mcharge1(irow) + uj*mcharge0(icol)*mcharge1(icol) + gmijq = 0.5_dp*ui*mcharge0(irow)**2 + 0.5_dp*uj*mcharge0(icol)**2 + ! + NULLIFY (p0block) + CALL dbcsr_get_block_p(matrix=matrixp0, & + row=irow, col=icol, block=p0block, found=found) + CPASSERT(found) + NULLIFY (p1block) + CALL dbcsr_get_block_p(matrix=matrixp1, & + row=irow, col=icol, block=p1block, found=found) + CPASSERT(found) + DO i = 1, 3 + NULLIFY (dsblock) + CALL dbcsr_get_block_p(matrix=matrix_s(1 + i)%matrix, & + row=irow, col=icol, block=dsblock, found=found) + CPASSERT(found) + fi = gmijp*SUM(p0block*dsblock) + gmijq*SUM(p1block*dsblock) + force(ikind)%rho_elec(i, atom_i) = force(ikind)%rho_elec(i, atom_i) + fi + force(jkind)%rho_elec(i, atom_j) = force(jkind)%rho_elec(i, atom_j) - fi + END DO + ENDDO + CALL dbcsr_iterator_stop(iter) + DEALLOCATE (atom_of_kind, kind_of) + + CALL timestop(handle) + + END SUBROUTINE dftb3_diagonal_hessian_force + +END MODULE xtb_ehess_force + diff --git a/src/xtb_matrices.F b/src/xtb_matrices.F index 31f66e0e5d..a762824bfc 100644 --- a/src/xtb_matrices.F +++ b/src/xtb_matrices.F @@ -28,7 +28,8 @@ MODULE xtb_matrices USE cp_control_types, ONLY: dft_control_type,& xtb_control_type USE cp_dbcsr_cp2k_link, ONLY: cp_dbcsr_alloc_block_from_nbl - USE cp_dbcsr_operations, ONLY: dbcsr_allocate_matrix_set + USE cp_dbcsr_operations, ONLY: dbcsr_allocate_matrix_set,& + dbcsr_deallocate_matrix_set USE cp_dbcsr_output, ONLY: cp_dbcsr_write_sparse_matrix USE cp_log_handling, ONLY: cp_get_default_logger,& cp_logger_get_default_io_unit,& @@ -121,7 +122,7 @@ MODULE xtb_matrices CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xtb_matrices' - PUBLIC :: build_xtb_matrices, build_xtb_ks_matrix + PUBLIC :: build_xtb_matrices, build_xtb_ks_matrix, xtb_hab_force CONTAINS @@ -981,6 +982,563 @@ CONTAINS END SUBROUTINE build_xtb_matrices +! ************************************************************************************************** +!> \brief ... +!> \param qs_env ... +!> \param p_matrix ... +! ************************************************************************************************** + SUBROUTINE xtb_hab_force(qs_env, p_matrix) + + TYPE(qs_environment_type), POINTER :: qs_env + TYPE(dbcsr_type), POINTER :: p_matrix + + CHARACTER(LEN=*), PARAMETER :: routineN = 'xtb_hab_force', routineP = moduleN//':'//routineN + + INTEGER :: atom_a, atom_b, atom_c, handle, i, iatom, ic, icol, ikind, img, ir, irow, iset, & + j, jatom, jkind, jset, katom, kkind, la, lb, ldsab, lmaxa, lmaxb, maxder, maxs, n1, n2, & + na, natom, natorb_a, natorb_b, nb, ncoa, ncob, nderivatives, nimg, nkind, nsa, nsb, & + nseta, nsetb, nshell, sgfa, sgfb, za, zb + INTEGER, ALLOCATABLE, DIMENSION(:) :: atom_of_kind, atomnumber, kind_of + INTEGER, DIMENSION(25) :: laoa, laob, lval, naoa, naob + INTEGER, DIMENSION(3) :: cell + INTEGER, DIMENSION(:), POINTER :: la_max, la_min, lb_max, lb_min, npgfa, & + npgfb, nsgfa, nsgfb + INTEGER, DIMENSION(:, :), POINTER :: first_sgfa, first_sgfb + LOGICAL :: defined, diagblock, floating_a, found, & + ghost_a, use_virial, xb_inter + LOGICAL, ALLOCATABLE, DIMENSION(:) :: floating, ghost + REAL(KIND=dp) :: alphaa, alphab, dfp, dhij, dr, drk, drx, ena, enb, etaa, etab, f0, fen, & + fhua, fhub, fhud, foab, hij, k2sh, kab, kcnd, kcnp, kcns, kd, ken, kf, kg, kia, kjb, kp, & + ks, ksp, kx2, kxr, rcova, rcovab, rcovb, rrab, zneffa, zneffb + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: cnumbers + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: dfblock, huckel, kcnlk, owork + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: oint, sint + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :, :) :: kijab + REAL(KIND=dp), DIMENSION(0:3) :: kl + REAL(KIND=dp), DIMENSION(3) :: fdik, fdika, fdikb, force_ab, rij, rik + REAL(KIND=dp), DIMENSION(5) :: dpia, dpib, hena, henb, kappaa, kappab, & + kpolya, kpolyb, pia, pib + REAL(KIND=dp), DIMENSION(:), POINTER :: set_radius_a, set_radius_b + REAL(KIND=dp), DIMENSION(:, :), POINTER :: fblock, pblock, rpgfa, rpgfb, sblock, & + scon_a, scon_b, zeta, zetb + TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set + TYPE(block_p_type), DIMENSION(2:4) :: dsblocks + TYPE(cp_logger_type), POINTER :: logger + TYPE(cp_para_env_type), POINTER :: para_env + TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_h, matrix_s + TYPE(dcnum_type), ALLOCATABLE, DIMENSION(:) :: dcnum + TYPE(dft_control_type), POINTER :: dft_control + TYPE(gto_basis_set_p_type), DIMENSION(:), POINTER :: basis_set_list + TYPE(gto_basis_set_type), POINTER :: basis_set_a, basis_set_b + TYPE(neighbor_atoms_type), ALLOCATABLE, & + DIMENSION(:) :: neighbor_atoms + TYPE(neighbor_list_iterator_p_type), & + DIMENSION(:), POINTER :: nl_iterator + TYPE(neighbor_list_set_p_type), DIMENSION(:), & + POINTER :: sab_orb + TYPE(particle_type), DIMENSION(:), POINTER :: particle_set + TYPE(qs_dispersion_type), POINTER :: dispersion_env + TYPE(qs_force_type), DIMENSION(:), POINTER :: force + TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set + TYPE(qs_ks_env_type), POINTER :: ks_env + TYPE(xtb_atom_type), POINTER :: xtb_atom_a, xtb_atom_b + TYPE(xtb_control_type), POINTER :: xtb_control + + CALL timeset(routineN, handle) + + NULLIFY (logger) + logger => cp_get_default_logger() + + NULLIFY (matrix_h, matrix_s, atomic_kind_set, qs_kind_set, sab_orb) + + CALL get_qs_env(qs_env=qs_env, & + atomic_kind_set=atomic_kind_set, & + qs_kind_set=qs_kind_set, & + dft_control=dft_control, & + para_env=para_env, & + sab_orb=sab_orb) + + nkind = SIZE(atomic_kind_set) + xtb_control => dft_control%qs_control%xtb_control + nimg = dft_control%nimages + nderivatives = 1 + maxder = ncoset(nderivatives) + + ! global parameters (Table 2 from Ref.) + ks = xtb_control%ks + kp = xtb_control%kp + kd = xtb_control%kd + ksp = xtb_control%ksp + k2sh = xtb_control%k2sh + kg = xtb_control%kg + kf = xtb_control%kf + kcns = xtb_control%kcns + kcnp = xtb_control%kcnp + kcnd = xtb_control%kcnd + ken = xtb_control%ken + kxr = xtb_control%kxr + kx2 = xtb_control%kx2 + + NULLIFY (particle_set) + CALL get_qs_env(qs_env=qs_env, particle_set=particle_set) + natom = SIZE(particle_set) + ALLOCATE (atom_of_kind(natom)) + CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, atom_of_kind=atom_of_kind) + CALL get_qs_kind_set(qs_kind_set=qs_kind_set, maxsgf=maxs, basis_type="ORB") + + NULLIFY (force) + CALL get_qs_env(qs_env=qs_env, force=force) + use_virial = .FALSE. + CPASSERT(nimg == 1) + + ! set up basis set lists + ALLOCATE (basis_set_list(nkind)) + CALL basis_set_list_setup(basis_set_list, "ORB", qs_kind_set) + + ! allocate overlap matrix + CALL get_qs_env(qs_env=qs_env, ks_env=ks_env) + CALL dbcsr_allocate_matrix_set(matrix_s, maxder, nimg) + CALL create_sab_matrix(ks_env, matrix_s, "xTB OVERLAP MATRIX", basis_set_list, basis_set_list, & + sab_orb, .TRUE.) + ! initialize H matrix + CALL dbcsr_allocate_matrix_set(matrix_h, 1, nimg) + DO img = 1, nimg + ALLOCATE (matrix_h(1, img)%matrix) + CALL dbcsr_create(matrix_h(1, img)%matrix, template=matrix_s(1, 1)%matrix, & + name="HAMILTONIAN MATRIX") + CALL cp_dbcsr_alloc_block_from_nbl(matrix_h(1, img)%matrix, sab_orb) + END DO + + ! Calculate coordination numbers + ! needed for effective atomic energy levels (Eq. 12) + ! code taken from D3 dispersion energy + ALLOCATE (cnumbers(natom)) + cnumbers = 0._dp + ALLOCATE (dcnum(natom)) + dcnum(:)%neighbors = 0 + DO iatom = 1, natom + ALLOCATE (dcnum(iatom)%nlist(10), dcnum(iatom)%dvals(10), dcnum(iatom)%rik(3, 10)) + END DO + + ALLOCATE (ghost(nkind), floating(nkind), atomnumber(nkind)) + DO ikind = 1, nkind + CALL get_atomic_kind(atomic_kind_set(ikind), z=za) + CALL get_qs_kind(qs_kind_set(ikind), ghost=ghost_a, floating=floating_a) + ghost(ikind) = ghost_a + floating(ikind) = floating_a + atomnumber(ikind) = za + END DO + CALL get_qs_env(qs_env=qs_env, dispersion_env=dispersion_env) + CALL d3_cnumber(qs_env, dispersion_env, cnumbers, dcnum, ghost, floating, atomnumber, & + .TRUE., .FALSE.) + DEALLOCATE (ghost, floating, atomnumber) + CALL mp_sum(cnumbers, para_env%group) + CALL dcnum_distribute(dcnum, para_env) + + ! Calculate Huckel parameters + ! Eq 12 + ! huckel(nshell,natom) + ALLOCATE (kcnlk(0:3, nkind)) + DO ikind = 1, nkind + CALL get_atomic_kind(atomic_kind_set(ikind), z=za) + IF (metal(za)) THEN + kcnlk(0:3, ikind) = 0.0_dp + ELSEIF (early3d(za)) THEN + kcnlk(0, ikind) = kcns + kcnlk(1, ikind) = kcnp + kcnlk(2, ikind) = 0.005_dp + kcnlk(3, ikind) = 0.0_dp + ELSE + kcnlk(0, ikind) = kcns + kcnlk(1, ikind) = kcnp + kcnlk(2, ikind) = kcnd + kcnlk(3, ikind) = 0.0_dp + END IF + END DO + ALLOCATE (huckel(5, natom), kind_of(natom)) + CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, kind_of=kind_of) + DO iatom = 1, natom + ikind = kind_of(iatom) + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom_a) + CALL get_xtb_atom_param(xtb_atom_a, nshell=nshell, lval=lval, hen=hena) + huckel(:, iatom) = 0.0_dp + DO i = 1, nshell + huckel(i, iatom) = hena(i)*(1._dp + kcnlk(lval(i), ikind)*cnumbers(iatom)) + END DO + END DO + + ! Calculate KAB parameters and Huckel parameters and electronegativity correction + kl(0) = ks + kl(1) = kp + kl(2) = kd + kl(3) = 0.0_dp + ALLOCATE (kijab(maxs, maxs, nkind, nkind)) + kijab = 0.0_dp + DO ikind = 1, nkind + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom_a) + CALL get_xtb_atom_param(xtb_atom_a, defined=defined, natorb=natorb_a) + IF (.NOT. defined .OR. natorb_a < 1) CYCLE + CALL get_xtb_atom_param(xtb_atom_a, z=za, nao=naoa, lao=laoa, electronegativity=ena) + DO jkind = 1, nkind + CALL get_qs_kind(qs_kind_set(jkind), xtb_parameter=xtb_atom_b) + CALL get_xtb_atom_param(xtb_atom_b, defined=defined, natorb=natorb_b) + IF (.NOT. defined .OR. natorb_b < 1) CYCLE + CALL get_xtb_atom_param(xtb_atom_b, z=zb, nao=naob, lao=laob, electronegativity=enb) + ! get Fen = (1+ken*deltaEN^2) + fen = 1.0_dp + ken*(ena - enb)**2 + ! Kab + kab = xtb_set_kab(za, zb, xtb_control) + DO j = 1, natorb_b + lb = laob(j) + nb = naob(j) + DO i = 1, natorb_a + la = laoa(i) + na = naoa(i) + kia = kl(la) + kjb = kl(lb) + IF (zb == 1 .AND. nb == 2) kjb = k2sh + IF (za == 1 .AND. na == 2) kia = k2sh + IF ((zb == 1 .AND. nb == 2) .OR. (za == 1 .AND. na == 2)) THEN + kijab(i, j, ikind, jkind) = 0.5_dp*(kia + kjb) + ELSE + IF ((la == 0 .AND. lb == 1) .OR. (la == 1 .AND. lb == 0)) THEN + kijab(i, j, ikind, jkind) = ksp*kab*fen + ELSE + kijab(i, j, ikind, jkind) = 0.5_dp*(kia + kjb)*kab*fen + END IF + END IF + END DO + END DO + END DO + END DO + + ! loop over all atom pairs with a non-zero overlap (sab_orb) + CALL neighbor_list_iterator_create(nl_iterator, sab_orb) + DO WHILE (neighbor_list_iterate(nl_iterator) == 0) + CALL get_iterator_info(nl_iterator, ikind=ikind, jkind=jkind, & + iatom=iatom, jatom=jatom, r=rij, cell=cell) + CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom_a) + CALL get_xtb_atom_param(xtb_atom_a, defined=defined, natorb=natorb_a) + IF (.NOT. defined .OR. natorb_a < 1) CYCLE + CALL get_qs_kind(qs_kind_set(jkind), xtb_parameter=xtb_atom_b) + CALL get_xtb_atom_param(xtb_atom_b, defined=defined, natorb=natorb_b) + IF (.NOT. defined .OR. natorb_b < 1) CYCLE + + dr = SQRT(SUM(rij(:)**2)) + + ! neighbor atom for XB term + IF (xb_inter .AND. (dr > 1.e-3_dp)) THEN + IF (ASSOCIATED(neighbor_atoms(ikind)%rab)) THEN + atom_a = atom_of_kind(iatom) + IF (dr < neighbor_atoms(ikind)%rab(atom_a)) THEN + neighbor_atoms(ikind)%rab(atom_a) = dr + neighbor_atoms(ikind)%coord(1:3, atom_a) = rij(1:3) + neighbor_atoms(ikind)%katom(atom_a) = jatom + END IF + END IF + IF (ASSOCIATED(neighbor_atoms(jkind)%rab)) THEN + atom_b = atom_of_kind(jatom) + IF (dr < neighbor_atoms(jkind)%rab(atom_b)) THEN + neighbor_atoms(jkind)%rab(atom_b) = dr + neighbor_atoms(jkind)%coord(1:3, atom_b) = -rij(1:3) + neighbor_atoms(jkind)%katom(atom_b) = iatom + END IF + END IF + END IF + + ! atomic parameters + CALL get_xtb_atom_param(xtb_atom_a, z=za, nao=naoa, lao=laoa, rcov=rcova, eta=etaa, & + lmax=lmaxa, nshell=nsa, alpha=alphaa, zneff=zneffa, kpoly=kpolya, & + kappa=kappaa, hen=hena) + CALL get_xtb_atom_param(xtb_atom_b, z=zb, nao=naob, lao=laob, rcov=rcovb, eta=etab, & + lmax=lmaxb, nshell=nsb, alpha=alphab, zneff=zneffb, kpoly=kpolyb, & + kappa=kappab, hen=henb) + + ic = 1 + + icol = MAX(iatom, jatom) + irow = MIN(iatom, jatom) + NULLIFY (sblock, fblock) + CALL dbcsr_get_block_p(matrix=matrix_s(1, ic)%matrix, & + row=irow, col=icol, BLOCK=sblock, found=found) + CPASSERT(found) + CALL dbcsr_get_block_p(matrix=matrix_h(1, ic)%matrix, & + row=irow, col=icol, BLOCK=fblock, found=found) + CPASSERT(found) + + NULLIFY (pblock) + CALL dbcsr_get_block_p(matrix=p_matrix, & + row=irow, col=icol, block=pblock, found=found) + CPASSERT(ASSOCIATED(pblock)) + DO i = 2, 4 + NULLIFY (dsblocks(i)%block) + CALL dbcsr_get_block_p(matrix=matrix_s(i, ic)%matrix, & + row=irow, col=icol, BLOCK=dsblocks(i)%block, found=found) + CPASSERT(found) + END DO + + ! overlap + basis_set_a => basis_set_list(ikind)%gto_basis_set + IF (.NOT. ASSOCIATED(basis_set_a)) CYCLE + basis_set_b => basis_set_list(jkind)%gto_basis_set + IF (.NOT. ASSOCIATED(basis_set_b)) CYCLE + atom_a = atom_of_kind(iatom) + atom_b = atom_of_kind(jatom) + ! basis ikind + first_sgfa => basis_set_a%first_sgf + la_max => basis_set_a%lmax + la_min => basis_set_a%lmin + npgfa => basis_set_a%npgf + nseta = basis_set_a%nset + nsgfa => basis_set_a%nsgf_set + rpgfa => basis_set_a%pgf_radius + set_radius_a => basis_set_a%set_radius + scon_a => basis_set_a%scon + zeta => basis_set_a%zet + ! basis jkind + first_sgfb => basis_set_b%first_sgf + lb_max => basis_set_b%lmax + lb_min => basis_set_b%lmin + npgfb => basis_set_b%npgf + nsetb = basis_set_b%nset + nsgfb => basis_set_b%nsgf_set + rpgfb => basis_set_b%pgf_radius + set_radius_b => basis_set_b%set_radius + scon_b => basis_set_b%scon + zetb => basis_set_b%zet + + ldsab = get_memory_usage(qs_kind_set, "ORB", "ORB") + ALLOCATE (oint(ldsab, ldsab, maxder), owork(ldsab, ldsab)) + ALLOCATE (sint(natorb_a, natorb_b, maxder)) + sint = 0.0_dp + + DO iset = 1, nseta + ncoa = npgfa(iset)*ncoset(la_max(iset)) + n1 = npgfa(iset)*(ncoset(la_max(iset)) - ncoset(la_min(iset) - 1)) + sgfa = first_sgfa(1, iset) + DO jset = 1, nsetb + IF (set_radius_a(iset) + set_radius_b(jset) < dr) CYCLE + ncob = npgfb(jset)*ncoset(lb_max(jset)) + n2 = npgfb(jset)*(ncoset(lb_max(jset)) - ncoset(lb_min(jset) - 1)) + sgfb = first_sgfb(1, jset) + CALL overlap_ab(la_max(iset), la_min(iset), npgfa(iset), rpgfa(:, iset), zeta(:, iset), & + lb_max(jset), lb_min(jset), npgfb(jset), rpgfb(:, jset), zetb(:, jset), & + rij, sab=oint(:, :, 1), dab=oint(:, :, 2:4)) + ! Contraction + DO i = 1, 4 + CALL contraction(oint(:, :, i), owork, ca=scon_a(:, sgfa:), na=n1, ma=nsgfa(iset), & + cb=scon_b(:, sgfb:), nb=n2, mb=nsgfb(jset), fscale=1.0_dp, trans=.FALSE.) + CALL block_add("IN", owork, nsgfa(iset), nsgfb(jset), sint(:, :, i), sgfa, sgfb, trans=.FALSE.) + END DO + END DO + END DO + ! update S matrix + IF (iatom <= jatom) THEN + sblock(:, :) = sblock(:, :) + sint(:, :, 1) + ELSE + sblock(:, :) = sblock(:, :) + TRANSPOSE(sint(:, :, 1)) + END IF + DO i = 2, 4 + IF (iatom <= jatom) THEN + dsblocks(i)%block(:, :) = dsblocks(i)%block(:, :) + sint(:, :, i) + ELSE + dsblocks(i)%block(:, :) = dsblocks(i)%block(:, :) - TRANSPOSE(sint(:, :, i)) + END IF + END DO + + ! Calculate Pi = Pia * Pib (Eq. 11) + rcovab = rcova + rcovb + rrab = SQRT(dr/rcovab) + DO i = 1, nsa + pia(i) = 1._dp + kpolya(i)*rrab + END DO + DO i = 1, nsb + pib(i) = 1._dp + kpolyb(i)*rrab + END DO + IF (dr > 1.e-6_dp) THEN + drx = 0.5_dp/rrab/rcovab + ELSE + drx = 0.0_dp + END IF + dpia(1:nsa) = drx*kpolya(1:nsa) + dpib(1:nsb) = drx*kpolyb(1:nsb) + + ! diagonal block + diagblock = .FALSE. + IF (iatom == jatom .AND. dr < 0.001_dp) diagblock = .TRUE. + ! + ! Eq. 10 + ! + IF (diagblock) THEN + DO i = 1, natorb_a + na = naoa(i) + fblock(i, i) = fblock(i, i) + huckel(na, iatom) + END DO + ELSE + DO j = 1, natorb_b + nb = naob(j) + DO i = 1, natorb_a + na = naoa(i) + hij = 0.5_dp*(huckel(na, iatom) + huckel(nb, jatom))*pia(na)*pib(nb) + IF (iatom <= jatom) THEN + fblock(i, j) = fblock(i, j) + hij*sint(i, j, 1)*kijab(i, j, ikind, jkind) + ELSE + fblock(j, i) = fblock(j, i) + hij*sint(i, j, 1)*kijab(i, j, ikind, jkind) + END IF + END DO + END DO + END IF + + f0 = 1.0_dp + IF (irow == iatom) f0 = -1.0_dp + ! Derivative wrt coordination number + fhua = 0.0_dp + fhub = 0.0_dp + fhud = 0.0_dp + IF (diagblock) THEN + DO i = 1, natorb_a + la = laoa(i) + na = naoa(i) + fhud = fhud + pblock(i, i)*kcnlk(la, ikind)*hena(na) + END DO + ELSE + DO j = 1, natorb_b + lb = laob(j) + nb = naob(j) + DO i = 1, natorb_a + la = laoa(i) + na = naoa(i) + hij = 0.5_dp*pia(na)*pib(nb) + IF (iatom <= jatom) THEN + fhua = fhua + hij*kijab(i, j, ikind, jkind)*sint(i, j, 1)*pblock(i, j)*kcnlk(la, ikind)*hena(na) + fhub = fhub + hij*kijab(i, j, ikind, jkind)*sint(i, j, 1)*pblock(i, j)*kcnlk(lb, jkind)*henb(nb) + ELSE + fhua = fhua + hij*kijab(i, j, ikind, jkind)*sint(i, j, 1)*pblock(j, i)*kcnlk(la, ikind)*hena(na) + fhub = fhub + hij*kijab(i, j, ikind, jkind)*sint(i, j, 1)*pblock(j, i)*kcnlk(lb, jkind)*henb(nb) + END IF + END DO + END DO + IF (iatom /= jatom) THEN + fhua = 2.0_dp*fhua + fhub = 2.0_dp*fhub + END IF + END IF + ! iatom + atom_a = atom_of_kind(iatom) + DO i = 1, dcnum(iatom)%neighbors + katom = dcnum(iatom)%nlist(i) + kkind = kind_of(katom) + atom_c = atom_of_kind(katom) + rik = dcnum(iatom)%rik(:, i) + drk = SQRT(SUM(rik(:)**2)) + IF (drk > 1.e-3_dp) THEN + fdika(:) = fhua*dcnum(iatom)%dvals(i)*rik(:)/drk + force(ikind)%all_potential(:, atom_a) = force(ikind)%all_potential(:, atom_a) - fdika(:) + force(kkind)%all_potential(:, atom_c) = force(kkind)%all_potential(:, atom_c) + fdika(:) + fdikb(:) = fhud*dcnum(iatom)%dvals(i)*rik(:)/drk + force(ikind)%all_potential(:, atom_a) = force(ikind)%all_potential(:, atom_a) - fdikb(:) + force(kkind)%all_potential(:, atom_c) = force(kkind)%all_potential(:, atom_c) + fdikb(:) + END IF + END DO + ! jatom + atom_b = atom_of_kind(jatom) + DO i = 1, dcnum(jatom)%neighbors + katom = dcnum(jatom)%nlist(i) + kkind = kind_of(katom) + atom_c = atom_of_kind(katom) + rik = dcnum(jatom)%rik(:, i) + drk = SQRT(SUM(rik(:)**2)) + IF (drk > 1.e-3_dp) THEN + fdik(:) = fhub*dcnum(jatom)%dvals(i)*rik(:)/drk + force(jkind)%all_potential(:, atom_b) = force(jkind)%all_potential(:, atom_b) - fdik(:) + force(kkind)%all_potential(:, atom_c) = force(kkind)%all_potential(:, atom_c) + fdik(:) + END IF + END DO + IF (diagblock) THEN + force_ab = 0._dp + ELSE + ! force from R dendent Huckel element + n1 = SIZE(fblock, 1) + n2 = SIZE(fblock, 2) + ALLOCATE (dfblock(n1, n2)) + dfblock = 0.0_dp + DO j = 1, natorb_b + lb = laob(j) + nb = naob(j) + DO i = 1, natorb_a + la = laoa(i) + na = naoa(i) + dhij = 0.5_dp*(huckel(na, iatom) + huckel(nb, jatom))*(dpia(na)*pib(nb) + pia(na)*dpib(nb)) + IF (iatom <= jatom) THEN + dfblock(i, j) = dfblock(i, j) + dhij*sint(i, j, 1)*kijab(i, j, ikind, jkind) + ELSE + dfblock(j, i) = dfblock(j, i) + dhij*sint(i, j, 1)*kijab(i, j, ikind, jkind) + END IF + END DO + END DO + dfp = f0*SUM(dfblock(:, :)*pblock(:, :)) + DO ir = 1, 3 + foab = 2.0_dp*dfp*rij(ir)/dr + ! force from overlap matrix contribution to H + DO j = 1, natorb_b + lb = laob(j) + nb = naob(j) + DO i = 1, natorb_a + la = laoa(i) + na = naoa(i) + hij = 0.5_dp*(huckel(na, iatom) + huckel(nb, jatom))*pia(na)*pib(nb) + IF (iatom <= jatom) THEN + foab = foab + 2.0_dp*hij*sint(i, j, ir + 1)*pblock(i, j)*kijab(i, j, ikind, jkind) + ELSE + foab = foab - 2.0_dp*hij*sint(i, j, ir + 1)*pblock(j, i)*kijab(i, j, ikind, jkind) + END IF + END DO + END DO + force_ab(ir) = foab + END DO + DEALLOCATE (dfblock) + END IF + + atom_a = atom_of_kind(iatom) + atom_b = atom_of_kind(jatom) + IF (irow == iatom) force_ab = -force_ab + force(ikind)%all_potential(:, atom_a) = force(ikind)%all_potential(:, atom_a) - force_ab(:) + force(jkind)%all_potential(:, atom_b) = force(jkind)%all_potential(:, atom_b) + force_ab(:) + + DEALLOCATE (oint, owork, sint) + + END DO + CALL neighbor_list_iterator_release(nl_iterator) + + DO i = 1, SIZE(matrix_h, 1) + DO img = 1, nimg + CALL dbcsr_finalize(matrix_h(i, img)%matrix) + CALL dbcsr_finalize(matrix_s(i, img)%matrix) + END DO + ENDDO + CALL dbcsr_deallocate_matrix_set(matrix_s) + CALL dbcsr_deallocate_matrix_set(matrix_h) + + ! deallocate coordination numbers + DEALLOCATE (cnumbers) + DO iatom = 1, natom + DEALLOCATE (dcnum(iatom)%nlist, dcnum(iatom)%dvals, dcnum(iatom)%rik) + END DO + DEALLOCATE (dcnum) + + ! deallocate Huckel parameters + DEALLOCATE (huckel) + ! deallocate KAB parameters + DEALLOCATE (kijab) + + DEALLOCATE (basis_set_list) + DEALLOCATE (kind_of) + DEALLOCATE (atom_of_kind) + + CALL timestop(handle) + + END SUBROUTINE xtb_hab_force + ! ************************************************************************************************** !> \brief ... !> \param qs_env ... diff --git a/tests/QS/regtest-corr_dipm/TEST_FILES b/tests/QS/regtest-corr_dipm/TEST_FILES index bae31891b5..f4185fbaed 100644 --- a/tests/QS/regtest-corr_dipm/TEST_FILES +++ b/tests/QS/regtest-corr_dipm/TEST_FILES @@ -2,6 +2,6 @@ # the second field tells which option from cp2k/tests/TEST_TYPES must be grepped to verify the results # 3rd field ---> tolerance # 4th field ---> reference result -run-corr_dipm-RKS.inp 89 1e-04 0.0002032692 -run-corr_dipm-UKS.inp 89 1e-04 0.0002032739 +run-corr_dipm-RKS.inp 89 1e-04 0.0002025426 +run-corr_dipm-UKS.inp 89 1e-04 0.0002023505 #EOF diff --git a/tests/QS/regtest-debug-1/TEST_FILES b/tests/QS/regtest-debug-1/TEST_FILES index ef8d73fffa..d155882e16 100644 --- a/tests/QS/regtest-debug-1/TEST_FILES +++ b/tests/QS/regtest-debug-1/TEST_FILES @@ -4,7 +4,7 @@ # 1 compares the last total energy in the file # for details see cp2k/tools/do_regtest h2o_dipole.inp 86 1e-05 0.908927636669E+00 -h2o_polar.inp 87 1e-05 0.164538039001E+02 +h2o_polar.inp 87 1e-05 0.166347691437E+02 h2o_pdip.inp 86 1e-05 0.961018561809E+00 h2o_periodic.inp 87 1e-05 0.139741440657E+02 h2o_gga.inp 87 1e-05 0.165143521103E+02 diff --git a/tests/QS/regtest-debug-1/h2o_gga.inp b/tests/QS/regtest-debug-1/h2o_gga.inp index 17fa4bf46a..88709a1a0e 100644 --- a/tests/QS/regtest-debug-1/h2o_gga.inp +++ b/tests/QS/regtest-debug-1/h2o_gga.inp @@ -17,6 +17,10 @@ &END QS &EFIELD &END + &MGRID + CUTOFF 280 + REL_CUTOFF 60 + &END &SCF SCF_GUESS ATOMIC &OT @@ -25,10 +29,10 @@ &END &OUTER_SCF MAX_SCF 10 - EPS_SCF 1.0E-4 + EPS_SCF 1.0E-6 &END MAX_SCF 10 - EPS_SCF 1.0E-4 + EPS_SCF 1.0E-6 &END SCF &XC &XC_FUNCTIONAL PBE diff --git a/tests/QS/regtest-debug-1/h2o_polar.inp b/tests/QS/regtest-debug-1/h2o_polar.inp index 6f8db21f9b..b08db9877f 100644 --- a/tests/QS/regtest-debug-1/h2o_polar.inp +++ b/tests/QS/regtest-debug-1/h2o_polar.inp @@ -43,7 +43,7 @@ &END DFT &SUBSYS &CELL - ABC [angstrom] 6.0 6.0 6.0 + ABC [angstrom] 5.0 5.0 5.0 PERIODIC NONE &END &COORD diff --git a/tests/QS/regtest-debug-2/TEST_FILES b/tests/QS/regtest-debug-2/TEST_FILES index 6732620b88..634c5d51e4 100644 --- a/tests/QS/regtest-debug-2/TEST_FILES +++ b/tests/QS/regtest-debug-2/TEST_FILES @@ -3,8 +3,8 @@ # 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_lri.inp 87 2e-05 0.219139762139E+02 -h2o_pade_fd.inp 87 1e-05 0.166348378051E+02 +h2o_lri.inp 87 1e-05 0.222165614960E+02 +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.151709407272E+02 +h2o_hfx_admm.inp 87 1e-05 0.153251090463E+02 #EOF diff --git a/tests/QS/regtest-debug-2/h2o_hfx_admm.inp b/tests/QS/regtest-debug-2/h2o_hfx_admm.inp index 6413ed8523..7e80ab7282 100644 --- a/tests/QS/regtest-debug-2/h2o_hfx_admm.inp +++ b/tests/QS/regtest-debug-2/h2o_hfx_admm.inp @@ -33,10 +33,10 @@ &END &OUTER_SCF MAX_SCF 10 - EPS_SCF 1.0E-7 + EPS_SCF 1.0E-6 &END MAX_SCF 100 - EPS_SCF 1.0E-7 + EPS_SCF 1.0E-6 &END SCF &XC &XC_FUNCTIONAL NONE @@ -56,7 +56,7 @@ &END DFT &SUBSYS &CELL - ABC [angstrom] 6.0 6.0 6.0 + ABC [angstrom] 5.0 5.0 5.0 PERIODIC NONE &END &COORD diff --git a/tests/QS/regtest-debug-2/h2o_lri.inp b/tests/QS/regtest-debug-2/h2o_lri.inp index d8a2e37bcb..832cdaec3b 100644 --- a/tests/QS/regtest-debug-2/h2o_lri.inp +++ b/tests/QS/regtest-debug-2/h2o_lri.inp @@ -27,11 +27,15 @@ &END &OUTER_SCF MAX_SCF 10 - EPS_SCF 1.0E-4 + EPS_SCF 1.0E-6 &END MAX_SCF 10 - EPS_SCF 1.0E-4 + EPS_SCF 1.0E-6 &END SCF + &MGRID + CUTOFF 240 + REL_CUTOFF 40 + &END &XC &XC_FUNCTIONAL PBE &END XC_FUNCTIONAL @@ -45,7 +49,7 @@ &END DFT &SUBSYS &CELL - ABC [angstrom] 5.0 5.0 5.0 + ABC [angstrom] 4.5 4.5 4.5 PERIODIC NONE &END &COORD diff --git a/tests/QS/regtest-debug-2/h2o_pade_fd.inp b/tests/QS/regtest-debug-2/h2o_pade_fd.inp index 4e0e28ec2b..3f338b7293 100644 --- a/tests/QS/regtest-debug-2/h2o_pade_fd.inp +++ b/tests/QS/regtest-debug-2/h2o_pade_fd.inp @@ -14,7 +14,7 @@ LSD &QS METHOD GPW - EPS_DEFAULT 1.e-14 + EPS_DEFAULT 1.e-10 &END QS &EFIELD &END @@ -26,10 +26,10 @@ &END &OUTER_SCF MAX_SCF 10 - EPS_SCF 1.0E-5 + EPS_SCF 1.0E-6 &END MAX_SCF 10 - EPS_SCF 1.0E-5 + EPS_SCF 1.0E-6 &END SCF &XC &XC_FUNCTIONAL PADE @@ -45,7 +45,7 @@ &END DFT &SUBSYS &CELL - ABC [angstrom] 5.0 5.0 5.0 + ABC [angstrom] 4.5 4.5 4.5 PERIODIC NONE &END &COORD diff --git a/tests/QS/regtest-debug-2/h2o_pbe_fd.inp b/tests/QS/regtest-debug-2/h2o_pbe_fd.inp new file mode 100644 index 0000000000..ba66c98d82 --- /dev/null +++ b/tests/QS/regtest-debug-2/h2o_pbe_fd.inp @@ -0,0 +1,84 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-09 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + &QS + METHOD GPW + EPS_DEFAULT 1.e-14 + &END QS + &EFIELD + &END + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_ALL + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + 2ND_DERIV_ANALYTICAL F + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 .FALSE. + DEBUG_POLARIZABILITY .TRUE. + DE 0.002 + EPS_NO_ERROR_CHECK 1.e-4 +&END + + diff --git a/tests/QS/regtest-debug-2/h2o_tpss_fd.inp b/tests/QS/regtest-debug-2/h2o_tpss_fd.inp new file mode 100644 index 0000000000..ec73b0a381 --- /dev/null +++ b/tests/QS/regtest-debug-2/h2o_tpss_fd.inp @@ -0,0 +1,89 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-09 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + LSD + &QS + METHOD GPW + EPS_DEFAULT 1.e-14 + &END QS + &EFIELD + &END + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &MGGA_X_TPSS + &END MGGA_X_TPSS + &MGGA_C_TPSS + &END MGGA_C_TPSS + &END XC_FUNCTIONAL + 2ND_DERIV_ANALYTICAL F + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 .FALSE. + DEBUG_POLARIZABILITY .TRUE. + DE 0.002 + EPS_NO_ERROR_CHECK 1.e-4 +&END + + diff --git a/tests/QS/regtest-debug-3/TEST_FILES b/tests/QS/regtest-debug-3/TEST_FILES index abbd1aca36..da106b21c5 100644 --- a/tests/QS/regtest-debug-3/TEST_FILES +++ b/tests/QS/regtest-debug-3/TEST_FILES @@ -3,6 +3,20 @@ # 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_pbe0.inp 87 1e-05 0.154942790950E+02 -h2o_pbe0_admm.inp 87 1e-05 0.159299388421E+02 +h2o_pbe0.inp 60 1e-05 0.411901963703 +h2o_pbe0_admm.inp 60 1e-05 0.426369189904 +# +h2o_HSE06.inp 60 1e-05 0.436263865396 +h2o_HSE06_admm.inp 60 1e-05 0.381688458912 +#h2o_B88_mixcl.inp functional B88_LR 60 1e-05 0.000000000000E+00 +#h2o_B88_mixcl_admm.inp functional B88_LR 60 1e-05 0.000000000000E+00 +h2o_pbe0TC.inp 60 1e-05 0.430192264863 +h2o_pbe0TC_admm.inp 60 1e-05 0.426587857103 +#h2o_B88_mixcl_TC_admm.inp functional B88_LR 60 1e-05 0.000000000000E+00 +#h2o_B88_mixcl_TC.inp functional B88_LR 60 1e-05 0.000000000000E+00 +#h2o_pbe0TC_LRC.inp functional LRC +#h2o_pbe0TC_LRC_admm.inp functional LRC +#h2o_mgga_VV3_mixcl_admm.inp functional mgga +#h2o_mgga_VV3_mixcl.inp functional mgga #EOF + diff --git a/tests/QS/regtest-debug-3/h2o_B88_mixcl.inp b/tests/QS/regtest-debug-3/h2o_B88_mixcl.inp new file mode 100644 index 0000000000..f7fdc63fdf --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_B88_mixcl.inp @@ -0,0 +1,115 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-14 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + EPS_DEFAULT 1.e-14 + &END QS + &EFIELD + &END + &SCF + SCF_GUESS ATOMIC + &OT ON + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 100 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-12 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + &END + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END POISSON + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 .TRUE. + DE 0.000005 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_B88_mixcl_TC.inp b/tests/QS/regtest-debug-3/h2o_B88_mixcl_TC.inp new file mode 100644 index 0000000000..5cc055958a --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_B88_mixcl_TC.inp @@ -0,0 +1,114 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &EFIELD + &END + &SCF + SCF_GUESS RESTART + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-7 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL_TRUNC + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + ! should be cell L/2 but large enough for the erf to decay + CUTOFF_RADIUS 2.5 + T_C_G_DATA t_c_g.dat + &END + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_B88_mixcl_TC_admm.inp b/tests/QS/regtest-debug-3/h2o_B88_mixcl_TC_admm.inp new file mode 100644 index 0000000000..85026ab32d --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_B88_mixcl_TC_admm.inp @@ -0,0 +1,123 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC BECKE88X + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EFIELD + &END + &SCF + SCF_GUESS RESTART + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-7 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL_TRUNC + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + ! should be cell L/2 but large enough for the erf to decay + CUTOFF_RADIUS 2.5 + T_C_G_DATA t_c_g.dat + &END + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_B88_mixcl_admm.inp b/tests/QS/regtest-debug-3/h2o_B88_mixcl_admm.inp new file mode 100644 index 0000000000..d0b53c5003 --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_B88_mixcl_admm.inp @@ -0,0 +1,120 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC BECKE88X + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EFIELD + &END + &SCF + SCF_GUESS RESTART + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-10 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + &END + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_HSE06.inp b/tests/QS/regtest-debug-3/h2o_HSE06.inp new file mode 100644 index 0000000000..1921375f40 --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_HSE06.inp @@ -0,0 +1,105 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + EPS_DEFAULT 1.e-14 + &END QS + &EFIELD + &END + &SCF + SCF_GUESS ATOMIC + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &MGRID + CUTOFF 200 + &END MGRID + &XC + &XC_FUNCTIONAL + &HYB_GGA_XC_HSE06 + &END HYB_GGA_XC_HSE06 + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-12 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE SHORTRANGE + OMEGA 0.11 + &END + FRACTION 0.25 + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole +### RUN_TYPE DEBUG + RUN_TYPE ENERGY_FORCE +&END GLOBAL + +&DEBUG + DEBUG_FORCES .FALSE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .TRUE. + DEBUG_POLARIZABILITY .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_HSE06_admm.inp b/tests/QS/regtest-debug-3/h2o_HSE06_admm.inp new file mode 100644 index 0000000000..8f47fe6382 --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_HSE06_admm.inp @@ -0,0 +1,114 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC BECKE88X + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EFIELD + &END + &SCF + SCF_GUESS ATOMIC + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &MGRID + CUTOFF 200 + &END MGRID + &XC + &XC_FUNCTIONAL + &HYB_GGA_XC_HSE06 + &END HYB_GGA_XC_HSE06 + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-12 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE SHORTRANGE + OMEGA 0.11 + &END + FRACTION 0.25 + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + RUN_TYPE ENERGY_FORCE +&END GLOBAL + +&DEBUG + DEBUG_FORCES .FALSE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .TRUE. + DEBUG_POLARIZABILITY .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_mgga_VV3_mixcl.inp b/tests/QS/regtest-debug-3/h2o_mgga_VV3_mixcl.inp new file mode 100644 index 0000000000..2eeef7dd17 --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_mgga_VV3_mixcl.inp @@ -0,0 +1,112 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &EFIELD + &END + &SCF + SCF_GUESS RESTART + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &HYB_MGGA_XC_WB97M_V + &END HYB_MGGA_XC_WB97M_V + &END XC_FUNCTIONAL + 2ND_DERIV_ANALYTICAL F + &HF + FRACTION 1.000 + &SCREENING + EPS_SCHWARZ 1.0E-6 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + SCALE_COULOMB 0.15 + SCALE_LONGRANGE 0.85 + OMEGA 0.30 + &END + &MEMORY + MAX_MEMORY 10 + &END + &END + &vdW_POTENTIAL + DISPERSION_FUNCTIONAL NON_LOCAL + &NON_LOCAL + TYPE RVV10 + PARAMETERS 6.0 0.01 + VERBOSE_OUTPUT + KERNEL_FILE_NAME rVV10_kernel_table.dat + CUTOFF 30 + &END NON_LOCAL + &END vdW_POTENTIAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_mgga_VV3_mixcl_admm.inp b/tests/QS/regtest-debug-3/h2o_mgga_VV3_mixcl_admm.inp new file mode 100644 index 0000000000..970441be11 --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_mgga_VV3_mixcl_admm.inp @@ -0,0 +1,120 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC BECKE88X + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EFIELD + &END + &SCF + SCF_GUESS RESTART + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &HYB_MGGA_XC_WB97M_V + &END HYB_MGGA_XC_WB97M_V + &END XC_FUNCTIONAL + &HF + FRACTION 1.000 + &SCREENING + EPS_SCHWARZ 1.0E-6 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + SCALE_COULOMB 0.15 + SCALE_LONGRANGE 0.85 + OMEGA 0.30 + &END + &MEMORY + MAX_MEMORY 10 + &END + &END + &vdW_POTENTIAL + DISPERSION_FUNCTIONAL NON_LOCAL + &NON_LOCAL + TYPE RVV10 + PARAMETERS 6.0 0.01 + VERBOSE_OUTPUT + KERNEL_FILE_NAME rVV10_kernel_table.dat + CUTOFF 30 + &END NON_LOCAL + &END vdW_POTENTIAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_pbe0.inp b/tests/QS/regtest-debug-3/h2o_pbe0.inp index f87ebe0e58..03c5a23b2b 100644 --- a/tests/QS/regtest-debug-3/h2o_pbe0.inp +++ b/tests/QS/regtest-debug-3/h2o_pbe0.inp @@ -76,7 +76,8 @@ &GLOBAL PRINT_LEVEL LOW PROJECT dipole - RUN_TYPE DEBUG +### RUN_TYPE DEBUG + RUN_TYPE ENERGY_FORCE &END GLOBAL &DEBUG diff --git a/tests/QS/regtest-debug-3/h2o_pbe0TC.inp b/tests/QS/regtest-debug-3/h2o_pbe0TC.inp new file mode 100644 index 0000000000..547e8442f8 --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_pbe0TC.inp @@ -0,0 +1,105 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &EFIELD + &END + &SCF + SCF_GUESS RESTART + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole +# RUN_TYPE DEBUG + RUN_TYPE ENERGY_FORCE +&END GLOBAL + +&DEBUG + DEBUG_FORCES .FALSE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .TRUE. + DEBUG_POLARIZABILITY .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_pbe0TC_LRC.inp b/tests/QS/regtest-debug-3/h2o_pbe0TC_LRC.inp new file mode 100644 index 0000000000..0a00bfe833 --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_pbe0TC_LRC.inp @@ -0,0 +1,108 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &EFIELD + &END + &SCF + SCF_GUESS RESTART + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &PBE_HOLE_T_C_LR + CUTOFF_RADIUS 2.0 + SCALE_X 0.25 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_pbe0TC_LRC_admm.inp b/tests/QS/regtest-debug-3/h2o_pbe0TC_LRC_admm.inp new file mode 100644 index 0000000000..0274f49a7d --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_pbe0TC_LRC_admm.inp @@ -0,0 +1,117 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC BECKE88X + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EFIELD + &END + &SCF + SCF_GUESS RESTART + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &PBE_HOLE_T_C_LR + CUTOFF_RADIUS 2.0 + SCALE_X 0.25 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_pbe0TC_admm.inp b/tests/QS/regtest-debug-3/h2o_pbe0TC_admm.inp new file mode 100644 index 0000000000..0188d90d34 --- /dev/null +++ b/tests/QS/regtest-debug-3/h2o_pbe0TC_admm.inp @@ -0,0 +1,114 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &LINRES + PRECONDITIONER FULL_ALL + EPS 1.e-10 + &POLAR + DO_RAMAN T + PERIODIC_DIPOLE_OPERATOR F + &END + &END + &END + &DFT + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + &QS + METHOD GPW + EPS_DEFAULT 1.e-10 + &END QS + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC BECKE88X + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EFIELD + &END + &SCF + SCF_GUESS RESTART + &OT OFF + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 100 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 ENERGY_FORCE +## RUN_TYPE DEBUG +&END GLOBAL + +&DEBUG + DEBUG_FORCES .FALSE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .TRUE. + DEBUG_POLARIZABILITY .TRUE. + DE 0.0002 + EPS_NO_ERROR_CHECK 5.e-5 +&END + + diff --git a/tests/QS/regtest-debug-3/h2o_pbe0_admm.inp b/tests/QS/regtest-debug-3/h2o_pbe0_admm.inp index fe040fcdf7..4586ded64c 100644 --- a/tests/QS/regtest-debug-3/h2o_pbe0_admm.inp +++ b/tests/QS/regtest-debug-3/h2o_pbe0_admm.inp @@ -30,7 +30,7 @@ &EFIELD &END &SCF - SCF_GUESS RESTART + SCF_GUESS ATOMIC &OT OFF PRECONDITIONER FULL_SINGLE_INVERSE MINIMIZER DIIS @@ -74,14 +74,12 @@ &END &KIND H BASIS_SET DZV-GTH-PADE -# BASIS_SET AUX_FIT DZV-GTH-PADE - BASIS_SET AUX_FIT cFIT3 + BASIS_SET AUX_FIT FIT3 POTENTIAL GTH-PADE-q1 &END KIND &KIND O BASIS_SET DZVP-GTH-PADE -# BASIS_SET AUX_FIT DZVP-GTH-PADE - BASIS_SET AUX_FIT cFIT3 + BASIS_SET AUX_FIT FIT3 POTENTIAL GTH-PADE-q6 &END KIND &END SUBSYS @@ -89,8 +87,8 @@ &GLOBAL PRINT_LEVEL LOW PROJECT dipole - RUN_TYPE DEBUG -# RUN_TYPE ENERGY +### RUN_TYPE DEBUG + RUN_TYPE ENERGY_FORCE &END GLOBAL &DEBUG diff --git a/tests/QS/regtest-debug-4/TEST_FILES b/tests/QS/regtest-debug-4/TEST_FILES new file mode 100644 index 0000000000..b654b2cec4 --- /dev/null +++ b/tests/QS/regtest-debug-4/TEST_FILES @@ -0,0 +1,19 @@ +# 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_dip01.inp 86 1e-09 -0.150643971028E+00 +h2o_dip02.inp 86 1e-09 0.149038318612E+00 +h2o_dip03.inp 86 1e-09 0.149038320327E+00 +h2o_dip04.inp 86 1e-09 0.127891724085E+00 +h2o_dip05.inp 86 1e-09 0.804631408379E-01 +h2o_dip06a.inp 86 1e-09 0.940675478699E-01 +h2o_dip06.inp 86 1e-09 0.113262966613E+00 +h2o_dip07.inp 86 1e-09 0.171286322343E+00 +h2o_dip08.inp 86 1e-09 0.150416154991E+00 +h2o_dip09.inp 86 1e-09 0.101081266711E+00 +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 +#EOF diff --git a/tests/QS/regtest-debug-4/h2o_dip01.inp b/tests/QS/regtest-debug-4/h2o_dip01.inp new file mode 100644 index 0000000000..c37af5a9c8 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip01.inp @@ -0,0 +1,82 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL Pade + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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-debug-4/h2o_dip02.inp b/tests/QS/regtest-debug-4/h2o_dip02.inp new file mode 100644 index 0000000000..6ff3279766 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip02.inp @@ -0,0 +1,72 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL Pade + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-4/h2o_dip03.inp b/tests/QS/regtest-debug-4/h2o_dip03.inp new file mode 100644 index 0000000000..b0e3ff0673 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip03.inp @@ -0,0 +1,64 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EFIELD + &END + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL Pade + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-4/h2o_dip04.inp b/tests/QS/regtest-debug-4/h2o_dip04.inp new file mode 100644 index 0000000000..9891558012 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip04.inp @@ -0,0 +1,72 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-4/h2o_dip05.inp b/tests/QS/regtest-debug-4/h2o_dip05.inp new file mode 100644 index 0000000000..0c8cee2aed --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip05.inp @@ -0,0 +1,77 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-4/h2o_dip06.inp b/tests/QS/regtest-debug-4/h2o_dip06.inp new file mode 100644 index 0000000000..fd60afaf13 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip06.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + 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 BECKE88X + 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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 10 + 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 DZVP-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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-4/h2o_dip06a.inp b/tests/QS/regtest-debug-4/h2o_dip06a.inp new file mode 100644 index 0000000000..da4afad3d8 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip06a.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &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 + &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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 10 + 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 DZVP-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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-4/h2o_dip07.inp b/tests/QS/regtest-debug-4/h2o_dip07.inp new file mode 100644 index 0000000000..f70b8d27c3 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip07.inp @@ -0,0 +1,76 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL Pade + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-4/h2o_dip08.inp b/tests/QS/regtest-debug-4/h2o_dip08.inp new file mode 100644 index 0000000000..d1a9fe5205 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip08.inp @@ -0,0 +1,77 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-4/h2o_dip09.inp b/tests/QS/regtest-debug-4/h2o_dip09.inp new file mode 100644 index 0000000000..a312d4699e --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip09.inp @@ -0,0 +1,81 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-4/h2o_dip10.inp b/tests/QS/regtest-debug-4/h2o_dip10.inp new file mode 100644 index 0000000000..a6cf114459 --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip10.inp @@ -0,0 +1,78 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-4/h2o_dip11.inp b/tests/QS/regtest-debug-4/h2o_dip11.inp new file mode 100644 index 0000000000..0f8128a99c --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip11.inp @@ -0,0 +1,82 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-4/h2o_dip11b.inp b/tests/QS/regtest-debug-4/h2o_dip11b.inp new file mode 100644 index 0000000000..3da39fff5f --- /dev/null +++ b/tests/QS/regtest-debug-4/h2o_dip11b.inp @@ -0,0 +1,81 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-5/TEST_FILES b/tests/QS/regtest-debug-5/TEST_FILES new file mode 100644 index 0000000000..c671d0f9ca --- /dev/null +++ b/tests/QS/regtest-debug-5/TEST_FILES @@ -0,0 +1,37 @@ +# 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_dip12.inp 86 1e-08 0.197550892244E+00 +h2o_dip13.inp 86 1e-08 0.149038318612E+00 +h2o_dip13b.inp 86 1e-08 0.151671831678E+00 +h2o_dip13c.inp 86 1e-08 0.168627194788E+00 +h2o_dip14.inp 86 1e-08 0.815745822946E+00 +h2o_dip15.inp 86 1e-08 0.176997002028E+00 +h2o_dip15b.inp 86 1e-08 0.153260708546E+00 +h2o_dip16.inp 86 1e-08 0.157128093302E+00 +h2o_dip16b.inp 86 1e-08 0.131279651123E+00 +h2o_dip17.inp 86 1e-08 0.105779050446E+00 +h2o_dip18.inp 86 1e-08 0.164232838981E+00 +h2o_dip19.inp 86 1e-08 0.132011222619E+00 +h2o_dip20.inp 86 1e-08 0.260620397228E+00 +h2o_dip21.inp 86 1e-08 0.176823912039E+00 +h2o_dip22.inp 86 1e-08 0.135209164224E+00 +h2o_dip23.inp 86 1e-08 0.292668779126E+00 +h2o_dip24.inp 86 5e-05 -0.143426397582E+00 +h2o_dip25.inp 86 1e-08 0.149038318612E+00 +#h2o_dip26.inp 86 1e-05 0.000000000000E+00 EC - PADE - PADE HARRIS Basis +#h2o_dip27.inp 86 1e-05 0.000000000000E+00 *EC - PADE - PADE HARRIS Basis +#h2o_dip28.inp 86 1e-05 0.000000000000E+00 *EC - PADE - PADE HARRIS Basis +#h2o_dip29.inp 86 1e-05 0.000000000000E+00 *EC - PADE - PADE HARRIS Basis +#h2o_dip30.inp 86 1e-05 0.000000000000E+00 *EC - PADE - PADE HARRIS Basis +#h2o_dip31.inp 86 1e-05 0.000000000000E+00 *EC - PADE - PADE HARRIS Basis +#h2o_dip32.inp 86 1e-05 0.000000000000E+00 *EC - PADE - PADE HARRIS Basis +#h2o_dip33.inp 86 1e-05 0.000000000000E+00 *EC - PADE - PADE HARRIS Basis +#h2o_dip34.inp 86 1e-05 0.000000000000E+00 *EC - PADE - PADE HARRIS Basis +h2o_dip35.inp 86 1e-05 0.159623722231E+00 +h2o_dip36.inp 86 1e-05 0.159624169779E+00 +h2o_dip37.inp 86 1e-05 0.145842142590E+00 +#h2o_dip38.inp 86 1e-05 0.000000000000E+00 ADMM/DEFAULT +#EOF diff --git a/tests/QS/regtest-debug-5/h2o_dip12.inp b/tests/QS/regtest-debug-5/h2o_dip12.inp new file mode 100644 index 0000000000..6605fae92d --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip12.inp @@ -0,0 +1,77 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EFIELD + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip13.inp b/tests/QS/regtest-debug-5/h2o_dip13.inp new file mode 100644 index 0000000000..11bd5fbae6 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip13.inp @@ -0,0 +1,78 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + RKS_TRIPLETS T + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip13b.inp b/tests/QS/regtest-debug-5/h2o_dip13b.inp new file mode 100644 index 0000000000..7921b870f5 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip13b.inp @@ -0,0 +1,78 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + RKS_TRIPLETS T + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip13c.inp b/tests/QS/regtest-debug-5/h2o_dip13c.inp new file mode 100644 index 0000000000..d00ceed22e --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip13c.inp @@ -0,0 +1,78 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + RKS_TRIPLETS T + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip14.inp b/tests/QS/regtest-debug-5/h2o_dip14.inp new file mode 100644 index 0000000000..e3f4c59e00 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip14.inp @@ -0,0 +1,76 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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.000000 0.990000 + &END COORD + &TOPOLOGY + &CENTER_COORDINATES + &END + &END + &KIND H + BASIS_SET DZV-GTH-PADE + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-5/h2o_dip15.inp b/tests/QS/regtest-debug-5/h2o_dip15.inp new file mode 100644 index 0000000000..58dfd5d686 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip15.inp @@ -0,0 +1,77 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip15b.inp b/tests/QS/regtest-debug-5/h2o_dip15b.inp new file mode 100644 index 0000000000..bf832237fc --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip15b.inp @@ -0,0 +1,79 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + LSD + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + + diff --git a/tests/QS/regtest-debug-5/h2o_dip16.inp b/tests/QS/regtest-debug-5/h2o_dip16.inp new file mode 100644 index 0000000000..4e7f0d5d6c --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip16.inp @@ -0,0 +1,77 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip16b.inp b/tests/QS/regtest-debug-5/h2o_dip16b.inp new file mode 100644 index 0000000000..c127ddea75 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip16b.inp @@ -0,0 +1,78 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + LSD + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip17.inp b/tests/QS/regtest-debug-5/h2o_dip17.inp new file mode 100644 index 0000000000..d6d20bb354 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip17.inp @@ -0,0 +1,81 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip18.inp b/tests/QS/regtest-debug-5/h2o_dip18.inp new file mode 100644 index 0000000000..411e96bb56 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip18.inp @@ -0,0 +1,77 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip19.inp b/tests/QS/regtest-debug-5/h2o_dip19.inp new file mode 100644 index 0000000000..ce31aa5080 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip19.inp @@ -0,0 +1,78 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + + diff --git a/tests/QS/regtest-debug-5/h2o_dip20.inp b/tests/QS/regtest-debug-5/h2o_dip20.inp new file mode 100644 index 0000000000..f5a1352f8d --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip20.inp @@ -0,0 +1,76 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.0 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EFIELD + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip21.inp b/tests/QS/regtest-debug-5/h2o_dip21.inp new file mode 100644 index 0000000000..fe007eeef4 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip21.inp @@ -0,0 +1,76 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.0 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EFIELD + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip22.inp b/tests/QS/regtest-debug-5/h2o_dip22.inp new file mode 100644 index 0000000000..e663465526 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip22.inp @@ -0,0 +1,80 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.0 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EFIELD + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip23.inp b/tests/QS/regtest-debug-5/h2o_dip23.inp new file mode 100644 index 0000000000..dff3f5d3c7 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip23.inp @@ -0,0 +1,75 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.5 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EFIELD + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-5/h2o_dip24.inp b/tests/QS/regtest-debug-5/h2o_dip24.inp new file mode 100644 index 0000000000..d92967bdca --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip24.inp @@ -0,0 +1,94 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.25 + &END sTDA + NSTATES 4 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &EFIELD + &END + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER ANALYTIC + &END + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole +## RUN_TYPE ENERGY_FORCE + RUN_TYPE DEBUG +&END GLOBAL +&DEBUG + DEBUG_FORCES .FALSE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .TRUE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.002 +&END DEBUG + diff --git a/tests/QS/regtest-debug-5/h2o_dip25.inp b/tests/QS/regtest-debug-5/h2o_dip25.inp new file mode 100644 index 0000000000..b945b9e3a2 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip25.inp @@ -0,0 +1,77 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + RKS_TRIPLETS T + &sTDA + FRACTION 0.0 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL + diff --git a/tests/QS/regtest-debug-5/h2o_dip26.inp b/tests/QS/regtest-debug-5/h2o_dip26.inp new file mode 100644 index 0000000000..3167542d4f --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip26.inp @@ -0,0 +1,84 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + &QS + METHOD GPW + &END QS + &EFIELD + &END + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &XC + &XC_FUNCTIONAL + &PADE + &END + &END + &END XC + &END ENERGY_CORRECTION + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 DZVP-GTH + BASIS_SET HARRIS TZVP-GTH + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH + BASIS_SET HARRIS TZV2P-GTH + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_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-debug-5/h2o_dip27.inp b/tests/QS/regtest-debug-5/h2o_dip27.inp new file mode 100644 index 0000000000..15a387992a --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip27.inp @@ -0,0 +1,82 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + &QS + METHOD GPW + &END QS + &EFIELD + &END + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS ORBITAL + &XC + &XC_FUNCTIONAL + &PADE + &END + &END + &END XC + &END ENERGY_CORRECTION + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 DZVP-GTH + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_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-debug-5/h2o_dip28.inp b/tests/QS/regtest-debug-5/h2o_dip28.inp new file mode 100644 index 0000000000..6eb2e1501b --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip28.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + &QS + METHOD GPW + &END QS + &EFIELD + &END + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &XC + &XC_FUNCTIONAL + &PADE + &END + &END + &END XC + &END ENERGY_CORRECTION + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL + &XALPHA + &END + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 DZVP-GTH + BASIS_SET HARRIS DZVP-GTH + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH + BASIS_SET HARRIS DZVP-GTH + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_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-debug-5/h2o_dip29.inp b/tests/QS/regtest-debug-5/h2o_dip29.inp new file mode 100644 index 0000000000..95466259da --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip29.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + &END QS + &EFIELD + &END + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &XC + &XC_FUNCTIONAL + &PADE + &END + &END + &END XC + &END ENERGY_CORRECTION + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 DZVP-GTH-PADE + BASIS_SET HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_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-debug-5/h2o_dip30.inp b/tests/QS/regtest-debug-5/h2o_dip30.inp new file mode 100644 index 0000000000..204e77e44e --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip30.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + &END QS + &EFIELD + &END + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &XC + &XC_FUNCTIONAL + &PBE + &END + &END + &END XC + &END ENERGY_CORRECTION + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 DZVP-GTH-PADE + BASIS_SET HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_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-debug-5/h2o_dip31.inp b/tests/QS/regtest-debug-5/h2o_dip31.inp new file mode 100644 index 0000000000..a9bbdb0137 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip31.inp @@ -0,0 +1,91 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + &END QS + &EFIELD + &END + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &XC + &XC_FUNCTIONAL + &PADE + &END + &END + &END XC + &END ENERGY_CORRECTION + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-14 + &END + &END + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_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-debug-5/h2o_dip32.inp b/tests/QS/regtest-debug-5/h2o_dip32.inp new file mode 100644 index 0000000000..1693fa25a6 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip32.inp @@ -0,0 +1,84 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + &QS + METHOD GPW + &END QS + &EFIELD + &END + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &XC + &XC_FUNCTIONAL + &PBE + &END + &END + &END XC + &END ENERGY_CORRECTION + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 SZV-GTH + BASIS_SET HARRIS TZVP-GTH + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET SZV-GTH + BASIS_SET HARRIS TZV2P-GTH + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL MEDIUM + PROJECT ec_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-debug-5/h2o_dip33.inp b/tests/QS/regtest-debug-5/h2o_dip33.inp new file mode 100644 index 0000000000..ce3e807ea5 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip33.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME BASIS_SET + &QS + METHOD GPW + &END QS + &EFIELD + &END + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &XC + &XC_FUNCTIONAL + &PBE + &END + &END + &END XC + &END ENERGY_CORRECTION + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 DZVP-GTH-PADE + BASIS_SET HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_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-debug-5/h2o_dip34.inp b/tests/QS/regtest-debug-5/h2o_dip34.inp new file mode 100644 index 0000000000..d44295fa42 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip34.inp @@ -0,0 +1,94 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + POTENTIAL_FILE_NAME GTH_POTENTIALS + &QS + METHOD GPW + &END QS + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC NONE + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EFIELD + &END + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &XC + &XC_FUNCTIONAL + &PBE + &END + &END + &END XC + &END ENERGY_CORRECTION + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &PRINT + &MOMENTS ON + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 DZVP-GTH-PADE + BASIS_SET HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + BASIS_SET HARRIS DZVP-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_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-debug-5/h2o_dip35.inp b/tests/QS/regtest-debug-5/h2o_dip35.inp new file mode 100644 index 0000000000..629367c429 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip35.inp @@ -0,0 +1,79 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &HF + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL + +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-5/h2o_dip36.inp b/tests/QS/regtest-debug-5/h2o_dip36.inp new file mode 100644 index 0000000000..0058b5607c --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip36.inp @@ -0,0 +1,80 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 2 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &EFIELD + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &HF + &END + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL + +&GLOBAL + PRINT_LEVEL LOW + PROJECT ec_dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-5/h2o_dip37.inp b/tests/QS/regtest-debug-5/h2o_dip37.inp new file mode 100644 index 0000000000..1ec38442de --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip37.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + POTENTIAL_FILE_NAME GTH_POTENTIALS + &QS + METHOD GPW + &END QS + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC NONE + 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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 10 + 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 DZVP-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 td_dipole + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-debug-5/h2o_dip38.inp b/tests/QS/regtest-debug-5/h2o_dip38.inp new file mode 100644 index 0000000000..883e248375 --- /dev/null +++ b/tests/QS/regtest-debug-5/h2o_dip38.inp @@ -0,0 +1,97 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + BASIS_SET_FILE_NAME BASIS_SET + BASIS_SET_FILE_NAME BASIS_ADMM + POTENTIAL_FILE_NAME GTH_POTENTIALS + &QS + METHOD GPW + &END QS + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC DEFAULT + 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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 10 + 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 DZVP-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 td_dipole + RUN_TYPE DEBUG +&END GLOBAL + +&DEBUG + DEBUG_FORCES .FALSE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .TRUE. + DEBUG_POLARIZABILITY .FALSE. + DE 0.001 +&END + + diff --git a/tests/QS/regtest-ec-force/N2_t01.inp b/tests/QS/regtest-ec-force/N2_t01.inp new file mode 100644 index 0000000000..bb4f2cfaeb --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t01.inp @@ -0,0 +1,60 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + &PRINT + &DERIVATIVES + &END + &END + BASIS_SET_FILE_NAME BASIS_SET + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 300 + &END MGRID + &QS + EPS_DEFAULT 1.E-12 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PADE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-7 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PADE + &END + &END XC + &END DFT + &SUBSYS + &CELL + ABC 6.0 6.0 6.0 + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZV-GTH-BLYP + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t02.inp b/tests/QS/regtest-ec-force/N2_t02.inp new file mode 100644 index 0000000000..193ad42cb5 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t02.inp @@ -0,0 +1,60 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + &PRINT + &DERIVATIVES + &END + &END + BASIS_SET_FILE_NAME BASIS_SET + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 300 + &END MGRID + &QS + EPS_DEFAULT 1.E-12 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-6 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PADE + &END + &END XC + &END DFT + &SUBSYS + &CELL + ABC 6.0 6.0 6.0 + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZV-GTH-BLYP + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t03.inp b/tests/QS/regtest-ec-force/N2_t03.inp new file mode 100644 index 0000000000..0e2c8208e1 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t03.inp @@ -0,0 +1,60 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + &PRINT + &DERIVATIVES + &END + &END + BASIS_SET_FILE_NAME BASIS_SET + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 300 + &END MGRID + &QS + EPS_DEFAULT 1.E-12 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-6 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PADE + &END + &END XC + &END DFT + &SUBSYS + &CELL + ABC 6.0 6.0 6.0 + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZV-GTH-BLYP + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t04.inp b/tests/QS/regtest-ec-force/N2_t04.inp new file mode 100644 index 0000000000..3e00377993 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t04.inp @@ -0,0 +1,61 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + &PRINT + &DERIVATIVES + &END + &END + BASIS_SET_FILE_NAME BASIS_SET + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END MGRID + &QS + EPS_DEFAULT 1.E-10 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-6 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END DFT + &SUBSYS + &CELL + ABC 5.0 5.0 5.0 + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZV-GTH-BLYP + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t05.inp b/tests/QS/regtest-ec-force/N2_t05.inp new file mode 100644 index 0000000000..7d4cf14b18 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t05.inp @@ -0,0 +1,66 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + &PRINT + &DERIVATIVES + &END + &END + BASIS_SET_FILE_NAME BASIS_SET + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END MGRID + &QS + EPS_DEFAULT 1.E-10 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-6 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL NONE + &END + &HF + &SCREENING + EPS_SCHWARZ 1.0E-14 + &END + &END + &END XC + &END DFT + &SUBSYS + &CELL + ABC 5.0 5.0 5.0 + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZV-GTH-BLYP + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t06.inp b/tests/QS/regtest-ec-force/N2_t06.inp new file mode 100644 index 0000000000..a860c7b42e --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t06.inp @@ -0,0 +1,61 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + &PRINT + &DERIVATIVES + &END + &END + BASIS_SET_FILE_NAME BASIS_SET + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END MGRID + &QS + EPS_DEFAULT 1.E-10 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PADE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-6 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PBE0 + &END + &END XC + &END DFT + &SUBSYS + &CELL + ABC 5.0 5.0 5.0 + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZV-GTH-BLYP + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t07.inp b/tests/QS/regtest-ec-force/N2_t07.inp new file mode 100644 index 0000000000..bdd49b89f0 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t07.inp @@ -0,0 +1,67 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT +# &PRINT +# &DERIVATIVES +# &END +# &END + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 400 + &END MGRID + &QS + EPS_DEFAULT 1.E-14 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PADE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-8 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PADE + &END + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + PERIODIC NONE + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB SZV-GTH + BASIS_SET HARRIS DZVP-GTH + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END + diff --git a/tests/QS/regtest-ec-force/N2_t08.inp b/tests/QS/regtest-ec-force/N2_t08.inp new file mode 100644 index 0000000000..1d60fc99af --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t08.inp @@ -0,0 +1,62 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 200 + &END MGRID + &QS + EPS_DEFAULT 1.E-10 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-7 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + PERIODIC NONE + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB SZV-GTH + BASIS_SET HARRIS DZVP-GTH + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t08b.inp b/tests/QS/regtest-ec-force/N2_t08b.inp new file mode 100644 index 0000000000..b4a9a82179 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t08b.inp @@ -0,0 +1,58 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 200 + &END MGRID + &QS + EPS_DEFAULT 1.E-10 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-7 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + PERIODIC NONE + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB SZV-GTH + BASIS_SET HARRIS DZVP-GTH + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t09.inp b/tests/QS/regtest-ec-force/N2_t09.inp new file mode 100644 index 0000000000..9fee1dadd4 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t09.inp @@ -0,0 +1,62 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 200 + &END MGRID + &QS + EPS_DEFAULT 1.E-10 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-7 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PBE0 + &END + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + PERIODIC NONE + &END CELL + &COORD + N 0.400000 0.000000 0.511111 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB SZV-GTH + BASIS_SET HARRIS DZVP-GTH + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t10.inp b/tests/QS/regtest-ec-force/N2_t10.inp new file mode 100644 index 0000000000..74ce2c2973 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t10.inp @@ -0,0 +1,72 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT +# &PRINT +# &DERIVATIVES +# &END +# &END + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME GTH_POTENTIALS + &MGRID + CUTOFF 400 + &END MGRID + &QS + EPS_DEFAULT 1.E-14 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-8 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL NONE + &END + &HF + &SCREENING + EPS_SCHWARZ 1.0E-14 + &END + &END + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + PERIODIC NONE + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB SZV-GTH + BASIS_SET HARRIS DZVP-GTH + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END + diff --git a/tests/QS/regtest-ec-force/N2_t11.inp b/tests/QS/regtest-ec-force/N2_t11.inp new file mode 100644 index 0000000000..efebd54b60 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t11.inp @@ -0,0 +1,74 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT +# &PRINT +# &DERIVATIVES +# &END +# &END + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME GTH_POTENTIALS + 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 + &MGRID + CUTOFF 300 + &END MGRID + &QS + EPS_DEFAULT 1.E-12 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-7 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PBE0 + &END + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + PERIODIC NONE + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZVP-GTH + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END + diff --git a/tests/QS/regtest-ec-force/N2_t12.inp b/tests/QS/regtest-ec-force/N2_t12.inp new file mode 100644 index 0000000000..adf7776477 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t12.inp @@ -0,0 +1,75 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT +# &PRINT +# &DERIVATIVES +# &END +# &END + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME GTH_POTENTIALS + 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 + &MGRID + CUTOFF 300 + &END MGRID + &QS + EPS_DEFAULT 1.E-12 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-7 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PBE0 + &END + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + PERIODIC NONE + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZVP-GTH + BASIS_SET AUX_FIT FIT3 + BASIS_SET HARRIS TZV2P-GTH + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END + diff --git a/tests/QS/regtest-ec-force/N2_t13.inp b/tests/QS/regtest-ec-force/N2_t13.inp new file mode 100644 index 0000000000..67d9b0c6d2 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t13.inp @@ -0,0 +1,69 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME GTH_POTENTIALS + BASIS_SET_FILE_NAME BASIS_ADMM + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC DEFAULT + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &MGRID + CUTOFF 200 + &END MGRID + &QS + EPS_DEFAULT 1.E-10 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-7 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PBE0 + &END + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + PERIODIC NONE + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZVP-GTH + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END diff --git a/tests/QS/regtest-ec-force/N2_t14.inp b/tests/QS/regtest-ec-force/N2_t14.inp new file mode 100644 index 0000000000..da73aa3348 --- /dev/null +++ b/tests/QS/regtest-ec-force/N2_t14.inp @@ -0,0 +1,71 @@ +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME GTH_POTENTIALS + BASIS_SET_FILE_NAME BASIS_ADMM + &AUXILIARY_DENSITY_MATRIX_METHOD + ADMM_PURIFICATION_METHOD NONE + EXCH_CORRECTION_FUNC DEFAULT + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &MGRID + CUTOFF 200 + &END MGRID + &QS + EPS_DEFAULT 1.E-10 + &END QS + &ENERGY_CORRECTION + ENERGY_FUNCTIONAL HARRIS + HARRIS_BASIS HARRIS + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END + &XC + &XC_FUNCTIONAL PBE + &END + &END XC + &END ENERGY_CORRECTION + &SCF + EPS_SCF 1.0E-7 + SCF_GUESS ATOMIC + &END + &XC + &XC_FUNCTIONAL PBE0 + &END + &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + PERIODIC NONE + &END CELL + &COORD + N 0.400000 0.000000 0.500000 + N -0.400000 0.000000 -0.500000 + &END COORD + &KIND N + BASIS_SET ORB DZVP-GTH + BASIS_SET AUX_FIT FIT3 + BASIS_SET HARRIS TZV2P-GTH + POTENTIAL GTH-PADE-q5 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT N2 + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END + diff --git a/tests/QS/regtest-ec-force/TEST_FILES b/tests/QS/regtest-ec-force/TEST_FILES new file mode 100644 index 0000000000..09319094f2 --- /dev/null +++ b/tests/QS/regtest-ec-force/TEST_FILES @@ -0,0 +1,19 @@ +# 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 +N2_t01.inp 1 1e-12 -19.81197882293305 +N2_t02.inp 1 5e-12 -19.81193992209264 +N2_t03.inp 1 5e-12 -19.81193992209264 +N2_t04.inp 1 1e-12 -19.91950764923067 +N2_t05.inp 1 5e-11 -19.45601327358312 +N2_t06.inp 1 1e-11 -19.89228099201857 +N2_t07.inp 1 1e-12 -19.44508292698253 +N2_t08.inp 1 5e-11 -19.54242231073764 +N2_t08b.inp 1 5e-11 -19.54242225427242 +N2_t09.inp 1 1e-12 -19.52266035514095 +N2_t10.inp 1 1e-12 -19.10767135870040 +N2_t11.inp 1 1e-12 -19.87201569403329 +N2_t12.inp 1 1e-12 -19.87215956274964 +N2_t13.inp 1 1e-12 -19.87400375270014 +N2_t14.inp 1 1e-12 -19.87377227302795 +#EOF diff --git a/tests/QS/regtest-ec/2H2O_ecmao2.inp b/tests/QS/regtest-ec/2H2O_ecmao2.inp index eb01d5c243..5ce8d1a2b9 100644 --- a/tests/QS/regtest-ec/2H2O_ecmao2.inp +++ b/tests/QS/regtest-ec/2H2O_ecmao2.inp @@ -5,9 +5,10 @@ POTENTIAL_FILE_NAME GTH_POTENTIALS &MGRID CUTOFF 200 + REL_CUTOFF 40 &END MGRID &QS - EPS_DEFAULT 1.E-14 + EPS_DEFAULT 1.E-10 EPS_KG_ORB 1.0E-5 LS_SCF KG_METHOD @@ -30,8 +31,8 @@ &ENERGY_CORRECTION HARRIS_BASIS HARRIS MAO - MAO_MAX_ITER 200 - MAO_EPS_GRAD 1.e-5 + MAO_MAX_ITER 300 + MAO_EPS_GRAD 1.e-4 &XC &XC_FUNCTIONAL &PBE @@ -52,7 +53,7 @@ &END DFT &SUBSYS &CELL - ABC 10.0 10.0 10.0 + ABC 7.0 7.0 7.0 &END CELL &COORD O 0.000000 0.000000 0.000000 H2O1 diff --git a/tests/QS/regtest-ec/N2_ec-hfx-admm.inp b/tests/QS/regtest-ec/N2_ec-hfx-admm.inp index 26d421750e..f308007c06 100644 --- a/tests/QS/regtest-ec/N2_ec-hfx-admm.inp +++ b/tests/QS/regtest-ec/N2_ec-hfx-admm.inp @@ -9,10 +9,10 @@ BASIS_SET_FILE_NAME BASIS_ADMM POTENTIAL_FILE_NAME GTH_POTENTIALS &MGRID - CUTOFF 400 + CUTOFF 200 &END MGRID &QS - EPS_DEFAULT 1.E-14 + EPS_DEFAULT 1.E-10 &END QS &AUXILIARY_DENSITY_MATRIX_METHOD ADMM_PURIFICATION_METHOD NONE @@ -23,6 +23,10 @@ &ENERGY_CORRECTION ENERGY_FUNCTIONAL HARRIS HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END &XC &XC_FUNCTIONAL &PADE @@ -31,22 +35,28 @@ &END XC &END ENERGY_CORRECTION &SCF - EPS_SCF 1.0E-7 - SCF_GUESS RESTART + EPS_SCF 1.0E-6 + SCF_GUESS ATOMIC &END &XC - &XC_FUNCTIONAL NONE + &XC_FUNCTIONAL NONE &END &HF + FRACTION 1.0 &SCREENING - EPS_SCHWARZ 1.0E-14 + EPS_SCHWARZ 1.0E-10 &END &END &END XC + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END &END DFT &SUBSYS &CELL - ABC 6.0 6.0 6.0 + ABC 5.0 5.0 5.0 + PERIODIC NONE &END CELL &COORD N 0.000000 0.000000 0.650000 @@ -54,22 +64,19 @@ &END COORD &KIND N BASIS_SET ORB DZVP-GTH-BLYP - BASIS_SET HARRIS DZVP-GTH-BLYP -### BASIS_SET AUX_FIT FIT3 - BASIS_SET AUX_FIT DZVP-GTH-BLYP + BASIS_SET AUX_FIT FIT3 POTENTIAL GTH-PADE-q5 &END KIND &END SUBSYS &END FORCE_EVAL &GLOBAL PROJECT N2 - RUN_TYPE DEBUG -## RUN_TYPE ENERGY_FORCE + RUN_TYPE GEO_OPT PRINT_LEVEL LOW &END GLOBAL -&DEBUG - DEBUG_FORCES T - DEBUG_STRESS_TENSOR F - STOP_ON_MISMATCH F - DX 0.001 +&MOTION + &GEO_OPT + MAX_ITER 2 + &END &END + diff --git a/tests/QS/regtest-ec/N2_ec-hfx.inp b/tests/QS/regtest-ec/N2_ec-hfx.inp index 0bd950b42b..89b74fcafc 100644 --- a/tests/QS/regtest-ec/N2_ec-hfx.inp +++ b/tests/QS/regtest-ec/N2_ec-hfx.inp @@ -16,6 +16,10 @@ &ENERGY_CORRECTION ENERGY_FUNCTIONAL HARRIS HARRIS_BASIS ORBITAL + &RESPONSE_SOLVER + METHOD MO_SOLVER + PRECONDITIONER FULL_SINGLE_INVERSE + &END &XC &XC_FUNCTIONAL &PADE @@ -31,6 +35,7 @@ &XC_FUNCTIONAL NONE &END &HF + FRACTION 1.0 &SCREENING EPS_SCHWARZ 1.0E-14 &END @@ -39,7 +44,8 @@ &END DFT &SUBSYS &CELL - ABC 6.0 6.0 6.0 + ABC 4.0 4.0 4.0 + PERIODIC NONE &END CELL &COORD N 0.000000 0.000000 0.650000 @@ -47,7 +53,6 @@ &END COORD &KIND N BASIS_SET ORB DZVP-GTH-BLYP - BASIS_SET HARRIS DZVP-GTH-BLYP POTENTIAL GTH-PADE-q5 &END KIND &END SUBSYS @@ -58,9 +63,15 @@ RUN_TYPE ENERGY_FORCE PRINT_LEVEL LOW &END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 3 + &END +&END &DEBUG DEBUG_FORCES T DEBUG_STRESS_TENSOR F - STOP_ON_MISMATCH F + STOP_ON_MISMATCH T DX 0.001 &END + diff --git a/tests/QS/regtest-ec/N2_ec.inp b/tests/QS/regtest-ec/N2_ec.inp index 21600e00ed..9085d4c11c 100644 --- a/tests/QS/regtest-ec/N2_ec.inp +++ b/tests/QS/regtest-ec/N2_ec.inp @@ -8,10 +8,10 @@ BASIS_SET_FILE_NAME BASIS_SET POTENTIAL_FILE_NAME GTH_POTENTIALS &MGRID - CUTOFF 200 + CUTOFF 250 &END MGRID &QS - EPS_DEFAULT 1.E-14 + EPS_DEFAULT 1.E-10 &END QS &ENERGY_CORRECTION ENERGY_FUNCTIONAL HARRIS @@ -28,7 +28,7 @@ &END XC &END ENERGY_CORRECTION &SCF - EPS_SCF 1.0E-8 + EPS_SCF 1.0E-7 SCF_GUESS ATOMIC &END &XC @@ -62,6 +62,6 @@ &DEBUG DEBUG_FORCES T DEBUG_STRESS_TENSOR F - STOP_ON_MISMATCH F + STOP_ON_MISMATCH T DX 0.001 &END diff --git a/tests/QS/regtest-ec/TEST_FILES b/tests/QS/regtest-ec/TEST_FILES index 79309276e2..4cd6524b6f 100644 --- a/tests/QS/regtest-ec/TEST_FILES +++ b/tests/QS/regtest-ec/TEST_FILES @@ -10,7 +10,7 @@ H2_H2O_ecprim.inp 11 1e-10 # ENERGY : LS + KG embed + Harris (Diag) MAO basis 2H2O_ecmao.inp 11 1e-10 -34.0838901711 # ENERGY : LS + KG embed + Harris (Diag) MAO basis options -2H2O_ecmao2.inp 11 1e-08 -34.5024567596 +2H2O_ecmao2.inp 11 1e-08 -34.4437114917 # ENERGY : LS + KG embed + Harris (Diag) dipole HF_ec_dipole.inp 11 1e-08 -24.8917060368 # ENERGY : LS + KG embed + Harris (Diag) efield @@ -28,9 +28,9 @@ H2O_ec_otdiag_gs.inp 11 1e-08 - H2O_ec_otdiag_atomic.inp 11 1e-08 -17.262953794245810 # # FORCES: KS + Harris (Diag) + MO solver -N2_ec.inp 11 1e-08 -19.8027533258 +N2_ec.inp 11 1e-08 -19.9088452474 # FORCES: KS + Harris (Diag) + MO solver -H2O_ec.inp 11 1e-08 -17.1632800979 +H2O_ec.inp 11 1e-08 -17.2629537942 # FORCES KS + KG embed + Harris (TRS4) + AO solver H2_H2O_KSKGeH_AO_grad.inp 72 1E-08 0.01991310 # FORCES KS + KG embed + Harris (TRS4) + MO solver @@ -52,4 +52,7 @@ H2_H2O_LSKGaH_MO_an.inp 31 1e-05 H2O_KSH_MO_an.inp 31 1e-05 4.50118137345E+01 # STRESS: KS + Harris (Diag) + MO solver - Diagonal numerical H2O_KSH_AO_numdiag.inp 31 1e-05 -2.41849782017E+00 +# +N2_ec-hfx.inp 11 1e-10 -19.8158435718 +N2_ec-hfx-admm.inp 11 1e-10 -19.8434174973 #EOF diff --git a/tests/QS/regtest-epr-1/TEST_FILES b/tests/QS/regtest-epr-1/TEST_FILES index e8313cbb3b..b63a628565 100644 --- a/tests/QS/regtest-epr-1/TEST_FILES +++ b/tests/QS/regtest-epr-1/TEST_FILES @@ -3,9 +3,9 @@ # 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 -NO2-EPR-1.inp 20 2e-02 -0.0013392899999999999 -NO2-EPR-2.inp 20 7e-01 -0.0017388499999999999 +NO2-EPR-1.inp 20 2e-02 -0.0012817000000000000 +NO2-EPR-2.inp 20 7e-01 -0.0017388500000000000 NO2-EPR-3.inp 20 1e+00 -0.00140565 -NO2-EPR-keys-1.inp 20 2e-02 -0.0013716100000000001 +NO2-EPR-keys-1.inp 20 2e-02 -0.0013078100000000000 H2Om.inp 1 1e-10 -75.901123242692435 #EOF diff --git a/tests/QS/regtest-epr-2/TEST_FILES b/tests/QS/regtest-epr-2/TEST_FILES index 42cb3e4548..28b1210024 100644 --- a/tests/QS/regtest-epr-2/TEST_FILES +++ b/tests/QS/regtest-epr-2/TEST_FILES @@ -3,7 +3,7 @@ # 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 -NO2-EPR-1.inp 20 1e-01 -0.0034456299999999999 -NO2-EPR-2.inp 20 2e-01 -0.0025281700000000002 -NO2-EPR-3.inp 20 4e-01 -0.0035860200000000001 +NO2-EPR-1.inp 20 1e-01 -0.0023532400000000000 +NO2-EPR-2.inp 20 2e-01 -0.0013230200000000002 +NO2-EPR-3.inp 20 4e-01 -0.0012350000000000001 #EOF diff --git a/tests/QS/regtest-hfx-ri/TEST_FILES b/tests/QS/regtest-hfx-ri/TEST_FILES index d065e2097c..382279dc45 100644 --- a/tests/QS/regtest-hfx-ri/TEST_FILES +++ b/tests/QS/regtest-hfx-ri/TEST_FILES @@ -1,9 +1,9 @@ -H2O-hfx-coulomb.inp 1 5.0E-12 -75.937995243575216 -H2O-hfx-identity.inp 1 1.0E-10 -75.707755828618360 -H2O-hfx-periodic-ri-truncated.inp 1 5.0E-12 -66.832263034478061 -H2O-hybrid-b3lyp.inp 1 1.0E-12 -76.153589004939846 -CH-hfx-ri-mo.inp 1 1.0E-12 -37.919673838396520 -CH-hfx-ri-rho.inp 1 2.0E-10 -38.260062283561339 -CH3-ADMM.inp 1 1.0E-12 -7.369189285385670 -CH3-hfx-converged.inp 1 1.0E-11 -7.213172730712617 -Ne-hybrid-periodic-shortrange.inp 1 1.0E-12 -772.829899492141863 +H2O-hfx-coulomb.inp 1 5.0E-12 -75.93799524358548 +H2O-hfx-identity.inp 1 1.0E-10 -75.70775582866420 +H2O-hfx-periodic-ri-truncated.inp 1 5.0E-12 -66.83226303451153 +H2O-hybrid-b3lyp.inp 1 1.0E-12 -76.15358900494054 +CH-hfx-ri-mo.inp 1 1.0E-12 -37.91967383839648 +CH-hfx-ri-rho.inp 1 2.0E-10 -38.26006228355294 +CH3-ADMM.inp 1 1.0E-12 -7.36918928538798 +CH3-hfx-converged.inp 1 1.0E-11 -7.21317273069083 +Ne-hybrid-periodic-shortrange.inp 1 1.0E-12 -772.82989949221326 diff --git a/tests/QS/regtest-kp-1/TEST_FILES b/tests/QS/regtest-kp-1/TEST_FILES index 1156068407..2d157b4d65 100644 --- a/tests/QS/regtest-kp-1/TEST_FILES +++ b/tests/QS/regtest-kp-1/TEST_FILES @@ -12,5 +12,5 @@ c_6.inp 1 3e-14 c_gapw.inp 1 2e-13 -302.06260708586098 c_gapwxc.inp 1 1e-12 -45.66746891467081 cn_1.inp 1 6e-13 -49.27303752713806 -c_dos.inp 1 2e-14 -45.65699752126638 +c_dos.inp 1 2e-14 -45.65703654036614 #EOF diff --git a/tests/QS/regtest-kp-1/c_dos.inp b/tests/QS/regtest-kp-1/c_dos.inp index 8999244a92..de396c8376 100644 --- a/tests/QS/regtest-kp-1/c_dos.inp +++ b/tests/QS/regtest-kp-1/c_dos.inp @@ -14,7 +14,7 @@ &END MGRID &QS METHOD GPW - EPS_DEFAULT 1.0E-12 + EPS_DEFAULT 1.0E-10 EXTRAPOLATION USE_GUESS &END QS &SCF @@ -22,8 +22,8 @@ SCF_GUESS ATOMIC MAX_SCF 25 &MIXING - METHOD DIRECT_P_MIXING - ALPHA 0.50 + METHOD BROYDEN_MIXING + ALPHA 0.20 &END &END SCF &XC diff --git a/tests/QS/regtest-mp2-grad/H2_MP2_debug.inp b/tests/QS/regtest-mp2-grad/H2_MP2_debug.inp new file mode 100644 index 0000000000..ccf40cbe48 --- /dev/null +++ b/tests/QS/regtest-mp2-grad/H2_MP2_debug.inp @@ -0,0 +1,101 @@ +&GLOBAL + PROJECT test + PRINT_LEVEL LOW + RUN_TYPE DEBUG +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.001 +&END +&FORCE_EVAL + METHOD Quickstep + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + BASIS_SET_FILE_NAME HFX_BASIS + POTENTIAL_FILE_NAME POTENTIAL + &QS + METHOD GPW + EPS_DEFAULT 1.0E-12 + &END QS + &SCF + SCF_GUESS ATOMIC + EPS_SCF 1.0E-7 + MAX_SCF 100 + &END SCF + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &HF + FRACTION 1.0000000 + &SCREENING + SCREEN_ON_INITIAL_P .FALSE. + EPS_SCHWARZ 1.0E-9 + EPS_SCHWARZ_FORCES 1.0E-9 + &END SCREENING + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + &END HF + &WF_CORRELATION + &RI_MP2 + BLOCK_SIZE 1 + EPS_CANONICAL 0.0001 + FREE_HFX_BUFFER .TRUE. + &CPHF + EPS_CONV 1.0E-6 + MAX_ITER 60 + &END + &END + &INTEGRALS + &WFC_GPW + CUTOFF 100 + REL_CUTOFF 30 + EPS_FILTER 1.0E-6 + EPS_GRID 1.0E-6 + &END WFC_GPW + ERI_METHOD MME + &END INTEGRALS + MEMORY 2.00 + NUMBER_PROC 1 + &END + &END XC + &END DFT + &PRINT + &FORCES + &END + &END + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.0 + &END CELL + &KIND H + BASIS_SET DZVP-GTH + BASIS_SET RI_AUX RI_DZVP-GTH + POTENTIAL GTH-HF-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH + BASIS_SET RI_AUX RI_DZVP-GTH + POTENTIAL GTH-HF-q6 + &END KIND + &KIND F + BASIS_SET DZVP-GTH + BASIS_SET RI_AUX RI_DZVP-GTH + POTENTIAL GTH-HF-q7 + &END KIND + &COORD + H 0.000000 0.000000 0.380000 + H 0.000000 0.000000 -0.380000 + &END + &TOPOLOGY + &CENTER_COORDINATES + &END + &END TOPOLOGY + &END SUBSYS +&END FORCE_EVAL diff --git a/tests/QS/regtest-mp2-grad/TEST_FILES b/tests/QS/regtest-mp2-grad/TEST_FILES index d4038e41c1..70df708d63 100644 --- a/tests/QS/regtest-mp2-grad/TEST_FILES +++ b/tests/QS/regtest-mp2-grad/TEST_FILES @@ -4,6 +4,7 @@ H2_H2_no_freeHFX.inp 11 2e-13 O2_dyn.inp 11 2e-11 -31.519148246527102 O2_dyn_mme.inp 72 1e-8 0.50585576 CH_dyn_screen.inp 11 2e-04 -5.700371305153854 -MOM_MP2_geoopt.inp 11 2e-06 -13.969926110462767 -H2O_MD_mme.inp 11 1e-10 -17.056807598425284 +MOM_MP2_geoopt.inp 11 2e-06 -13.969926262647746 +H2O_MD_mme.inp 11 1e-10 -17.056807598425291 +H2_MP2_debug.inp 11 1e-10 -1.146241031776471 #EOF diff --git a/tests/QS/regtest-nmr-4/TEST_FILES b/tests/QS/regtest-nmr-4/TEST_FILES index e8a2e65396..37c29f0bbf 100644 --- a/tests/QS/regtest-nmr-4/TEST_FILES +++ b/tests/QS/regtest-nmr-4/TEST_FILES @@ -9,8 +9,8 @@ ch4-gapw-1.inp 14 2e-03 o2-gapw-uks-1.inp 14 6e-04 754.42700000000002 he-gapw-no-soft-1.inp 14 1.0E-14 0.807283E-06 c2h2_list-1.inp 14 7e-04 287.94999999999999 -no_list-1.inp 14 1e-01 1057.3900000000001 -h2o-no2-selected-states-1.inp 14 2e-03 459.28100000000001 +no_list-1.inp 14 1e-01 539.1900000000001 +h2o-no2-selected-states-1.inp 14 2e-03 431.54700000000001 h2o-no2-selected-states-2.inp 14 2e-01 312.52100000000002 w2_3-selected-states-1.inp 14 9e-04 364.09399999999999 w2_3-selected-states-2.inp 14 2e-02 0.169809E+04 diff --git a/tests/QS/regtest-nmr-6/TEST_FILES b/tests/QS/regtest-nmr-6/TEST_FILES index 1bb86421ae..0c4228926c 100644 --- a/tests/QS/regtest-nmr-6/TEST_FILES +++ b/tests/QS/regtest-nmr-6/TEST_FILES @@ -8,15 +8,15 @@ ch4-gapw-2.inp 14 2e-04 ch4-gapw-3.inp 14 2e-03 0.333051E+03 ch4-gapw-4.inp 14 2e-03 0.333493E+03 ch4-gapw-5.inp 14 2.0E-03 0.290901E+03 -no-gapw-1.inp 14 3e-02 2395.6900000000001 -no-gapw-2.inp 14 1e-04 13494.700000000001 -no-gapw-3.inp 14 2e-04 13513.4 +no-gapw-1.inp 14 3e-02 1586.4400000000001 +no-gapw-2.inp 14 1e-04 13170.600000000001 +no-gapw-3.inp 14 2e-04 13191.100000000000 no-gapw-4.inp 14 3e-01 329.47000000000003 no-gapw-5.inp 14 1e-03 16357.4 ch4-gapw-1-distributed.inp 14 2e-03 0.332896E+03 ch4-gapw-1-replicated.inp 14 2e-03 0.332896E+03 -no-gapw-1-distributed.inp 14 3e-02 2395.4200000000001 -no-gapw-1-replicated.inp 14 3e-02 2395.4200000000001 +no-gapw-1-distributed.inp 14 3e-02 1586.5600000000000 +no-gapw-1-replicated.inp 14 3e-02 1586.5600000000000 w2_qmmm-1.inp 14 8e-03 229.358 w2_qmmm-2.inp 14 2e-03 230.05799999999999 w2_qmmm-3.inp 14 4e-03 230.13999999999999 diff --git a/tests/QS/regtest-nmr-uks-1/TEST_FILES b/tests/QS/regtest-nmr-uks-1/TEST_FILES index 1c25eb3d6a..435f900de4 100644 --- a/tests/QS/regtest-nmr-uks-1/TEST_FILES +++ b/tests/QS/regtest-nmr-uks-1/TEST_FILES @@ -4,15 +4,15 @@ # 1 compares the last total energy in the file # for details see cp2k/tools/do_regtest O2-UKS-NMR-1.inp 14 2e-03 681.255 -O2-UKS-NMR-2.inp 14 1e-03 681.84900000000005 +O2-UKS-NMR-2.inp 14 1e-03 681.84900000000000 O2-UKS-NMR-3.inp 14 3e-04 681.173 -O2-UKS-NMR-4.inp 14 2e-03 714.20500000000004 -O2-UKS-NMR-5.inp 14 1e-03 681.84799999999996 -O2-UKS-NMR-6.inp 14 1e-03 681.84799999999996 -O2-UKS-NMR-7.inp 14 8e-04 681.23099999999999 -O2-UKS-NMR-8.inp 14 1e-03 681.81100000000004 -O2-UKS-NMR-9.inp 14 2e-04 681.173 -O2-UKS-NMR-10.inp 14 8e-04 681.23099999999999 -O2-UKS-NMR-11.inp 14 1e-03 681.82000000000005 -O2-UKS-NMR-12.inp 14 4e-03 681.00999999999999 +O2-UKS-NMR-4.inp 14 2e-03 714.20500000000000 +O2-UKS-NMR-5.inp 14 1e-03 681.84800000000000 +O2-UKS-NMR-6.inp 14 1e-03 681.84800000000000 +O2-UKS-NMR-7.inp 14 8e-04 681.23100000000000 +O2-UKS-NMR-8.inp 14 1e-03 681.81100000000000 +O2-UKS-NMR-9.inp 14 2e-04 681.33700000000000 +O2-UKS-NMR-10.inp 14 8e-04 681.23100000000000 +O2-UKS-NMR-11.inp 14 1e-03 681.82000000000000 +O2-UKS-NMR-12.inp 14 4e-03 683.86200000000000 #EOF diff --git a/tests/QS/regtest-polar/H2O_md_polar.inp b/tests/QS/regtest-polar/H2O_md_polar.inp index 7c21759485..e3ed35a6e1 100644 --- a/tests/QS/regtest-polar/H2O_md_polar.inp +++ b/tests/QS/regtest-polar/H2O_md_polar.inp @@ -47,10 +47,11 @@ BASIS_SET_FILE_NAME BASIS_MOLOPT POTENTIAL_FILE_NAME GTH_POTENTIALS &MGRID - CUTOFF 320 + CUTOFF 240 + REL_CUTOFF 40 &END MGRID &QS - EPS_DEFAULT 1.0E-12 + EPS_DEFAULT 1.0E-10 &END QS &SCF EPS_SCF 1.0E-6 @@ -88,7 +89,7 @@ &END PROPERTIES &SUBSYS &CELL - ABC [bohr] 12.0 12.0 12.0 + ABC [bohr] 10.0 10.0 10.0 &END CELL &COORD UNIT bohr diff --git a/tests/QS/regtest-polar/TEST_FILES b/tests/QS/regtest-polar/TEST_FILES index e749c1f702..f9c7b0997e 100644 --- a/tests/QS/regtest-polar/TEST_FILES +++ b/tests/QS/regtest-polar/TEST_FILES @@ -6,7 +6,7 @@ h2o_LRraman.inp 60 1e-04 0.006125121412 h2o_LRraman_loc.inp 60 1e-04 0.009153812508 h2o_LRraman_noort.inp 60 2e-05 0.023303680948 -H2O_md_polar.inp 60 6e-04 0.635317998131 +H2O_md_polar.inp 60 6e-04 0.614320139535 xTB_LRraman.inp 60 2e-05 0.804852847403 xTB_LRraman_loc.inp 60 2e-05 0.804852847403 h2o_LRraman_LRI.inp 60 4e-04 0.004262309795 diff --git a/tests/QS/regtest-stda-force-2/TEST_FILES b/tests/QS/regtest-stda-force-2/TEST_FILES new file mode 100644 index 0000000000..5b43c97cbb --- /dev/null +++ b/tests/QS/regtest-stda-force-2/TEST_FILES @@ -0,0 +1,12 @@ +# 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_f09.inp 1 1.0E-11 -17.04837819337335 +h2o_f10.inp 1 5.0E-11 -16.66860074430131 +h2o_f10b.inp 1 1.0E-11 -17.00363264930931 +h2o_f10c.inp 1 1.0E-11 -17.11290579606160 +h2o_f11.inp 1 5.0E-11 -17.24250934359922 +#EOF diff --git a/tests/QS/regtest-stda-force-2/h2o_f09.inp b/tests/QS/regtest-stda-force-2/h2o_f09.inp new file mode 100644 index 0000000000..a66b0df587 --- /dev/null +++ b/tests/QS/regtest-stda-force-2/h2o_f09.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 4 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-stda-force-2/h2o_f10.inp b/tests/QS/regtest-stda-force-2/h2o_f10.inp new file mode 100644 index 0000000000..e64c9e4fcf --- /dev/null +++ b/tests/QS/regtest-stda-force-2/h2o_f10.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 2 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + LSD + CHARGE 1 + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_ALL + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 diff --git a/tests/QS/regtest-stda-force-2/h2o_f10b.inp b/tests/QS/regtest-stda-force-2/h2o_f10b.inp new file mode 100644 index 0000000000..9a79c752d1 --- /dev/null +++ b/tests/QS/regtest-stda-force-2/h2o_f10b.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-stda-force-2/h2o_f10c.inp b/tests/QS/regtest-stda-force-2/h2o_f10c.inp new file mode 100644 index 0000000000..321f190850 --- /dev/null +++ b/tests/QS/regtest-stda-force-2/h2o_f10c.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + LSD + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 60 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 + diff --git a/tests/QS/regtest-stda-force-2/h2o_f11.inp b/tests/QS/regtest-stda-force-2/h2o_f11.inp new file mode 100644 index 0000000000..e03734b622 --- /dev/null +++ b/tests/QS/regtest-stda-force-2/h2o_f11.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + LSD + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 + diff --git a/tests/QS/regtest-stda-force-3/TEST_FILES b/tests/QS/regtest-stda-force-3/TEST_FILES new file mode 100644 index 0000000000..9f6ace56ec --- /dev/null +++ b/tests/QS/regtest-stda-force-3/TEST_FILES @@ -0,0 +1,14 @@ +# 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_f18.inp 1 1.0E-12 -16.66860019590990 +h2o_f19.inp 1 1.0E-12 -16.67209150973599 +h2o_f20.inp 1 1.0E-12 -16.67215317932532 +h2o_f21.inp 1 1.0E-12 -17.01262005246088 +h2o_f22.inp 1 1.0E-12 -17.13162782010438 +h2o_f23.inp 1 1.0E-12 -17.19069234992681 +h2o_f24.inp 1 1.0E-12 -17.19751728760886 +#EOF diff --git a/tests/QS/regtest-stda-force-3/h2o_f18.inp b/tests/QS/regtest-stda-force-3/h2o_f18.inp new file mode 100644 index 0000000000..48e3e1242f --- /dev/null +++ b/tests/QS/regtest-stda-force-3/h2o_f18.inp @@ -0,0 +1,88 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + LSD + CHARGE 1 + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 60 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 + diff --git a/tests/QS/regtest-stda-force-3/h2o_f19.inp b/tests/QS/regtest-stda-force-3/h2o_f19.inp new file mode 100644 index 0000000000..780da7a746 --- /dev/null +++ b/tests/QS/regtest-stda-force-3/h2o_f19.inp @@ -0,0 +1,88 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + LSD + CHARGE 1 + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 + diff --git a/tests/QS/regtest-stda-force-3/h2o_f20.inp b/tests/QS/regtest-stda-force-3/h2o_f20.inp new file mode 100644 index 0000000000..97426097b8 --- /dev/null +++ b/tests/QS/regtest-stda-force-3/h2o_f20.inp @@ -0,0 +1,88 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.00 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + LSD + CHARGE 1 + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 + diff --git a/tests/QS/regtest-stda-force-3/h2o_f21.inp b/tests/QS/regtest-stda-force-3/h2o_f21.inp new file mode 100644 index 0000000000..9b2d32696b --- /dev/null +++ b/tests/QS/regtest-stda-force-3/h2o_f21.inp @@ -0,0 +1,82 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 280 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-stda-force-3/h2o_f22.inp b/tests/QS/regtest-stda-force-3/h2o_f22.inp new file mode 100644 index 0000000000..8f581ad841 --- /dev/null +++ b/tests/QS/regtest-stda-force-3/h2o_f22.inp @@ -0,0 +1,82 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 280 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-stda-force-3/h2o_f23.inp b/tests/QS/regtest-stda-force-3/h2o_f23.inp new file mode 100644 index 0000000000..edba125171 --- /dev/null +++ b/tests/QS/regtest-stda-force-3/h2o_f23.inp @@ -0,0 +1,82 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 + diff --git a/tests/QS/regtest-stda-force-3/h2o_f24.inp b/tests/QS/regtest-stda-force-3/h2o_f24.inp new file mode 100644 index 0000000000..e137f02b6e --- /dev/null +++ b/tests/QS/regtest-stda-force-3/h2o_f24.inp @@ -0,0 +1,93 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 5 + 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 BECKE88X + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + PROJECT ftest + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 1 + &END +&END + + diff --git a/tests/QS/regtest-stda-force-4/TEST_FILES b/tests/QS/regtest-stda-force-4/TEST_FILES new file mode 100644 index 0000000000..219509ee8b --- /dev/null +++ b/tests/QS/regtest-stda-force-4/TEST_FILES @@ -0,0 +1,8 @@ +# 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_v01.inp 8 1.0E-07 402.001443 +#EOF diff --git a/tests/QS/regtest-stda-force-4/h2o_v01.inp b/tests/QS/regtest-stda-force-4/h2o_v01.inp new file mode 100644 index 0000000000..0f73f4b087 --- /dev/null +++ b/tests/QS/regtest-stda-force-4/h2o_v01.inp @@ -0,0 +1,74 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + BASIS_SET_FILE_NAME BASIS_SET + POTENTIAL_FILE_NAME POTENTIAL + &PRINT + &MOMENTS + PERIODIC .FALSE. + REFERENCE COM + &END + &END + &MGRID + CUTOFF 200 + &END MGRID + &QS + EPS_DEFAULT 1.0E-8 + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + EPS_SCF 1.0E-4 + SCF_GUESS ATOMIC + &END SCF + &XC + &XC_FUNCTIONAL Pade + &END XC_FUNCTIONAL + &END XC + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 4.0 + &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 DZVP-GTH-PADE + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT H2O-VIB + RUN_TYPE NORMAL_MODES + PRINT_LEVEL LOW +&END GLOBAL +&VIBRATIONAL_ANALYSIS + NPROC_REP 4 + DX 0.001 + INTENSITIES + &PRINT + &PROGRAM_RUN_INFO ON + &END + &END +&END diff --git a/tests/QS/regtest-stda-force/TEST_FILES b/tests/QS/regtest-stda-force/TEST_FILES new file mode 100644 index 0000000000..c84f2092b7 --- /dev/null +++ b/tests/QS/regtest-stda-force/TEST_FILES @@ -0,0 +1,16 @@ +# 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_f01.inp 1 1.0E-12 -17.04837834996800 +h2o_f02.inp 1 1.0E-12 -17.10271326121474 +h2o_f03.inp 1 1.0E-12 -17.00411157941168 +h2o_f04.inp 1 1.0E-12 -17.04707451944178 +h2o_f05.inp 1 1.0E-12 -17.24250915796103 +h2o_f06.inp 1 1.0E-12 -17.24250915829655 +h2o_f07.inp 1 1.0E-12 -17.23463662845554 +h2o_f08a.inp 1 1.0E-12 -17.23033252463928 +h2o_f08b.inp 1 1.0E-12 -17.23207360292983 +#EOF diff --git a/tests/QS/regtest-stda-force/h2o_f01.inp b/tests/QS/regtest-stda-force/h2o_f01.inp new file mode 100644 index 0000000000..0e9f848554 --- /dev/null +++ b/tests/QS/regtest-stda-force/h2o_f01.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-stda-force/h2o_f02.inp b/tests/QS/regtest-stda-force/h2o_f02.inp new file mode 100644 index 0000000000..b033a93a05 --- /dev/null +++ b/tests/QS/regtest-stda-force/h2o_f02.inp @@ -0,0 +1,85 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END diff --git a/tests/QS/regtest-stda-force/h2o_f03.inp b/tests/QS/regtest-stda-force/h2o_f03.inp new file mode 100644 index 0000000000..bdcaed48bf --- /dev/null +++ b/tests/QS/regtest-stda-force/h2o_f03.inp @@ -0,0 +1,85 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END diff --git a/tests/QS/regtest-stda-force/h2o_f04.inp b/tests/QS/regtest-stda-force/h2o_f04.inp new file mode 100644 index 0000000000..40b51b403b --- /dev/null +++ b/tests/QS/regtest-stda-force/h2o_f04.inp @@ -0,0 +1,85 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.00 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END diff --git a/tests/QS/regtest-stda-force/h2o_f05.inp b/tests/QS/regtest-stda-force/h2o_f05.inp new file mode 100644 index 0000000000..16a8d5fe59 --- /dev/null +++ b/tests/QS/regtest-stda-force/h2o_f05.inp @@ -0,0 +1,85 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 diff --git a/tests/QS/regtest-stda-force/h2o_f06.inp b/tests/QS/regtest-stda-force/h2o_f06.inp new file mode 100644 index 0000000000..3235c83625 --- /dev/null +++ b/tests/QS/regtest-stda-force/h2o_f06.inp @@ -0,0 +1,85 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 diff --git a/tests/QS/regtest-stda-force/h2o_f07.inp b/tests/QS/regtest-stda-force/h2o_f07.inp new file mode 100644 index 0000000000..8104fdae1e --- /dev/null +++ b/tests/QS/regtest-stda-force/h2o_f07.inp @@ -0,0 +1,85 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 diff --git a/tests/QS/regtest-stda-force/h2o_f08a.inp b/tests/QS/regtest-stda-force/h2o_f08a.inp new file mode 100644 index 0000000000..1ca8c101bd --- /dev/null +++ b/tests/QS/regtest-stda-force/h2o_f08a.inp @@ -0,0 +1,95 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.25 + &END sTDA + NSTATES 5 + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 60 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + PROJECT ftest + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 1 + &END +&END diff --git a/tests/QS/regtest-stda-force/h2o_f08b.inp b/tests/QS/regtest-stda-force/h2o_f08b.inp new file mode 100644 index 0000000000..ed4cbc4890 --- /dev/null +++ b/tests/QS/regtest-stda-force/h2o_f08b.inp @@ -0,0 +1,96 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 1 + 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 BECKE88X + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + PROJECT ftest + RUN_TYPE GEO_OPT + PRINT_LEVEL LOW +&END GLOBAL +&MOTION + &GEO_OPT + MAX_ITER 1 + &END +&END + diff --git a/tests/QS/regtest-stda/CH2O_none.inp b/tests/QS/regtest-stda/CH2O_none.inp new file mode 100644 index 0000000000..98ce52c9cb --- /dev/null +++ b/tests/QS/regtest-stda/CH2O_none.inp @@ -0,0 +1,73 @@ +&GLOBAL + PROJECT CH2O + RUN_TYPE ENERGY_FORCE + PRINT_LEVEL LOW +&END GLOBAL +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &PRINT + &FORCES + &END + &END + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME POTENTIAL + &MGRID + CUTOFF 200 + &END MGRID + &QS + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &POISSON + POISSON_SOLVER WAVELET + PERIODIC NONE + &END POISSON + &SCF + MAX_SCF 50 + SCF_GUESS ATOMIC + EPS_SCF 1.E-7 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &END DFT + &SUBSYS + &CELL + ABC 8.0 8.0 8.0 + PERIODIC NONE + &END CELL + &TOPOLOGY + &CENTER_COORDINATES + &END + &END TOPOLOGY + &COORD + O 0.094933 -0.000368 0.895642 + C -0.031077 -0.000121 -0.307326 + H -0.090437 0.947608 -0.895642 + H -0.094933 -0.947608 -0.895562 + &END COORD + &KIND O + BASIS_SET aug-TZV2P-GTH + POTENTIAL GTH-PBE-q6 + &END KIND + &KIND C + BASIS_SET aug-TZV2P-GTH + POTENTIAL GTH-PBE-q4 + &END KIND + &KIND H + BASIS_SET aug-TZV2P-GTH + POTENTIAL GTH-PBE-q1 + &END KIND + &END SUBSYS +&END FORCE_EVAL diff --git a/tests/QS/regtest-stda/CH2O_s1.inp b/tests/QS/regtest-stda/CH2O_s1.inp new file mode 100644 index 0000000000..7ed61427e7 --- /dev/null +++ b/tests/QS/regtest-stda/CH2O_s1.inp @@ -0,0 +1,70 @@ +&GLOBAL + PROJECT CH2O + RUN_TYPE ENERGY_FORCE + PRINT_LEVEL LOW +&END GLOBAL +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.0 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &PRINT + &FORCES + &END + &END + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME POTENTIAL + &MGRID + CUTOFF 200 + &END MGRID + &QS + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + MAX_SCF 50 + SCF_GUESS ATOMIC + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &END DFT + &SUBSYS + &CELL + ABC 6.0 6.0 6.0 + &END CELL + &TOPOLOGY + &CENTER_COORDINATES + &END + &END TOPOLOGY + &COORD + O 0.094933 -0.000368 0.895642 + C -0.031077 -0.000121 -0.307326 + H -0.090437 0.947608 -0.895642 + H -0.094933 -0.947608 -0.895562 + &END COORD + &KIND O + BASIS_SET aug-TZV2P-GTH + POTENTIAL GTH-PBE-q6 + &END KIND + &KIND C + BASIS_SET aug-TZV2P-GTH + POTENTIAL GTH-PBE-q4 + &END KIND + &KIND H + BASIS_SET aug-TZV2P-GTH + POTENTIAL GTH-PBE-q1 + &END KIND + &END SUBSYS +&END FORCE_EVAL diff --git a/tests/QS/regtest-stda/H2_none.inp b/tests/QS/regtest-stda/H2_none.inp new file mode 100644 index 0000000000..a1da1eb2c7 --- /dev/null +++ b/tests/QS/regtest-stda/H2_none.inp @@ -0,0 +1,69 @@ +&GLOBAL + PROJECT H2 + RUN_TYPE DEBUG + PRINT_LEVEL LOW +&END GLOBAL +&DEBUG + DEBUG_FORCES T + DEBUG_STRESS_TENSOR F + STOP_ON_MISMATCH F + DX 0.001 +&END +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &PRINT + &FORCES + &END + &END + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME POTENTIAL + &MGRID + CUTOFF 400 + &END MGRID + &QS + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &POISSON + POISSON_SOLVER WAVELET + PERIODIC NONE + &END POISSON + &SCF + MAX_SCF 50 + SCF_GUESS ATOMIC + EPS_SCF 1.E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &END DFT + &SUBSYS + &CELL + ABC 8.0 8.0 8.0 + PERIODIC NONE + &END CELL + &TOPOLOGY + &CENTER_COORDINATES + &END + &END TOPOLOGY + &COORD + H 0.000000 0.000000 4.360000 + H 0.000000 0.000000 3.640000 + &END COORD + &KIND H + BASIS_SET TZV2P-GTH + POTENTIAL GTH-PBE-q1 + &END KIND + &END SUBSYS +&END FORCE_EVAL diff --git a/tests/QS/regtest-stda/HF_none.inp b/tests/QS/regtest-stda/HF_none.inp new file mode 100644 index 0000000000..f3898fba81 --- /dev/null +++ b/tests/QS/regtest-stda/HF_none.inp @@ -0,0 +1,74 @@ +&GLOBAL + PROJECT HF + RUN_TYPE DEBUG + PRINT_LEVEL LOW +&END GLOBAL +&DEBUG + DEBUG_FORCES T + DEBUG_STRESS_TENSOR F + STOP_ON_MISMATCH F + DX 0.001 +&END +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &PRINT + &FORCES + &END + &END + &DFT + BASIS_SET_FILE_NAME GTH_BASIS_SETS + POTENTIAL_FILE_NAME POTENTIAL + &MGRID + CUTOFF 400 + REL_CUTOFF 60 + &END MGRID + &QS + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &POISSON + POISSON_SOLVER MT + PERIODIC NONE + &END POISSON + &SCF + MAX_SCF 50 + SCF_GUESS ATOMIC + EPS_SCF 1.E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &END DFT + &SUBSYS + &CELL + ABC 4.0 4.0 8.0 + PERIODIC NONE + &END CELL + &TOPOLOGY + &CENTER_COORDINATES + &END + &END TOPOLOGY + &COORD + H 0.000000 0.000000 4.260000 + F 0.000000 0.000000 3.360000 + &END COORD + &KIND H + BASIS_SET TZVP-GTH + POTENTIAL GTH-PBE-q1 + &END KIND + &KIND F + BASIS_SET TZVP-GTH + POTENTIAL GTH-PBE-q7 + &END KIND + &END SUBSYS +&END FORCE_EVAL diff --git a/tests/QS/regtest-stda/TEST_FILES b/tests/QS/regtest-stda/TEST_FILES new file mode 100644 index 0000000000..277d847835 --- /dev/null +++ b/tests/QS/regtest-stda/TEST_FILES @@ -0,0 +1,8 @@ +# 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 +CH2O_none.inp 72 1.0E-07 0.00245398 +CH2O_s1.inp 72 1.0E-07 0.00745033 +#EOF diff --git a/tests/QS/regtest-stda/TEST_FILES_RESET b/tests/QS/regtest-stda/TEST_FILES_RESET new file mode 100644 index 0000000000..792d600548 --- /dev/null +++ b/tests/QS/regtest-stda/TEST_FILES_RESET @@ -0,0 +1 @@ +# diff --git a/tests/QS/regtest-tddfpt-3/TEST_FILES b/tests/QS/regtest-tddfpt-3/TEST_FILES index 4562d1df64..42fd5494c6 100644 --- a/tests/QS/regtest-tddfpt-3/TEST_FILES +++ b/tests/QS/regtest-tddfpt-3/TEST_FILES @@ -5,8 +5,8 @@ # for details see cp2k/tools/do_regtest # # test of new LSD KERNEL and finite differences -ch2o_t1.inp 37 5.0E-06 0.182932E+00 -ch2o_t2.inp 37 5.0E-06 0.241502E+00 +ch2o_t1.inp 37 5.0E-06 0.181985E+00 +ch2o_t2.inp 37 5.0E-06 0.243152E+00 ch2o_t3.inp 37 5.0E-06 0.182932E+00 ch2o_t4.inp 37 5.0E-06 0.241502E+00 #EOF diff --git a/tests/QS/regtest-tddfpt-3/ch2o_t1.inp b/tests/QS/regtest-tddfpt-3/ch2o_t1.inp index 0799a02143..06e05b2ce2 100644 --- a/tests/QS/regtest-tddfpt-3/ch2o_t1.inp +++ b/tests/QS/regtest-tddfpt-3/ch2o_t1.inp @@ -23,7 +23,7 @@ BASIS_SET_FILE_NAME GTH_BASIS_SETS POTENTIAL_FILE_NAME POTENTIAL &MGRID - CUTOFF 250 + CUTOFF 200 &END MGRID &QS &END QS @@ -43,7 +43,7 @@ &END DFT &SUBSYS &CELL - ABC 6.0 6.0 6.0 + ABC 5.0 5.0 5.0 PERIODIC NONE &END CELL &TOPOLOGY diff --git a/tests/QS/regtest-tddfpt-3/ch2o_t2.inp b/tests/QS/regtest-tddfpt-3/ch2o_t2.inp index d86a8e93ce..fb6e40bd14 100644 --- a/tests/QS/regtest-tddfpt-3/ch2o_t2.inp +++ b/tests/QS/regtest-tddfpt-3/ch2o_t2.inp @@ -22,7 +22,7 @@ BASIS_SET_FILE_NAME GTH_BASIS_SETS POTENTIAL_FILE_NAME POTENTIAL &MGRID - CUTOFF 250 + CUTOFF 200 &END MGRID &QS &END QS @@ -42,7 +42,7 @@ &END DFT &SUBSYS &CELL - ABC 6.0 6.0 6.0 + ABC 5.0 5.0 5.0 PERIODIC NONE &END CELL &TOPOLOGY diff --git a/tests/QS/regtest-tddfpt-4/TEST_FILES b/tests/QS/regtest-tddfpt-4/TEST_FILES new file mode 100644 index 0000000000..dc155dc7f4 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/TEST_FILES @@ -0,0 +1,29 @@ +# 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 +# +#test01.inp 1 1.0E-11 -17.18917899734168 +#test02.inp 1 1.0E-11 -17.18917899734168 +#test03.inp 1 1.0E-11 -17.18917899734168 +#test04.inp 1 1.0E-11 -17.18917899734168 +#test05.inp 1 1.0E-11 -17.18917899734168 +#test06.inp 1 1.0E-11 -17.18917899734168 +#test07.inp 1 1.0E-11 -17.18917899734168 +#test08.inp 1 1.0E-11 -17.18917899734168 +#test09.inp 1 1.0E-11 -17.18917899734168 +#test10.inp 1 1.0E-11 -17.18917899734168 +#test11.inp 1 1.0E-11 -17.18917899734168 +#test12.inp 1 1.0E-11 -17.18917899734168 +#test13.inp 1 1.0E-11 -17.18917899734168 +#test14.inp 1 1.0E-11 -17.18917899734168 +#test15.inp 1 1.0E-11 -17.18917899734168 +#test16.inp 1 1.0E-11 -17.18917899734168 +#test17.inp 1 1.0E-11 -17.18917899734168 +#test18.inp 1 1.0E-11 -17.18917899734168 +#test19.inp 1 1.0E-11 -17.18917899734168 +#test20.inp 1 1.0E-11 -17.18917899734168 +#test21.inp 1 1.0E-11 -17.18917899734168 +#test22.inp 1 1.0E-11 -17.18917899734168 +#EOF diff --git a/tests/QS/regtest-tddfpt-4/references b/tests/QS/regtest-tddfpt-4/references new file mode 100644 index 0000000000..91fc567ea1 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/references @@ -0,0 +1,24 @@ +TEST KS Energy HOMO-LUMO E1 F1z +========================================================================================================= +test01 -17.2410575712 PBE 8.29564 8.67994 -0.12510436 +test02 -17.2344065516 PBE0 11.37226 9.14228 -0.11894030 +test03 -17.2344065516 PBE0 11.37226 9.14228 -0.11894030 +test04 -17.2323283991 PBE0 ADMM 11.38576 9.21132 -0.11909135 +test05 -17.2330138740 HSE06 10.54646 9.12041 -0.11947335 +test06 -17.2309849576 HSE06 ADMM(B88) 10.55959 9.16020 -0.10974605 +test07 -17.2064454552 B88 MIX_CL 17.34386 9.07644 -0.09598629 +test08 -17.2021496197 B88 MIX_CL ADMM 17.18941 9.22231 0.00577860 +test09 -17.1927023394 MGGA VV3 MIX_CL ADMM xxxxxxxx xxxxxxx xxxxxxxxxxx +test10 -17.1978417938 MGGA VV3 MIX_CL xxxxxxxx xxxxxxx xxxxxxxxxxx +test11 -17.2264490994 PBE0 TC ADMM(PBEX) 11.22594 9.57334 -0.11876680 +test12 -17.2277279113 PBE0 TC 11.18897 9.49663 -0.11896243 +test13 -17.2377733505 PBE0 TC LRC ADMM(PBEX) HOLE? +test14 -17.2404611684 PBE0 TC LRC HOLE? +test15 -17.1997698629 B88 MIX_CL TC ADMM(PBEX) 16.96634 9.83848 -0.10341545 +test16 -17.1993689130 B88 MIX_CL TC 17.00063 9.48348 -0.09480210 +test17 -17.2064454552 B88 MIX_CL TC (PBE) 17.34386 17.70733 -0.07271430 +test18 -17.2048955991 B88 MIX_CL TC ADMM(PBEX) (PBE) 17.24228 17.58311 -0.07353208 +test19 -17.2264490994 PBE0 TC ADMM(PBEX) (PBE) 11.22594 11.60056 -0.10071705 +test20 -17.2277279113 PBE0 TC (PBE) 11.18897 11.56993 -0.10182608 +test21 -17.2251121456 PBE0 TC ADMM(NC) 11.24440 9.57917 -0.08951004 +test22 -17.1937283672 B88 MIX_CL TC ADMM(NC) 17.05791 9.85534 -0.00093538 diff --git a/tests/QS/regtest-tddfpt-4/test01.inp b/tests/QS/regtest-tddfpt-4/test01.inp new file mode 100644 index 0000000000..a19912a55c --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test01.inp @@ -0,0 +1,79 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL + &PBE + &END + &END + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test02.inp b/tests/QS/regtest-tddfpt-4/test02.inp new file mode 100644 index 0000000000..768516a743 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test02.inp @@ -0,0 +1,77 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test03.inp b/tests/QS/regtest-tddfpt-4/test03.inp new file mode 100644 index 0000000000..c3f5ff724a --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test03.inp @@ -0,0 +1,92 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-12 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + FRACTION 0.25 + &END + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test04.inp b/tests/QS/regtest-tddfpt-4/test04.inp new file mode 100644 index 0000000000..a87c7aaac7 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test04.inp @@ -0,0 +1,103 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 DEFAULT + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + FRACTION 0.25 + &END + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test05.inp b/tests/QS/regtest-tddfpt-4/test05.inp new file mode 100644 index 0000000000..41d93924ff --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test05.inp @@ -0,0 +1,96 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &HYB_GGA_XC_HSE06 + &END HYB_GGA_XC_HSE06 + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-12 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE SHORTRANGE + OMEGA 0.11 + &END + FRACTION 0.25 + &END + &END XC + + &MGRID + CUTOFF 200 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test06.inp b/tests/QS/regtest-tddfpt-4/test06.inp new file mode 100644 index 0000000000..9646fb16e1 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test06.inp @@ -0,0 +1,107 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 BECKE88X + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &HYB_GGA_XC_HSE06 + &END HYB_GGA_XC_HSE06 + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-12 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE SHORTRANGE + OMEGA 0.11 + &END + FRACTION 0.25 + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test07.inp b/tests/QS/regtest-tddfpt-4/test07.inp new file mode 100644 index 0000000000..12202feafe --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test07.inp @@ -0,0 +1,106 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-10 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + &END + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test08.inp b/tests/QS/regtest-tddfpt-4/test08.inp new file mode 100644 index 0000000000..f867132767 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test08.inp @@ -0,0 +1,118 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + EPS_DEFAULT 1.E-14 + &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 BECKE88X + 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 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-12 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + &END + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test09.inp b/tests/QS/regtest-tddfpt-4/test09.inp new file mode 100644 index 0000000000..39021184f9 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test09.inp @@ -0,0 +1,117 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 DEFAULT + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &HYB_MGGA_XC_WB97M_V + &END HYB_MGGA_XC_WB97M_V + &END XC_FUNCTIONAL + &HF + FRACTION 1.000 + &SCREENING + EPS_SCHWARZ 1.0E-6 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + SCALE_COULOMB 0.15 + SCALE_LONGRANGE 0.85 + OMEGA 0.30 + &END + &MEMORY + MAX_MEMORY 10 + &END + &END + &vdW_POTENTIAL + DISPERSION_FUNCTIONAL NON_LOCAL + &NON_LOCAL + TYPE RVV10 + PARAMETERS 6.0 0.01 + VERBOSE_OUTPUT + KERNEL_FILE_NAME rVV10_kernel_table.dat + CUTOFF 30 + &END NON_LOCAL + &END vdW_POTENTIAL + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test10.inp b/tests/QS/regtest-tddfpt-4/test10.inp new file mode 100644 index 0000000000..72e2785931 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test10.inp @@ -0,0 +1,106 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &HYB_MGGA_XC_WB97M_V + &END HYB_MGGA_XC_WB97M_V + &END XC_FUNCTIONAL + &HF + FRACTION 1.000 + &SCREENING + EPS_SCHWARZ 1.0E-6 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + SCALE_COULOMB 0.15 + SCALE_LONGRANGE 0.85 + OMEGA 0.30 + &END + &MEMORY + MAX_MEMORY 10 + &END + &END + &vdW_POTENTIAL + DISPERSION_FUNCTIONAL NON_LOCAL + &NON_LOCAL + TYPE RVV10 + PARAMETERS 6.0 0.01 + VERBOSE_OUTPUT + KERNEL_FILE_NAME rVV10_kernel_table.dat + CUTOFF 30 + &END NON_LOCAL + &END vdW_POTENTIAL + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test11.inp b/tests/QS/regtest-tddfpt-4/test11.inp new file mode 100644 index 0000000000..f4352e831d --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test11.inp @@ -0,0 +1,110 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test12.inp b/tests/QS/regtest-tddfpt-4/test12.inp new file mode 100644 index 0000000000..7d110e2945 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test12.inp @@ -0,0 +1,99 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test13.inp b/tests/QS/regtest-tddfpt-4/test13.inp new file mode 100644 index 0000000000..f472887501 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test13.inp @@ -0,0 +1,114 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &PBE_HOLE_T_C_LR + CUTOFF_RADIUS 2.0 + SCALE_X 0.25 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test14.inp b/tests/QS/regtest-tddfpt-4/test14.inp new file mode 100644 index 0000000000..3f1c95144c --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test14.inp @@ -0,0 +1,103 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &PBE_HOLE_T_C_LR + CUTOFF_RADIUS 2.0 + SCALE_X 0.25 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test15.inp b/tests/QS/regtest-tddfpt-4/test15.inp new file mode 100644 index 0000000000..69c9eab1e0 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test15.inp @@ -0,0 +1,119 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-7 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL_TRUNC + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + CUTOFF_RADIUS 2.5 + T_C_G_DATA t_c_g.dat + &END + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test16.inp b/tests/QS/regtest-tddfpt-4/test16.inp new file mode 100644 index 0000000000..5892e7a09c --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test16.inp @@ -0,0 +1,111 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + DENSITY_CUTOFF 1.0E-9 + GRADIENT_CUTOFF 1.0E-9 + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-7 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL_TRUNC + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + ! should be cell L/2 but large enough for the erf to decay + CUTOFF_RADIUS 2.5 + T_C_G_DATA t_c_g.dat + &END + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test17.inp b/tests/QS/regtest-tddfpt-4/test17.inp new file mode 100644 index 0000000000..e883c34ef0 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test17.inp @@ -0,0 +1,110 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END + &END + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-10 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + &END + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test18.inp b/tests/QS/regtest-tddfpt-4/test18.inp new file mode 100644 index 0000000000..feb3179d8e --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test18.inp @@ -0,0 +1,121 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END + &END + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-10 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + &END + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test19.inp b/tests/QS/regtest-tddfpt-4/test19.inp new file mode 100644 index 0000000000..128754539b --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test19.inp @@ -0,0 +1,114 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END + &END + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test20.inp b/tests/QS/regtest-tddfpt-4/test20.inp new file mode 100644 index 0000000000..170dd82c1a --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test20.inp @@ -0,0 +1,103 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END + &END + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test21.inp b/tests/QS/regtest-tddfpt-4/test21.inp new file mode 100644 index 0000000000..a40517c5c3 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test21.inp @@ -0,0 +1,110 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &PBE + SCALE_X 0.75 + SCALE_C 1.0 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-6 + SCREEN_ON_INITIAL_P FALSE + &END + &MEMORY + MAX_MEMORY 900 + EPS_STORAGE_SCALING 0.1 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE TRUNCATED + CUTOFF_RADIUS 2.0 + T_C_G_DATA t_c_g.dat + &END + FRACTION 0.25 + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-4/test22.inp b/tests/QS/regtest-tddfpt-4/test22.inp new file mode 100644 index 0000000000..1381344a49 --- /dev/null +++ b/tests/QS/regtest-tddfpt-4/test22.inp @@ -0,0 +1,119 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + NSTATES 5 + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + + &XC + &XC_FUNCTIONAL + &BECKE88 + SCALE_X 0.95238 + &END + &BECKE88_LR + OMEGA 0.33 + SCALE_X -0.94979 + &END + &LYP + SCALE_C 1.0 + &END + &XALPHA + SCALE_X -0.13590 + &END + &END XC_FUNCTIONAL + &HF + &SCREENING + EPS_SCHWARZ 1.0E-7 + &END + &MEMORY + MAX_MEMORY 100 + &END + &INTERACTION_POTENTIAL + POTENTIAL_TYPE MIX_CL_TRUNC + OMEGA 0.33 + SCALE_LONGRANGE 0.94979 + SCALE_COULOMB 0.18352 + CUTOFF_RADIUS 2.5 + T_C_G_DATA t_c_g.dat + &END + &END + &END XC + + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ENERGY_FORCE +&END GLOBAL diff --git a/tests/QS/regtest-tddfpt-force-2/TEST_FILES b/tests/QS/regtest-tddfpt-force-2/TEST_FILES new file mode 100644 index 0000000000..ba1e883b09 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/TEST_FILES @@ -0,0 +1,17 @@ +# 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_f11.inp 1 5.0E-11 -17.08499353842008 +h2o_f12.inp 1 5.0E-11 -17.23314437863298 +h2o_f13.inp 1 1.0E-10 -17.21220473024686 +h2o_f14.inp 1 5.0E-11 -17.07269323295120 +h2o_f15.inp 1 5.0E-11 -17.18915023364806 +h2o_f16.inp 1 5.0E-11 -17.18920547153097 +h2o_f17.inp 1 5.0E-11 -17.20476266421664 +h2o_f18.inp 1 5.0E-11 -16.70951382015152 +h2o_f19.inp 1 5.0E-11 -17.21018149300859 +h2o_f20.inp 1 5.0E-11 -17.18911873596080 +#EOF diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f11.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f11.inp new file mode 100644 index 0000000000..de03399ee5 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f11.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &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 + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f12.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f12.inp new file mode 100644 index 0000000000..fd51837de7 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f12.inp @@ -0,0 +1,89 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + EPS_DEFAULT 1.E-14 + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &END + &POISSON + PERIODIC NONE + POISSON_SOLVER MT + &END + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 5.0 5.0 5.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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 + + diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f13.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f13.inp new file mode 100644 index 0000000000..42991a743d --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f13.inp @@ -0,0 +1,88 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 + diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f14.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f14.inp new file mode 100644 index 0000000000..a12c3da788 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f14.inp @@ -0,0 +1,88 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f15.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f15.inp new file mode 100644 index 0000000000..0445384230 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f15.inp @@ -0,0 +1,97 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &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 NONE + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f16.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f16.inp new file mode 100644 index 0000000000..a4ab183a94 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f16.inp @@ -0,0 +1,97 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &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 NONE + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f17.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f17.inp new file mode 100644 index 0000000000..59289638fd --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f17.inp @@ -0,0 +1,97 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f18.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f18.inp new file mode 100644 index 0000000000..20b939db5d --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f18.inp @@ -0,0 +1,99 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 2 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + CHARGE 1 + &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 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_ALL + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f19.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f19.inp new file mode 100644 index 0000000000..1b4cb7586b --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f19.inp @@ -0,0 +1,98 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 3 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &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 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-2/h2o_f20.inp b/tests/QS/regtest-tddfpt-force-2/h2o_f20.inp new file mode 100644 index 0000000000..c5793778bd --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-2/h2o_f20.inp @@ -0,0 +1,97 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &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 DEFAULT + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-3/TEST_FILES b/tests/QS/regtest-tddfpt-force-3/TEST_FILES new file mode 100644 index 0000000000..f9afa3a1fb --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/TEST_FILES @@ -0,0 +1,19 @@ +# 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_f21.inp 1 1.0E-11 -17.18917899753596 +h2o_f22.inp 1 5.0E-11 -17.20666199794008 +h2o_f23.inp 1 1.0E-11 -16.71305460110763 +h2o_f24.inp 1 1.0E-11 -17.20661694192800 +#h2o_f25.inp 1 1.0E-12 0.000000E+00 Triplet GGA ? +h2o_f26.inp 1 1.0E-12 -16.75274791420235 +h2o_f27.inp 1 1.0E-12 -16.75153365714026 +h2o_f28.inp 1 5.0E-11 -16.73227374381129 +h2o_f29.inp 1 1.0E-11 -17.20831564980310 +h2o_f30.inp 1 1.0E-11 -17.20236904224571 +h2o_f31.inp 1 1.0E-11 -17.21316685773503 +h2o_f32.inp 1 1.0E-11 -17.20999702035802 +#EOF diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f21.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f21.inp new file mode 100644 index 0000000000..f542233e1c --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f21.inp @@ -0,0 +1,97 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &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 DEFAULT + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f22.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f22.inp new file mode 100644 index 0000000000..96c0fa3065 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f22.inp @@ -0,0 +1,97 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &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 DEFAULT + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f23.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f23.inp new file mode 100644 index 0000000000..d7a12c8521 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f23.inp @@ -0,0 +1,99 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 3 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-6 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + CHARGE 1 + &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 DEFAULT + EXCH_SCALING_MODEL NONE + METHOD BASIS_PROJECTION + &END + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_ALL + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f24.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f24.inp new file mode 100644 index 0000000000..1621f63ed1 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f24.inp @@ -0,0 +1,98 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &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 DEFAULT + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f25.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f25.inp new file mode 100644 index 0000000000..f446414590 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f25.inp @@ -0,0 +1,100 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT +# +# is there a problem with GGA functionals triplet? +# + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 2 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + BASIS_SET_FILE_NAME BASIS_SET + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 280 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + POTENTIAL GTH-PADE-q6 + &END KIND + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE DEBUG +## RUN_TYPE GEO_OPT +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.0005 +&END +&MOTION + &GEO_OPT + MAX_ITER 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f26.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f26.inp new file mode 100644 index 0000000000..c1e1cf6676 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f26.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 1 + 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 + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &HF + FRACTION 1.0 + &END + &END XC + &MGRID + CUTOFF 280 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f27.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f27.inp new file mode 100644 index 0000000000..3ed1736216 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f27.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 2 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + BASIS_SET_FILE_NAME BASIS_SET + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &HF + FRACTION 1.0 + &END + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f28.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f28.inp new file mode 100644 index 0000000000..25e0ea2c12 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f28.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + BASIS_SET_FILE_NAME BASIS_SET + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &HF + FRACTION 1.0 + &END + &END XC + &MGRID + CUTOFF 280 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f29.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f29.inp new file mode 100644 index 0000000000..21bcf2988b --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f29.inp @@ -0,0 +1,93 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 1 + 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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ORB DZV-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET ORB 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 + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f30.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f30.inp new file mode 100644 index 0000000000..2ef7a2badf --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f30.inp @@ -0,0 +1,93 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &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 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 ORB DZV-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET ORB 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 + diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f31.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f31.inp new file mode 100644 index 0000000000..3b4473bca0 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f31.inp @@ -0,0 +1,101 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + 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 DEFAULT + 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 10 + 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 200 + REL_CUTOFF 50 + &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 ORB DZV-GTH-PADE + BASIS_SET AUX_FIT DZV-GTH-PADE + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET ORB DZVP-GTH-PADE + BASIS_SET AUX_FIT DZVP-GTH-PADE + 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 +## RUN_TYPE DEBUG +&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.001 +&END DEBUG diff --git a/tests/QS/regtest-tddfpt-force-3/h2o_f32.inp b/tests/QS/regtest-tddfpt-force-3/h2o_f32.inp new file mode 100644 index 0000000000..062e35cc11 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force-3/h2o_f32.inp @@ -0,0 +1,101 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + ADMM_KERNEL_CORRECTION_SYMMETRIC + 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 DEFAULT + 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 10 + 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 200 + REL_CUTOFF 50 + &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 ORB DZV-GTH-PADE + BASIS_SET AUX_FIT FIT3 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET ORB 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 +## RUN_TYPE DEBUG +&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.001 +&END DEBUG diff --git a/tests/QS/regtest-tddfpt-force/TEST_FILES b/tests/QS/regtest-tddfpt-force/TEST_FILES new file mode 100644 index 0000000000..cfc250cb2a --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/TEST_FILES @@ -0,0 +1,18 @@ +# 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_f01.inp 1 1.0E-11 -16.97072210462662 +h2o_f02.inp 1 5.0E-11 -17.00582465500199 +h2o_f03.inp 1 5.0E-11 -17.00548875425553 +h2o_f04.inp 1 5.0E-11 -17.10679698013192 +h2o_f05.inp 1 1.0E-11 -17.09136193487421 +h2o_f06.inp 1 1.0E-11 -16.55487974588554 +h2o_f07.inp 1 2.0E-11 -17.00806155857331 +h2o_f08.inp 1 1.0E-11 -17.12526295781511 +h2o_f09.inp 1 1.0E-11 -17.21975280565217 +h2o_f10.inp 1 1.0E-11 -17.02954820220558 +h2o_f10b.inp 1 1.0E-11 -17.08503047402411 +#EOF diff --git a/tests/QS/regtest-tddfpt-force/h2o_f01.inp b/tests/QS/regtest-tddfpt-force/h2o_f01.inp new file mode 100644 index 0000000000..aff33c9fc3 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f01.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-8 + &END + MAX_SCF 50 + EPS_SCF 1.0E-8 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 280 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-force/h2o_f02.inp b/tests/QS/regtest-tddfpt-force/h2o_f02.inp new file mode 100644 index 0000000000..d318e81661 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f02.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 280 + 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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END diff --git a/tests/QS/regtest-tddfpt-force/h2o_f03.inp b/tests/QS/regtest-tddfpt-force/h2o_f03.inp new file mode 100644 index 0000000000..c0ea744fca --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f03.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END diff --git a/tests/QS/regtest-tddfpt-force/h2o_f04.inp b/tests/QS/regtest-tddfpt-force/h2o_f04.inp new file mode 100644 index 0000000000..81c3ab6ee9 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f04.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END diff --git a/tests/QS/regtest-tddfpt-force/h2o_f05.inp b/tests/QS/regtest-tddfpt-force/h2o_f05.inp new file mode 100644 index 0000000000..3a831cba4f --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f05.inp @@ -0,0 +1,86 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 280 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END diff --git a/tests/QS/regtest-tddfpt-force/h2o_f06.inp b/tests/QS/regtest-tddfpt-force/h2o_f06.inp new file mode 100644 index 0000000000..61b541bb5e --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f06.inp @@ -0,0 +1,89 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + CHARGE 1 + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 4 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_ALL + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-force/h2o_f07.inp b/tests/QS/regtest-tddfpt-force/h2o_f07.inp new file mode 100644 index 0000000000..502e7444b4 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f07.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END diff --git a/tests/QS/regtest-tddfpt-force/h2o_f08.inp b/tests/QS/regtest-tddfpt-force/h2o_f08.inp new file mode 100644 index 0000000000..a8da0b77ea --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f08.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &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 + LSD + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PADE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 diff --git a/tests/QS/regtest-tddfpt-force/h2o_f09.inp b/tests/QS/regtest-tddfpt-force/h2o_f09.inp new file mode 100644 index 0000000000..1632df6d11 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f09.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 diff --git a/tests/QS/regtest-tddfpt-force/h2o_f10.inp b/tests/QS/regtest-tddfpt-force/h2o_f10.inp new file mode 100644 index 0000000000..9cafc92985 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f10.inp @@ -0,0 +1,83 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL NONE + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-force/h2o_f10b.inp b/tests/QS/regtest-tddfpt-force/h2o_f10b.inp new file mode 100644 index 0000000000..2c37bd8989 --- /dev/null +++ b/tests/QS/regtest-tddfpt-force/h2o_f10b.inp @@ -0,0 +1,87 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL FULL + &XC + &XC_FUNCTIONAL NONE + &END XC_FUNCTIONAL + &END XC + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD GPW + &END QS + &EXCITED_STATES T + STATE 2 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-6 + &END + MAX_SCF 50 + EPS_SCF 1.0E-6 + &END SCF + &XC + &XC_FUNCTIONAL PBE0 + &END XC_FUNCTIONAL + &END XC + &MGRID + CUTOFF 200 + REL_CUTOFF 40 + &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 + POTENTIAL GTH-PADE-q1 + &END KIND + &KIND O + BASIS_SET DZVP-GTH-PADE + 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 2 + &END +&END + diff --git a/tests/QS/regtest-tddfpt-stda/TEST_FILES b/tests/QS/regtest-tddfpt-stda/TEST_FILES index 33619f8750..b7439fc1d9 100644 --- a/tests/QS/regtest-tddfpt-stda/TEST_FILES +++ b/tests/QS/regtest-tddfpt-stda/TEST_FILES @@ -7,7 +7,7 @@ CH2O_tddfpt_stda-s-1.inp 37 1.0E-05 CH2Oplus_tddfpt_stda-lsd.inp 37 1.0E-05 0.212156E+00 CH2O_tddfpt_stda-pbe-s.inp 37 1.0E-05 0.125452E+00 CH2O_tddfpt_stda-xtb-s.inp 37 1.0E-05 0.150482E+00 -CH2O_stda-xtb-s.inp 37 1.0E-05 0.256891E-01 +CH2O_stda-xtb-s.inp 37 1.0E-05 0.256889E-01 H2O_tddfpt_stda-pbe-s.inp 37 1.0E-05 0.599658E+00 H2Oplus_tddfpt_stda-pbe-lsd.inp 37 1.0E-05 0.463329E+00 H2O_tddfpt_stda-pbe-t.inp 37 1.0E-05 0.595565E+00 @@ -15,6 +15,6 @@ H2O_tddfpt_stda-pbe0-s.inp 37 1.0E-05 H2O_tddfpt_stda-pbe0-t.inp 37 1.0E-05 0.633489E+00 H2O_tddfpt_stda-s-1.inp 37 1.0E-05 0.173064E+00 NO_tddfpt_stda-s-1.inp 37 1.0E-05 0.375613E+00 -water_xTB.inp 37 2.0E-05 0.185372E+00 -water_xTBi_NTO.inp 37 2.0E-05 0.185372E+00 +water_xTB.inp 37 2.0E-05 0.185374E+00 +water_xTBi_NTO.inp 37 2.0E-05 0.185374E+00 #EOF diff --git a/tests/TEST_DIRS b/tests/TEST_DIRS index a443ea1ae1..9821ff0bfe 100644 --- a/tests/TEST_DIRS +++ b/tests/TEST_DIRS @@ -22,51 +22,85 @@ QS/regtest-rma-3D libint mpi3 mpiranks TMC/regtest_ana_on_the_fly parallel mpiranks>2 TMC/regtest parallel mpiranks>1 TMC/regtest_ana_post_proc parallel mpiranks>1 +QS/regtest-grid +QS/regtest-corr_dipm +QS/regtest-admm-gapw libint +QS/regtest-rs-dhft libint libxc +QS/regtest-sos-mp2-lr libint +QS/regtest-rpa-lr libint +QS/regtest-mp2-lr libint +QS/regtest-xastdp libint libxc +QS/regtest-gw2x libint libxc +QS/regtest-negf +QS/regtest-negf-fft fftw3 +QS/regtest-ri-rpa-axk libint +QS/regtest-ri-rpa-rse libint +QS/regtest-cdft-hirshfeld-2 parallel mpiranks>1 +QS/regtest-cdft-hirshfeld +SIRIUS/regtest-1 sirius +QS/regtest-embed libint +QS/regtest-pod +QS/regtest-debug-1 +QS/regtest-debug-2 libint +QS/regtest-debug-3 libint +QS/regtest-debug-4 libint +QS/regtest-debug-5 libint +QS/regtest-stda-force libint +QS/regtest-stda-force-2 libint +QS/regtest-stda-force-3 libint +QS/regtest-stda-force-4 libint +QS/regtest-tddfpt-force libint +QS/regtest-tddfpt-force-2 libint +QS/regtest-tddfpt-force-3 libint +QS/regtest-cdft-diag +xTB/regtest-1 +xTB/regtest-2 +xTB/regtest-3 +xTB/regtest-4 xTB/regtest-5 +xTB/regtest-debug +xTB/regtest-stda +xTB/regtest-stda-force +QS/regtest-almo-strong +QS/regtest-elpa-2 elpa +QS/regtest-cdft-5 Pimd/regtest-1 Pimd/regtest-2 QS/regtest-pao-2 -QS/regtest-embed libint -QS/regtest-rpa-cubic-scaling libint -QS/regtest-kp-2 -QS/regtest-admm-gapw libint -DFTB/regtest-scc-2 +QS/regtest-tddfpt-2 libint +QS/regtest-tddfpt-3 +QS/regtest-tddfpt-4 libint +QS/regtest-stda libint QS/regtest-p-efield -QS/regtest-debug-1 -QS/regtest-debug-2 libint +QS/regtest-mp2-stress libint +QS/regtest-ri-rpa libint +QS/regtest-kg libxc +QS/regtest-ec libint +QS/regtest-ec-force libint QS/regtest-gpw-4 -SIRIUS/regtest-1 sirius -QS/regtest-pod QS/regtest-gpw-2-3 DFTB/regtest-scc -QS/regtest-xastdp libint libxc +DFTB/regtest-scc-2 QS/regtest-hfx libint -QS/regtest-cdft-diag QS/regtest-rel -QS/regtest-debug-3 libint -QS/regtest-gw2x libint libxc QS/regtest-ls-rtp QS/regtest-admm-qps libint ATOM/regtest-pseudo Fist/regtest-7-1 QMMM/SE/regtest-force-mixing QS/regtest-gpw-8 -xTB/regtest-1 QS/regtest-ot QS/regtest-mp2-grad libint QS/regtest-plus_u QS/regtest-gpw-3 QS/regtest-ps-implicit-1-3 fftw3 -QS/regtest-ec libint QS/regtest-ps-implicit-2-2 QS/regtest-rtp-3 QS/regtest-pao-1 QMMM/QS/regtest-1 QS/regtest-ps-implicit-2-1 QS/regtest-as-1 libint -xTB/regtest-2 Fist/regtest-12 -QS/regtest-kg libxc QS/regtest-ri-rpa libint QS/regtest-nmr-uks-1 QS/regtest-libxc libxc libint @@ -76,7 +110,7 @@ QS/regtest-xc QS/regtest-almo-2 SE/regtest-2-2 QS/regtest-kp-1 libint -QS/regtest-ri-rpa-axk libint +QS/regtest-kp-2 libint QS/regtest-gapw-1 QS/regtest-hfx-wfn-fitting libint libxc QS/regtest-lvlshift @@ -90,15 +124,11 @@ QS/regtest-gpw-1 libint QS/regtest-gapw-4 libint MC/regtest QS/regtest-ri-mp2 libint -QS/regtest-negf-fft fftw3 QS/regtest-dft-vdw-corr-3 libxc QS/regtest-admm-4 libint -xTB/regtest-debug Fist/regtest-1-4 -QS/regtest-negf QS/regtest-hfx-ri libint QS/regtest-almo-md -QS/regtest-tddfpt-2 libint SE/regtest-2-1 QS/regtest-lrigpw-2 QS/regtest-pao-4 @@ -108,12 +138,9 @@ QS/regtest-nmr-4 QMMM/QS/regtest-cdft parallel mpiranks==2||mpiranks==4||mpiranks==6||mpiranks==16||mpiranks==24 QS/regtest-gw libint QS/regtest-ps-implicit-1-1 fftw3 -QS/regtest-mp2-stress libint -QS/regtest-rpa-lr libint QS/regtest-nmr-1 QS/regtest-ot-1 Fist/regtest-15 -QS/regtest-tddfpt-3 SE/regtest QS/regtest-dft-vdw-corr-2 libxc libint QS/regtest-epr-1 @@ -140,10 +167,8 @@ Fist/regtest-5-vib mpiranks==1||mpirank QS/regtest-pexsi pexsi QS/regtest-ot-2 Fist/regtest-7-2 -QS/regtest-mp2-lr libint QS/regtest-sparsity libint QS/regtest-polar -QS/regtest-grid SE/regtest-4 QS/regtest-nonortho QS/regtest-hybrid-3 libint @@ -151,7 +176,6 @@ QS/regtest-almo-trustr QS/regtest-gpw-6-2 QS/regtest-md-extrap QS/regtest-gpw-2-2 -QS/regtest-corr_dipm LIBTEST QS/regtest-rtp-2 QS/regtest-hfx-stress libint @@ -168,11 +192,8 @@ QS/regtest-sccs-3 ATOM/regtest-1 QS/regtest-ri-laplace-mp2 libint NNP/regtest-1 -QS/regtest-cdft-5 QS/regtest-gpw-7 -QS/regtest-sos-mp2-lr libint Fist/regtest-1-3 -QS/regtest-almo-strong QS/regtest-stress QMMM/QS/regtest-2-swave QS/regtest-cdft-4-3 @@ -200,11 +221,9 @@ ATOM/regtest-2 NEB/regtest-4 QS/regtest-kp-3 xTB/regtest-4 -QS/regtest-ri-rpa-rse libint QS/regtest-dft-vdw-corr-1 QS/regtest-epr-2 QS/regtest-gw-ic-model libint -QS/regtest-rs-dhft libint libxc QS/regtest-meta QMMM/xTB/regtest QS/regtest-gpw-9 libxc @@ -234,7 +253,6 @@ QMMM/QS/regtest-shell-pol QS/regtest-double-hybrid-2 libint Fist/regtest-excl-R Fist/regtest-14 -QS/regtest-cdft-hirshfeld-2 parallel mpiranks>1 Fist/regtest-excl-G FE/regtest-1 QS/regtest-hfx-2 libint @@ -251,7 +269,6 @@ QS/regtest-ot-refine-2 NEB/regtest-2 QS/regtest-nmr-2 QS/regtest-cdft-3-1 -QS/regtest-cdft-hirshfeld QS/regtest-optbas QS/regtest-spin-spin-1 QS/regtest-elpa-qr elpa mpiranks==1||mpiranks==2||mpiranks==4||mpiranks==6||mpiranks==8 @@ -280,7 +297,6 @@ SE/regtest-3-1 QMMM/QS/regtest-lrigpw Fist/regtest-field Fist/regtest-gauss -QS/regtest-elpa-2 elpa Fist/regtest-gal19 Fist/regtest-gal21 QS/regtest-fftw fftw3 diff --git a/tests/xTB/regtest-1/TEST_FILES b/tests/xTB/regtest-1/TEST_FILES index 7dc8655e4c..34bcfd3ddc 100644 --- a/tests/xTB/regtest-1/TEST_FILES +++ b/tests/xTB/regtest-1/TEST_FILES @@ -15,9 +15,7 @@ h2o_str.inp 1 1.0E-12 -5.76547341 h2o-atprop.inp 1 1.0E-10 -185.16704903931230 h2o-atprop0.inp 1 1.0E-12 -187.45499307089042 si_geo.inp 1 1.0E-12 -14.55678348978414 -si_kp.inp 1 1.0E-12 -14.75431646565682 +si_kp.inp 1 1.0E-12 -14.75431716922754 h2o_dimer.inp 1 1.0E-12 -11.54506384130837 ghost.inp 1 1.0E-12 -1.03458109975585 -ghost_md.inp 1 1.0E-07 -2.072007677 -fhpot.inp 1 1.0E-07 -2.071199300 #EOF diff --git a/tests/xTB/regtest-1/ghost.inp b/tests/xTB/regtest-1/ghost.inp index 3ac112a2f2..3d441daed5 100644 --- a/tests/xTB/regtest-1/ghost.inp +++ b/tests/xTB/regtest-1/ghost.inp @@ -6,7 +6,7 @@ &SCF SCF_GUESS MOPAC MAX_SCF 100 - EPS_SCF 1.e-10 + EPS_SCF 1.e-5 &END SCF &END DFT &SUBSYS @@ -24,5 +24,5 @@ &GLOBAL PROJECT H2 RUN_TYPE ENERGY - PRINT_LEVEL MEDIUM + PRINT_LEVEL LOW &END GLOBAL diff --git a/tests/xTB/regtest-1/si_kp.inp b/tests/xTB/regtest-1/si_kp.inp index ce44e34b81..3ccecc1f56 100644 --- a/tests/xTB/regtest-1/si_kp.inp +++ b/tests/xTB/regtest-1/si_kp.inp @@ -9,7 +9,6 @@ &END QS &POISSON &EWALD - ALPHA 2.0 EWALD_TYPE SPME &END EWALD &END POISSON @@ -21,8 +20,10 @@ MAX_SCF 100 EPS_SCF 1.e-6 &MIXING - METHOD DIRECT_P_MIXING - ALPHA 0.40 + #METHOD DIRECT_P_MIXING + METHOD BROYDEN_MIXING + ALPHA 0.20 + BETA 0.50 &END &SMEAR METHOD FERMI_DIRAC diff --git a/tests/xTB/regtest-5/ef_stress3.inp b/tests/xTB/regtest-5/ef_stress3.inp index 09fd82eb5e..da9970d8a5 100644 --- a/tests/xTB/regtest-5/ef_stress3.inp +++ b/tests/xTB/regtest-5/ef_stress3.inp @@ -34,11 +34,11 @@ &END xTB &END QS &SCF - EPS_SCF 1.0E-7 + EPS_SCF 1.0E-6 MAX_SCF 400 &MIXING METHOD DIRECT_P_MIXING - ALPHA 0.25 + ALPHA 0.50 &END &END SCF &PERIODIC_EFIELD diff --git a/tests/xTB/regtest-debug/TEST_FILES b/tests/xTB/regtest-debug/TEST_FILES index 1805a38c1c..777e696575 100644 --- a/tests/xTB/regtest-debug/TEST_FILES +++ b/tests/xTB/regtest-debug/TEST_FILES @@ -9,7 +9,9 @@ ch2o_t03.inp 86 1.0E-12 0.11459198 ch2o_t04.inp 86 1.0E-12 0.109829662200E+01 ch2o_t05.inp 87 1.0E-12 0.226843652140E+02 ch2o_t06.inp 87 1.0E-12 0.230117849452E+02 +ch2o_t07.inp 86 1.0E-12 0.914433972994E+00 +ch2o_t08.inp 86 1.0E-12 0.924084786637E+00 ch3br_nonbond_2.inp 1 1.0E-12 -11.78062819229165 ch3br_nonbond.inp 1 1.0E-12 -11.78062802267188 -ch3br_atprop_nonbond.inp 1 1.0E-10 -11.78101985886981 +ch3br_atprop_nonbond.inp 1 1.0E-10 -11.78112949522890 #EOF diff --git a/tests/xTB/regtest-debug/ch2o_t07.inp b/tests/xTB/regtest-debug/ch2o_t07.inp new file mode 100644 index 0000000000..30368e5a53 --- /dev/null +++ b/tests/xTB/regtest-debug/ch2o_t07.inp @@ -0,0 +1,67 @@ +&FORCE_EVAL + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD xTB + &xTB + DO_EWALD F + &END XTB + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS MOPAC + MAX_SCF 100 + EPS_SCF 1.e-8 + &MIXING + METHOD DIRECT_P_MIXING + ALPHA 0.2 + &END + &END SCF + &EFIELD + &END + &PRINT + &MOMENTS ON + PERIODIC F + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC 10.0 10.0 10.0 + PERIODIC NONE + &END CELL + &COORD + O 0.051368 0.000000 0.000000 + C 1.278612 0.000000 0.000000 + H 1.870460 0.939607 0.000000 + H 1.870460 -0.939607 0.000000 + &END COORD + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT CH2O + RUN_TYPE DEBUG + PRINT_LEVEL LOW +&END GLOBAL +&DEBUG + DEBUG_FORCES F + DEBUG_STRESS_TENSOR F + DEBUG_DIPOLE T + DEBUG_POLARIZABILITY F + STOP_ON_MISMATCH T + DE 0.0002 +&END diff --git a/tests/xTB/regtest-debug/ch2o_t08.inp b/tests/xTB/regtest-debug/ch2o_t08.inp new file mode 100644 index 0000000000..a53d0f1037 --- /dev/null +++ b/tests/xTB/regtest-debug/ch2o_t08.inp @@ -0,0 +1,67 @@ +&FORCE_EVAL + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD xTB + &xTB + DO_EWALD T + &END XTB + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS MOPAC + MAX_SCF 100 + EPS_SCF 1.e-8 + &MIXING + METHOD DIRECT_P_MIXING + ALPHA 0.2 + &END + &END SCF + &EFIELD + &END + &PRINT + &MOMENTS ON + PERIODIC F + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC 10.0 10.0 10.0 + PERIODIC NONE + &END CELL + &COORD + O 0.051368 0.000000 0.000000 + C 1.278612 0.000000 0.000000 + H 1.870460 0.939607 0.000000 + H 1.870460 -0.939607 0.000000 + &END COORD + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT CH2O + RUN_TYPE DEBUG + PRINT_LEVEL LOW +&END GLOBAL +&DEBUG + DEBUG_FORCES F + DEBUG_STRESS_TENSOR F + DEBUG_DIPOLE T + DEBUG_POLARIZABILITY F + STOP_ON_MISMATCH T + DE 0.0002 +&END diff --git a/tests/xTB/regtest-debug/ch2o_t09.inp b/tests/xTB/regtest-debug/ch2o_t09.inp new file mode 100644 index 0000000000..1854124333 --- /dev/null +++ b/tests/xTB/regtest-debug/ch2o_t09.inp @@ -0,0 +1,69 @@ +&FORCE_EVAL + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD xTB + &xTB + DO_EWALD F + CHECK_ATOMIC_CHARGES F + &END XTB + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS MOPAC + MAX_SCF 100 + EPS_SCF 1.e-8 + &MIXING + METHOD DIRECT_P_MIXING + ALPHA 0.2 + &END + &END SCF + &EFIELD + &END + &PRINT + &MOMENTS ON + PERIODIC F + REFERENCE COM + &END + &END + &END DFT + &SUBSYS + &CELL + ABC 10.0 10.0 10.0 + PERIODIC NONE + &END CELL + &COORD + O 0.051368 0.000000 0.000000 + C 1.278612 0.000000 0.000000 + H 1.870460 0.939607 0.000000 + H 1.870460 -0.939607 0.000000 + &END COORD + &END SUBSYS +&END FORCE_EVAL +&GLOBAL + PROJECT CH2O + RUN_TYPE DEBUG + PRINT_LEVEL LOW +&END GLOBAL +&DEBUG + DEBUG_FORCES F + DEBUG_STRESS_TENSOR F + DEBUG_DIPOLE T + DEBUG_POLARIZABILITY F + STOP_ON_MISMATCH T + DE 0.0002 +&END diff --git a/tests/xTB/regtest-debug/ch3br_atprop_nonbond.inp b/tests/xTB/regtest-debug/ch3br_atprop_nonbond.inp index e11337049e..370356b88f 100644 --- a/tests/xTB/regtest-debug/ch3br_atprop_nonbond.inp +++ b/tests/xTB/regtest-debug/ch3br_atprop_nonbond.inp @@ -44,7 +44,7 @@ &END DFT &SUBSYS &CELL - ABC 20.0 20.0 20.0 + ABC 12.0 12.0 12.0 &END CELL &COORD C -0.000001 -1.540826 -0.000000 diff --git a/tests/xTB/regtest-stda-force/TEST_FILES b/tests/xTB/regtest-stda-force/TEST_FILES new file mode 100644 index 0000000000..083270c7fe --- /dev/null +++ b/tests/xTB/regtest-stda-force/TEST_FILES @@ -0,0 +1,15 @@ +# 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_f12.inp 1 1.0E-12 -5.85052842359978 +h2o_f13.inp 1 1.0E-12 -5.76860088550339 +h2o_f14.inp 1 1.0E-12 -5.76860088550339 +#h2o_f15.inp 1 1.0E-12 0.000000E+00 +#h2o_f16.inp 1 1.0E-12 0.000000E+00 +#h2o_f17.inp 1 1.0E-12 0.000000E+00 +h2o_f18.inp 1 1.0E-12 -5.77037437397448 +#h2o_f19.inp 1 1.0E-12 0.000000E+00 +#EOF diff --git a/tests/xTB/regtest-stda-force/h2o_f12.inp b/tests/xTB/regtest-stda-force/h2o_f12.inp new file mode 100644 index 0000000000..95682a60c1 --- /dev/null +++ b/tests/xTB/regtest-stda-force/h2o_f12.inp @@ -0,0 +1,76 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD xTB + &xTB + DO_EWALD F + COULOMB_INTERACTION F + COULOMB_LR F + TB3_INTERACTION F + &END + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE DEBUG +## RUN_TYPE ENERGY_FORCE +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.0002 +&END + diff --git a/tests/xTB/regtest-stda-force/h2o_f13.inp b/tests/xTB/regtest-stda-force/h2o_f13.inp new file mode 100644 index 0000000000..db156f2938 --- /dev/null +++ b/tests/xTB/regtest-stda-force/h2o_f13.inp @@ -0,0 +1,76 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD xTB + &xTB + DO_EWALD F + COULOMB_INTERACTION T + COULOMB_LR T + TB3_INTERACTION T + &END + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE DEBUG +## RUN_TYPE ENERGY_FORCE +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.0002 +&END + diff --git a/tests/xTB/regtest-stda-force/h2o_f14.inp b/tests/xTB/regtest-stda-force/h2o_f14.inp new file mode 100644 index 0000000000..8e23cb570c --- /dev/null +++ b/tests/xTB/regtest-stda-force/h2o_f14.inp @@ -0,0 +1,73 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD xTB + &xTB + DO_EWALD F + &END + &END QS + &EXCITED_STATES T + STATE 5 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE DEBUG +## RUN_TYPE ENERGY_FORCE +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.0002 +&END + diff --git a/tests/xTB/regtest-stda-force/h2o_f15.inp b/tests/xTB/regtest-stda-force/h2o_f15.inp new file mode 100644 index 0000000000..9f46477ee2 --- /dev/null +++ b/tests/xTB/regtest-stda-force/h2o_f15.inp @@ -0,0 +1,74 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD xTB + &xTB + DO_EWALD F + &END + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE DEBUG +## RUN_TYPE ENERGY_FORCE +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.0002 +&END + diff --git a/tests/xTB/regtest-stda-force/h2o_f16.inp b/tests/xTB/regtest-stda-force/h2o_f16.inp new file mode 100644 index 0000000000..513cc1bea5 --- /dev/null +++ b/tests/xTB/regtest-stda-force/h2o_f16.inp @@ -0,0 +1,75 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + CHARGE 1 + &QS + METHOD xTB + &xTB + DO_EWALD F + &END + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE DEBUG +## RUN_TYPE ENERGY_FORCE +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.0002 +&END + diff --git a/tests/xTB/regtest-stda-force/h2o_f17.inp b/tests/xTB/regtest-stda-force/h2o_f17.inp new file mode 100644 index 0000000000..c58c4eb639 --- /dev/null +++ b/tests/xTB/regtest-stda-force/h2o_f17.inp @@ -0,0 +1,75 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS F + &END TDDFPT + &END PROPERTIES + &DFT + LSD + CHARGE 1 + &QS + METHOD xTB + &xTB + DO_EWALD F + &END + &END QS + &EXCITED_STATES T + STATE 5 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.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 + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE DEBUG +## RUN_TYPE ENERGY_FORCE +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.0002 +&END + diff --git a/tests/xTB/regtest-stda-force/h2o_f18.inp b/tests/xTB/regtest-stda-force/h2o_f18.inp new file mode 100644 index 0000000000..97fcefa446 --- /dev/null +++ b/tests/xTB/regtest-stda-force/h2o_f18.inp @@ -0,0 +1,72 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD xTB + &xTB + DO_EWALD T + &END + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.0 + &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 + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE DEBUG +## RUN_TYPE ENERGY_FORCE +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.0002 +&END + diff --git a/tests/xTB/regtest-stda-force/h2o_f19.inp b/tests/xTB/regtest-stda-force/h2o_f19.inp new file mode 100644 index 0000000000..0400b1ed59 --- /dev/null +++ b/tests/xTB/regtest-stda-force/h2o_f19.inp @@ -0,0 +1,73 @@ +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.50 + &END sTDA + NSTATES 5 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-7 + RKS_TRIPLETS T + &END TDDFPT + &END PROPERTIES + &DFT + LSD + &QS + METHOD xTB + &xTB + DO_EWALD T + &END + &END QS + &EXCITED_STATES T + STATE 1 + &END EXCITED_STATES + &SCF + SCF_GUESS ATOMIC + &OT + PRECONDITIONER FULL_SINGLE_INVERSE + MINIMIZER DIIS + &END + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.0E-7 + &END + MAX_SCF 50 + EPS_SCF 1.0E-7 + &END SCF + &END DFT + &SUBSYS + &CELL + ABC [angstrom] 6.0 6.0 6.0 + &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 + &END SUBSYS + &PRINT + &FORCES + &END + &END +&END FORCE_EVAL +&GLOBAL + PRINT_LEVEL LOW + PROJECT ftest + RUN_TYPE DEBUG +## RUN_TYPE ENERGY_FORCE +&END GLOBAL +&DEBUG + DEBUG_FORCES .TRUE. + DEBUG_STRESS_TENSOR .FALSE. + DEBUG_DIPOLE .FALSE. + DEBUG_POLARIZABILITY .FALSE. + STOP_ON_MISMATCH T + DE 0.0002 +&END + diff --git a/tests/xTB/regtest-stda/TEST_FILES b/tests/xTB/regtest-stda/TEST_FILES new file mode 100644 index 0000000000..d3e62cba8e --- /dev/null +++ b/tests/xTB/regtest-stda/TEST_FILES @@ -0,0 +1,8 @@ +# 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 +# +water_xTB.inp 37 2.0E-05 0.185374E+00 +#EOF diff --git a/tests/xTB/regtest-stda/water_xTB.inp b/tests/xTB/regtest-stda/water_xTB.inp new file mode 100644 index 0000000000..e8b265a7ce --- /dev/null +++ b/tests/xTB/regtest-stda/water_xTB.inp @@ -0,0 +1,147 @@ +&GLOBAL + PROJECT water_xTB + RUN_TYPE ENERGY + PRINT_LEVEL LOW + PREFERRED_DIAG_LIBRARY SL +&END GLOBAL +&FORCE_EVAL + METHOD Quickstep + &PROPERTIES + &TDDFPT + KERNEL sTDA + &sTDA + FRACTION 0.5 + DO_EWALD T + &END sTDA + OE_CORR SHIFT + EV_SHIFT [eV] 0.5 + NSTATES 1 + MAX_ITER 50 + CONVERGENCE [eV] 1.0e-5 + &END TDDFPT + &END PROPERTIES + &DFT + &QS + METHOD xTB + &xTB + DO_EWALD T + &END + &END QS + &SCF + SCF_GUESS atomic + MAX_SCF 10 + EPS_SCF 1.E-5 + &OUTER_SCF + MAX_SCF 10 + EPS_SCF 1.E-5 + &END + &OT ON + MINIMIZER DIIS + PRECONDITIONER FULL_SINGLE_INVERSE + &END OT + &END SCF + &END DFT + &SUBSYS + &CELL + ABC 9.8528 9.8528 9.8528 + &END CELL + &COORD + O 2.280398 9.146539 5.088696 + O 1.251703 2.406261 7.769908 + O 1.596302 6.920128 0.656695 + O 2.957518 3.771868 1.877387 + O 0.228972 5.884026 6.532308 + O 9.023431 6.119654 0.092451 + O 7.256289 8.493641 5.772041 + O 5.090422 9.467016 0.743177 + O 6.330888 7.363471 3.747750 + O 7.763819 8.349367 9.279457 + O 8.280798 3.837153 5.799282 + O 8.878250 2.025797 1.664102 + O 9.160372 0.285100 6.871004 + O 4.962043 4.134437 0.173376 + O 2.802896 8.690383 2.435952 + O 9.123223 3.549232 8.876721 + O 1.453702 1.402538 2.358278 + O 6.536550 1.146790 7.609732 + O 2.766709 0.881503 9.544263 + O 0.856426 2.075964 5.010625 + O 6.386036 1.918950 0.242690 + O 2.733023 4.452756 5.850203 + O 4.600039 9.254314 6.575944 + O 3.665373 6.210561 3.158420 + O 3.371648 6.925594 7.476036 + O 5.287920 3.270653 6.155080 + O 5.225237 6.959594 9.582991 + O 0.846293 5.595877 3.820630 + O 9.785620 8.164617 3.657879 + O 8.509982 4.430362 2.679946 + O 1.337625 8.580920 8.272484 + O 8.054437 9.221335 1.991376 + H 1.762019 9.820429 5.528454 + H 3.095987 9.107088 5.588186 + H 0.554129 2.982634 8.082024 + H 1.771257 2.954779 7.182181 + H 2.112148 6.126321 0.798136 + H 1.776389 7.463264 1.424030 + H 3.754249 3.824017 1.349436 + H 3.010580 4.524142 2.466878 + H 0.939475 5.243834 6.571945 + H 0.515723 6.520548 5.877445 + H 9.852960 6.490366 0.393593 + H 8.556008 6.860063 -0.294256 + H 7.886607 7.941321 6.234506 + H 7.793855 9.141028 5.315813 + H 4.467366 9.971162 0.219851 + H 5.758685 10.102795 0.998994 + H 6.652693 7.917443 3.036562 + H 6.711966 7.743594 4.539279 + H 7.751955 8.745180 10.150905 + H 7.829208 9.092212 8.679343 + H 8.312540 3.218330 6.528858 + H 8.508855 4.680699 6.189990 + H 9.742249 1.704975 1.922581 + H 8.799060 2.876412 2.095861 + H 9.505360 1.161677 6.701213 + H 9.920117 -0.219794 7.161006 + H 4.749903 4.186003 -0.758595 + H 5.248010 5.018415 0.403676 + H 3.576065 9.078451 2.026264 + H 2.720238 9.146974 3.273164 + H 9.085561 4.493058 9.031660 + H 9.215391 3.166305 9.749133 + H 1.999705 2.060411 1.927796 + H 1.824184 0.564565 2.081195 + H 7.430334 0.849764 7.438978 + H 6.576029 1.537017 8.482885 + H 2.415851 1.576460 8.987338 + H 2.276957 0.099537 9.289499 + H 1.160987 1.818023 4.140602 + H 0.350256 2.874437 4.860741 + H 5.768804 2.638450 0.375264 + H 7.221823 2.257514 0.563730 + H 3.260797 5.243390 5.962382 + H 3.347848 3.732214 5.988196 + H 5.328688 9.073059 5.982269 + H 5.007063 9.672150 7.334875 + H 4.566850 6.413356 3.408312 + H 3.273115 7.061666 2.963521 + H 3.878372 7.435003 6.843607 + H 3.884673 6.966316 8.283117 + H 5.918240 3.116802 5.451335 + H 5.355924 2.495093 6.711958 + H 5.071858 7.687254 10.185667 + H 6.106394 7.112302 9.241707 + H 1.637363 5.184910 4.169264 + H 0.427645 4.908936 3.301903 + H 9.971698 7.227076 3.709104 + H 10.647901 8.579244 3.629806 + H 8.046808 5.126383 2.213838 + H 7.995317 4.290074 3.474723 + H 1.872601 7.864672 7.930401 + H 0.837635 8.186808 8.987268 + H 8.314696 10.115534 2.212519 + H 8.687134 8.667252 2.448452 + &END COORD + &END SUBSYS +&END FORCE_EVAL