46 USE dbcsr_api,
ONLY: &
47 dbcsr_add, dbcsr_copy, dbcsr_create, dbcsr_filter, dbcsr_get_info, dbcsr_multiply, &
48 dbcsr_p_type, dbcsr_release, dbcsr_set, dbcsr_type, dbcsr_type_antisymmetric, &
70 lri_environment_type,&
79 pw_integrate_function,&
104 integrate_v_core_rspace
133 #include "./base/base_uses.f90"
139 LOGICAL,
PARAMETER :: debug_this_module = .true.
140 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_ks_methods'
172 print_active, ext_ks_matrix)
173 TYPE(qs_environment_type),
POINTER :: qs_env
174 LOGICAL,
INTENT(in) :: calculate_forces, just_energy
175 LOGICAL,
INTENT(IN),
OPTIONAL :: print_active
176 TYPE(dbcsr_p_type),
DIMENSION(:),
OPTIONAL, &
177 POINTER :: ext_ks_matrix
179 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_ks_build_kohn_sham_matrix'
181 CHARACTER(len=default_string_length) :: name
182 INTEGER :: handle, iatom, img, ispin, nimages, ns, &
184 LOGICAL :: do_adiabatic_rescaling, do_ddapc, do_hfx, do_ppl, dokp, gapw, gapw_xc, &
185 hfx_treat_lsd_in_core, just_energy_xc, lrigpw, my_print, rigpw, use_virial
186 REAL(kind=
dp) :: ecore_ppl, edisp, ee_ener, ekin_mol, &
187 mulliken_order_p, vscale
188 REAL(kind=
dp),
DIMENSION(3, 3) :: h_stress, pv_loc
189 TYPE(admm_type),
POINTER :: admm_env
190 TYPE(cdft_control_type),
POINTER :: cdft_control
191 TYPE(cell_type),
POINTER :: cell
192 TYPE(cp_logger_type),
POINTER :: logger
193 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: ksmat, matrix_vxc, mo_derivs
194 TYPE(dbcsr_p_type),
DIMENSION(:, :),
POINTER :: ks_matrix, ks_matrix_im, matrix_h, &
195 matrix_h_im, matrix_s, my_rho, rho_ao
196 TYPE(dft_control_type),
POINTER :: dft_control
197 TYPE(ecoul_1center_type),
DIMENSION(:),
POINTER :: ecoul_1c
198 TYPE(local_rho_type),
POINTER :: local_rho_set
199 TYPE(lri_density_type),
POINTER :: lri_density
200 TYPE(lri_environment_type),
POINTER :: lri_env
201 TYPE(lri_kind_type),
DIMENSION(:),
POINTER :: lri_v_int
202 TYPE(mp_para_env_type),
POINTER :: para_env
203 TYPE(pw_c1d_gs_type) :: rho_tot_gspace, v_hartree_gspace
204 TYPE(pw_c1d_gs_type),
POINTER :: rho_core
205 TYPE(pw_env_type),
POINTER :: pw_env
206 TYPE(pw_poisson_type),
POINTER :: poisson_env
207 TYPE(pw_pool_type),
POINTER :: auxbas_pw_pool
208 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r, v_rspace_embed, v_rspace_new, &
209 v_rspace_new_aux_fit, v_tau_rspace, &
211 TYPE(pw_r3d_rs_type),
POINTER :: rho0_s_rs, rho_nlcc, v_hartree_rspace, &
212 v_sccs_rspace, v_sic_rspace, &
213 v_spin_ddapc_rest_r, vee, vppl_rspace
214 TYPE(qs_energy_type),
POINTER :: energy
215 TYPE(qs_ks_env_type),
POINTER :: ks_env
216 TYPE(qs_rho_type),
POINTER :: rho, rho_struct, rho_xc
217 TYPE(section_vals_type),
POINTER :: adiabatic_rescaling_section, &
218 hfx_sections, input, scf_section, &
220 TYPE(virial_type),
POINTER :: virial
222 CALL timeset(routinen, handle)
223 NULLIFY (admm_env, cell, dft_control, logger, mo_derivs, my_rho, &
224 rho_struct, para_env, pw_env, virial, vppl_rspace, &
225 adiabatic_rescaling_section, hfx_sections, &
226 input, scf_section, xc_section, matrix_h, matrix_h_im, matrix_s, &
227 auxbas_pw_pool, poisson_env, v_rspace_new, v_rspace_new_aux_fit, &
228 v_tau_rspace, v_tau_rspace_aux_fit, matrix_vxc, vee, rho_nlcc, &
229 ks_env, ks_matrix, ks_matrix_im, rho, energy, rho_xc, rho_r, rho_ao, rho_core)
231 cpassert(
ASSOCIATED(qs_env))
235 IF (
PRESENT(print_active)) my_print = print_active
239 dft_control=dft_control, &
240 matrix_h_kp=matrix_h, &
241 matrix_h_im_kp=matrix_h_im, &
242 matrix_s_kp=matrix_s, &
243 matrix_ks_kp=ks_matrix, &
244 matrix_ks_im_kp=ks_matrix_im, &
245 matrix_vxc=matrix_vxc, &
251 v_hartree_rspace=v_hartree_rspace, &
259 CALL qs_rho_get(rho, rho_r=rho_r, rho_ao_kp=rho_ao)
261 IF (
PRESENT(ext_ks_matrix))
THEN
264 ns =
SIZE(ext_ks_matrix)
265 ks_matrix(1:ns, 1:1) => ext_ks_matrix(1:ns)
268 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 nimages = dft_control%nimages
286 nspins = dft_control%nspins
287 cpassert(
ASSOCIATED(matrix_h))
288 cpassert(
ASSOCIATED(matrix_s))
289 cpassert(
ASSOCIATED(rho))
290 cpassert(
ASSOCIATED(pw_env))
291 cpassert(
SIZE(ks_matrix, 1) > 0)
295 do_ddapc = dft_control%qs_control%ddapc_restraint .OR. &
296 qs_env%cp_ddapc_ewald%do_decoupling .OR. &
297 qs_env%cp_ddapc_ewald%do_qmmm_periodic_decpl .OR. &
298 qs_env%cp_ddapc_ewald%do_solvation
301 lrigpw = dft_control%qs_control%lrigpw
302 rigpw = dft_control%qs_control%rigpw
304 cpassert(nimages == 1)
306 IF (lrigpw .AND. rigpw)
THEN
307 cpabort(
" LRI and RI are not compatible")
311 gapw = dft_control%qs_control%gapw
312 gapw_xc = dft_control%qs_control%gapw_xc
313 IF (gapw_xc .AND. gapw)
THEN
314 cpabort(
" GAPW and GAPW_XC are not compatible")
316 IF ((gapw .AND. lrigpw) .OR. (gapw_xc .AND. lrigpw))
THEN
317 cpabort(
" GAPW/GAPW_XC and LRIGPW are not compatible")
319 IF ((gapw .AND. rigpw) .OR. (gapw_xc .AND. rigpw))
THEN
320 cpabort(
" GAPW/GAPW_XC and RIGPW are not compatible")
323 do_ppl = dft_control%qs_control%do_ppl_method ==
do_ppl_grid
326 CALL get_qs_env(qs_env=qs_env, vppl=vppl_rspace)
330 cpassert(
ASSOCIATED(rho_xc))
334 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, poisson_env=poisson_env)
337 cpabort(
"The implicit Poisson solver cannot be used in conjunction with GAPW.")
341 IF (gapw .OR. gapw_xc)
THEN
346 CALL auxbas_pw_pool%create_pw(v_hartree_gspace)
347 CALL auxbas_pw_pool%create_pw(rho_tot_gspace)
351 "PRINT%DETAILED_ENERGY"), &
353 (.NOT. gapw) .AND. (.NOT. gapw_xc) .AND. &
355 CALL pw_zero(rho_tot_gspace)
357 CALL pw_poisson_solve(poisson_env, rho_tot_gspace, energy%e_hartree, &
359 CALL pw_zero(rho_tot_gspace)
360 CALL pw_zero(v_hartree_gspace)
370 IF (dft_control%do_sccs)
THEN
372 NULLIFY (v_sccs_rspace)
373 ALLOCATE (v_sccs_rspace)
374 CALL auxbas_pw_pool%create_pw(v_sccs_rspace)
377 cpabort(
"The implicit Poisson solver cannot be used together with SCCS.")
380 IF (use_virial .AND. calculate_forces)
THEN
381 CALL sccs(qs_env, rho_tot_gspace, v_hartree_gspace, v_sccs_rspace, &
383 virial%pv_ehartree = virial%pv_ehartree + h_stress/real(para_env%num_pe,
dp)
384 virial%pv_virial = virial%pv_virial + h_stress/real(para_env%num_pe,
dp)
386 CALL sccs(qs_env, rho_tot_gspace, v_hartree_gspace, v_sccs_rspace)
391 IF (use_virial .AND. calculate_forces)
THEN
392 h_stress(:, :) = 0.0_dp
393 CALL pw_poisson_solve(poisson_env, rho_tot_gspace, energy%hartree, &
394 v_hartree_gspace, h_stress=h_stress, &
396 virial%pv_ehartree = virial%pv_ehartree + h_stress/real(para_env%num_pe,
dp)
397 virial%pv_virial = virial%pv_virial + h_stress/real(para_env%num_pe,
dp)
399 CALL pw_poisson_solve(poisson_env, rho_tot_gspace, energy%hartree, &
400 v_hartree_gspace, rho_core=rho_core)
406 CALL qs_ks_ddapc(qs_env, auxbas_pw_pool, rho_tot_gspace, v_hartree_gspace, &
407 v_spin_ddapc_rest_r, energy, calculate_forces, ks_matrix, &
410 dft_control%qs_control%ddapc_explicit_potential = .false.
411 dft_control%qs_control%ddapc_restraint_is_spin = .false.
412 IF (.NOT. just_energy)
THEN
413 CALL pw_transfer(v_hartree_gspace, v_hartree_rspace)
414 CALL pw_scale(v_hartree_rspace, v_hartree_rspace%pw_grid%dvol)
417 CALL auxbas_pw_pool%give_back_pw(v_hartree_gspace)
419 IF (dft_control%correct_surf_dip)
THEN
420 IF (dft_control%surf_dip_correct_switch)
THEN
422 energy%hartree = energy%hartree + energy%surf_dipole
427 CALL calc_v_sic_rspace(v_sic_rspace, energy, qs_env, dft_control, rho, poisson_env, &
428 just_energy, calculate_forces, auxbas_pw_pool)
431 CALL get_qs_env(qs_env, ecoul_1c=ecoul_1c, local_rho_set=local_rho_set)
432 CALL vh_1c_gg_integrals(qs_env, energy%hartree_1c, ecoul_1c, local_rho_set, para_env, tddft=.false., &
440 IF (dft_control%apply_external_potential)
THEN
444 ee_ener = ee_ener + pw_integral_ab(rho_r(ispin), vee)
446 IF (.NOT. just_energy)
THEN
450 cpassert(
ASSOCIATED(rho0_s_rs))
451 ee_ener = ee_ener + pw_integral_ab(rho0_s_rs, vee)
459 IF (qs_env%qmmm)
THEN
462 v_qmmm=qs_env%ks_qmmm_env%v_qmmm_rspace, &
463 qmmm_energy=energy%qmmm_el)
464 IF (qs_env%qmmm_env_qm%image_charge)
THEN
466 rho_hartree_gspace=rho_tot_gspace, &
468 qmmm_env=qs_env%qmmm_env_qm, &
470 IF (.NOT. just_energy)
THEN
472 v_metal=qs_env%ks_qmmm_env%v_metal_rspace, &
474 IF (calculate_forces)
THEN
476 potential=v_hartree_rspace, coeff=qs_env%image_coeff, &
477 forces=qs_env%qmmm_env_qm%image_charge_pot%image_forcesMM, &
478 qmmm_env=qs_env%qmmm_env_qm, qs_env=qs_env)
481 CALL qs_env%ks_qmmm_env%v_metal_rspace%release()
482 DEALLOCATE (qs_env%ks_qmmm_env%v_metal_rspace)
484 IF (.NOT. just_energy)
THEN
486 v_qmmm=qs_env%ks_qmmm_env%v_qmmm_rspace, scale=1.0_dp)
489 CALL auxbas_pw_pool%give_back_pw(rho_tot_gspace)
492 IF (dft_control%do_admm)
THEN
495 IF (dft_control%do_admm_mo)
THEN
496 IF (qs_env%run_rtp)
THEN
505 ELSEIF (dft_control%do_admm_dm)
THEN
511 IF (use_virial .AND. calculate_forces) virial%pv_calculate = .true.
516 IF (dft_control%do_admm)
THEN
518 xc_section => admm_env%xc_section_aux
522 CALL qs_vxc_create(ks_env=ks_env, rho_struct=rho_struct, xc_section=xc_section, &
523 vxc_rho=v_rspace_new_aux_fit, vxc_tau=v_tau_rspace_aux_fit, exc=energy%exc_aux_fit, &
524 just_energy=just_energy_xc)
526 IF (admm_env%do_gapw)
THEN
528 CALL calculate_vxc_atom(qs_env, energy_only=just_energy_xc, exc1=energy%exc1_aux_fit, &
529 kind_set_external=admm_env%admm_gapw_env%admm_kind_set, &
530 xc_section_external=xc_section, &
531 rho_atom_set_external=admm_env%admm_gapw_env%local_rho_set%rho_atom_set)
537 IF (use_virial .AND. calculate_forces)
THEN
540 IF (admm_env%do_admms) vscale = admm_env%gsi(1)**(2.0_dp/3.0_dp)
541 IF (admm_env%do_admmp) vscale = admm_env%gsi(1)**2
542 virial%pv_exc = virial%pv_exc - vscale*virial%pv_xc
543 virial%pv_virial = virial%pv_virial - vscale*virial%pv_xc
546 xc_section => admm_env%xc_section_primary
552 CALL get_qs_env(qs_env=qs_env, rho_xc=rho_struct)
554 CALL get_qs_env(qs_env=qs_env, rho=rho_struct)
558 IF (dft_control%apply_external_density .OR. dft_control%apply_external_vxc)
THEN
563 IF (dft_control%apply_embed_pot)
THEN
564 NULLIFY (v_rspace_embed)
565 energy%embed_corr = 0.0_dp
567 energy%embed_corr, just_energy)
570 CALL qs_vxc_create(ks_env=ks_env, rho_struct=rho_struct, xc_section=xc_section, &
571 vxc_rho=v_rspace_new, vxc_tau=v_tau_rspace, exc=energy%exc, &
572 edisp=edisp, dispersion_env=qs_env%dispersion_env, &
573 just_energy=just_energy_xc)
574 IF (edisp /= 0.0_dp) energy%dispersion = edisp
575 IF (qs_env%requires_matrix_vxc .AND.
ASSOCIATED(v_rspace_new))
THEN
577 CALL set_ks_env(ks_env, matrix_vxc=matrix_vxc)
580 IF (gapw .OR. gapw_xc)
THEN
581 CALL calculate_vxc_atom(qs_env, just_energy_xc, energy%exc1, xc_section_external=xc_section)
583 IF (use_virial .AND. calculate_forces)
THEN
584 IF (
ASSOCIATED(v_tau_rspace))
THEN
585 cpabort(
"MGGA STRESS with GAPW/GAPW_XC not implemneted")
593 IF (use_virial .AND. calculate_forces)
THEN
594 virial%pv_exc = virial%pv_exc - virial%pv_xc
595 virial%pv_virial = virial%pv_virial - virial%pv_xc
603 CALL hfx_ks_matrix(qs_env, ks_matrix, rho, energy, calculate_forces, &
604 just_energy, v_rspace_new, v_tau_rspace)
609 IF (do_ppl .AND. calculate_forces)
THEN
612 CALL integrate_ppl_rspace(rho_r(ispin), qs_env)
616 IF (
ASSOCIATED(rho_nlcc) .AND. calculate_forces)
THEN
618 CALL integrate_rho_nlcc(v_rspace_new(ispin), qs_env)
619 IF (dft_control%do_admm)
CALL integrate_rho_nlcc(v_rspace_new_aux_fit(ispin), qs_env)
624 IF (dft_control%qs_control%do_kg .AND. just_energy)
THEN
626 cpassert(.NOT. (gapw .OR. gapw_xc))
627 cpassert(nimages == 1)
628 ksmat => ks_matrix(:, 1)
629 CALL kg_ekin_subset(qs_env, ksmat, ekin_mol, calculate_forces, do_kernel=.false.)
632 energy%exc = energy%exc - ekin_mol
637 IF (.NOT. just_energy)
THEN
638 IF (calculate_forces)
THEN
641 (poisson_env%parameters%dielectric_params%dielec_core_correction))
THEN
643 TYPE(pw_r3d_rs_type) :: v_minus_veps
644 CALL auxbas_pw_pool%create_pw(v_minus_veps)
645 CALL pw_copy(v_hartree_rspace, v_minus_veps)
646 CALL pw_axpy(poisson_env%implicit_env%v_eps, v_minus_veps, -v_hartree_rspace%pw_grid%dvol)
647 CALL integrate_v_core_rspace(v_minus_veps, qs_env)
648 CALL auxbas_pw_pool%give_back_pw(v_minus_veps)
651 CALL integrate_v_core_rspace(v_hartree_rspace, qs_env)
655 IF (.NOT. do_hfx)
THEN
660 CALL dbcsr_get_info(ks_matrix(ispin, img)%matrix, name=name)
661 CALL dbcsr_copy(ks_matrix(ispin, img)%matrix, matrix_h(1, img)%matrix, name=name)
665 IF (qs_env%run_rtp)
THEN
666 IF (dft_control%rtp_control%velocity_gauge)
THEN
667 cpassert(
ASSOCIATED(matrix_h_im))
668 cpassert(
ASSOCIATED(ks_matrix_im))
671 CALL dbcsr_get_info(ks_matrix_im(ispin, img)%matrix, name=name)
672 CALL dbcsr_copy(ks_matrix_im(ispin, img)%matrix, matrix_h_im(1, img)%matrix, name=name)
679 IF (use_virial .AND. calculate_forces)
THEN
680 pv_loc = virial%pv_virial
687 v_rspace_new, v_rspace_new_aux_fit, v_tau_rspace, v_tau_rspace_aux_fit, &
688 v_sic_rspace, v_spin_ddapc_rest_r, v_sccs_rspace, v_rspace_embed, &
689 cdft_control, calculate_forces)
691 IF (use_virial .AND. calculate_forces)
THEN
692 virial%pv_ehartree = virial%pv_ehartree + (virial%pv_virial - pv_loc)
694 IF (dft_control%qs_control%do_kg)
THEN
695 cpassert(.NOT. (gapw .OR. gapw_xc))
696 cpassert(nimages == 1)
697 ksmat => ks_matrix(:, 1)
699 IF (use_virial .AND. calculate_forces)
THEN
700 pv_loc = virial%pv_virial
703 CALL kg_ekin_subset(qs_env, ksmat, ekin_mol, calculate_forces, do_kernel=.false.)
705 energy%exc = energy%exc - ekin_mol
708 IF (use_virial .AND. calculate_forces)
THEN
711 virial%pv_ehartree = virial%pv_ehartree + (virial%pv_virial - pv_loc)
714 virial%pv_exc = virial%pv_exc + virial%pv_xc
715 virial%pv_virial = virial%pv_virial + virial%pv_xc
716 virial%pv_xc = 0.0_dp
723 cpwarn(
"KS matrix not longer correct. Check possible problems with property calculations!")
728 IF (dft_control%qs_control%ddapc_explicit_potential)
THEN
729 CALL auxbas_pw_pool%give_back_pw(v_spin_ddapc_rest_r)
730 DEALLOCATE (v_spin_ddapc_rest_r)
733 IF (calculate_forces .AND. dft_control%qs_control%cdft)
THEN
734 IF (.NOT. cdft_control%transfer_pot)
THEN
735 DO iatom = 1,
SIZE(cdft_control%group)
736 CALL auxbas_pw_pool%give_back_pw(cdft_control%group(iatom)%weight)
737 DEALLOCATE (cdft_control%group(iatom)%weight)
739 IF (cdft_control%atomic_charges)
THEN
740 DO iatom = 1, cdft_control%natoms
741 CALL auxbas_pw_pool%give_back_pw(cdft_control%charge(iatom))
743 DEALLOCATE (cdft_control%charge)
746 cdft_control%becke_control%cavity_confine)
THEN
747 IF (.NOT.
ASSOCIATED(cdft_control%becke_control%cavity_mat))
THEN
748 CALL auxbas_pw_pool%give_back_pw(cdft_control%becke_control%cavity)
750 DEALLOCATE (cdft_control%becke_control%cavity_mat)
753 IF (
ASSOCIATED(cdft_control%hirshfeld_control%hirshfeld_env%fnorm))
THEN
754 CALL auxbas_pw_pool%give_back_pw(cdft_control%hirshfeld_control%hirshfeld_env%fnorm)
757 IF (
ASSOCIATED(cdft_control%charges_fragment))
DEALLOCATE (cdft_control%charges_fragment)
758 cdft_control%save_pot = .false.
759 cdft_control%need_pot = .true.
760 cdft_control%external_control = .false.
764 IF (dft_control%do_sccs)
THEN
765 CALL auxbas_pw_pool%give_back_pw(v_sccs_rspace)
766 DEALLOCATE (v_sccs_rspace)
770 IF (dft_control%apply_external_potential)
THEN
773 v_qmmm=vee, scale=-1.0_dp)
778 IF (gapw .OR. gapw_xc)
THEN
781 IF (dft_control%do_admm)
THEN
790 ks_matrix, matrix_s, rho, mulliken_order_p)
793 IF (dft_control%dft_plus_u)
THEN
794 cpassert(nimages == 1)
795 IF (just_energy)
THEN
796 CALL plus_u(qs_env=qs_env)
798 ksmat => ks_matrix(:, 1)
799 CALL plus_u(qs_env=qs_env, matrix_h=ksmat)
802 energy%dft_plus_u = 0.0_dp
808 CALL dbcsr_filter(ks_matrix(ispin, img)%matrix, &
809 dft_control%qs_control%eps_filter_matrix)
814 IF (dft_control%do_admm_mo)
THEN
815 IF (qs_env%run_rtp)
THEN
820 ELSEIF (dft_control%do_admm_dm)
THEN
831 IF (qs_env%requires_mo_derivs .AND. .NOT. just_energy .AND. .NOT. qs_env%run_rtp)
THEN
833 cpassert(nimages == 1)
834 ksmat => ks_matrix(:, 1)
835 CALL calc_mo_derivatives(qs_env, ksmat, mo_derivs)
839 IF (calculate_forces .AND. dft_control%do_admm)
THEN
848 CALL low_spin_roks(energy, qs_env, dft_control, do_hfx, just_energy, &
849 calculate_forces, auxbas_pw_pool)
853 calculate_forces, auxbas_pw_pool)
860 energy, calculate_forces, just_energy)
866 ecore_ppl = ecore_ppl + pw_integral_ab(vppl_rspace, rho_r(ispin))
868 energy%core = energy%core + ecore_ppl
873 CALL get_qs_env(qs_env, lri_env=lri_env, lri_density=lri_density)
874 IF (lri_env%ppl_ri)
THEN
877 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
880 energy%core = energy%core + ecore_ppl
885 energy%total = energy%core_overlap + energy%core_self + energy%core + energy%hartree + &
886 energy%hartree_1c + energy%exc + energy%exc1 + energy%ex + &
887 energy%dispersion + energy%gcp + energy%qmmm_el + energy%mulliken + &
888 sum(energy%ddapc_restraint) + energy%s2_restraint + &
889 energy%dft_plus_u + energy%kTS + &
890 energy%efield + energy%efield_core + energy%ee + &
891 energy%ee_core + energy%exc_aux_fit + energy%image_charge + &
892 energy%sccs_pol + energy%cdft + energy%exc1_aux_fit
894 IF (dft_control%apply_embed_pot) energy%total = energy%total + energy%embed_corr
897 cpabort(
"KS energy is an abnormal value (NaN/Inf).")
904 CALL timestop(handle)
916 TYPE(pw_c1d_gs_type),
INTENT(INOUT) :: rho_tot_gspace
917 TYPE(qs_environment_type),
POINTER :: qs_env
918 TYPE(qs_rho_type),
POINTER :: rho
919 LOGICAL,
INTENT(IN),
OPTIONAL :: skip_nuclear_density
923 TYPE(dft_control_type),
POINTER :: dft_control
924 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_g
925 TYPE(pw_c1d_gs_type),
POINTER :: rho0_s_gs, rho_core
926 TYPE(qs_charges_type),
POINTER :: qs_charges
929 IF (
PRESENT(skip_nuclear_density)) my_skip = skip_nuclear_density
931 CALL qs_rho_get(rho, rho_g=rho_g)
932 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
934 IF (.NOT. my_skip)
THEN
936 CALL get_qs_env(qs_env=qs_env, rho_core=rho_core)
937 IF (dft_control%qs_control%gapw)
THEN
939 CALL get_qs_env(qs_env=qs_env, rho0_s_gs=rho0_s_gs)
940 cpassert(
ASSOCIATED(rho0_s_gs))
941 CALL pw_copy(rho0_s_gs, rho_tot_gspace)
942 IF (dft_control%qs_control%gapw_control%nopaw_as_gpw)
THEN
943 CALL pw_axpy(rho_core, rho_tot_gspace)
946 CALL pw_copy(rho_core, rho_tot_gspace)
948 DO ispin = 1, dft_control%nspins
949 CALL pw_axpy(rho_g(ispin), rho_tot_gspace)
951 CALL get_qs_env(qs_env=qs_env, qs_charges=qs_charges)
952 qs_charges%total_rho_gspace = pw_integrate_function(rho_tot_gspace, isign=-1)
954 DO ispin = 1, dft_control%nspins
955 CALL pw_axpy(rho_g(ispin), rho_tot_gspace)
971 SUBROUTINE calc_mo_derivatives(qs_env, ks_matrix, mo_derivs)
972 TYPE(qs_environment_type),
POINTER :: qs_env
973 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: ks_matrix, mo_derivs
976 LOGICAL :: uniform_occupation
977 REAL(kind=dp),
DIMENSION(:),
POINTER :: occupation_numbers
978 TYPE(cp_fm_type),
POINTER :: mo_coeff
979 TYPE(dbcsr_type) :: mo_derivs2_tmp1, mo_derivs2_tmp2
980 TYPE(dbcsr_type),
POINTER :: mo_coeff_b
981 TYPE(dft_control_type),
POINTER :: dft_control
982 TYPE(mo_set_type),
DIMENSION(:),
POINTER :: mo_array
984 NULLIFY (dft_control, mo_array, mo_coeff, mo_coeff_b, occupation_numbers)
986 CALL get_qs_env(qs_env, &
987 dft_control=dft_control, &
990 DO ispin = 1,
SIZE(mo_derivs)
992 CALL get_mo_set(mo_set=mo_array(ispin), mo_coeff=mo_coeff, &
993 mo_coeff_b=mo_coeff_b, occupation_numbers=occupation_numbers)
994 CALL dbcsr_multiply(
'n',
'n', 1.0_dp, ks_matrix(ispin)%matrix, mo_coeff_b, &
995 0.0_dp, mo_derivs(ispin)%matrix)
997 IF (dft_control%restricted)
THEN
1000 cpassert(
SIZE(mo_array) == 2)
1005 CALL get_mo_set(mo_set=mo_array(1), uniform_occupation=uniform_occupation)
1006 cpassert(uniform_occupation)
1007 CALL get_mo_set(mo_set=mo_array(2), uniform_occupation=uniform_occupation)
1008 cpassert(uniform_occupation)
1012 CALL get_mo_set(mo_set=mo_array(2), mo_coeff_b=mo_coeff_b)
1013 CALL dbcsr_create(mo_derivs2_tmp1, template=mo_coeff_b)
1016 CALL dbcsr_multiply(
'n',
'n', 1.0_dp, ks_matrix(2)%matrix, mo_coeff_b, 0.0_dp, mo_derivs2_tmp1)
1019 CALL dbcsr_create(mo_derivs2_tmp2, template=mo_derivs(1)%matrix)
1020 CALL dbcsr_set(mo_derivs2_tmp2, 0.0_dp)
1023 CALL dbcsr_copy_columns_hack(mo_derivs2_tmp2, mo_derivs2_tmp1, &
1024 mo_array(2)%nmo, 1, 1, &
1025 para_env=mo_array(1)%mo_coeff%matrix_struct%para_env, &
1026 blacs_env=mo_array(1)%mo_coeff%matrix_struct%context)
1029 CALL dbcsr_add(mo_derivs(1)%matrix, mo_derivs2_tmp2, 1.0_dp, 1.0_dp)
1030 CALL dbcsr_release(mo_derivs2_tmp1)
1031 CALL dbcsr_release(mo_derivs2_tmp2)
1035 IF (dft_control%do_admm_mo)
THEN
1036 CALL calc_admm_mo_derivatives(qs_env, mo_derivs)
1039 END SUBROUTINE calc_mo_derivatives
1057 TYPE(qs_environment_type),
POINTER :: qs_env
1058 LOGICAL,
INTENT(IN),
OPTIONAL :: calculate_forces, just_energy, &
1061 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_ks_update_qs_env'
1063 INTEGER :: handle, unit_nr
1064 LOGICAL :: c_forces, do_rebuild, energy_only, &
1065 forces_up_to_date, potential_changed, &
1066 rho_changed, s_mstruct_changed
1067 TYPE(qs_ks_env_type),
POINTER :: ks_env
1070 unit_nr = cp_logger_get_default_io_unit()
1073 energy_only = .false.
1074 IF (
PRESENT(just_energy)) energy_only = just_energy
1075 IF (
PRESENT(calculate_forces)) c_forces = calculate_forces
1078 CALL timeset(routinen//
'_forces', handle)
1080 CALL timeset(routinen, handle)
1083 cpassert(
ASSOCIATED(qs_env))
1085 CALL get_qs_env(qs_env, &
1087 rho_changed=rho_changed, &
1088 s_mstruct_changed=s_mstruct_changed, &
1089 potential_changed=potential_changed, &
1090 forces_up_to_date=forces_up_to_date)
1092 do_rebuild = .false.
1093 do_rebuild = do_rebuild .OR. rho_changed
1094 do_rebuild = do_rebuild .OR. s_mstruct_changed
1095 do_rebuild = do_rebuild .OR. potential_changed
1096 do_rebuild = do_rebuild .OR. (c_forces .AND. .NOT. forces_up_to_date)
1098 IF (do_rebuild)
THEN
1099 CALL evaluate_core_matrix_traces(qs_env)
1102 CALL set_ks_env(ks_env, potential_changed=.false.)
1104 CALL rebuild_ks_matrix(qs_env, &
1105 calculate_forces=c_forces, &
1106 just_energy=energy_only, &
1107 print_active=print_active)
1109 IF (.NOT. energy_only)
THEN
1110 CALL set_ks_env(ks_env, &
1111 rho_changed=.false., &
1112 s_mstruct_changed=.false., &
1113 forces_up_to_date=forces_up_to_date .OR. c_forces)
1117 CALL timestop(handle)
1126 SUBROUTINE evaluate_core_matrix_traces(qs_env)
1127 TYPE(qs_environment_type),
POINTER :: qs_env
1129 CHARACTER(LEN=*),
PARAMETER :: routinen =
'evaluate_core_matrix_traces'
1132 REAL(kind=dp) :: energy_core_im
1133 TYPE(dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrixkp_h, matrixkp_t, rho_ao_kp
1134 TYPE(dft_control_type),
POINTER :: dft_control
1135 TYPE(qs_energy_type),
POINTER :: energy
1136 TYPE(qs_rho_type),
POINTER :: rho
1138 CALL timeset(routinen, handle)
1139 NULLIFY (energy, rho, dft_control, rho_ao_kp, matrixkp_t, matrixkp_h)
1141 CALL get_qs_env(qs_env, &
1144 dft_control=dft_control, &
1145 kinetic_kp=matrixkp_t, &
1146 matrix_h_kp=matrixkp_h)
1148 CALL qs_rho_get(rho, rho_ao_kp=rho_ao_kp)
1150 CALL calculate_ptrace(matrixkp_h, rho_ao_kp, energy%core, dft_control%nspins)
1153 IF (qs_env%run_rtp)
THEN
1154 IF (dft_control%rtp_control%velocity_gauge)
THEN
1155 CALL get_qs_env(qs_env, matrix_h_im_kp=matrixkp_h)
1156 CALL qs_rho_get(rho, rho_ao_im_kp=rho_ao_kp)
1157 CALL calculate_ptrace(matrixkp_h, rho_ao_kp, energy_core_im, dft_control%nspins)
1158 energy%core = energy%core - energy_core_im
1163 IF (
ASSOCIATED(matrixkp_t)) &
1164 CALL calculate_ptrace(matrixkp_t, rho_ao_kp, energy%kinetic, dft_control%nspins)
1166 CALL timestop(handle)
1167 END SUBROUTINE evaluate_core_matrix_traces
1177 SUBROUTINE rebuild_ks_matrix(qs_env, calculate_forces, just_energy, print_active)
1178 TYPE(qs_environment_type),
POINTER :: qs_env
1179 LOGICAL,
INTENT(IN) :: calculate_forces, just_energy
1180 LOGICAL,
INTENT(IN),
OPTIONAL :: print_active
1182 CHARACTER(LEN=*),
PARAMETER :: routinen =
'rebuild_ks_matrix'
1185 TYPE(dft_control_type),
POINTER :: dft_control
1187 CALL timeset(routinen, handle)
1188 NULLIFY (dft_control)
1190 CALL get_qs_env(qs_env, dft_control=dft_control)
1192 IF (dft_control%qs_control%semi_empirical)
THEN
1193 CALL build_se_fock_matrix(qs_env, &
1194 calculate_forces=calculate_forces, &
1195 just_energy=just_energy)
1197 ELSEIF (dft_control%qs_control%dftb)
THEN
1198 CALL build_dftb_ks_matrix(qs_env, &
1199 calculate_forces=calculate_forces, &
1200 just_energy=just_energy)
1202 ELSEIF (dft_control%qs_control%xtb)
THEN
1203 CALL build_xtb_ks_matrix(qs_env, &
1204 calculate_forces=calculate_forces, &
1205 just_energy=just_energy)
1209 calculate_forces=calculate_forces, &
1210 just_energy=just_energy, &
1211 print_active=print_active)
1214 CALL timestop(handle)
1216 END SUBROUTINE rebuild_ks_matrix
1228 TYPE(qs_environment_type),
POINTER :: qs_env
1229 LOGICAL,
INTENT(in) :: is_complex
1231 CHARACTER(LEN=default_string_length) :: headline
1232 INTEGER :: ic, ispin, nimages, nspins
1233 LOGICAL :: do_kpoints
1234 TYPE(dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s_kp, matrixkp_im_ks, matrixkp_ks
1235 TYPE(dbcsr_type),
POINTER :: refmatrix
1236 TYPE(dft_control_type),
POINTER :: dft_control
1237 TYPE(kpoint_type),
POINTER :: kpoints
1238 TYPE(neighbor_list_set_p_type),
DIMENSION(:), &
1240 TYPE(qs_ks_env_type),
POINTER :: ks_env
1242 NULLIFY (dft_control, ks_env, matrix_s_kp, sab_orb, matrixkp_ks, refmatrix, matrixkp_im_ks, kpoints)
1244 CALL get_qs_env(qs_env, &
1245 dft_control=dft_control, &
1246 matrix_s_kp=matrix_s_kp, &
1249 do_kpoints=do_kpoints, &
1250 matrix_ks_kp=matrixkp_ks, &
1251 matrix_ks_im_kp=matrixkp_im_ks)
1253 IF (do_kpoints)
THEN
1254 CALL get_kpoint_info(kpoints, sab_nl=sab_orb)
1256 CALL get_qs_env(qs_env, sab_orb=sab_orb)
1259 nspins = dft_control%nspins
1260 nimages = dft_control%nimages
1262 IF (.NOT.
ASSOCIATED(matrixkp_ks))
THEN
1263 CALL dbcsr_allocate_matrix_set(matrixkp_ks, nspins, nimages)
1264 refmatrix => matrix_s_kp(1, 1)%matrix
1265 DO ispin = 1, nspins
1267 IF (nspins > 1)
THEN
1268 IF (ispin == 1)
THEN
1269 headline =
"KOHN-SHAM MATRIX FOR ALPHA SPIN"
1271 headline =
"KOHN-SHAM MATRIX FOR BETA SPIN"
1274 headline =
"KOHN-SHAM MATRIX"
1276 ALLOCATE (matrixkp_ks(ispin, ic)%matrix)
1277 CALL dbcsr_create(matrix=matrixkp_ks(ispin, ic)%matrix, template=refmatrix, &
1278 name=trim(headline), matrix_type=dbcsr_type_symmetric, nze=0)
1279 CALL cp_dbcsr_alloc_block_from_nbl(matrixkp_ks(ispin, ic)%matrix, sab_orb)
1280 CALL dbcsr_set(matrixkp_ks(ispin, ic)%matrix, 0.0_dp)
1283 CALL set_ks_env(ks_env, matrix_ks_kp=matrixkp_ks)
1286 IF (is_complex)
THEN
1287 IF (.NOT.
ASSOCIATED(matrixkp_im_ks))
THEN
1288 cpassert(nspins .EQ.
SIZE(matrixkp_ks, 1))
1289 cpassert(nimages .EQ.
SIZE(matrixkp_ks, 2))
1290 CALL dbcsr_allocate_matrix_set(matrixkp_im_ks, nspins, nimages)
1291 DO ispin = 1, nspins
1293 IF (nspins > 1)
THEN
1294 IF (ispin == 1)
THEN
1295 headline =
"IMAGINARY KOHN-SHAM MATRIX FOR ALPHA SPIN"
1297 headline =
"IMAGINARY KOHN-SHAM MATRIX FOR BETA SPIN"
1300 headline =
"IMAGINARY KOHN-SHAM MATRIX"
1302 ALLOCATE (matrixkp_im_ks(ispin, ic)%matrix)
1303 refmatrix => matrixkp_ks(ispin, ic)%matrix
1304 CALL dbcsr_create(matrix=matrixkp_im_ks(ispin, ic)%matrix, template=refmatrix, &
1305 name=trim(headline), matrix_type=dbcsr_type_antisymmetric, nze=0)
1306 CALL cp_dbcsr_alloc_block_from_nbl(matrixkp_im_ks(ispin, ic)%matrix, sab_orb)
1307 CALL dbcsr_set(matrixkp_im_ks(ispin, ic)%matrix, 0.0_dp)
1310 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...
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_ks_matrix(qs_env, matrix_ks, rho, energy, calculate_forces, just_energy, v_rspace_new, v_tau_rspace)
Add the hfx contributions to the Hamiltonian.
subroutine, public hfx_admm_init(qs_env, calculate_forces)
...
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, 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_nonbond, sab_almo, sab_kp, sab_kp_nosym, 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, ecoul_1c, rho0_s_rs, rho0_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, 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, rhs)
Get the QUICKSTEP environment.
subroutine, public prepare_gapw_den(qs_env, local_rho_set, do_rho0, kind_set_external)
...
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 qs_ks_build_kohn_sham_matrix(qs_env, calculate_forces, just_energy, print_active, ext_ks_matrix)
routine where the real calculations are made: the KS matrix is calculated
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 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_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, 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)
...
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.
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, gradient_atom_set, 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 calc_dipsurf_potential(qs_env, energy)
compute the surface dipole and the correction to the hartree potential
Calculation of Overlap and Hamiltonian matrices in xTB Reference: Stefan Grimme, Christoph Bannwarth,...
subroutine, public build_xtb_ks_matrix(qs_env, calculate_forces, just_energy, ext_ks_matrix)
...