109 integrate_v_rspace_diagonal,&
110 integrate_v_rspace_one_center
126#include "./base/base_uses.f90"
132 LOGICAL,
PARAMETER :: debug_this_module = .true.
133 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_ks_utils'
151 SUBROUTINE low_spin_roks(energy, qs_env, dft_control, do_hfx, just_energy, &
152 calculate_forces, auxbas_pw_pool)
157 LOGICAL,
INTENT(IN) :: do_hfx, just_energy, calculate_forces
160 CHARACTER(*),
PARAMETER :: routinen =
'low_spin_roks'
162 INTEGER :: handle, irep, ispin, iterm, k, k_alpha, &
163 k_beta, n_rep, nelectron, nspin, nterms
164 INTEGER,
DIMENSION(:),
POINTER :: ivec
165 INTEGER,
DIMENSION(:, :, :),
POINTER :: occupations
166 LOGICAL :: compute_virial, in_range, &
168 REAL(kind=
dp) :: ehfx, exc
169 REAL(kind=
dp),
DIMENSION(3, 3) :: virial_xc_tmp
170 REAL(kind=
dp),
DIMENSION(:),
POINTER :: energy_scaling, rvec, scaling
172 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_h, matrix_hfx, matrix_p, mdummy, &
174 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p2
175 TYPE(
dbcsr_type),
POINTER :: dbcsr_deriv, fm_deriv, fm_scaled, &
177 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
178 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mo_array
184 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r, tau, vxc, vxc_tau
189 low_spin_roks_section, xc_section
192 IF (.NOT. dft_control%low_spin_roks)
RETURN
194 CALL timeset(routinen, handle)
196 NULLIFY (ks_env, rho_ao)
199 IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc)
THEN
200 CALL cp_abort(__location__,
"GAPW/GAPW_XC are not compatible with low spin ROKS method.")
202 IF (dft_control%do_admm)
THEN
203 CALL cp_abort(__location__,
"ADMM not compatible with low spin ROKS method.")
205 IF (dft_control%do_admm)
THEN
207 CALL cp_abort(__location__,
"ADMM with XC correction functional "// &
208 "not compatible with low spin ROKS method.")
211 IF (dft_control%qs_control%semi_empirical .OR. dft_control%qs_control%dftb .OR. &
212 dft_control%qs_control%xtb)
THEN
213 CALL cp_abort(__location__,
"SE/xTB/DFTB are not compatible with low spin ROKS method.")
218 mo_derivs=mo_derivs, &
222 xcint_weights=weights, &
229 compute_virial = virial%pv_calculate .AND. (.NOT. virial%pv_numer)
234 IF (
ASSOCIATED(weights))
THEN
235 CALL cp_abort(__location__,
"No accurate xc integration possible.")
239 cpassert(
SIZE(mo_array, 1) == 2)
242 CALL get_mo_set(mo_set=mo_array(1), uniform_occupation=uniform_occupation)
243 cpassert(uniform_occupation)
244 CALL get_mo_set(mo_set=mo_array(2), mo_coeff_b=mo_coeff, uniform_occupation=uniform_occupation)
245 cpassert(uniform_occupation)
246 IF (do_hfx .AND. calculate_forces .AND. compute_virial)
THEN
247 CALL cp_abort(__location__,
"ROKS virial with HFX not available.")
250 NULLIFY (dbcsr_deriv)
252 CALL dbcsr_copy(dbcsr_deriv, mo_derivs(1)%matrix)
256 CALL get_mo_set(mo_set=mo_array(1), mo_coeff_b=mo_coeff)
258 CALL get_mo_set(mo_set=mo_array(2), mo_coeff_b=mo_coeff)
266 ALLOCATE (energy_scaling(nterms))
267 energy_scaling = rvec
270 cpassert(n_rep == nterms)
271 CALL section_vals_val_get(low_spin_roks_section,
"SPIN_CONFIGURATION", i_rep_val=1, i_vals=ivec)
272 nelectron =
SIZE(ivec)
273 cpassert(nelectron == k_alpha - k_beta)
274 ALLOCATE (occupations(2, nelectron, nterms))
277 CALL section_vals_val_get(low_spin_roks_section,
"SPIN_CONFIGURATION", i_rep_val=iterm, i_vals=ivec)
278 cpassert(nelectron ==
SIZE(ivec))
279 in_range = all(ivec >= 1) .AND. all(ivec <= 2)
282 occupations(ivec(k), k, iterm) = 1
292 ALLOCATE (matrix_p(ispin)%matrix)
293 CALL dbcsr_copy(matrix_p(ispin)%matrix, rho_ao(1)%matrix, &
294 name=
"density matrix low spin roks")
295 CALL dbcsr_set(matrix_p(ispin)%matrix, 0.0_dp)
301 ALLOCATE (matrix_h(ispin)%matrix)
302 CALL dbcsr_copy(matrix_h(ispin)%matrix, rho_ao(1)%matrix, &
303 name=
"KS matrix low spin roks")
304 CALL dbcsr_set(matrix_h(ispin)%matrix, 0.0_dp)
311 ALLOCATE (matrix_hfx(ispin)%matrix)
312 CALL dbcsr_copy(matrix_hfx(ispin)%matrix, rho_ao(1)%matrix, &
313 name=
"HFX matrix low spin roks")
319 NULLIFY (tau, vxc_tau, vxc)
320 CALL pw_env_get(pw_env, xc_pw_pool=xc_pw_pool)
322 ALLOCATE (rho_r(nspin))
323 ALLOCATE (rho_g(nspin))
325 CALL auxbas_pw_pool%create_pw(rho_r(ispin))
326 CALL auxbas_pw_pool%create_pw(rho_g(ispin))
328 CALL auxbas_pw_pool%create_pw(work_v_rspace)
332 CALL get_mo_set(mo_set=mo_array(1), mo_coeff_b=mo_coeff)
333 NULLIFY (fm_scaled, fm_deriv)
339 ALLOCATE (scaling(k_alpha))
346 CALL dbcsr_set(matrix_p(ispin)%matrix, 0.0_dp)
348 scaling(k_alpha - nelectron + 1:k_alpha) = occupations(ispin, :, iterm)
352 0.0_dp, matrix_p(ispin)%matrix, retain_sparsity=.true.)
355 rho=rho_r(ispin), rho_gspace=rho_g(ispin), &
360 IF (just_energy)
THEN
361 exc =
xc_exc_calc(rho_r=rho_r, rho_g=rho_g, tau=tau, xc_section=xc_section, &
362 weights=weights, pw_pool=xc_pw_pool)
364 cpassert(.NOT. compute_virial)
366 rho_g=rho_g, tau=tau, vxc_tau=vxc_tau, exc=exc, xc_section=xc_section, &
367 weights=weights, pw_pool=xc_pw_pool, &
368 compute_virial=.false., virial_xc=virial_xc_tmp)
371 energy%exc = energy%exc + energy_scaling(iterm)*exc
376 CALL dbcsr_set(matrix_hfx(ispin)%matrix, 0.0_dp)
380 recalc_integrals=.false., update_energy=.true.)
381 energy%ex = ehfx + energy_scaling(iterm)*energy%ex
385 IF (.NOT. just_energy)
THEN
388 CALL dbcsr_set(matrix_h(ispin)%matrix, 0.0_dp)
390 CALL pw_axpy(vxc(ispin), work_v_rspace, energy_scaling(iterm)*vxc(ispin)%pw_grid%dvol, 0.0_dp)
391 CALL integrate_v_rspace(v_rspace=work_v_rspace, pmat=matrix_p(ispin), hmat=matrix_h(ispin), &
392 qs_env=qs_env, calculate_forces=calculate_forces)
393 CALL auxbas_pw_pool%give_back_pw(vxc(ispin))
400 CALL dbcsr_add(matrix_h(ispin)%matrix, matrix_hfx(ispin)%matrix, &
401 1.0_dp, energy_scaling(iterm))
403 IF (calculate_forces)
THEN
404 CALL get_qs_env(qs_env, x_data=x_data, para_env=para_env)
405 IF (x_data(1, 1)%n_rep_hf /= 1)
THEN
406 CALL cp_abort(__location__,
"Multiple HFX section forces not compatible "// &
407 "with low spin ROKS method.")
409 IF (x_data(1, 1)%do_hfx_ri)
THEN
410 CALL cp_abort(__location__,
"HFX_RI forces not compatible with low spin ROKS method.")
414 matrix_p2(1:nspin, 1:1) => matrix_p(1:nspin)
416 irep, compute_virial, &
417 adiabatic_rescale_factor=energy_scaling(iterm))
425 CALL dbcsr_multiply(
'n',
'n', 1.0_dp, matrix_h(ispin)%matrix, mo_coeff, &
426 0.0_dp, dbcsr_deriv, last_column=k_alpha)
429 scaling(k_alpha - nelectron + 1:k_alpha) = occupations(ispin, :, iterm)
431 CALL dbcsr_add(mo_derivs(1)%matrix, dbcsr_deriv, 1.0_dp, 1.0_dp)
440 CALL auxbas_pw_pool%give_back_pw(rho_r(ispin))
441 CALL auxbas_pw_pool%give_back_pw(rho_g(ispin))
443 DEALLOCATE (rho_r, rho_g)
450 CALL auxbas_pw_pool%give_back_pw(work_v_rspace)
455 DEALLOCATE (occupations)
456 DEALLOCATE (energy_scaling)
461 CALL timestop(handle)
475 calculate_forces, auxbas_pw_pool)
481 LOGICAL,
INTENT(IN) :: just_energy, calculate_forces
484 CHARACTER(*),
PARAMETER :: routinen =
'sic_explicit_orbitals'
486 INTEGER :: handle, i, iorb, k_alpha, k_beta, norb
487 INTEGER,
ALLOCATABLE,
DIMENSION(:, :) :: sic_orbital_list
488 LOGICAL :: compute_virial, uniform_occupation
489 REAL(kind=
dp) :: ener, exc
490 REAL(kind=
dp),
DIMENSION(3, 3) :: virial_xc_tmp
494 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: mo_derivs_local
497 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: mo_derivs, rho_ao, tmp_dbcsr
498 TYPE(
dbcsr_type),
POINTER :: orb_density_matrix, orb_h
499 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mo_array
506 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r, tau, vxc, vxc_tau
514 IF (dft_control%sic_method_id /=
sic_eo)
RETURN
516 CALL timeset(routinen, handle)
518 NULLIFY (tau, vxc_tau, mo_derivs, ks_env, rho_ao)
523 mo_derivs=mo_derivs, &
526 xcint_weights=weights, &
534 compute_virial = virial%pv_calculate .AND. (.NOT. virial%pv_numer)
537 DO i = 1,
SIZE(mo_array)
538 IF (mo_array(i)%use_mo_coeff_b)
THEN
540 mo_array(i)%mo_coeff)
544 CALL pw_env_get(pw_env, xc_pw_pool=xc_pw_pool)
547 cpassert(
SIZE(mo_array, 1) == 2)
549 CALL get_mo_set(mo_set=mo_array(1), uniform_occupation=uniform_occupation)
550 cpassert(uniform_occupation)
551 CALL get_mo_set(mo_set=mo_array(2), mo_coeff=mo_coeff, uniform_occupation=uniform_occupation)
552 cpassert(uniform_occupation)
556 DO i = 1,
SIZE(mo_derivs, 1)
558 NULLIFY (tmp_dbcsr(i)%matrix)
560 CALL dbcsr_copy(tmp_dbcsr(i)%matrix, mo_derivs(i)%matrix)
561 CALL dbcsr_set(tmp_dbcsr(i)%matrix, 0.0_dp)
564 k_alpha = 0; k_beta = 0
565 SELECT CASE (dft_control%sic_list_id)
568 CALL get_mo_set(mo_set=mo_array(1), mo_coeff=mo_coeff)
571 IF (
SIZE(mo_array, 1) > 1)
THEN
572 CALL get_mo_set(mo_set=mo_array(2), mo_coeff=mo_coeff)
576 norb = k_alpha + k_beta
577 ALLOCATE (sic_orbital_list(3, norb))
582 sic_orbital_list(1, iorb) = 1
583 sic_orbital_list(2, iorb) = i
584 sic_orbital_list(3, iorb) = 1
588 sic_orbital_list(1, iorb) = 2
589 sic_orbital_list(2, iorb) = i
590 IF (
SIZE(mo_derivs, 1) == 1)
THEN
591 sic_orbital_list(3, iorb) = 1
593 sic_orbital_list(3, iorb) = 2
599 cpassert(
SIZE(mo_array, 1) == 2)
601 cpassert(
SIZE(mo_derivs, 1) == 1)
602 cpassert(dft_control%restricted)
604 CALL get_mo_set(mo_set=mo_array(1), mo_coeff=mo_coeff)
607 CALL get_mo_set(mo_set=mo_array(2), mo_coeff=mo_coeff)
610 norb = k_alpha - k_beta
611 ALLOCATE (sic_orbital_list(3, norb))
614 DO i = k_beta + 1, k_alpha
616 sic_orbital_list(1, iorb) = 1
617 sic_orbital_list(2, iorb) = i
619 sic_orbital_list(3, iorb) = 1
623 cpabort(
"Unknown dft_control%sic_list_id")
627 CALL auxbas_pw_pool%create_pw(orb_rho_r)
628 CALL auxbas_pw_pool%create_pw(tmp_r)
629 CALL auxbas_pw_pool%create_pw(orb_rho_g)
630 CALL auxbas_pw_pool%create_pw(tmp_g)
631 CALL auxbas_pw_pool%create_pw(work_v_gspace)
632 CALL auxbas_pw_pool%create_pw(work_v_rspace)
634 ALLOCATE (orb_density_matrix)
635 CALL dbcsr_copy(orb_density_matrix, rho_ao(1)%matrix, &
636 name=
"orb_density_matrix")
637 CALL dbcsr_set(orb_density_matrix, 0.0_dp)
638 orb_density_matrix_p%matrix => orb_density_matrix
642 name=
"orb_density_matrix")
644 orb_h_p%matrix => orb_h
646 CALL get_mo_set(mo_set=mo_array(1), mo_coeff=mo_coeff)
649 template_fmstruct=mo_coeff%matrix_struct)
650 CALL cp_fm_create(matrix_v, fm_struct_tmp, name=
"matrix_v")
651 CALL cp_fm_create(matrix_hv, fm_struct_tmp, name=
"matrix_hv")
654 ALLOCATE (mo_derivs_local(
SIZE(mo_array, 1)))
655 DO i = 1,
SIZE(mo_array, 1)
656 CALL get_mo_set(mo_set=mo_array(i), mo_coeff=mo_coeff)
657 CALL cp_fm_create(mo_derivs_local(i), mo_coeff%matrix_struct)
674 CALL get_mo_set(mo_set=mo_array(sic_orbital_list(1, iorb)), mo_coeff=mo_coeff)
675 CALL cp_fm_to_fm(mo_coeff, matrix_v, 1, sic_orbital_list(2, iorb), 1)
678 CALL dbcsr_set(orb_density_matrix, 0.0_dp)
683 rho=orb_rho_r, rho_gspace=orb_rho_g, &
691 energy%hartree = energy%hartree - dft_control%sic_scaling_a*ener
692 IF (.NOT. just_energy)
THEN
694 CALL pw_scale(work_v_rspace, -dft_control%sic_scaling_a*work_v_rspace%pw_grid%dvol)
698 IF (just_energy)
THEN
699 exc =
xc_exc_calc(rho_r=rho_r, rho_g=rho_g, tau=tau, xc_section=xc_section, &
700 weights=weights, pw_pool=xc_pw_pool)
702 cpassert(.NOT. compute_virial)
704 rho_g=rho_g, tau=tau, vxc_tau=vxc_tau, exc=exc, xc_section=xc_section, &
705 weights=weights, pw_pool=xc_pw_pool, &
706 compute_virial=compute_virial, virial_xc=virial_xc_tmp)
708 CALL pw_axpy(vxc(1), work_v_rspace, -dft_control%sic_scaling_b*vxc(1)%pw_grid%dvol)
710 energy%exc = energy%exc - dft_control%sic_scaling_b*exc
712 IF (.NOT. just_energy)
THEN
714 CALL integrate_v_rspace(v_rspace=work_v_rspace, pmat=orb_density_matrix_p, hmat=orb_h_p, &
715 qs_env=qs_env, calculate_forces=calculate_forces)
720 CALL cp_fm_set_all(mo_derivs_local(sic_orbital_list(3, iorb)), 0.0_dp)
721 CALL cp_fm_to_fm(matrix_hv, mo_derivs_local(sic_orbital_list(3, iorb)), 1, 1, sic_orbital_list(2, iorb))
723 tmp_dbcsr(sic_orbital_list(3, iorb))%matrix)
724 CALL dbcsr_add(mo_derivs(sic_orbital_list(3, iorb))%matrix, &
725 tmp_dbcsr(sic_orbital_list(3, iorb))%matrix, 1.0_dp, 1.0_dp)
728 CALL xc_pw_pool%give_back_pw(vxc(1))
729 CALL xc_pw_pool%give_back_pw(vxc(2))
736 CALL auxbas_pw_pool%give_back_pw(orb_rho_r)
737 CALL auxbas_pw_pool%give_back_pw(tmp_r)
738 CALL auxbas_pw_pool%give_back_pw(orb_rho_g)
739 CALL auxbas_pw_pool%give_back_pw(tmp_g)
740 CALL auxbas_pw_pool%give_back_pw(work_v_gspace)
741 CALL auxbas_pw_pool%give_back_pw(work_v_rspace)
753 CALL timestop(handle)
770 qs_env, dft_control, rho, poisson_env, just_energy, &
771 calculate_forces, auxbas_pw_pool)
779 LOGICAL,
INTENT(IN) :: just_energy, calculate_forces
782 INTEGER :: i, nelec, nelec_a, nelec_b, nforce
783 REAL(kind=
dp) :: ener, full_scaling, scaling
784 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: store_forces
785 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mo_array
790 NULLIFY (mo_array, rho_g)
792 IF (dft_control%sic_method_id ==
sic_none)
RETURN
793 IF (dft_control%sic_method_id ==
sic_eo)
RETURN
795 IF (dft_control%qs_control%gapw)
THEN
796 cpabort(
"sic and GAPW not yet compatible")
800 cpassert(dft_control%nspins == 2)
802 CALL auxbas_pw_pool%create_pw(work_rho)
803 CALL auxbas_pw_pool%create_pw(work_v)
808 SELECT CASE (dft_control%sic_method_id)
810 CALL pw_copy(rho_g(1), work_rho)
811 CALL pw_axpy(rho_g(2), work_rho, alpha=-1._dp)
816 CALL get_mo_set(mo_set=mo_array(1), nelectron=nelec_a)
817 CALL get_mo_set(mo_set=mo_array(2), nelectron=nelec_b)
818 nelec = nelec_a + nelec_b
819 CALL pw_copy(rho_g(1), work_rho)
820 CALL pw_axpy(rho_g(2), work_rho)
821 scaling = 1.0_dp/real(nelec, kind=
dp)
825 cpabort(
"Unknown sic method id")
830 IF (calculate_forces)
THEN
833 DO i = 1,
SIZE(force)
834 nforce = nforce +
SIZE(force(i)%ch_pulay, 2)
836 ALLOCATE (store_forces(3, nforce))
838 DO i = 1,
SIZE(force)
839 store_forces(1:3, nforce + 1:nforce +
SIZE(force(i)%ch_pulay, 2)) = force(i)%ch_pulay(:, :)
840 force(i)%ch_pulay(:, :) = 0.0_dp
841 nforce = nforce +
SIZE(force(i)%ch_pulay, 2)
848 v_hartree_gspace=work_v, &
849 calculate_forces=calculate_forces, &
850 itype_of_density=
"SPIN")
852 SELECT CASE (dft_control%sic_method_id)
854 full_scaling = -dft_control%sic_scaling_a
856 full_scaling = -dft_control%sic_scaling_a*nelec
858 cpabort(
"Unknown sic method id")
860 energy%hartree = energy%hartree + full_scaling*ener
863 IF (calculate_forces)
THEN
865 DO i = 1,
SIZE(force)
866 force(i)%ch_pulay(:, :) = force(i)%ch_pulay(:, :)*full_scaling + &
867 store_forces(1:3, nforce + 1:nforce +
SIZE(force(i)%ch_pulay, 2))
868 nforce = nforce +
SIZE(force(i)%ch_pulay, 2)
872 IF (.NOT. just_energy)
THEN
873 ALLOCATE (v_sic_rspace)
874 CALL auxbas_pw_pool%create_pw(v_sic_rspace)
878 dft_control%sic_scaling_a*v_sic_rspace%pw_grid%dvol)
881 CALL auxbas_pw_pool%give_back_pw(work_rho)
882 CALL auxbas_pw_pool%give_back_pw(work_v)
895 energy%total = 0.0_dp
897 CALL check_sum_energy(energy%total, energy%core_overlap,
"Core overlap energy")
898 CALL check_sum_energy(energy%total, energy%core_self,
"Core self energy")
899 CALL check_sum_energy(energy%total, energy%core_cneo,
"Quantum nuclear core energy")
900 CALL check_sum_energy(energy%total, energy%core,
"Core Hamiltonian energy")
901 CALL check_sum_energy(energy%total, energy%hartree,
"Hartree energy")
902 CALL check_sum_energy(energy%total, energy%hartree_1c,
"Energy from GAPW local Eh = 1 center integrals")
903 CALL check_sum_energy(energy%total, energy%exc,
"Exchange-correlation energy")
904 CALL check_sum_energy(energy%total, energy%exc1,
"Exc1 energy")
905 CALL check_sum_energy(energy%total, energy%ex,
"Ex energy")
906 CALL check_sum_energy(energy%total, energy%dispersion,
"Dispersion energy")
907 CALL check_sum_energy(energy%total, energy%gcp,
"gCP energy")
908 CALL check_sum_energy(energy%total, energy%qmmm_el,
"QM/MM Electrostatic energy")
909 CALL check_sum_energy(energy%total, energy%mulliken,
"Mulliken restraint energy")
910 CALL check_sum_energy(energy%total, sum(energy%ddapc_restraint),
"DDAPC restraint energy")
911 CALL check_sum_energy(energy%total, energy%s2_restraint,
"S2 restraint energy")
912 CALL check_sum_energy(energy%total, energy%dft_plus_u,
"DFT+U energy")
913 CALL check_sum_energy(energy%total, energy%kTS,
"Electronic entropic contribution energy")
914 CALL check_sum_energy(energy%total, energy%efield,
"Electric field interaction energy")
915 CALL check_sum_energy(energy%total, energy%efield_core,
"Electric field core interaction energy")
916 CALL check_sum_energy(energy%total, energy%ee,
"External potential interaction energy")
917 CALL check_sum_energy(energy%total, energy%ee_core,
"External potential core interaction energy")
918 CALL check_sum_energy(energy%total, energy%exc_aux_fit,
"Wfn fit exchange-correlation energy")
919 CALL check_sum_energy(energy%total, energy%image_charge,
"QM/MM image charge energy energy")
920 CALL check_sum_energy(energy%total, energy%sccs_pol,
"SCCS polarisation energy")
921 CALL check_sum_energy(energy%total, energy%cdft,
"CDFT constraint energy")
922 CALL check_sum_energy(energy%total, energy%exc1_aux_fit,
"Wfn fit soft/hard atomic rho1 Exc contribution energy")
923 CALL check_sum_energy(energy%total, energy%embed_corr,
"Embedding potential correction energy")
926 CALL cp_abort(__location__, &
927 "Total energy after summing up the terms is an abnormal value (NaN/Inf).")
938 SUBROUTINE check_sum_energy(total, term, name)
939 REAL(kind=
dp),
INTENT(INOUT) :: total
940 REAL(kind=
dp),
INTENT(IN) :: term
941 CHARACTER(LEN=*),
INTENT(IN) :: name
944 CALL cp_abort(__location__, &
945 trim(name)//
" is an abnormal value (NaN/Inf).")
950 END SUBROUTINE check_sum_energy
961 INTEGER :: img, ispin, n_electrons, output_unit
962 REAL(
dp) :: tot1_h, tot1_s, tot_rho_r, trace, &
964 REAL(kind=
dp),
DIMENSION(:),
POINTER :: tot_rho_r_arr
967 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s, rho_ao
970 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
973 NULLIFY (qs_charges, qs_kind_set, cell, input, logger, scf_section, matrix_s, &
974 dft_control, tot_rho_r_arr, rho_ao)
979 qs_kind_set=qs_kind_set, &
980 cell=cell, qs_charges=qs_charges, &
982 matrix_s_kp=matrix_s, &
983 dft_control=dft_control)
991 CALL qs_rho_get(rho, tot_rho_r=tot_rho_r_arr, rho_ao_kp=rho_ao)
992 n_electrons = n_electrons - dft_control%charge
997 DO ispin = 1, dft_control%nspins
998 DO img = 1, dft_control%nimages
999 CALL dbcsr_dot(rho_ao(ispin, img)%matrix, matrix_s(1, img)%matrix, trace_tmp)
1000 trace = trace + trace_tmp
1005 IF (output_unit > 0)
THEN
1006 WRITE (unit=output_unit, fmt=
"(/,T3,A,T41,F20.10)")
"Trace(PS):", trace
1007 WRITE (unit=output_unit, fmt=
"((T3,A,T41,2F20.10))") &
1008 "Electronic density on regular grids: ", &
1011 REAL(n_electrons,
dp), &
1012 "Core density on regular grids:", &
1013 qs_charges%total_rho_core_rspace, &
1014 qs_charges%total_rho_core_rspace + &
1015 qs_charges%total_rho1_hard_nuc - &
1016 REAL(n_electrons + dft_control%charge,
dp)
1018 IF (dft_control%qs_control%gapw)
THEN
1019 tot1_h = qs_charges%total_rho1_hard(1)
1020 tot1_s = qs_charges%total_rho1_soft(1)
1021 DO ispin = 2, dft_control%nspins
1022 tot1_h = tot1_h + qs_charges%total_rho1_hard(ispin)
1023 tot1_s = tot1_s + qs_charges%total_rho1_soft(ispin)
1025 IF (output_unit > 0)
THEN
1026 WRITE (unit=output_unit, fmt=
"((T3,A,T41,2F20.10))") &
1027 "Hard and soft densities (Lebedev):", &
1029 WRITE (unit=output_unit, fmt=
"(T3,A,T41,F20.10)") &
1030 "Total Rho_soft + Rho1_hard - Rho1_soft (r-space): ", &
1031 tot_rho_r + tot1_h - tot1_s, &
1032 "Total charge density (r-space): ", &
1033 tot_rho_r + tot1_h - tot1_s &
1034 + qs_charges%total_rho_core_rspace &
1035 + qs_charges%total_rho1_hard_nuc
1036 IF (qs_charges%total_rho1_hard_nuc /= 0.0_dp)
THEN
1037 WRITE (unit=output_unit, fmt=
"(T3,A,T41,F20.10)") &
1038 "Total CNEO nuc. char. den. (Lebedev): ", &
1039 qs_charges%total_rho1_hard_nuc, &
1040 "Total CNEO soft char. den. (Lebedev): ", &
1041 qs_charges%total_rho1_soft_nuc_lebedev, &
1042 "Total CNEO soft char. den. (r-space): ", &
1043 qs_charges%total_rho1_soft_nuc_rspace, &
1044 "Total soft Rho_e+n+0 (g-space):", &
1045 qs_charges%total_rho_gspace
1047 WRITE (unit=output_unit, fmt=
"(T3,A,T41,F20.10)") &
1048 "Total Rho_soft + Rho0_soft (g-space):", &
1049 qs_charges%total_rho_gspace
1052 qs_charges%background = tot_rho_r + tot1_h - tot1_s + &
1053 qs_charges%total_rho_core_rspace + &
1054 qs_charges%total_rho1_hard_nuc
1056 ELSE IF (dft_control%qs_control%gapw_xc)
THEN
1057 tot1_h = qs_charges%total_rho1_hard(1)
1058 tot1_s = qs_charges%total_rho1_soft(1)
1059 DO ispin = 2, dft_control%nspins
1060 tot1_h = tot1_h + qs_charges%total_rho1_hard(ispin)
1061 tot1_s = tot1_s + qs_charges%total_rho1_soft(ispin)
1063 IF (output_unit > 0)
THEN
1064 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T41,2F20.10))") &
1065 "Hard and soft densities (Lebedev):", &
1067 WRITE (unit=output_unit, fmt=
"(T3,A,T41,F20.10)") &
1068 "Total Rho_soft + Rho1_hard - Rho1_soft (r-space): ", &
1071 qs_charges%background = tot_rho_r + &
1072 qs_charges%total_rho_core_rspace
1074 IF (output_unit > 0)
THEN
1075 WRITE (unit=output_unit, fmt=
"(T3,A,T41,F20.10)") &
1076 "Total charge density on r-space grids: ", &
1078 qs_charges%total_rho_core_rspace, &
1079 "Total charge density g-space grids: ", &
1080 qs_charges%total_rho_gspace
1082 qs_charges%background = tot_rho_r + &
1083 qs_charges%total_rho_core_rspace
1085 IF (output_unit > 0)
WRITE (unit=output_unit, fmt=
"()")
1086 qs_charges%background = qs_charges%background/cell%deth
1089 "PRINT%TOTAL_DENSITIES")
1111 REAL(kind=
dp),
INTENT(IN) :: mulliken_order_p
1113 INTEGER :: bc, n, output_unit, psolver
1114 REAL(kind=
dp) :: ddapc_order_p, implicit_ps_ehartree, &
1122 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
1123 psolver = pw_env%poisson_env%parameters%solver
1126 extension=
".scfLog")
1127 IF (output_unit > 0)
THEN
1128 IF (dft_control%do_admm)
THEN
1129 WRITE (unit=output_unit, fmt=
"((T3,A,T60,F20.10))") &
1130 "Wfn fit exchange-correlation energy: ", energy%exc_aux_fit
1131 IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc)
THEN
1132 WRITE (unit=output_unit, fmt=
"((T3,A,T60,F20.10))") &
1133 "Wfn fit soft/hard atomic rho1 Exc contribution: ", energy%exc1_aux_fit
1136 IF (dft_control%do_admm)
THEN
1138 implicit_ps_ehartree = pw_env%poisson_env%implicit_env%ehartree
1139 bc = pw_env%poisson_env%parameters%ps_implicit_params%boundary_condition
1142 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1143 "Core Hamiltonian energy: ", energy%core, &
1144 "Hartree energy: ", implicit_ps_ehartree, &
1145 "Electric enthalpy: ", energy%hartree, &
1146 "Exchange-correlation energy: ", energy%exc + energy%exc_aux_fit
1148 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1149 "Core Hamiltonian energy: ", energy%core, &
1150 "Hartree energy: ", energy%hartree, &
1151 "Exchange-correlation energy: ", energy%exc + energy%exc_aux_fit
1154 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1155 "Core Hamiltonian energy: ", energy%core, &
1156 "Hartree energy: ", energy%hartree, &
1157 "Exchange-correlation energy: ", energy%exc + energy%exc_aux_fit
1161 IF (dft_control%apply_external_density)
THEN
1162 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1163 "DOING ZMP CALCULATION FROM EXTERNAL DENSITY "
1164 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1165 "Core Hamiltonian energy: ", energy%core, &
1166 "Hartree energy: ", energy%hartree
1167 ELSE IF (dft_control%apply_external_vxc)
THEN
1168 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1169 "DOING ZMP READING EXTERNAL VXC "
1170 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1171 "Core Hamiltonian energy: ", energy%core, &
1172 "Hartree energy: ", energy%hartree
1175 implicit_ps_ehartree = pw_env%poisson_env%implicit_env%ehartree
1176 bc = pw_env%poisson_env%parameters%ps_implicit_params%boundary_condition
1179 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1180 "Core Hamiltonian energy: ", energy%core, &
1181 "Hartree energy: ", implicit_ps_ehartree, &
1182 "Electric enthalpy: ", energy%hartree, &
1183 "Exchange-correlation energy: ", energy%exc
1185 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1186 "Core Hamiltonian energy: ", energy%core, &
1187 "Hartree energy: ", energy%hartree, &
1188 "Exchange-correlation energy: ", energy%exc
1191 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1192 "Core Hamiltonian energy: ", energy%core, &
1193 "Hartree energy: ", energy%hartree, &
1194 "Exchange-correlation energy: ", energy%exc
1199 IF (dft_control%apply_external_density)
THEN
1200 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1201 "Integral of the (density * v_xc): ", energy%exc
1204 IF (energy%e_hartree /= 0.0_dp)
THEN
1205 WRITE (unit=output_unit, fmt=
"(T3,A,T61,F20.10)") &
1206 "Coulomb (electron-electron) energy: ", energy%e_hartree
1208 IF (energy%dispersion /= 0.0_dp)
THEN
1209 WRITE (unit=output_unit, fmt=
"(T3,A,T61,F20.10)") &
1210 "Dispersion energy: ", energy%dispersion
1212 IF (energy%efield /= 0.0_dp)
THEN
1213 WRITE (unit=output_unit, fmt=
"(T3,A,T61,F20.10)") &
1214 "Electric field interaction energy: ", energy%efield
1216 IF (energy%gcp /= 0.0_dp)
THEN
1217 WRITE (unit=output_unit, fmt=
"(T3,A,T61,F20.10)") &
1218 "gCP energy: ", energy%gcp
1220 IF (dft_control%qs_control%gapw)
THEN
1221 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1222 "GAPW| Exc from hard and soft atomic rho1: ", energy%exc1 + energy%exc1_aux_fit, &
1223 "GAPW| local Eh = 1 center integrals: ", energy%hartree_1c
1225 IF (dft_control%qs_control%gapw_xc)
THEN
1226 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T61,F20.10))") &
1227 "GAPW| Exc from hard and soft atomic rho1: ", energy%exc1 + energy%exc1_aux_fit
1229 IF (dft_control%dft_plus_u)
THEN
1230 WRITE (unit=output_unit, fmt=
"(T3,A,T61,F20.10)") &
1231 "DFT+U energy:", energy%dft_plus_u
1233 IF (qs_env%qmmm)
THEN
1234 WRITE (unit=output_unit, fmt=
"(T3,A,T61,F20.10)") &
1235 "QM/MM Electrostatic energy: ", energy%qmmm_el
1236 IF (qs_env%qmmm_env_qm%image_charge)
THEN
1237 WRITE (unit=output_unit, fmt=
"(T3,A,T61,F20.10)") &
1238 "QM/MM image charge energy: ", energy%image_charge
1241 IF (dft_control%qs_control%mulliken_restraint)
THEN
1242 WRITE (unit=output_unit, fmt=
"(T3,A,T41,2F20.10)") &
1243 "Mulliken restraint (order_p,energy) : ", mulliken_order_p, energy%mulliken
1245 IF (dft_control%qs_control%ddapc_restraint)
THEN
1246 DO n = 1,
SIZE(dft_control%qs_control%ddapc_restraint_control)
1248 dft_control%qs_control%ddapc_restraint_control(n)%ddapc_order_p
1249 WRITE (unit=output_unit, fmt=
"(T3,A,T41,2F20.10)") &
1250 "DDAPC restraint (order_p,energy) : ", ddapc_order_p, energy%ddapc_restraint(n)
1253 IF (dft_control%qs_control%s2_restraint)
THEN
1254 s2_order_p = dft_control%qs_control%s2_restraint_control%s2_order_p
1255 WRITE (unit=output_unit, fmt=
"(T3,A,T41,2F20.10)") &
1256 "S2 restraint (order_p,energy) : ", s2_order_p, energy%s2_restraint
1258 IF (energy%core_cneo /= 0.0_dp)
THEN
1259 WRITE (unit=output_unit, fmt=
"(T3,A,T61,F20.10)") &
1260 "CNEO| quantum nuclear core energy: ", energy%core_cneo
1265 "DFT%SCF%PRINT%DETAILED_ENERGY")
1284 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_vxc
1285 LOGICAL,
INTENT(IN),
OPTIONAL :: gapw_full_basis
1287 CHARACTER(LEN=*),
PARAMETER :: routinen =
'compute_matrix_vxc'
1289 INTEGER :: handle, ispin
1294 CALL timeset(routinen, handle)
1297 IF (
ASSOCIATED(matrix_vxc))
THEN
1301 ALLOCATE (matrix_vxc(
SIZE(matrix_ks)))
1302 DO ispin = 1,
SIZE(matrix_ks)
1303 NULLIFY (matrix_vxc(ispin)%matrix)
1305 CALL dbcsr_copy(matrix_vxc(ispin)%matrix, matrix_ks(ispin)%matrix, &
1307 CALL dbcsr_set(matrix_vxc(ispin)%matrix, 0.0_dp)
1311 CALL get_qs_env(qs_env, dft_control=dft_control)
1312 gapw = dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc
1313 IF (
PRESENT(gapw_full_basis))
THEN
1314 IF (gapw_full_basis) gapw = .false.
1316 DO ispin = 1,
SIZE(matrix_ks)
1317 CALL integrate_v_rspace(v_rspace=v_rspace(ispin), &
1318 hmat=matrix_vxc(ispin), &
1320 calculate_forces=.false., &
1323 CALL dbcsr_scale(matrix_vxc(ispin)%matrix, v_rspace(ispin)%pw_grid%dvol)
1326 CALL timestop(handle)
1341 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_vxc_kp
1342 LOGICAL,
INTENT(IN),
OPTIONAL :: gapw_full_basis
1344 CHARACTER(LEN=*),
PARAMETER :: routinen =
'compute_matrix_vxc_kp'
1346 INTEGER :: handle, img, ispin
1349 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_ks_kp
1352 CALL timeset(routinen, handle)
1355 IF (
ASSOCIATED(matrix_vxc_kp))
THEN
1358 CALL get_qs_env(qs_env, dft_control=dft_control, matrix_ks_kp=matrix_ks_kp)
1359 ALLOCATE (matrix_vxc_kp(
SIZE(matrix_ks_kp, 1),
SIZE(matrix_ks_kp, 2)))
1360 DO img = 1,
SIZE(matrix_ks_kp, 2)
1361 DO ispin = 1,
SIZE(matrix_ks_kp, 1)
1362 NULLIFY (matrix_vxc_kp(ispin, img)%matrix)
1364 CALL dbcsr_copy(matrix_vxc_kp(ispin, img)%matrix, matrix_ks_kp(ispin, img)%matrix, &
1366 CALL dbcsr_set(matrix_vxc_kp(ispin, img)%matrix, 0.0_dp)
1371 gapw = dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc
1372 IF (
PRESENT(gapw_full_basis))
THEN
1373 IF (gapw_full_basis) gapw = .false.
1375 DO ispin = 1,
SIZE(matrix_ks_kp, 1)
1376 ksmat => matrix_vxc_kp(ispin, :)
1377 CALL integrate_v_rspace(v_rspace=v_rspace(ispin), &
1380 calculate_forces=.false., &
1383 DO img = 1,
SIZE(matrix_ks_kp, 2)
1384 CALL dbcsr_scale(matrix_vxc_kp(ispin, img)%matrix, v_rspace(ispin)%pw_grid%dvol)
1388 CALL timestop(handle)
1416 vppl_rspace, v_rspace_new, &
1417 v_rspace_new_aux_fit, v_tau_rspace, &
1418 v_tau_rspace_aux_fit, &
1419 v_sic_rspace, v_spin_ddapc_rest_r, &
1420 v_sccs_rspace, v_rspace_embed, cdft_control, &
1424 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: ks_matrix
1428 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: v_rspace_new, v_rspace_new_aux_fit, &
1429 v_tau_rspace, v_tau_rspace_aux_fit
1430 TYPE(
pw_r3d_rs_type),
POINTER :: v_sic_rspace, v_spin_ddapc_rest_r, &
1434 LOGICAL,
INTENT(in) :: calculate_forces
1436 CHARACTER(LEN=*),
PARAMETER :: routinen =
'sum_up_and_integrate'
1438 CHARACTER(LEN=default_string_length) :: basis_type
1439 INTEGER :: handle, igroup, ikind, img, ispin, &
1441 INTEGER,
DIMENSION(:, :, :),
POINTER :: cell_to_index
1442 LOGICAL :: do_ppl, gapw, gapw_composite_direct_ao, &
1443 gapw_composite_reference, gapw_xc, &
1444 lrigpw, rigpw, use_work_v_rspace
1445 REAL(kind=
dp) :: csign, dvol, fadm
1448 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: ksmat, rho_ao, rho_ao_nokp, smat
1449 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_ks_aux_fit, &
1450 matrix_ks_aux_fit_dft, rho_ao_aux, &
1468 CALL timeset(routinen, handle)
1470 NULLIFY (auxbas_pw_pool, dft_control, pw_env, matrix_ks_aux_fit, &
1471 v_rspace, rho_aux_fit, vee, rho_ao, rho_ao_kp, rho_ao_aux, &
1472 ksmat, matrix_ks_aux_fit_dft, lri_env, lri_density, atomic_kind_set, &
1473 rho_ao_nokp, ks_env, admm_env, task_list, v_rspace_used, input, xc_section)
1476 dft_control=dft_control, &
1479 v_hartree_rspace=v_rspace, &
1483 CALL pw_env_get(pw_env, poisson_env=poisson_env, auxbas_pw_pool=auxbas_pw_pool)
1484 gapw = dft_control%qs_control%gapw
1485 gapw_xc = dft_control%qs_control%gapw_xc
1489 gapw_composite_direct_ao = gapw_composite_reference .AND. &
1491 do_ppl = dft_control%qs_control%do_ppl_method ==
do_ppl_grid
1493 rigpw = dft_control%qs_control%rigpw
1494 lrigpw = dft_control%qs_control%lrigpw
1495 IF (lrigpw .OR. rigpw)
THEN
1498 lri_density=lri_density, &
1499 atomic_kind_set=atomic_kind_set)
1502 nspins = dft_control%nspins
1505 IF (
ASSOCIATED(v_rspace_new))
THEN
1506 DO ispin = 1, nspins
1507 IF (gapw_composite_reference)
THEN
1510 CALL pw_scale(v_rspace_new(ispin), v_rspace_new(ispin)%pw_grid%dvol)
1511 rho_ao => rho_ao_kp(ispin, :)
1512 ksmat => ks_matrix(ispin, :)
1513 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
1514 pmat_kp=rho_ao, hmat_kp=ksmat, &
1516 calculate_forces=calculate_forces, &
1517 gapw=gapw .AND. .NOT. gapw_composite_direct_ao)
1518 CALL pw_copy(v_rspace, v_rspace_new(ispin))
1519 ELSE IF (gapw_xc)
THEN
1521 cpassert(dft_control%sic_method_id ==
sic_none)
1523 CALL pw_scale(v_rspace_new(ispin), v_rspace_new(ispin)%pw_grid%dvol)
1526 rho_ao => rho_ao_kp(ispin, :)
1527 ksmat => ks_matrix(ispin, :)
1528 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
1529 pmat_kp=rho_ao, hmat_kp=ksmat, &
1531 calculate_forces=calculate_forces, &
1535 CALL pw_copy(v_rspace, v_rspace_new(ispin))
1538 CALL pw_axpy(v_rspace, v_rspace_new(ispin), 1.0_dp, v_rspace_new(ispin)%pw_grid%dvol)
1540 IF (dft_control%qs_control%ddapc_explicit_potential)
THEN
1541 IF (dft_control%qs_control%ddapc_restraint_is_spin)
THEN
1542 IF (ispin == 1)
THEN
1543 CALL pw_axpy(v_spin_ddapc_rest_r, v_rspace_new(ispin), 1.0_dp)
1545 CALL pw_axpy(v_spin_ddapc_rest_r, v_rspace_new(ispin), -1.0_dp)
1548 CALL pw_axpy(v_spin_ddapc_rest_r, v_rspace_new(ispin), 1.0_dp)
1552 IF (dft_control%qs_control%cdft)
THEN
1553 DO igroup = 1,
SIZE(cdft_control%group)
1554 SELECT CASE (cdft_control%group(igroup)%constraint_type)
1558 IF (ispin == 1)
THEN
1565 IF (ispin == 2) cycle
1568 IF (ispin == 1) cycle
1570 cpabort(
"Unknown constraint type.")
1572 CALL pw_axpy(cdft_control%group(igroup)%weight, v_rspace_new(ispin), &
1573 csign*cdft_control%strength(igroup))
1580 dvol = poisson_env%implicit_env%v_eps%pw_grid%dvol
1581 CALL pw_axpy(poisson_env%implicit_env%v_eps, v_rspace_new(ispin), dvol)
1584 IF (dft_control%do_sccs)
THEN
1585 CALL pw_axpy(v_sccs_rspace, v_rspace_new(ispin))
1588 IF (dft_control%apply_external_potential)
THEN
1590 v_qmmm=vee, scale=-1.0_dp)
1593 cpassert(.NOT. gapw)
1594 CALL pw_axpy(vppl_rspace, v_rspace_new(ispin), vppl_rspace%pw_grid%dvol)
1597 SELECT CASE (dft_control%sic_method_id)
1601 IF (ispin == 1)
THEN
1602 CALL pw_axpy(v_sic_rspace, v_rspace_new(ispin), -1.0_dp)
1604 CALL pw_axpy(v_sic_rspace, v_rspace_new(ispin), 1.0_dp)
1607 CALL pw_axpy(v_sic_rspace, v_rspace_new(ispin), -1.0_dp)
1612 IF (dft_control%apply_embed_pot)
THEN
1613 CALL pw_axpy(v_rspace_embed(ispin), v_rspace_new(ispin), v_rspace_embed(ispin)%pw_grid%dvol)
1614 CALL auxbas_pw_pool%give_back_pw(v_rspace_embed(ispin))
1617 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
1618 CALL get_qs_env(qs_env, nkind=nkind, para_env=para_env)
1620 lri_v_int(ikind)%v_int = 0.0_dp
1622 CALL integrate_v_rspace_one_center(v_rspace_new(ispin), qs_env, &
1623 lri_v_int, calculate_forces,
"LRI_AUX")
1625 CALL para_env%sum(lri_v_int(ikind)%v_int)
1627 IF (lri_env%exact_1c_terms)
THEN
1628 rho_ao => my_rho(ispin, :)
1629 ksmat => ks_matrix(ispin, :)
1630 CALL integrate_v_rspace_diagonal(v_rspace_new(ispin), ksmat(1)%matrix, &
1631 rho_ao(1)%matrix, qs_env, &
1632 calculate_forces,
"ORB")
1634 IF (lri_env%ppl_ri)
THEN
1637 ELSE IF (rigpw)
THEN
1638 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
1639 CALL get_qs_env(qs_env, nkind=nkind, para_env=para_env)
1641 lri_v_int(ikind)%v_int = 0.0_dp
1643 CALL integrate_v_rspace_one_center(v_rspace_new(ispin), qs_env, &
1644 lri_v_int, calculate_forces,
"RI_HXC")
1646 CALL para_env%sum(lri_v_int(ikind)%v_int)
1649 rho_ao => my_rho(ispin, :)
1650 ksmat => ks_matrix(ispin, :)
1651 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
1652 pmat_kp=rho_ao, hmat_kp=ksmat, &
1654 calculate_forces=calculate_forces, &
1655 gapw=gapw .AND. .NOT. gapw_composite_direct_ao)
1657 CALL auxbas_pw_pool%give_back_pw(v_rspace_new(ispin))
1660 SELECT CASE (dft_control%sic_method_id)
1663 CALL auxbas_pw_pool%give_back_pw(v_sic_rspace)
1664 DEALLOCATE (v_sic_rspace)
1666 DEALLOCATE (v_rspace_new)
1670 cpassert(dft_control%sic_method_id ==
sic_none)
1671 cpassert(.NOT. dft_control%qs_control%ddapc_restraint_is_spin)
1672 DO ispin = 1, nspins
1673 use_work_v_rspace = dft_control%qs_control%cdft
1674 IF (use_work_v_rspace)
THEN
1675 CALL auxbas_pw_pool%create_pw(v_rspace_work)
1676 CALL pw_copy(v_rspace, v_rspace_work)
1677 v_rspace_used => v_rspace_work
1679 v_rspace_used => v_rspace
1682 IF (dft_control%qs_control%cdft)
THEN
1683 DO igroup = 1,
SIZE(cdft_control%group)
1684 SELECT CASE (cdft_control%group(igroup)%constraint_type)
1688 IF (ispin == 1)
THEN
1695 IF (ispin == 2) cycle
1698 IF (ispin == 1) cycle
1700 cpabort(
"Unknown constraint type.")
1702 CALL pw_axpy(cdft_control%group(igroup)%weight, v_rspace_used, &
1703 csign*cdft_control%strength(igroup))
1708 dvol = poisson_env%implicit_env%v_eps%pw_grid%dvol
1709 CALL pw_axpy(poisson_env%implicit_env%v_eps, v_rspace_used, dvol)
1712 IF (dft_control%do_sccs)
THEN
1713 CALL pw_axpy(v_sccs_rspace, v_rspace_used)
1716 IF (dft_control%apply_embed_pot)
THEN
1717 CALL pw_axpy(v_rspace_embed(ispin), v_rspace_used, v_rspace_embed(ispin)%pw_grid%dvol)
1718 CALL auxbas_pw_pool%give_back_pw(v_rspace_embed(ispin))
1721 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
1722 CALL get_qs_env(qs_env, nkind=nkind, para_env=para_env)
1724 lri_v_int(ikind)%v_int = 0.0_dp
1726 CALL integrate_v_rspace_one_center(v_rspace_used, qs_env, &
1727 lri_v_int, calculate_forces,
"LRI_AUX")
1729 CALL para_env%sum(lri_v_int(ikind)%v_int)
1731 IF (lri_env%exact_1c_terms)
THEN
1732 rho_ao => my_rho(ispin, :)
1733 ksmat => ks_matrix(ispin, :)
1734 CALL integrate_v_rspace_diagonal(v_rspace_used, ksmat(1)%matrix, &
1735 rho_ao(1)%matrix, qs_env, &
1736 calculate_forces,
"ORB")
1738 IF (lri_env%ppl_ri)
THEN
1741 ELSE IF (rigpw)
THEN
1742 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
1743 CALL get_qs_env(qs_env, nkind=nkind, para_env=para_env)
1745 lri_v_int(ikind)%v_int = 0.0_dp
1747 CALL integrate_v_rspace_one_center(v_rspace_used, qs_env, &
1748 lri_v_int, calculate_forces,
"RI_HXC")
1750 CALL para_env%sum(lri_v_int(ikind)%v_int)
1753 rho_ao => my_rho(ispin, :)
1754 ksmat => ks_matrix(ispin, :)
1755 CALL integrate_v_rspace(v_rspace=v_rspace_used, &
1759 calculate_forces=calculate_forces, &
1762 IF (use_work_v_rspace)
CALL auxbas_pw_pool%give_back_pw(v_rspace_work)
1769 CALL get_ks_env(ks_env=ks_env, kpoints=kpoints)
1771 DO ispin = 1, nspins
1772 ksmat => ks_matrix(ispin, :)
1774 cell_to_index=cell_to_index)
1776 IF (calculate_forces)
THEN
1779 ELSE IF (rigpw)
THEN
1781 DO ispin = 1, nspins
1783 smat(1)%matrix, atomic_kind_set, ispin)
1785 IF (calculate_forces)
THEN
1786 rho_ao_nokp => rho_ao_kp(:, 1)
1791 IF (
ASSOCIATED(v_tau_rspace))
THEN
1792 IF (lrigpw .OR. rigpw)
THEN
1793 cpabort(
"LRIGPW/RIGPW not implemented for meta-GGAs")
1795 DO ispin = 1, nspins
1796 CALL pw_scale(v_tau_rspace(ispin), v_tau_rspace(ispin)%pw_grid%dvol)
1798 rho_ao => rho_ao_kp(ispin, :)
1799 ksmat => ks_matrix(ispin, :)
1800 CALL integrate_v_rspace(v_rspace=v_tau_rspace(ispin), &
1801 pmat_kp=rho_ao, hmat_kp=ksmat, &
1803 calculate_forces=calculate_forces, compute_tau=.true., &
1804 gapw=(gapw .OR. gapw_xc) .AND. &
1805 .NOT. gapw_composite_direct_ao)
1806 CALL auxbas_pw_pool%give_back_pw(v_tau_rspace(ispin))
1808 DEALLOCATE (v_tau_rspace)
1812 IF (dft_control%do_admm)
THEN
1814 CALL get_admm_env(admm_env, matrix_ks_aux_fit_kp=matrix_ks_aux_fit, rho_aux_fit=rho_aux_fit, &
1815 matrix_ks_aux_fit_dft_kp=matrix_ks_aux_fit_dft)
1816 CALL qs_rho_get(rho_aux_fit, rho_ao_kp=rho_ao_aux)
1817 IF (
ASSOCIATED(v_rspace_new_aux_fit))
THEN
1818 DO ispin = 1, nspins
1820 CALL pw_scale(v_rspace_new_aux_fit(ispin), v_rspace_new_aux_fit(ispin)%pw_grid%dvol)
1823 DO img = 1, dft_control%nimages
1824 CALL dbcsr_copy(matrix_ks_aux_fit_dft(ispin, img)%matrix, matrix_ks_aux_fit(ispin, img)%matrix, &
1825 name=
"DFT exch. part of matrix_ks_aux_fit")
1833 CALL get_admm_env(admm_env, task_list_aux_fit=task_list)
1834 basis_type =
"AUX_FIT"
1835 IF (admm_env%do_gapw)
THEN
1836 task_list => admm_env%admm_gapw_env%task_list
1837 basis_type =
"AUX_FIT_SOFT"
1841 IF (admm_env%do_admmp)
THEN
1842 fadm = admm_env%gsi(ispin)**2
1843 ELSE IF (admm_env%do_admms)
THEN
1844 fadm = (admm_env%gsi(ispin))**(2.0_dp/3.0_dp)
1847 rho_ao => rho_ao_aux(ispin, :)
1848 ksmat => matrix_ks_aux_fit(ispin, :)
1850 CALL integrate_v_rspace(v_rspace=v_rspace_new_aux_fit(ispin), &
1854 calculate_forces=calculate_forces, &
1857 basis_type=basis_type, &
1858 task_list_external=task_list)
1862 DO img = 1, dft_control%nimages
1863 CALL dbcsr_add(matrix_ks_aux_fit_dft(ispin, img)%matrix, &
1864 matrix_ks_aux_fit(ispin, img)%matrix, 1.0_dp, -1.0_dp)
1867 CALL auxbas_pw_pool%give_back_pw(v_rspace_new_aux_fit(ispin))
1869 DEALLOCATE (v_rspace_new_aux_fit)
1872 IF (
ASSOCIATED(v_tau_rspace_aux_fit))
THEN
1873 DO ispin = 1, nspins
1874 CALL auxbas_pw_pool%give_back_pw(v_tau_rspace_aux_fit(ispin))
1876 DEALLOCATE (v_tau_rspace_aux_fit)
1880 IF (dft_control%apply_embed_pot)
DEALLOCATE (v_rspace_embed)
1882 CALL timestop(handle)
1904 REAL(kind=
dp) :: exc
1906 CHARACTER(*),
PARAMETER :: routinen =
'calculate_zmp_potential'
1908 INTEGER :: handle, my_val, nelectron, nspins
1909 INTEGER,
DIMENSION(2) :: nelectron_spin
1910 LOGICAL :: do_zmp_read, fermi_amaldi
1911 REAL(kind=
dp) :: lambda
1912 REAL(kind=
dp),
DIMENSION(:),
POINTER :: tot_rho_ext_r
1925 CALL timeset(routinen, handle)
1926 NULLIFY (auxbas_pw_pool)
1928 NULLIFY (poisson_env)
1929 NULLIFY (v_rspace_new)
1930 NULLIFY (dft_control)
1931 NULLIFY (rho_r, rho_g, tot_rho_ext_r, rho_ext_g)
1937 nelectron_spin=nelectron_spin, &
1938 dft_control=dft_control)
1940 auxbas_pw_pool=auxbas_pw_pool, &
1941 poisson_env=poisson_env)
1942 CALL qs_rho_get(rho, rho_r=rho_r, rho_g=rho_g)
1944 ALLOCATE (v_rspace_new(nspins))
1945 CALL auxbas_pw_pool%create_pw(pw=v_rspace_new(1))
1946 CALL auxbas_pw_pool%create_pw(pw=v_xc_rspace)
1949 do_zmp_read = dft_control%apply_external_vxc
1950 IF (do_zmp_read)
THEN
1951 CALL pw_copy(qs_env%external_vxc, v_rspace_new(1))
1953 v_rspace_new(1)%pw_grid%dvol
1956 REAL(kind=
dp) :: factor
1958 CALL auxbas_pw_pool%create_pw(pw=rho_eff_gspace)
1959 CALL auxbas_pw_pool%create_pw(pw=v_xc_gspace)
1966 tot_rho_r=tot_rho_ext_r)
1967 factor = tot_rho_ext_r(1)/factor
1969 CALL pw_axpy(rho_g(1), rho_eff_gspace, alpha=factor)
1970 CALL pw_axpy(rho_ext_g(1), rho_eff_gspace, alpha=-1.0_dp)
1976 CALL pw_scale(rho_eff_gspace, a=lambda)
1977 nelectron = nelectron_spin(1)
1978 factor = -1.0_dp/nelectron
1979 CALL pw_axpy(rho_g(1), rho_eff_gspace, alpha=factor)
1983 CALL pw_copy(v_rspace_new(1), v_xc_rspace)
1991 CALL auxbas_pw_pool%give_back_pw(rho_eff_gspace)
1992 CALL auxbas_pw_pool%give_back_pw(v_xc_gspace)
1996 CALL auxbas_pw_pool%give_back_pw(v_xc_rspace)
1998 CALL timestop(handle)
2013 TYPE(qs_environment_type),
POINTER :: qs_env
2014 TYPE(qs_rho_type),
POINTER :: rho
2015 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: v_rspace_embed
2016 TYPE(dft_control_type),
POINTER :: dft_control
2017 REAL(kind=dp) :: embed_corr
2018 LOGICAL :: just_energy
2020 CHARACTER(*),
PARAMETER :: routinen =
'get_embed_potential_energy'
2022 INTEGER :: handle, ispin
2023 REAL(kind=dp) :: embed_corr_local
2024 TYPE(pw_env_type),
POINTER :: pw_env
2025 TYPE(pw_pool_type),
POINTER :: auxbas_pw_pool
2026 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r
2028 CALL timeset(routinen, handle)
2030 NULLIFY (auxbas_pw_pool)
2033 CALL get_qs_env(qs_env=qs_env, &
2036 CALL pw_env_get(pw_env=pw_env, &
2037 auxbas_pw_pool=auxbas_pw_pool)
2038 CALL qs_rho_get(rho, rho_r=rho_r)
2039 ALLOCATE (v_rspace_embed(dft_control%nspins))
2043 DO ispin = 1, dft_control%nspins
2044 CALL auxbas_pw_pool%create_pw(pw=v_rspace_embed(ispin))
2045 CALL pw_zero(v_rspace_embed(ispin))
2047 CALL pw_copy(qs_env%embed_pot, v_rspace_embed(ispin))
2048 embed_corr_local = 0.0_dp
2051 IF (dft_control%nspins == 2)
THEN
2052 IF (ispin == 1)
CALL pw_axpy(qs_env%spin_embed_pot, v_rspace_embed(ispin), 1.0_dp)
2053 IF (ispin == 2)
CALL pw_axpy(qs_env%spin_embed_pot, v_rspace_embed(ispin), -1.0_dp)
2056 embed_corr_local = pw_integral_ab(v_rspace_embed(ispin), rho_r(ispin))
2058 embed_corr = embed_corr + embed_corr_local
2063 IF (just_energy)
THEN
2064 DO ispin = 1, dft_control%nspins
2065 CALL auxbas_pw_pool%give_back_pw(v_rspace_embed(ispin))
2067 DEALLOCATE (v_rspace_embed)
2070 CALL timestop(handle)
Types and set/get functions for auxiliary density matrix methods.
subroutine, public get_admm_env(admm_env, mo_derivs_aux_fit, mos_aux_fit, sab_aux_fit, sab_aux_fit_asymm, sab_aux_fit_vs_orb, matrix_s_aux_fit, matrix_s_aux_fit_kp, matrix_s_aux_fit_vs_orb, matrix_s_aux_fit_vs_orb_kp, task_list_aux_fit, matrix_ks_aux_fit, matrix_ks_aux_fit_kp, matrix_ks_aux_fit_im, matrix_ks_aux_fit_dft, matrix_ks_aux_fit_hfx, matrix_ks_aux_fit_dft_kp, matrix_ks_aux_fit_hfx_kp, rho_aux_fit, rho_aux_fit_buffer, admm_dm)
Get routine for the ADMM env.
Define the atomic kind types and their sub types.
Handles all functions related to the CELL.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_release_p(matrix)
...
subroutine, public dbcsr_scale(matrix, alpha_scalar)
...
subroutine, public dbcsr_deallocate_matrix(matrix)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_multiply(transa, transb, alpha, matrix_a, matrix_b, beta, matrix_c, first_row, last_row, first_column, last_column, first_k, last_k, retain_sparsity, filter_eps, flop)
...
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
subroutine, public dbcsr_init_p(matrix)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
subroutine, public dbcsr_dot(matrix_a, matrix_b, trace)
Computes the dot product of two matrices, also known as the trace of their matrix product.
subroutine, public dbcsr_scale_by_vector(matrix, alpha, side)
Scales the rows/columns of given matrix.
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_sm_fm_multiply(matrix, fm_in, fm_out, ncol, alpha, beta)
multiply a dbcsr with a fm matrix
subroutine, public copy_dbcsr_to_fm(matrix, fm, plan)
Copy a DBCSR matrix to a BLACS matrix.
subroutine, public cp_dbcsr_plus_fm_fm_t(sparse_matrix, matrix_v, matrix_g, ncol, alpha, keep_sparsity, symmetry_mode)
performs the multiplication sparse_matrix+dense_mat*dens_mat^T if matrix_g is not explicitly given,...
subroutine, public copy_fm_to_dbcsr(fm, matrix, keep_sparsity)
Copy a BLACS matrix to a dbcsr matrix.
Density Derived atomic point charges from a QM calculation (see Bloechl, J. Chem. Phys....
subroutine, public cp_ddapc_apply_cd(qs_env, rho_tot_gspace, energy, v_hartree_gspace, calculate_forces, itype_of_density)
Routine to couple/decouple periodic images with the Bloechl scheme.
represent the structure of a full matrix
subroutine, public cp_fm_struct_create(fmstruct, para_env, context, nrow_global, ncol_global, nrow_block, ncol_block, descriptor, first_p_pos, local_leading_dimension, template_fmstruct, square_blocks, force_block)
allocates and initializes a full matrix structure
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
represent a full matrix distributed on many processors
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
subroutine, public cp_fm_set_all(matrix, alpha, beta)
set all elements of a matrix to the same value, and optionally the diagonal to a different one
subroutine, public cp_fm_create(matrix, matrix_struct, name, nrow, ncol, set_zero)
creates a new full matrix with the given structure
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
Utilities for hfx and admm methods.
subroutine, public tddft_hfx_matrix(matrix_ks, rho_ao, qs_env, update_energy, recalc_integrals, external_hfx_sections, external_x_data, external_para_env)
Add the hfx contributions to the Hamiltonian.
Routines to calculate derivatives with respect to basis function origin.
subroutine, public derivatives_four_center(qs_env, rho_ao, rho_ao_resp, hfx_section, para_env, irep, use_virial, adiabatic_rescale_factor, resp_only, external_x_data, nspins)
computes four center derivatives for a full basis set and updates the forcesfock_4c arrays....
Types and set/get functions for HFX.
sums arrays of real/complex numbers with much reduced round-off as compared to a naive implementation...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Types and basic routines needed for a kpoint calculation.
subroutine, public get_kpoint_info(kpoint, kp_scheme, nkp_grid, kp_shift, symmetry, verbose, full_grid, use_real_wfn, eps_geo, parallel_group_size, kp_range, nkp, xkp, wkp, para_env, blacs_env_all, para_env_kp, para_env_inter_kp, blacs_env, kp_env, kp_aux_env, mpools, iogrp, nkp_groups, kp_dist, cell_to_index, index_to_cell, sab_nl, sab_nl_nosym, inversion_symmetry_only, symmetry_backend, symmetry_reduction_method, gamma_centered, lattice_fft)
Retrieve information from a kpoint environment.
Calculates integral matrices for LRIGPW method lri : local resolution of the identity.
subroutine, public v_int_ppl_update(qs_env, lri_v_int, calculate_forces)
...
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
Calculates forces for LRIGPW method lri : local resolution of the identity.
subroutine, public calculate_lri_forces(lri_env, lri_density, qs_env, pmatrix, atomic_kind_set)
calculates the lri forces
subroutine, public calculate_ri_forces(lri_env, lri_density, qs_env, pmatrix, atomic_kind_set)
calculates the ri forces
routines that build the Kohn-Sham matrix for the LRIGPW and xc parts
subroutine, public calculate_lri_ks_matrix(lri_env, lri_v_int, h_matrix, atomic_kind_set, cell_to_index)
update of LRIGPW KS matrix
subroutine, public calculate_ri_ks_matrix(lri_env, lri_v_int, h_matrix, s_matrix, atomic_kind_set, ispin)
update of RIGPW KS matrix
Collection of simple mathematical functions and subroutines.
logical function, public abnormal_value(a)
determines if a value is not normal (e.g. for Inf and Nan) based on IO to work also under optimizatio...
Interface to the message passing library MPI.
Types containing essential information for running implicit (iterative) Poisson solver.
integer, parameter, public neumann_bc
integer, parameter, public mixed_bc
integer, parameter, public mixed_periodic_bc
integer, parameter, public periodic_bc
container for various plainwaves related things
subroutine, public pw_env_get(pw_env, pw_pools, cube_info, gridlevel_info, auxbas_pw_pool, auxbas_grid, auxbas_rs_desc, auxbas_rs_grid, rs_descs, rs_grids, xc_pw_pool, vdw_pw_pool, poisson_env, interp_section)
returns the various attributes of the pw env
functions related to the poisson solver on regular grids
integer, parameter, public pw_poisson_implicit
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Defines CDFT control structures.
container for information about total charges on the grids
Calculate the plane wave density by collocating the primitive Gaussian functions (pgf).
subroutine, public calculate_rho_elec(matrix_p, matrix_p_kp, rho, rho_gspace, total_rho, ks_env, soft_valid, compute_tau, compute_grad, basis_type, der_type, idir, task_list_external, pw_env_external)
computes the density corresponding to a given density matrix on the grid
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, mimic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, 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, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_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, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
Integrate single or product functions over a potential on a RS grid.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, do_mtlr_present, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
subroutine, public qmmm_modify_hartree_pot(v_hartree, v_qmmm, scale)
Modify the hartree potential in order to include the QM/MM correction.
subroutine, public get_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, exc_accint, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_ks_im_kp, rho, rho_xc, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, task_list, task_list_soft, kpoints, do_kpoints, atomic_kind_set, qs_kind_set, cell, cell_ref, use_ref_cell, particle_set, energy, force, local_particles, local_molecules, molecule_kind_set, molecule_set, subsys, cp_subsys, virial, results, atprop, nkind, natom, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env, nelectron_total, nelectron_spin)
...
routines that build the Kohn-Sham matrix (i.e calculate the coulomb and xc parts
subroutine, public print_densities(qs_env, rho)
...
subroutine, public get_embed_potential_energy(qs_env, rho, v_rspace_embed, dft_control, embed_corr, just_energy)
...
subroutine, public compute_matrix_vxc_kp(qs_env, v_rspace, matrix_vxc_kp, gapw_full_basis)
Build the XC potential matrix for k-point/image-resolved KS matrices.
subroutine, public low_spin_roks(energy, qs_env, dft_control, do_hfx, just_energy, calculate_forces, auxbas_pw_pool)
do ROKS calculations yielding low spin states
subroutine, public check_sum_energies(energy)
Check each term of the energy and sum to total.
subroutine, public compute_matrix_vxc(qs_env, v_rspace, matrix_vxc, gapw_full_basis)
compute matrix_vxc, defined via the potential created by qs_vxc_create ignores things like tau functi...
subroutine, public sum_up_and_integrate(qs_env, ks_matrix, rho, my_rho, vppl_rspace, v_rspace_new, v_rspace_new_aux_fit, v_tau_rspace, v_tau_rspace_aux_fit, v_sic_rspace, v_spin_ddapc_rest_r, v_sccs_rspace, v_rspace_embed, cdft_control, calculate_forces)
Sum up all potentials defined on the grid and integrate.
subroutine, public print_detailed_energy(qs_env, dft_control, input, energy, mulliken_order_p)
Print detailed energies.
subroutine, public calculate_zmp_potential(qs_env, v_rspace_new, rho, exc)
Calculate the ZMP potential and energy as in Zhao, Morrison Parr PRA 50i, 2138 (1994) V_c^\lambda def...
subroutine, public calc_v_sic_rspace(v_sic_rspace, energy, qs_env, dft_control, rho, poisson_env, just_energy, calculate_forces, auxbas_pw_pool)
do sic calculations on the spin density
subroutine, public sic_explicit_orbitals(energy, qs_env, dft_control, poisson_env, just_energy, calculate_forces, auxbas_pw_pool)
do sic calculations on explicit orbitals
Definition and initialisation of the mo data type.
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count, cmo_coeff)
Get the components of a MO set data structure.
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
Experimental CP2K-native GPW real-space-grid path for SKALA TorchScript models.
logical function, public native_skala_gapw_composite_direct_ao(xc_section)
Return true if the GAPW composite reference uses direct full-ORB collocation.
logical function, public native_skala_gapw_composite_reference(xc_section)
Return true if native SKALA should use the full GAPW ORB density on one common grid.
Exchange and Correlation functional calculations.
real(kind=dp) function, public xc_exc_calc(rho_r, rho_g, tau, xc_section, weights, pw_pool)
calculates just the exchange and correlation energy (no vxc)
subroutine, public xc_vxc_pw_create(vxc_rho, vxc_tau, exc, rho_r, rho_g, tau, xc_section, weights, pw_pool, compute_virial, virial_xc, exc_r)
Exchange and Correlation functional calculations.
stores some data used in wavefunction fitting
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
keeps the information about the structure of a full matrix
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores some data used in construction of Kohn-Sham matrix
Contains information about kpoints.
stores all the informations relevant to an mpi environment
contained for different pw related things
environment for the poisson solver
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Container for information about total charges on the grids.
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.