106 integrate_v_core_rspace
138#include "./base/base_uses.f90"
144 LOGICAL,
PARAMETER :: debug_this_module = .true.
145 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_ks_methods'
178 print_active, ext_ks_matrix, ext_xc_section)
180 LOGICAL,
INTENT(in) :: calculate_forces, just_energy
181 LOGICAL,
INTENT(IN),
OPTIONAL :: print_active
183 POINTER :: ext_ks_matrix
186 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_ks_build_kohn_sham_matrix'
188 CHARACTER(len=default_string_length) :: name
189 INTEGER :: handle, iatom, img, ispin, nimages, &
191 LOGICAL :: do_adiabatic_rescaling, do_ddapc, do_hfx, do_ppl, dokp, gapw, gapw_xc, &
192 just_energy_xc, lrigpw, my_print, rigpw, use_virial
193 REAL(kind=
dp) :: ecore_ppl, edisp, ee_ener, ekin_mol, &
194 mulliken_order_p, vscale
195 REAL(kind=
dp),
DIMENSION(3, 3) :: h_stress, pv_loc
200 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: ksmat, matrix_vxc, mo_derivs
201 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: ks_matrix, ks_matrix_im, matrix_h, &
202 matrix_h_im, matrix_s, my_rho, rho_ao
216 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r, v_rspace_embed, v_rspace_new, &
217 v_rspace_new_aux_fit, v_tau_rspace, &
219 TYPE(
pw_r3d_rs_type),
POINTER :: rho0_s_rs, rho_nlcc, rhoz_cneo_s_rs, v_hartree_rspace, &
220 v_sccs_rspace, v_sic_rspace, v_spin_ddapc_rest_r, vee, vppl_rspace
223 TYPE(
qs_rho_type),
POINTER :: rho, rho_struct, rho_xc
225 hfx_sections, input, scf_section, &
229 CALL timeset(routinen, handle)
230 NULLIFY (admm_env, cell, dft_control, logger, mo_derivs, my_rho, &
231 rho_struct, para_env, pw_env, virial, vppl_rspace, &
232 adiabatic_rescaling_section, hfx_sections, &
233 input, scf_section, xc_section, matrix_h, matrix_h_im, matrix_s, &
234 auxbas_pw_pool, poisson_env, v_rspace_new, v_rspace_new_aux_fit, &
235 v_tau_rspace, v_tau_rspace_aux_fit, matrix_vxc, vee, rho_nlcc, &
236 ks_env, ks_matrix, ks_matrix_im, rho, energy, rho_xc, rho_r, rho_ao, rho_core)
238 cpassert(
ASSOCIATED(qs_env))
242 IF (
PRESENT(print_active)) my_print = print_active
246 dft_control=dft_control, &
247 matrix_h_kp=matrix_h, &
248 matrix_h_im_kp=matrix_h_im, &
249 matrix_s_kp=matrix_s, &
250 matrix_ks_kp=ks_matrix, &
251 matrix_ks_im_kp=ks_matrix_im, &
252 matrix_vxc=matrix_vxc, &
258 v_hartree_rspace=v_hartree_rspace, &
266 CALL qs_rho_get(rho, rho_r=rho_r, rho_ao_kp=rho_ao)
268 nimages = dft_control%nimages
269 nspins = dft_control%nspins
272 IF (
PRESENT(ext_ks_matrix)) ks_matrix(1:nspins, 1:1) => ext_ks_matrix(1:nspins)
274 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
277 CALL section_vals_get(adiabatic_rescaling_section, explicit=do_adiabatic_rescaling)
278 just_energy_xc = just_energy
279 IF (do_adiabatic_rescaling)
THEN
282 just_energy_xc = .true.
285 cpassert(
ASSOCIATED(matrix_h))
286 cpassert(
ASSOCIATED(matrix_s))
287 cpassert(
ASSOCIATED(rho))
288 cpassert(
ASSOCIATED(pw_env))
289 cpassert(
SIZE(ks_matrix, 1) > 0)
293 do_ddapc = dft_control%qs_control%ddapc_restraint .OR. &
294 qs_env%cp_ddapc_ewald%do_decoupling .OR. &
295 qs_env%cp_ddapc_ewald%do_qmmm_periodic_decpl .OR. &
296 qs_env%cp_ddapc_ewald%do_solvation
299 lrigpw = dft_control%qs_control%lrigpw
300 rigpw = dft_control%qs_control%rigpw
302 cpassert(nimages == 1)
304 IF (lrigpw .AND. rigpw)
THEN
305 cpabort(
" LRI and RI are not compatible")
309 gapw = dft_control%qs_control%gapw
310 gapw_xc = dft_control%qs_control%gapw_xc
311 IF (gapw_xc .AND. gapw)
THEN
312 cpabort(
" GAPW and GAPW_XC are not compatible")
314 IF ((gapw .AND. lrigpw) .OR. (gapw_xc .AND. lrigpw))
THEN
315 cpabort(
" GAPW/GAPW_XC and LRIGPW are not compatible")
317 IF ((gapw .AND. rigpw) .OR. (gapw_xc .AND. rigpw))
THEN
318 cpabort(
" GAPW/GAPW_XC and RIGPW are not compatible")
321 do_ppl = dft_control%qs_control%do_ppl_method ==
do_ppl_grid
324 CALL get_qs_env(qs_env=qs_env, vppl=vppl_rspace)
328 cpassert(
ASSOCIATED(rho_xc))
332 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, poisson_env=poisson_env)
335 cpabort(
"The implicit Poisson solver cannot be used in conjunction with GAPW.")
339 IF (gapw .OR. gapw_xc)
THEN
344 CALL auxbas_pw_pool%create_pw(v_hartree_gspace)
345 CALL auxbas_pw_pool%create_pw(rho_tot_gspace)
349 "PRINT%DETAILED_ENERGY"), &
351 (.NOT. gapw) .AND. (.NOT. gapw_xc) .AND. &
368 IF (dft_control%do_sccs)
THEN
370 NULLIFY (v_sccs_rspace)
371 ALLOCATE (v_sccs_rspace)
372 CALL auxbas_pw_pool%create_pw(v_sccs_rspace)
375 cpabort(
"The implicit Poisson solver cannot be used together with SCCS.")
378 IF (use_virial .AND. calculate_forces)
THEN
379 CALL sccs(qs_env, rho_tot_gspace, v_hartree_gspace, v_sccs_rspace, &
381 virial%pv_ehartree = virial%pv_ehartree + h_stress/real(para_env%num_pe,
dp)
382 virial%pv_virial = virial%pv_virial + h_stress/real(para_env%num_pe,
dp)
384 CALL sccs(qs_env, rho_tot_gspace, v_hartree_gspace, v_sccs_rspace)
389 IF (use_virial .AND. calculate_forces)
THEN
390 h_stress(:, :) = 0.0_dp
392 v_hartree_gspace, h_stress=h_stress, &
394 virial%pv_ehartree = virial%pv_ehartree + h_stress/real(para_env%num_pe,
dp)
395 virial%pv_virial = virial%pv_virial + h_stress/real(para_env%num_pe,
dp)
398 v_hartree_gspace, rho_core=rho_core)
404 CALL qs_ks_ddapc(qs_env, auxbas_pw_pool, rho_tot_gspace, v_hartree_gspace, &
405 v_spin_ddapc_rest_r, energy, calculate_forces, ks_matrix, &
408 dft_control%qs_control%ddapc_explicit_potential = .false.
409 dft_control%qs_control%ddapc_restraint_is_spin = .false.
410 IF (.NOT. just_energy)
THEN
411 CALL pw_transfer(v_hartree_gspace, v_hartree_rspace)
412 CALL pw_scale(v_hartree_rspace, v_hartree_rspace%pw_grid%dvol)
415 CALL auxbas_pw_pool%give_back_pw(v_hartree_gspace)
417 IF (dft_control%correct_surf_dip)
THEN
418 IF (dft_control%surf_dip_correct_switch)
THEN
420 energy%hartree = energy%hartree + energy%surf_dipole
425 CALL calc_v_sic_rspace(v_sic_rspace, energy, qs_env, dft_control, rho, poisson_env, &
426 just_energy, calculate_forces, auxbas_pw_pool)
432 IF (dft_control%apply_external_potential)
THEN
438 IF (.NOT. just_energy)
THEN
441 rho0_s_rs=rho0_s_rs, &
442 rhoz_cneo_s_rs=rhoz_cneo_s_rs)
443 cpassert(
ASSOCIATED(rho0_s_rs))
444 IF (
ASSOCIATED(rhoz_cneo_s_rs))
THEN
445 CALL pw_axpy(rhoz_cneo_s_rs, rho0_s_rs)
448 IF (
ASSOCIATED(rhoz_cneo_s_rs))
THEN
449 CALL pw_axpy(rhoz_cneo_s_rs, rho0_s_rs, -1.0_dp)
458 IF (qs_env%qmmm)
THEN
461 v_qmmm=qs_env%ks_qmmm_env%v_qmmm_rspace, &
462 qmmm_energy=energy%qmmm_el)
463 IF (qs_env%qmmm_env_qm%image_charge)
THEN
465 rho_hartree_gspace=rho_tot_gspace, &
467 qmmm_env=qs_env%qmmm_env_qm, &
469 IF (.NOT. just_energy)
THEN
471 v_metal=qs_env%ks_qmmm_env%v_metal_rspace, &
473 IF (calculate_forces)
THEN
475 potential=v_hartree_rspace, coeff=qs_env%image_coeff, &
476 forces=qs_env%qmmm_env_qm%image_charge_pot%image_forcesMM, &
477 qmmm_env=qs_env%qmmm_env_qm, qs_env=qs_env)
480 CALL qs_env%ks_qmmm_env%v_metal_rspace%release()
481 DEALLOCATE (qs_env%ks_qmmm_env%v_metal_rspace)
483 IF (.NOT. just_energy)
THEN
485 v_qmmm=qs_env%ks_qmmm_env%v_qmmm_rspace, scale=1.0_dp)
488 CALL auxbas_pw_pool%give_back_pw(rho_tot_gspace)
491 IF (dft_control%smeagol_control%smeagol_enabled .AND. &
493 cpassert(
ASSOCIATED(dft_control%smeagol_control%aux))
495 dft_control%smeagol_control%aux%HartreeLeadsLeft, &
496 dft_control%smeagol_control%aux%HartreeLeadsRight, &
497 dft_control%smeagol_control%aux%HartreeLeadsBottom, &
498 dft_control%smeagol_control%aux%VBias, &
499 dft_control%smeagol_control%aux%minL, &
500 dft_control%smeagol_control%aux%maxR, &
501 dft_control%smeagol_control%aux%isexplicit_maxR, &
502 dft_control%smeagol_control%aux%isexplicit_HartreeLeadsBottom)
506 IF (dft_control%do_admm)
THEN
507 IF (
PRESENT(ext_xc_section))
THEN
513 IF (dft_control%do_admm_mo)
THEN
514 IF (qs_env%run_rtp)
THEN
523 ELSEIF (dft_control%do_admm_dm)
THEN
529 IF (use_virial .AND. calculate_forces) virial%pv_calculate = .true.
534 IF (dft_control%do_admm)
THEN
536 xc_section => admm_env%xc_section_aux
540 CALL qs_vxc_create(ks_env=ks_env, rho_struct=rho_struct, xc_section=xc_section, &
541 vxc_rho=v_rspace_new_aux_fit, vxc_tau=v_tau_rspace_aux_fit, exc=energy%exc_aux_fit, &
542 just_energy=just_energy_xc)
544 IF (admm_env%do_gapw)
THEN
546 CALL calculate_vxc_atom(qs_env, energy_only=just_energy_xc, exc1=energy%exc1_aux_fit, &
547 kind_set_external=admm_env%admm_gapw_env%admm_kind_set, &
548 xc_section_external=xc_section, &
549 rho_atom_set_external=admm_env%admm_gapw_env%local_rho_set%rho_atom_set)
555 IF (use_virial .AND. calculate_forces)
THEN
558 IF (admm_env%do_admms) vscale = admm_env%gsi(1)**(2.0_dp/3.0_dp)
559 IF (admm_env%do_admmp) vscale = admm_env%gsi(1)**2
560 virial%pv_exc = virial%pv_exc - vscale*virial%pv_xc
561 virial%pv_virial = virial%pv_virial - vscale*virial%pv_xc
564 xc_section => admm_env%xc_section_primary
568 IF (
PRESENT(ext_xc_section)) xc_section => ext_xc_section
572 CALL get_qs_env(qs_env=qs_env, rho_xc=rho_struct)
574 CALL get_qs_env(qs_env=qs_env, rho=rho_struct)
578 IF (dft_control%apply_external_density .OR. dft_control%apply_external_vxc)
THEN
583 IF (dft_control%apply_embed_pot)
THEN
584 NULLIFY (v_rspace_embed)
585 energy%embed_corr = 0.0_dp
587 energy%embed_corr, just_energy)
590 CALL qs_vxc_create(ks_env=ks_env, rho_struct=rho_struct, xc_section=xc_section, &
591 vxc_rho=v_rspace_new, vxc_tau=v_tau_rspace, exc=energy%exc, &
592 edisp=edisp, dispersion_env=qs_env%dispersion_env, &
593 just_energy=just_energy_xc)
594 IF (edisp /= 0.0_dp) energy%dispersion = edisp
595 IF (qs_env%requires_matrix_vxc .AND.
ASSOCIATED(v_rspace_new))
THEN
597 CALL set_ks_env(ks_env, matrix_vxc=matrix_vxc)
600 IF (gapw .OR. gapw_xc)
THEN
601 CALL calculate_vxc_atom(qs_env, just_energy_xc, energy%exc1, xc_section_external=xc_section)
603 IF (use_virial .AND. calculate_forces)
THEN
604 IF (
ASSOCIATED(v_tau_rspace))
THEN
605 cpabort(
"MGGA STRESS with GAPW/GAPW_XC not implemneted")
613 IF (qs_env%harris_method)
THEN
614 CALL get_qs_env(qs_env, harris_env=harris_env)
619 IF (use_virial .AND. calculate_forces)
THEN
620 virial%pv_exc = virial%pv_exc - virial%pv_xc
621 virial%pv_virial = virial%pv_virial - virial%pv_xc
632 CALL hfx_ks_matrix(qs_env, ks_matrix, rho, energy, calculate_forces, &
633 just_energy, v_rspace_new, v_tau_rspace, ext_xc_section=xc_section)
637 IF (do_ppl .AND. calculate_forces)
THEN
640 CALL integrate_ppl_rspace(rho_r(ispin), qs_env)
644 IF (
ASSOCIATED(rho_nlcc) .AND. calculate_forces)
THEN
646 CALL integrate_rho_nlcc(v_rspace_new(ispin), qs_env)
647 IF (dft_control%do_admm)
CALL integrate_rho_nlcc(v_rspace_new_aux_fit(ispin), qs_env)
652 IF (dft_control%qs_control%do_kg .AND. just_energy)
THEN
654 cpassert(.NOT. (gapw .OR. gapw_xc))
655 cpassert(nimages == 1)
656 ksmat => ks_matrix(:, 1)
657 CALL kg_ekin_subset(qs_env, ksmat, ekin_mol, calculate_forces, do_kernel=.false.)
660 energy%exc = energy%exc - ekin_mol
665 IF (.NOT. just_energy)
THEN
666 IF (calculate_forces)
THEN
669 (poisson_env%parameters%dielectric_params%dielec_core_correction))
THEN
672 CALL auxbas_pw_pool%create_pw(v_minus_veps)
673 CALL pw_copy(v_hartree_rspace, v_minus_veps)
674 CALL pw_axpy(poisson_env%implicit_env%v_eps, v_minus_veps, -v_hartree_rspace%pw_grid%dvol)
675 CALL integrate_v_core_rspace(v_minus_veps, qs_env)
676 CALL auxbas_pw_pool%give_back_pw(v_minus_veps)
679 CALL integrate_v_core_rspace(v_hartree_rspace, qs_env)
683 IF (.NOT. do_hfx)
THEN
689 CALL dbcsr_copy(ks_matrix(ispin, img)%matrix, matrix_h(1, img)%matrix, name=name)
693 IF (qs_env%run_rtp)
THEN
694 IF (dft_control%rtp_control%velocity_gauge)
THEN
695 cpassert(
ASSOCIATED(matrix_h_im))
696 cpassert(
ASSOCIATED(ks_matrix_im))
700 CALL dbcsr_copy(ks_matrix_im(ispin, img)%matrix, matrix_h_im(1, img)%matrix, name=name)
707 IF (use_virial .AND. calculate_forces)
THEN
708 pv_loc = virial%pv_virial
715 v_rspace_new, v_rspace_new_aux_fit, v_tau_rspace, v_tau_rspace_aux_fit, &
716 v_sic_rspace, v_spin_ddapc_rest_r, v_sccs_rspace, v_rspace_embed, &
717 cdft_control, calculate_forces)
719 IF (use_virial .AND. calculate_forces)
THEN
720 virial%pv_ehartree = virial%pv_ehartree + (virial%pv_virial - pv_loc)
722 IF (dft_control%qs_control%do_kg)
THEN
723 cpassert(.NOT. (gapw .OR. gapw_xc))
724 cpassert(nimages == 1)
725 ksmat => ks_matrix(:, 1)
727 IF (use_virial .AND. calculate_forces)
THEN
728 pv_loc = virial%pv_virial
731 CALL kg_ekin_subset(qs_env, ksmat, ekin_mol, calculate_forces, do_kernel=.false.)
733 energy%exc = energy%exc - ekin_mol
736 IF (use_virial .AND. calculate_forces)
THEN
739 virial%pv_ehartree = virial%pv_ehartree + (virial%pv_virial - pv_loc)
742 virial%pv_exc = virial%pv_exc + virial%pv_xc
743 virial%pv_virial = virial%pv_virial + virial%pv_xc
744 virial%pv_xc = 0.0_dp
751 cpwarn(
"KS matrix no longer correct. Check possible problems with property calculations!")
756 IF (dft_control%qs_control%ddapc_explicit_potential)
THEN
757 CALL auxbas_pw_pool%give_back_pw(v_spin_ddapc_rest_r)
758 DEALLOCATE (v_spin_ddapc_rest_r)
761 IF (calculate_forces .AND. dft_control%qs_control%cdft)
THEN
762 IF (.NOT. cdft_control%transfer_pot)
THEN
763 DO iatom = 1,
SIZE(cdft_control%group)
764 CALL auxbas_pw_pool%give_back_pw(cdft_control%group(iatom)%weight)
765 DEALLOCATE (cdft_control%group(iatom)%weight)
767 IF (cdft_control%atomic_charges)
THEN
768 DO iatom = 1, cdft_control%natoms
769 CALL auxbas_pw_pool%give_back_pw(cdft_control%charge(iatom))
771 DEALLOCATE (cdft_control%charge)
774 cdft_control%becke_control%cavity_confine)
THEN
775 IF (.NOT.
ASSOCIATED(cdft_control%becke_control%cavity_mat))
THEN
776 CALL auxbas_pw_pool%give_back_pw(cdft_control%becke_control%cavity)
778 DEALLOCATE (cdft_control%becke_control%cavity_mat)
781 IF (
ASSOCIATED(cdft_control%hirshfeld_control%hirshfeld_env%fnorm))
THEN
782 CALL auxbas_pw_pool%give_back_pw(cdft_control%hirshfeld_control%hirshfeld_env%fnorm)
785 IF (
ASSOCIATED(cdft_control%charges_fragment))
DEALLOCATE (cdft_control%charges_fragment)
786 cdft_control%save_pot = .false.
787 cdft_control%need_pot = .true.
788 cdft_control%external_control = .false.
792 IF (dft_control%do_sccs)
THEN
793 CALL auxbas_pw_pool%give_back_pw(v_sccs_rspace)
794 DEALLOCATE (v_sccs_rspace)
798 IF (dft_control%apply_external_potential)
THEN
801 v_qmmm=vee, scale=-1.0_dp)
806 CALL get_qs_env(qs_env, ecoul_1c=ecoul_1c, local_rho_set=local_rho_set)
807 CALL vh_1c_gg_integrals(qs_env, energy%hartree_1c, ecoul_1c, local_rho_set, para_env, tddft=.false., &
810 energy%core_cneo = 0.0_dp
811 IF (
ASSOCIATED(local_rho_set%rhoz_cneo_set))
THEN
812 DO iatom = 1,
SIZE(local_rho_set%rhoz_cneo_set)
813 energy%core_cneo = energy%core_cneo + local_rho_set%rhoz_cneo_set(iatom)%e_core
818 IF (gapw .OR. gapw_xc)
THEN
821 IF (dft_control%do_admm)
THEN
830 ks_matrix, matrix_s, rho, mulliken_order_p)
833 IF (dft_control%dft_plus_u)
THEN
834 cpassert(nimages == 1)
835 IF (just_energy)
THEN
836 CALL plus_u(qs_env=qs_env)
838 ksmat => ks_matrix(:, 1)
839 CALL plus_u(qs_env=qs_env, matrix_h=ksmat)
842 energy%dft_plus_u = 0.0_dp
849 dft_control%qs_control%eps_filter_matrix)
854 IF (dft_control%do_admm_mo)
THEN
855 IF (qs_env%run_rtp)
THEN
860 ELSEIF (dft_control%do_admm_dm)
THEN
871 IF (qs_env%requires_mo_derivs .AND. .NOT. just_energy .AND. .NOT. qs_env%run_rtp)
THEN
873 cpassert(nimages == 1)
874 ksmat => ks_matrix(:, 1)
875 CALL calc_mo_derivatives(qs_env, ksmat, mo_derivs)
879 IF (calculate_forces .AND. dft_control%do_admm)
THEN
888 CALL low_spin_roks(energy, qs_env, dft_control, do_hfx, just_energy, &
889 calculate_forces, auxbas_pw_pool)
893 calculate_forces, auxbas_pw_pool)
900 energy, calculate_forces, just_energy)
908 energy%core = energy%core + ecore_ppl
913 CALL get_qs_env(qs_env, lri_env=lri_env, lri_density=lri_density)
914 IF (lri_env%ppl_ri)
THEN
917 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
920 energy%core = energy%core + ecore_ppl
925 energy%total = energy%core_overlap + energy%core_self + energy%core_cneo + energy%core + &
926 energy%hartree + energy%hartree_1c + energy%exc + energy%exc1 + energy%ex + &
927 energy%dispersion + energy%gcp + energy%qmmm_el + energy%mulliken + &
928 sum(energy%ddapc_restraint) + energy%s2_restraint + &
929 energy%dft_plus_u + energy%kTS + &
930 energy%efield + energy%efield_core + energy%ee + &
931 energy%ee_core + energy%exc_aux_fit + energy%image_charge + &
932 energy%sccs_pol + energy%cdft + energy%exc1_aux_fit
934 IF (dft_control%apply_embed_pot) energy%total = energy%total + energy%embed_corr
937 cpabort(
"KS energy is an abnormal value (NaN/Inf).")
944 CALL timestop(handle)
956 TYPE(pw_c1d_gs_type),
INTENT(INOUT) :: rho_tot_gspace
957 TYPE(qs_environment_type),
POINTER :: qs_env
958 TYPE(qs_rho_type),
POINTER :: rho
959 LOGICAL,
INTENT(IN),
OPTIONAL :: skip_nuclear_density
963 TYPE(dft_control_type),
POINTER :: dft_control
964 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_g
965 TYPE(pw_c1d_gs_type),
POINTER :: rho0_s_gs, rho_core, rhoz_cneo_s_gs
966 TYPE(qs_charges_type),
POINTER :: qs_charges
969 IF (
PRESENT(skip_nuclear_density)) my_skip = skip_nuclear_density
971 CALL qs_rho_get(rho, rho_g=rho_g)
972 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
974 IF (.NOT. my_skip)
THEN
976 CALL get_qs_env(qs_env=qs_env, rho_core=rho_core)
977 IF (dft_control%qs_control%gapw)
THEN
978 NULLIFY (rho0_s_gs, rhoz_cneo_s_gs)
979 CALL get_qs_env(qs_env=qs_env, rho0_s_gs=rho0_s_gs, rhoz_cneo_s_gs=rhoz_cneo_s_gs)
980 cpassert(
ASSOCIATED(rho0_s_gs))
981 CALL pw_copy(rho0_s_gs, rho_tot_gspace)
982 IF (
ASSOCIATED(rhoz_cneo_s_gs))
THEN
983 CALL pw_axpy(rhoz_cneo_s_gs, rho_tot_gspace)
985 IF (dft_control%qs_control%gapw_control%nopaw_as_gpw)
THEN
986 CALL pw_axpy(rho_core, rho_tot_gspace)
989 CALL pw_copy(rho_core, rho_tot_gspace)
991 DO ispin = 1, dft_control%nspins
992 CALL pw_axpy(rho_g(ispin), rho_tot_gspace)
994 CALL get_qs_env(qs_env=qs_env, qs_charges=qs_charges)
995 qs_charges%total_rho_gspace = pw_integrate_function(rho_tot_gspace, isign=-1)
997 DO ispin = 1, dft_control%nspins
998 CALL pw_axpy(rho_g(ispin), rho_tot_gspace)
1014 SUBROUTINE calc_mo_derivatives(qs_env, ks_matrix, mo_derivs)
1015 TYPE(qs_environment_type),
POINTER :: qs_env
1016 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: ks_matrix, mo_derivs
1019 LOGICAL :: uniform_occupation
1020 REAL(kind=dp),
DIMENSION(:),
POINTER :: occupation_numbers
1021 TYPE(cp_fm_type),
POINTER :: mo_coeff
1022 TYPE(dbcsr_type) :: mo_derivs2_tmp1, mo_derivs2_tmp2
1023 TYPE(dbcsr_type),
POINTER :: mo_coeff_b
1024 TYPE(dft_control_type),
POINTER :: dft_control
1025 TYPE(mo_set_type),
DIMENSION(:),
POINTER :: mo_array
1027 NULLIFY (dft_control, mo_array, mo_coeff, mo_coeff_b, occupation_numbers)
1029 CALL get_qs_env(qs_env, &
1030 dft_control=dft_control, &
1033 DO ispin = 1,
SIZE(mo_derivs)
1035 CALL get_mo_set(mo_set=mo_array(ispin), mo_coeff=mo_coeff, &
1036 mo_coeff_b=mo_coeff_b, occupation_numbers=occupation_numbers)
1037 CALL dbcsr_multiply(
'n',
'n', 1.0_dp, ks_matrix(ispin)%matrix, mo_coeff_b, &
1038 0.0_dp, mo_derivs(ispin)%matrix)
1040 IF (dft_control%restricted)
THEN
1042 cpassert(ispin == 1)
1043 cpassert(
SIZE(mo_array) == 2)
1048 CALL get_mo_set(mo_set=mo_array(1), uniform_occupation=uniform_occupation)
1049 cpassert(uniform_occupation)
1050 CALL get_mo_set(mo_set=mo_array(2), uniform_occupation=uniform_occupation)
1051 cpassert(uniform_occupation)
1055 CALL get_mo_set(mo_set=mo_array(2), mo_coeff_b=mo_coeff_b)
1056 CALL dbcsr_create(mo_derivs2_tmp1, template=mo_coeff_b)
1059 CALL dbcsr_multiply(
'n',
'n', 1.0_dp, ks_matrix(2)%matrix, mo_coeff_b, 0.0_dp, mo_derivs2_tmp1)
1062 CALL dbcsr_create(mo_derivs2_tmp2, template=mo_derivs(1)%matrix)
1063 CALL dbcsr_set(mo_derivs2_tmp2, 0.0_dp)
1066 CALL dbcsr_copy_columns_hack(mo_derivs2_tmp2, mo_derivs2_tmp1, &
1067 mo_array(2)%nmo, 1, 1, &
1068 para_env=mo_array(1)%mo_coeff%matrix_struct%para_env, &
1069 blacs_env=mo_array(1)%mo_coeff%matrix_struct%context)
1072 CALL dbcsr_add(mo_derivs(1)%matrix, mo_derivs2_tmp2, 1.0_dp, 1.0_dp)
1073 CALL dbcsr_release(mo_derivs2_tmp1)
1074 CALL dbcsr_release(mo_derivs2_tmp2)
1078 IF (dft_control%do_admm_mo)
THEN
1079 CALL calc_admm_mo_derivatives(qs_env, mo_derivs)
1082 END SUBROUTINE calc_mo_derivatives
1100 TYPE(qs_environment_type),
POINTER :: qs_env
1101 LOGICAL,
INTENT(IN),
OPTIONAL :: calculate_forces, just_energy, &
1104 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_ks_update_qs_env'
1106 INTEGER :: handle, unit_nr
1107 LOGICAL :: c_forces, do_rebuild, energy_only, &
1108 forces_up_to_date, potential_changed, &
1109 rho_changed, s_mstruct_changed
1110 TYPE(qs_ks_env_type),
POINTER :: ks_env
1113 unit_nr = cp_logger_get_default_io_unit()
1116 energy_only = .false.
1117 IF (
PRESENT(just_energy)) energy_only = just_energy
1118 IF (
PRESENT(calculate_forces)) c_forces = calculate_forces
1121 CALL timeset(routinen//
'_forces', handle)
1123 CALL timeset(routinen, handle)
1126 cpassert(
ASSOCIATED(qs_env))
1128 CALL get_qs_env(qs_env, &
1130 rho_changed=rho_changed, &
1131 s_mstruct_changed=s_mstruct_changed, &
1132 potential_changed=potential_changed, &
1133 forces_up_to_date=forces_up_to_date)
1135 do_rebuild = .false.
1136 do_rebuild = do_rebuild .OR. rho_changed
1137 do_rebuild = do_rebuild .OR. s_mstruct_changed
1138 do_rebuild = do_rebuild .OR. potential_changed
1139 do_rebuild = do_rebuild .OR. (c_forces .AND. .NOT. forces_up_to_date)
1141 IF (do_rebuild)
THEN
1145 CALL set_ks_env(ks_env, potential_changed=.false.)
1147 CALL rebuild_ks_matrix(qs_env, &
1148 calculate_forces=c_forces, &
1149 just_energy=energy_only, &
1150 print_active=print_active)
1152 IF (.NOT. energy_only)
THEN
1153 CALL set_ks_env(ks_env, &
1154 rho_changed=.false., &
1155 s_mstruct_changed=.false., &
1156 forces_up_to_date=forces_up_to_date .OR. c_forces)
1160 CALL timestop(handle)
1170 TYPE(qs_environment_type),
POINTER :: qs_env
1172 CHARACTER(LEN=*),
PARAMETER :: routinen =
'evaluate_core_matrix_traces'
1175 REAL(kind=dp) :: energy_core_im
1176 TYPE(dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrixkp_h, matrixkp_t, rho_ao_kp
1177 TYPE(dft_control_type),
POINTER :: dft_control
1178 TYPE(qs_energy_type),
POINTER :: energy
1179 TYPE(qs_rho_type),
POINTER :: rho
1181 CALL timeset(routinen, handle)
1182 NULLIFY (energy, rho, dft_control, rho_ao_kp, matrixkp_t, matrixkp_h)
1184 CALL get_qs_env(qs_env, &
1187 dft_control=dft_control, &
1188 kinetic_kp=matrixkp_t, &
1189 matrix_h_kp=matrixkp_h)
1191 CALL qs_rho_get(rho, rho_ao_kp=rho_ao_kp)
1193 CALL calculate_ptrace(matrixkp_h, rho_ao_kp, energy%core, dft_control%nspins)
1196 IF (qs_env%run_rtp)
THEN
1197 IF (dft_control%rtp_control%velocity_gauge)
THEN
1198 CALL get_qs_env(qs_env, matrix_h_im_kp=matrixkp_h)
1199 CALL qs_rho_get(rho, rho_ao_im_kp=rho_ao_kp)
1200 CALL calculate_ptrace(matrixkp_h, rho_ao_kp, energy_core_im, dft_control%nspins)
1201 energy%core = energy%core - energy_core_im
1206 IF (
ASSOCIATED(matrixkp_t)) &
1207 CALL calculate_ptrace(matrixkp_t, rho_ao_kp, energy%kinetic, dft_control%nspins)
1209 CALL timestop(handle)
1218 TYPE(qs_environment_type),
POINTER :: qs_env
1220 CHARACTER(LEN=*),
PARAMETER :: routinen =
'evaluate_core_matrix_p_mix_new'
1223 REAL(kind=dp) :: energy_core_im
1224 TYPE(dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrixkp_h, matrixkp_t
1225 TYPE(dft_control_type),
POINTER :: dft_control
1226 TYPE(qs_energy_type),
POINTER :: energy
1227 TYPE(qs_scf_env_type),
POINTER :: scf_env
1229 CALL timeset(routinen, handle)
1230 NULLIFY (energy, dft_control, matrixkp_t, matrixkp_h)
1232 CALL get_qs_env(qs_env, &
1234 dft_control=dft_control, &
1235 kinetic_kp=matrixkp_t, &
1236 matrix_h_kp=matrixkp_h, &
1239 CALL calculate_ptrace(matrixkp_h, scf_env%p_mix_new, energy%core, dft_control%nspins)
1242 IF (qs_env%run_rtp)
THEN
1243 IF (dft_control%rtp_control%velocity_gauge)
THEN
1244 CALL get_qs_env(qs_env, matrix_h_im_kp=matrixkp_h)
1245 CALL calculate_ptrace(matrixkp_h, scf_env%p_mix_new, energy_core_im, dft_control%nspins)
1246 energy%core = energy%core - energy_core_im
1251 IF (
ASSOCIATED(matrixkp_t)) &
1252 CALL calculate_ptrace(matrixkp_t, scf_env%p_mix_new, energy%kinetic, dft_control%nspins)
1254 CALL timestop(handle)
1265 SUBROUTINE rebuild_ks_matrix(qs_env, calculate_forces, just_energy, print_active)
1266 TYPE(qs_environment_type),
POINTER :: qs_env
1267 LOGICAL,
INTENT(IN) :: calculate_forces, just_energy
1268 LOGICAL,
INTENT(IN),
OPTIONAL :: print_active
1270 CHARACTER(LEN=*),
PARAMETER :: routinen =
'rebuild_ks_matrix'
1273 TYPE(dft_control_type),
POINTER :: dft_control
1275 CALL timeset(routinen, handle)
1276 NULLIFY (dft_control)
1278 CALL get_qs_env(qs_env, dft_control=dft_control)
1280 IF (dft_control%qs_control%semi_empirical)
THEN
1281 CALL build_se_fock_matrix(qs_env, &
1282 calculate_forces=calculate_forces, &
1283 just_energy=just_energy)
1285 ELSEIF (dft_control%qs_control%dftb)
THEN
1286 CALL build_dftb_ks_matrix(qs_env, &
1287 calculate_forces=calculate_forces, &
1288 just_energy=just_energy)
1290 ELSEIF (dft_control%qs_control%xtb)
THEN
1291 IF (dft_control%qs_control%xtb_control%do_tblite)
THEN
1292 CALL build_tblite_ks_matrix(qs_env, &
1293 calculate_forces=calculate_forces, &
1294 just_energy=just_energy)
1296 CALL build_xtb_ks_matrix(qs_env, &
1297 calculate_forces=calculate_forces, &
1298 just_energy=just_energy)
1302 calculate_forces=calculate_forces, &
1303 just_energy=just_energy, &
1304 print_active=print_active)
1307 CALL timestop(handle)
1309 END SUBROUTINE rebuild_ks_matrix
1321 TYPE(qs_environment_type),
POINTER :: qs_env
1322 LOGICAL,
INTENT(in) :: is_complex
1324 CHARACTER(LEN=default_string_length) :: headline
1325 INTEGER :: ic, ispin, nimages, nspins
1326 LOGICAL :: do_kpoints
1327 TYPE(dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s_kp, matrixkp_im_ks, matrixkp_ks
1328 TYPE(dbcsr_type),
POINTER :: refmatrix
1329 TYPE(dft_control_type),
POINTER :: dft_control
1330 TYPE(kpoint_type),
POINTER :: kpoints
1331 TYPE(neighbor_list_set_p_type),
DIMENSION(:), &
1333 TYPE(qs_ks_env_type),
POINTER :: ks_env
1335 NULLIFY (dft_control, ks_env, matrix_s_kp, sab_orb, matrixkp_ks, refmatrix, matrixkp_im_ks, kpoints)
1337 CALL get_qs_env(qs_env, &
1338 dft_control=dft_control, &
1339 matrix_s_kp=matrix_s_kp, &
1342 do_kpoints=do_kpoints, &
1343 matrix_ks_kp=matrixkp_ks, &
1344 matrix_ks_im_kp=matrixkp_im_ks)
1346 IF (do_kpoints)
THEN
1347 CALL get_kpoint_info(kpoints, sab_nl=sab_orb)
1349 CALL get_qs_env(qs_env, sab_orb=sab_orb)
1352 nspins = dft_control%nspins
1353 nimages = dft_control%nimages
1355 IF (.NOT.
ASSOCIATED(matrixkp_ks))
THEN
1356 CALL dbcsr_allocate_matrix_set(matrixkp_ks, nspins, nimages)
1357 refmatrix => matrix_s_kp(1, 1)%matrix
1358 DO ispin = 1, nspins
1360 IF (nspins > 1)
THEN
1361 IF (ispin == 1)
THEN
1362 headline =
"KOHN-SHAM MATRIX FOR ALPHA SPIN"
1364 headline =
"KOHN-SHAM MATRIX FOR BETA SPIN"
1367 headline =
"KOHN-SHAM MATRIX"
1369 ALLOCATE (matrixkp_ks(ispin, ic)%matrix)
1370 CALL dbcsr_create(matrix=matrixkp_ks(ispin, ic)%matrix, template=refmatrix, &
1371 name=trim(headline), matrix_type=dbcsr_type_symmetric)
1372 CALL cp_dbcsr_alloc_block_from_nbl(matrixkp_ks(ispin, ic)%matrix, sab_orb)
1373 CALL dbcsr_set(matrixkp_ks(ispin, ic)%matrix, 0.0_dp)
1376 CALL set_ks_env(ks_env, matrix_ks_kp=matrixkp_ks)
1379 IF (is_complex)
THEN
1380 IF (.NOT.
ASSOCIATED(matrixkp_im_ks))
THEN
1381 cpassert(nspins ==
SIZE(matrixkp_ks, 1))
1382 cpassert(nimages ==
SIZE(matrixkp_ks, 2))
1383 CALL dbcsr_allocate_matrix_set(matrixkp_im_ks, nspins, nimages)
1384 DO ispin = 1, nspins
1386 IF (nspins > 1)
THEN
1387 IF (ispin == 1)
THEN
1388 headline =
"IMAGINARY KOHN-SHAM MATRIX FOR ALPHA SPIN"
1390 headline =
"IMAGINARY KOHN-SHAM MATRIX FOR BETA SPIN"
1393 headline =
"IMAGINARY KOHN-SHAM MATRIX"
1395 ALLOCATE (matrixkp_im_ks(ispin, ic)%matrix)
1396 refmatrix => matrixkp_ks(ispin, ic)%matrix
1397 CALL dbcsr_create(matrix=matrixkp_im_ks(ispin, ic)%matrix, template=refmatrix, &
1398 name=trim(headline), matrix_type=dbcsr_type_antisymmetric)
1399 CALL cp_dbcsr_alloc_block_from_nbl(matrixkp_im_ks(ispin, ic)%matrix, sab_orb)
1400 CALL dbcsr_set(matrixkp_im_ks(ispin, ic)%matrix, 0.0_dp)
1403 CALL set_ks_env(ks_env, matrix_ks_im_kp=matrixkp_im_ks)
Contains ADMM methods which only require the density matrix.
subroutine, public admm_dm_merge_ks_matrix(qs_env)
Entry methods: Merges auxiliary Kohn-Sham matrix into primary one.
subroutine, public admm_dm_calc_rho_aux(qs_env)
Entry methods: Calculates auxiliary density matrix from primary one.
Contains ADMM methods which require molecular orbitals.
subroutine, public admm_mo_calc_rho_aux_kp(qs_env)
...
subroutine, public admm_mo_merge_ks_matrix(qs_env)
...
subroutine, public admm_update_ks_atom(qs_env, calculate_forces)
Adds the GAPW exchange contribution to the aux_fit ks matrices.
subroutine, public calc_admm_ovlp_forces_kp(qs_env)
Calculate the forces due to the AUX/ORB basis overlap in ADMM, in the KP case.
subroutine, public admm_mo_calc_rho_aux(qs_env)
...
subroutine, public calc_admm_ovlp_forces(qs_env)
Calculate the forces due to the AUX/ORB basis overlap in ADMM.
subroutine, public calc_admm_mo_derivatives(qs_env, mo_derivs)
Calculate the derivative of the AUX_FIT mo, based on the ORB mo_derivs.
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.
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_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_filter(matrix, eps)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_release(matrix)
...
subroutine, public dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
Routines that link DBCSR and CP2K concepts together.
subroutine, public cp_dbcsr_alloc_block_from_nbl(matrix, sab_orb, desymmetrize)
allocate the blocks of a dbcsr based on the neighbor list
DBCSR operations in CP2K.
subroutine, public dbcsr_copy_columns_hack(matrix_b, matrix_a, ncol, source_start, target_start, para_env, blacs_env)
hack for dbcsr_copy_columns
Density Derived atomic point charges from a QM calculation (see Bloechl, J. Chem. Phys....
subroutine, public qs_ks_ddapc(qs_env, auxbas_pw_pool, rho_tot_gspace, v_hartree_gspace, v_spin_ddapc_rest_r, energy, calculate_forces, ks_matrix, just_energy)
Set of methods using DDAPC charges.
represent a full matrix distributed on many processors
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
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, 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...
Add the DFT+U contribution to the Hamiltonian matrix.
subroutine, public plus_u(qs_env, matrix_h, matrix_w)
Add the DFT+U contribution to the Hamiltonian matrix. Wrapper routine for all "+U" methods.
subroutine, public vh_1c_gg_integrals(qs_env, energy_hartree_1c, ecoul_1c, local_rho_set, para_env, tddft, local_rho_set_2nd, core_2nd)
Calculates one center GAPW Hartree energies and matrix elements Hartree potentials are input Takes po...
Utilities for hfx and admm methods.
subroutine, public hfx_admm_init(qs_env, calculate_forces, ext_xc_section)
...
subroutine, public hfx_ks_matrix(qs_env, matrix_ks, rho, energy, calculate_forces, just_energy, v_rspace_new, v_tau_rspace, ext_xc_section)
Add the hfx contributions to the Hamiltonian.
subroutine, public hfx_ks_matrix_kp(qs_env, matrix_ks, energy, calculate_forces)
Add the HFX K-point contribution to the real-space Hamiltonians.
Routines for a Kim-Gordon-like partitioning into molecular subunits.
subroutine, public kg_ekin_subset(qs_env, ks_matrix, ekin_mol, calc_force, do_kernel, pmat_ext)
Calculates the subsystem Hohenberg-Kohn kinetic energy and the forces.
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)
Retrieve information from a kpoint environment.
Calculates integral matrices for LRIGPW method lri : local resolution of the identity.
subroutine, public v_int_ppl_energy(qs_env, lri_v_int, ecore_ppl_ri)
...
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
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.
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 ...
Routines for image charge calculation within QM/MM.
subroutine, public calculate_image_pot(v_hartree_rspace, rho_hartree_gspace, energy, qmmm_env, qs_env)
determines coefficients by solving image_matrix*coeff=-pot_const by Gaussian elimination or in an ite...
subroutine, public integrate_potential_devga_rspace(potential, coeff, forces, qmmm_env, qs_env)
calculates the image forces on the MM atoms
subroutine, public add_image_pot_to_hartree_pot(v_hartree, v_metal, qs_env)
Add potential of metal (image charge pot) to Hartree Potential.
Defines CDFT control structures.
container for information about total charges on the grids
Calculation of the energies concerning the core charge distribution.
Calculation of Overlap and Hamiltonian matrices in DFTB.
subroutine, public build_dftb_ks_matrix(qs_env, calculate_forces, just_energy)
...
Calculates the energy contribution and the mo_derivative of a static periodic electric field.
subroutine, public qs_efield_berry_phase(qs_env, just_energy, calculate_forces)
...
Calculates the energy contribution and the mo_derivative of a static electric field (nonperiodic)
subroutine, public qs_efield_local_operator(qs_env, just_energy, calculate_forces)
...
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, 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, 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.
subroutine, public prepare_gapw_den(qs_env, local_rho_set, do_rho0, kind_set_external, pw_env_sub)
...
Types needed for a for a Harris model calculation.
Harris method environment setup and handling.
subroutine, public harris_set_potentials(harris_env, vh_rspace, vxc_rspace)
...
Integrate single or product functions over a potential on a RS grid.
Set of routines to apply restraints to the KS hamiltonian.
subroutine, public qs_ks_s2_restraint(dft_control, qs_env, matrix_s, energy, calculate_forces, just_energy)
...
subroutine, public qs_ks_mulliken_restraint(energy, dft_control, just_energy, para_env, ks_matrix, matrix_s, rho, mulliken_order_p)
...
subroutine, public qs_ks_cdft_constraint(qs_env, auxbas_pw_pool, calculate_forces, cdft_control)
Apply a CDFT constraint.
routines that build the Kohn-Sham matrix contributions coming from local atomic densities
subroutine, public update_ks_atom(qs_env, ksmat, pmat, forces, tddft, rho_atom_external, kind_set_external, oce_external, sab_external, kscale, kintegral, kforce, fscale)
The correction to the KS matrix due to the GAPW local terms to the hartree and XC contributions is he...
routines that build the Kohn-Sham matrix (i.e calculate the coulomb and xc parts
subroutine, public evaluate_core_matrix_p_mix_new(qs_env)
Calculates the traces of the core matrices and the density matrix.
subroutine, public evaluate_core_matrix_traces(qs_env)
Calculates the traces of the core matrices and the density matrix.
subroutine, public qs_ks_update_qs_env(qs_env, calculate_forces, just_energy, print_active)
updates the Kohn Sham matrix of the given qs_env (facility method)
subroutine, public qs_ks_allocate_basics(qs_env, is_complex)
Allocate ks_matrix if necessary, take current overlap matrix as template.
subroutine, public calc_rho_tot_gspace(rho_tot_gspace, qs_env, rho, skip_nuclear_density)
...
subroutine, public qs_ks_build_kohn_sham_matrix(qs_env, calculate_forces, just_energy, print_active, ext_ks_matrix, ext_xc_section)
routine where the real calculations are made: the KS matrix is calculated
subroutine, public qmmm_calculate_energy(qs_env, rho, v_qmmm, qmmm_energy)
Computes the contribution to the total energy of the QM/MM electrostatic coupling.
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 set_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, 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_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, vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, kpoints, 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, subsys, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env)
...
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 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 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
subroutine, public compute_matrix_vxc(qs_env, v_rspace, matrix_vxc)
compute matrix_vxc, defined via the potential created by qs_vxc_create ignores things like tau functi...
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)
Get the components of a MO set data structure.
Define the neighbor list data types and the corresponding functionality.
subroutine, public integrate_vhg0_rspace(qs_env, v_rspace, para_env, calculate_forces, local_rho_set, local_rho_set_2nd, atener, kforce, my_pools, my_rs_descs)
...
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...
Self-consistent continuum solvation (SCCS) model implementation.
subroutine, public sccs(qs_env, rho_tot_gspace, v_hartree_gspace, v_sccs, h_stress)
Self-consistent continuum solvation (SCCS) model implementation.
module that contains the definitions of the scf types
routines that build the integrals of the Vxc potential calculated for the atomic density in the basis...
subroutine, public calculate_vxc_atom(qs_env, energy_only, exc1, adiabatic_rescale_factor, kind_set_external, rho_atom_set_external, xc_section_external)
...
subroutine, public qs_vxc_create(ks_env, rho_struct, xc_section, vxc_rho, vxc_tau, exc, just_energy, edisp, dispersion_env, adiabatic_rescale_factor, pw_env_external)
calculates and allocates the xc potential, already reducing it to the dependence on rho and the one o...
Utilities for rtp in combination with admm methods adapted routines from admm_method (author Manuel G...
subroutine, public rtp_admm_merge_ks_matrix(qs_env)
...
subroutine, public rtp_admm_calc_rho_aux(qs_env)
Compute the ADMM density matrix in case of rtp (complex MO's)
Calculation of the Fock matrix for SE methods.
subroutine, public build_se_fock_matrix(qs_env, calculate_forces, just_energy)
Construction of the Fock matrix for NDDO methods.
subroutine, public smeagol_shift_v_hartree(v_hartree_rspace, cell, hartreeleadsleft, hartreeleadsright, hartreeleadsbottom, vbias, zleft, zright, isexplicit_zright, isexplicit_bottom)
Align Hatree potential of semi-infinite leads to match bulk-transport calculation and apply external ...
subroutine, public calc_dipsurf_potential(qs_env, energy)
compute the surface dipole and the correction to the hartree potential
subroutine, public build_tblite_ks_matrix(qs_env, calculate_forces, just_energy, ext_ks_matrix)
...
Calculation of KS matrix in xTB Reference: Stefan Grimme, Christoph Bannwarth, Philip Shushkov JCTC 1...
subroutine, public build_xtb_ks_matrix(qs_env, calculate_forces, just_energy, ext_ks_matrix)
...
stores some data used in wavefunction fitting
Type defining parameters related to the simulation cell.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
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.
Contains information on the Harris method.
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.