51 integrate_v_rspace_one_center
64#include "./base/base_uses.f90"
70 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'kg_correction'
90 SUBROUTINE kg_ekin_subset(qs_env, ks_matrix, ekin_mol, calc_force, do_kernel, pmat_ext)
93 REAL(kind=
dp),
INTENT(out) :: ekin_mol
94 LOGICAL,
INTENT(IN) :: calc_force, do_kernel
102 CALL get_qs_env(qs_env, kg_env=kg_env, dft_control=dft_control)
103 lrigpw = dft_control%qs_control%lrigpw
106 kg_uses_kinetic_energy_density(kg_env, dft_control%lsd))
THEN
107 cpabort(
"KG LRI/RI embedding with meta-kinetic energy functionals not implemented")
111 CALL kg_ekin_embed_lri(qs_env, kg_env, ks_matrix, ekin_mol, calc_force)
113 CALL kg_ekin_embed(qs_env, kg_env, ks_matrix, ekin_mol, calc_force, &
117 CALL kg_ekin_ri_embed(qs_env, kg_env, ks_matrix, ekin_mol, calc_force, &
120 CALL kg_ekin_atomic(qs_env, ks_matrix, ekin_mol)
124 cpabort(
"Unknown KG embedding method")
135 FUNCTION kg_uses_kinetic_energy_density(kg_env, lsd)
RESULT(res)
137 LOGICAL,
INTENT(IN) :: lsd
144 IF (.NOT.
ASSOCIATED(kg_env%xc_section_kg))
RETURN
150 END FUNCTION kg_uses_kinetic_energy_density
162 SUBROUTINE kg_ekin_embed(qs_env, kg_env, ks_matrix, ekin_mol, calc_force, do_kernel, pmat_ext)
166 REAL(kind=
dp),
INTENT(out) :: ekin_mol
167 LOGICAL,
INTENT(IN) :: calc_force, do_kernel
171 CHARACTER(LEN=*),
PARAMETER :: routinen =
'kg_ekin_embed'
173 CHARACTER(LEN=10) :: basis_type
174 INTEGER :: handle, iounit, ispin, isub, nspins
175 LOGICAL :: gapw, gapw_xc, use_gapw_soft, use_virial
176 REAL(kind=
dp) :: alpha, ekin_imol
177 REAL(kind=
dp),
DIMENSION(3, 3) :: xcvirial
179 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: density_matrix
184 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho1_r, rho_r, tau1_r, vxc_rho, vxc_tau
186 TYPE(
qs_rho_type),
POINTER :: old_rho, rho1, rho1_use, rho1_xc, &
187 rho_struct, rho_use, rho_xc
191 CALL timeset(routinen, handle)
196 NULLIFY (ks_env, dft_control, old_rho, pw_env, rho1_use, rho1_xc, rho_struct, &
197 rho_use, rho_xc, virial, vxc_rho, vxc_tau)
202 dft_control=dft_control, &
205 nspins = dft_control%nspins
206 gapw = dft_control%qs_control%gapw
207 gapw_xc = dft_control%qs_control%gapw_xc
208 use_gapw_soft = gapw .OR. gapw_xc
209 IF (use_gapw_soft)
THEN
210 basis_type =
"ORB_SOFT"
214 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
215 use_virial = use_virial .AND. calc_force
222 IF (do_kernel .AND. .NOT. calc_force .AND. nspins == 1) alpha = 2.0_dp
224 NULLIFY (auxbas_pw_pool)
225 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
228 CALL qs_rho_get(old_rho, rho_ao=density_matrix)
230 ALLOCATE (rho_struct)
233 CALL qs_rho_set(rho_struct, rho_ao=density_matrix)
234 CALL qs_rho_rebuild(rho_struct, qs_env, rebuild_ao=.false., rebuild_grids=.true.)
238 CALL qs_rho_rebuild(rho_xc, qs_env, rebuild_ao=.true., rebuild_grids=.true.)
246 rho_use => rho_struct
255 IF (
PRESENT(pmat_ext))
THEN
259 CALL qs_rho_rebuild(rho1, qs_env, rebuild_ao=.false., rebuild_grids=.true.)
263 CALL qs_rho_rebuild(rho1_xc, qs_env, rebuild_ao=.true., rebuild_grids=.true.)
274 xc_section => kg_env%xc_section_kg
281 IF (use_virial) virial%pv_xc = 0.0_dp
282 CALL qs_rho_get(rho1_use, rho_r=rho1_r, rho_g=rho1_g, tau_r=tau1_r)
290 xc_section=xc_section, &
291 compute_virial=use_virial, &
292 virial_xc=virial%pv_xc)
295 rho_struct=rho_use, &
296 xc_section=xc_section, &
303 IF (
PRESENT(pmat_ext) .AND. .NOT. do_kernel)
THEN
305 CALL qs_rho_get(rho1_use, rho_r=rho1_r, tau_r=tau1_r)
311 ekin_imol = ekin_imol +
pw_integral_ab(rho1_r(ispin), vxc_rho(ispin))
312 IF (
ASSOCIATED(vxc_tau)) &
313 ekin_imol = ekin_imol +
pw_integral_ab(tau1_r(ispin), vxc_tau(ispin))
319 CALL pw_scale(vxc_rho(ispin), alpha*vxc_rho(ispin)%pw_grid%dvol)
323 CALL integrate_v_rspace(v_rspace=vxc_rho(ispin), &
324 pmat=density_matrix(ispin), hmat=ks_matrix(ispin), &
325 qs_env=qs_env, calculate_forces=calc_force, gapw=use_gapw_soft)
326 CALL auxbas_pw_pool%give_back_pw(vxc_rho(ispin))
327 IF (
ASSOCIATED(vxc_tau))
THEN
328 CALL pw_scale(vxc_tau(ispin), alpha*vxc_tau(ispin)%pw_grid%dvol)
329 CALL integrate_v_rspace(v_rspace=vxc_tau(ispin), &
330 pmat=density_matrix(ispin), hmat=ks_matrix(ispin), &
331 qs_env=qs_env, compute_tau=.true., &
332 calculate_forces=calc_force, gapw=use_gapw_soft)
333 CALL auxbas_pw_pool%give_back_pw(vxc_tau(ispin))
337 IF (
ASSOCIATED(vxc_tau))
DEALLOCATE (vxc_tau)
338 ekin_mol = -ekin_imol
339 xcvirial(1:3, 1:3) = 0.0_dp
341 xcvirial(1:3, 1:3) = xcvirial(1:3, 1:3) - virial%pv_xc(1:3, 1:3)
345 DO isub = 1, kg_env%nsubsets
350 task_list_external=kg_env%subset(isub)%task_list, &
351 task_list_external_soft=kg_env%subset(isub)%task_list)
355 task_list_external=kg_env%subset(isub)%task_list)
356 rho_use => rho_struct
359 IF (
PRESENT(pmat_ext))
THEN
362 task_list_external=kg_env%subset(isub)%task_list, &
363 task_list_external_soft=kg_env%subset(isub)%task_list)
367 task_list_external=kg_env%subset(isub)%task_list)
373 NULLIFY (vxc_rho, vxc_tau)
381 IF (use_virial) virial%pv_xc = 0.0_dp
382 CALL qs_rho_get(rho1_use, rho_r=rho1_r, rho_g=rho1_g, tau_r=tau1_r)
390 xc_section=xc_section, &
391 compute_virial=use_virial, &
392 virial_xc=virial%pv_xc)
395 rho_struct=rho_use, &
396 xc_section=xc_section, &
403 IF (
PRESENT(pmat_ext) .AND. .NOT. do_kernel)
THEN
405 CALL qs_rho_get(rho1_use, rho_r=rho1_r, tau_r=tau1_r)
411 ekin_imol = ekin_imol +
pw_integral_ab(rho1_r(ispin), vxc_rho(ispin))
412 IF (
ASSOCIATED(vxc_tau)) &
413 ekin_imol = ekin_imol +
pw_integral_ab(tau1_r(ispin), vxc_tau(ispin))
419 CALL pw_scale(vxc_rho(ispin), -alpha*vxc_rho(ispin)%pw_grid%dvol)
421 CALL integrate_v_rspace(v_rspace=vxc_rho(ispin), &
422 pmat=density_matrix(ispin), &
423 hmat=ks_matrix(ispin), &
425 calculate_forces=calc_force, &
426 basis_type=basis_type, &
427 task_list_external=kg_env%subset(isub)%task_list)
429 CALL auxbas_pw_pool%give_back_pw(vxc_rho(ispin))
430 IF (
ASSOCIATED(vxc_tau))
THEN
431 CALL pw_scale(vxc_tau(ispin), -alpha*vxc_tau(ispin)%pw_grid%dvol)
432 CALL integrate_v_rspace(v_rspace=vxc_tau(ispin), &
433 pmat=density_matrix(ispin), &
434 hmat=ks_matrix(ispin), &
436 compute_tau=.true., &
437 calculate_forces=calc_force, &
438 basis_type=basis_type, &
439 task_list_external=kg_env%subset(isub)%task_list)
441 CALL auxbas_pw_pool%give_back_pw(vxc_tau(ispin))
445 IF (
ASSOCIATED(vxc_tau))
DEALLOCATE (vxc_tau)
447 ekin_mol = ekin_mol + ekin_imol
450 xcvirial(1:3, 1:3) = xcvirial(1:3, 1:3) + virial%pv_xc(1:3, 1:3)
456 virial%pv_xc(1:3, 1:3) = xcvirial(1:3, 1:3)
462 DEALLOCATE (rho_struct)
463 IF (
ASSOCIATED(rho_xc))
THEN
467 IF (
PRESENT(pmat_ext))
THEN
471 IF (
ASSOCIATED(rho1_xc))
THEN
477 CALL timestop(handle)
479 END SUBROUTINE kg_ekin_embed
489 SUBROUTINE kg_ekin_embed_lri(qs_env, kg_env, ks_matrix, ekin_mol, calc_force)
493 REAL(kind=
dp),
INTENT(out) :: ekin_mol
494 LOGICAL :: calc_force
496 CHARACTER(LEN=*),
PARAMETER :: routinen =
'kg_ekin_embed_lri'
498 INTEGER :: color, handle, iatom, ikind, imol, &
499 ispin, isub, natom, nkind, nspins
500 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atomlist
501 LOGICAL :: use_virial
502 REAL(kind=
dp) :: ekin_imol
503 REAL(kind=
dp),
DIMENSION(3, 3) :: xcvirial
505 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: density_matrix, ksmat
519 CALL timeset(routinen, handle)
521 NULLIFY (vxc_rho, vxc_tau, old_rho, rho_struct, ks_env)
523 CALL get_qs_env(qs_env, dft_control=dft_control)
530 dft_control=dft_control, &
535 nspins = dft_control%nspins
536 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
537 use_virial = use_virial .AND. calc_force
539 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
542 CALL qs_rho_get(old_rho, rho_ao=density_matrix)
544 ALLOCATE (rho_struct)
547 CALL qs_rho_set(rho_struct, rho_ao=density_matrix)
548 CALL qs_rho_rebuild(rho_struct, qs_env, rebuild_ao=.false., rebuild_grids=.true.)
550 CALL get_qs_env(qs_env, lri_env=lri_env, lri_density=lri_density, nkind=nkind)
551 IF (lri_env%exact_1c_terms)
THEN
552 cpabort(
" KG with LRI and exact one-center terms not implemented")
554 ALLOCATE (atomlist(natom))
556 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
558 lri_v_int(ikind)%v_int = 0.0_dp
560 lri_v_int(ikind)%v_dadr = 0.0_dp
561 lri_v_int(ikind)%v_dfdr = 0.0_dp
570 CALL qs_vxc_create(ks_env=ks_env, rho_struct=rho_struct, xc_section=kg_env%xc_section_kg, &
571 vxc_rho=vxc_rho, vxc_tau=vxc_tau, exc=ekin_imol)
572 IF (
ASSOCIATED(vxc_tau))
THEN
573 cpabort(
" KG with meta-kinetic energy functionals not implemented")
576 CALL pw_scale(vxc_rho(ispin), vxc_rho(ispin)%pw_grid%dvol)
577 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
578 CALL integrate_v_rspace_one_center(vxc_rho(ispin), qs_env, lri_v_int, calc_force,
"LRI_AUX")
579 CALL auxbas_pw_pool%give_back_pw(vxc_rho(ispin))
582 ekin_mol = -ekin_imol
583 xcvirial(1:3, 1:3) = 0.0_dp
584 IF (use_virial) xcvirial(1:3, 1:3) = xcvirial(1:3, 1:3) - virial%pv_xc(1:3, 1:3)
587 DO isub = 1, kg_env%nsubsets
590 imol = kg_env%atom_to_molecule(iatom)
591 color = kg_env%subset_of_mol(imol)
592 IF (color == isub) atomlist(iatom) = 1
598 CALL qs_vxc_create(ks_env=ks_env, rho_struct=rho_struct, xc_section=kg_env%xc_section_kg, &
599 vxc_rho=vxc_rho, vxc_tau=vxc_tau, exc=ekin_imol)
600 ekin_mol = ekin_mol + ekin_imol
603 CALL pw_scale(vxc_rho(ispin), -vxc_rho(ispin)%pw_grid%dvol)
604 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
605 CALL integrate_v_rspace_one_center(vxc_rho(ispin), qs_env, &
606 lri_v_int, calc_force, &
607 "LRI_AUX", atomlist=atomlist)
609 CALL auxbas_pw_pool%give_back_pw(vxc_rho(ispin))
614 xcvirial(1:3, 1:3) = xcvirial(1:3, 1:3) + virial%pv_xc(1:3, 1:3)
620 virial%pv_xc(1:3, 1:3) = xcvirial(1:3, 1:3)
623 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
626 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
628 CALL para_env%sum(lri_v_int(ikind)%v_int)
630 ksmat(1)%matrix => ks_matrix(ispin)%matrix
634 pmat(1:nspins, 1:1) => density_matrix(1:nspins)
637 DEALLOCATE (atomlist, ksmat)
642 DEALLOCATE (rho_struct)
644 CALL timestop(handle)
646 END SUBROUTINE kg_ekin_embed_lri
658 SUBROUTINE kg_ekin_ri_embed(qs_env, kg_env, ks_matrix, ekin_mol, calc_force, &
663 REAL(kind=
dp),
INTENT(out) :: ekin_mol
664 LOGICAL :: calc_force, do_kernel
668 CHARACTER(LEN=*),
PARAMETER :: routinen =
'kg_ekin_ri_embed'
670 INTEGER :: color, handle, iatom, ikind, imol, &
671 iounit, ispin, isub, natom, nkind, &
673 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atomlist
674 INTEGER,
DIMENSION(:, :, :),
POINTER :: cell_to_index
675 LOGICAL :: use_virial
676 REAL(kind=
dp) :: alpha, ekin_imol
677 REAL(kind=
dp),
DIMENSION(3, 3) :: xcvirial
680 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: density_matrix, ksmat
690 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho1_r, tau1_r, vxc_rho, vxc_tau
692 TYPE(
qs_rho_type),
POINTER :: rho, rho1, rho_struct
696 CALL timeset(routinen, handle)
706 dft_control=dft_control, &
711 nspins = dft_control%nspins
712 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
713 use_virial = use_virial .AND. calc_force
720 IF (do_kernel .AND. .NOT. calc_force .AND. nspins == 1) alpha = 2.0_dp
722 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
728 ALLOCATE (rho_struct)
731 CALL qs_rho_set(rho_struct, rho_ao=density_matrix)
732 CALL qs_rho_rebuild(rho_struct, qs_env, rebuild_ao=.false., rebuild_grids=.true.)
734 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
735 ALLOCATE (cell_to_index(1, 1, 1))
736 cell_to_index(1, 1, 1) = 1
737 lri_env => kg_env%lri_env
738 lri_density => kg_env%lri_density
741 ALLOCATE (pmat(nspins, 1))
743 pmat(ispin, 1)%matrix => density_matrix(ispin)%matrix
746 rho_struct, atomic_kind_set, para_env, response_density=.false.)
747 kg_env%lri_density => lri_density
751 IF (
PRESENT(pmat_ext))
THEN
759 CALL qs_rho_rebuild(rho1, qs_env, rebuild_ao=.false., rebuild_grids=.true.)
761 lri_env1 => kg_env%lri_env1
762 lri_rho1 => kg_env%lri_rho1
765 ALLOCATE (pmat(nspins, 1))
767 pmat(ispin, 1)%matrix => pmat_ext(ispin)%matrix
770 rho1, atomic_kind_set, para_env, response_density=.false.)
771 kg_env%lri_rho1 => lri_rho1
778 xc_section => kg_env%xc_section_kg
782 NULLIFY (vxc_rho, vxc_tau)
788 CALL qs_rho_get(rho1, rho_r=rho1_r, rho_g=rho1_g, tau_r=tau1_r)
796 xc_section=xc_section)
800 rho_struct=rho_struct, &
801 xc_section=xc_section, &
808 IF (
ASSOCIATED(vxc_tau))
THEN
809 cpabort(
" KG with meta-kinetic energy functionals not implemented")
813 CALL pw_scale(vxc_rho(ispin), alpha*vxc_rho(ispin)%pw_grid%dvol)
815 IF (
PRESENT(pmat_ext) .AND. .NOT. do_kernel)
THEN
817 lri_v_int => lri_rho1%lri_coefs(ispin)%lri_kinds
820 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
822 CALL integrate_v_rspace_one_center(vxc_rho(ispin), qs_env, lri_v_int, calc_force,
"LRI_AUX")
823 CALL auxbas_pw_pool%give_back_pw(vxc_rho(ispin))
827 ekin_mol = -ekin_imol
828 xcvirial(1:3, 1:3) = 0.0_dp
829 IF (use_virial) xcvirial(1:3, 1:3) = xcvirial(1:3, 1:3) - virial%pv_xc(1:3, 1:3)
832 ALLOCATE (atomlist(natom))
833 DO isub = 1, kg_env%nsubsets
836 imol = kg_env%atom_to_molecule(iatom)
837 color = kg_env%subset_of_mol(imol)
838 IF (color == isub) atomlist(iatom) = 1
844 IF (
PRESENT(pmat_ext))
THEN
851 NULLIFY (vxc_rho, vxc_tau)
856 CALL qs_rho_get(rho1, rho_r=rho1_r, rho_g=rho1_g, tau_r=tau1_r)
864 xc_section=xc_section)
869 rho_struct=rho_struct, &
870 xc_section=xc_section, &
875 ekin_mol = ekin_mol + ekin_imol
878 CALL pw_scale(vxc_rho(ispin), -alpha*vxc_rho(ispin)%pw_grid%dvol)
880 IF (
PRESENT(pmat_ext) .AND. .NOT. do_kernel)
THEN
882 lri_v_int => lri_rho1%lri_coefs(ispin)%lri_kinds
885 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
888 CALL integrate_v_rspace_one_center(vxc_rho(ispin), qs_env, &
889 lri_v_int, calc_force, &
890 "LRI_AUX", atomlist=atomlist)
892 CALL auxbas_pw_pool%give_back_pw(vxc_rho(ispin))
897 xcvirial(1:3, 1:3) = xcvirial(1:3, 1:3) + virial%pv_xc(1:3, 1:3)
903 virial%pv_xc(1:3, 1:3) = xcvirial(1:3, 1:3)
908 ksmat(1)%matrix => ks_matrix(ispin)%matrix
909 IF (
PRESENT(pmat_ext) .AND. .NOT. do_kernel)
THEN
911 lri_v_int => lri_rho1%lri_coefs(ispin)%lri_kinds
913 CALL para_env%sum(lri_v_int(ikind)%v_int)
918 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
920 CALL para_env%sum(lri_v_int(ikind)%v_int)
929 ALLOCATE (pmat(nspins, 1))
931 IF (
PRESENT(pmat_ext) .AND. .NOT. do_kernel)
THEN
934 pmat(ispin, 1)%matrix => pmat_ext(ispin)%matrix
940 pmat(ispin, 1)%matrix => density_matrix(ispin)%matrix
948 DEALLOCATE (atomlist, ksmat)
953 DEALLOCATE (rho_struct)
954 IF (
PRESENT(pmat_ext))
THEN
959 DEALLOCATE (cell_to_index)
961 CALL timestop(handle)
963 END SUBROUTINE kg_ekin_ri_embed
971 SUBROUTINE kg_ekin_atomic(qs_env, ks_matrix, ekin_mol)
974 REAL(kind=
dp),
INTENT(out) :: ekin_mol
976 CHARACTER(LEN=*),
PARAMETER :: routinen =
'kg_ekin_atomic'
978 INTEGER :: handle, ispin, nspins
979 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: density_matrix, tnadd_matrix
983 NULLIFY (rho, kg_env, density_matrix, tnadd_matrix)
985 CALL timeset(routinen, handle)
986 CALL get_qs_env(qs_env, kg_env=kg_env, rho=rho)
988 nspins =
SIZE(ks_matrix)
992 tnadd_matrix => kg_env%tnadd_mat
996 CALL dbcsr_dot(tnadd_matrix(1)%matrix, density_matrix(ispin)%matrix, ekin_mol)
997 CALL dbcsr_add(ks_matrix(ispin)%matrix, tnadd_matrix(1)%matrix, &
998 alpha_scalar=1.0_dp, beta_scalar=1.0_dp)
1001 ekin_mol = -ekin_mol
1003 CALL timestop(handle)
1005 END SUBROUTINE kg_ekin_atomic
Define the atomic kind types and their sub types.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
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.
various routines to log and control the output. The idea is that decisions about where to log should ...
recursive integer function, public cp_logger_get_default_unit_nr(logger, local, skip_not_ionode)
asks the default unit number of the given logger. try to use cp_logger_get_unit_nr
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
Routines used for Harris functional Kohn-Sham calculation.
subroutine, public create_kernel(qs_env, vxc, vxc_tau, rho, rho1_r, rho1_g, tau1_r, xc_section, compute_virial, virial_xc)
Creation of second derivative xc-potential.
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.
Types needed for a Kim-Gordon-like partitioning into molecular subunits.
Defines the basic variable types.
integer, parameter, public dp
Calculates integral matrices for LRIGPW method lri : local resolution of the identity.
subroutine, public lri_kg_rho_update(rho_struct, qs_env, lri_env, lri_density, atomlist)
...
subroutine, public calculate_lri_densities(lri_env, lri_density, qs_env, pmatrix, cell_to_index, lri_rho_struct, atomic_kind_set, para_env, response_density)
performs the fitting of the density and distributes the fitted density on the grid
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
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
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
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
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, 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.
methods of the rho structure (defined in qs_rho_types)
subroutine, public qs_rho_update_rho(rho_struct, qs_env, rho_xc_external, local_rho_set, task_list_external, task_list_external_soft, pw_env_external, para_env_external)
updates rho_r and rho_g to the rhorho_ao. if use_kinetic_energy_density also computes tau_r and tau_g...
subroutine, public qs_rho_rebuild(rho, qs_env, rebuild_ao, rebuild_grids, admm, pw_env_external)
rebuilds rho (if necessary allocating and initializing it)
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_set(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)
...
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...
subroutine, public qs_rho_unset_rho_ao(rho_struct)
Unsets the rho_ao / rho_ao_kp field without calling kpoint_transitional_release().
subroutine, public qs_rho_create(rho)
Allocates a new instance of rho.
subroutine, public qs_rho_release(rho_struct)
releases a rho_struct by decreasing the reference count by one and deallocating if it reaches 0 (to b...
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, native_skala_atom_force)
calculates and allocates the xc potential, already reducing it to the dependence on rho and the one o...
Exchange and Correlation functional calculations.
logical function, public xc_uses_kinetic_energy_density(xc_fun_section, lsd)
...
Provides all information about an atomic kind.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
Contains all the info needed for KG runs...
stores all the informations relevant to an mpi environment
contained for different pw related things
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
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.