71#include "./base/base_uses.f90"
77 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .false.
79 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_integrate_potential_single'
104 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_ppl_rspace'
106 INTEGER :: atom_a, handle, iatom, ikind, j, lppl, &
107 n, natom_of_kind, ni, npme
108 INTEGER,
DIMENSION(:),
POINTER :: atom_list, cores
109 LOGICAL :: use_virial
110 REAL(kind=
dp) :: alpha, eps_rho_rspace, radius
111 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
112 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
113 REAL(kind=
dp),
DIMENSION(:),
POINTER :: cexp_ppl
114 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab
122 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
126 CALL timeset(routinen, handle)
128 NULLIFY (pw_env, cores)
131 CALL pw_env_get(pw_env=pw_env, auxbas_rs_grid=rs_v)
136 atomic_kind_set=atomic_kind_set, &
137 qs_kind_set=qs_kind_set, &
139 dft_control=dft_control, &
140 particle_set=particle_set, &
142 force=force, virial=virial)
144 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
146 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
148 DO ikind = 1,
SIZE(atomic_kind_set)
150 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
151 CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential)
153 IF (.NOT.
ASSOCIATED(gth_potential)) cycle
154 CALL get_potential(potential=gth_potential, alpha_ppl=alpha, nexp_ppl=lppl, cexp_ppl=cexp_ppl)
159 ALLOCATE (hab(ni, 1), pab(ni, 1))
170 pab(1, 1) = cexp_ppl(1)
173 pab(n, 1) = cexp_ppl(2)
175 pab(n, 1) = cexp_ppl(2)
177 pab(n, 1) = cexp_ppl(2)
180 pab(n, 1) = cexp_ppl(3)
182 pab(n, 1) = cexp_ppl(3)
184 pab(n, 1) = cexp_ppl(3)
186 pab(n, 1) = 2._dp*cexp_ppl(3)
188 pab(n, 1) = 2._dp*cexp_ppl(3)
190 pab(n, 1) = 2._dp*cexp_ppl(3)
193 pab(n, 1) = cexp_ppl(4)
195 pab(n, 1) = cexp_ppl(4)
197 pab(n, 1) = cexp_ppl(4)
199 pab(n, 1) = 3._dp*cexp_ppl(4)
201 pab(n, 1) = 3._dp*cexp_ppl(4)
203 pab(n, 1) = 3._dp*cexp_ppl(4)
205 pab(n, 1) = 3._dp*cexp_ppl(4)
207 pab(n, 1) = 3._dp*cexp_ppl(4)
209 pab(n, 1) = 3._dp*cexp_ppl(4)
211 pab(n, 1) = 6._dp*cexp_ppl(4)
213 CALL cp_abort(__location__, &
214 "Only 1, 2, 3, 4 are supported as the "// &
215 "value of j in integrate_ppl_rspace")
219 DO iatom = 1, natom_of_kind
220 atom_a = atom_list(iatom)
221 ra(:) =
pbc(particle_set(atom_a)%r, cell)
222 IF (rs_v%desc%parallel .AND. .NOT. rs_v%desc%distributed)
THEN
224 IF (
modulo(iatom, rs_v%desc%group_size) == rs_v%desc%my_pos)
THEN
237 atom_a = atom_list(iatom)
238 ra(:) =
pbc(particle_set(atom_a)%r, cell)
249 ra=ra, rb=ra, rp=ra, &
250 zetp=alpha, eps=eps_rho_rspace, &
251 pab=pab, o1=0, o2=0, &
252 prefactor=1.0_dp, cutoff=1.0_dp)
255 0, 0.0_dp, 0, ra, [0.0_dp, 0.0_dp, 0.0_dp], &
256 rs_v, hab, pab=pab, o1=0, o2=0, &
258 calculate_forces=.true., force_a=force_a, &
259 force_b=force_b, use_virial=use_virial, my_virial_a=my_virial_a, &
260 my_virial_b=my_virial_b, use_subpatch=.true., subpatch_pattern=0)
262 force(ikind)%gth_ppl(:, iatom) = &
263 force(ikind)%gth_ppl(:, iatom) + force_a(:)*rho_rspace%pw_grid%dvol
266 virial%pv_ppl = virial%pv_ppl + my_virial_a*rho_rspace%pw_grid%dvol
267 virial%pv_virial = virial%pv_virial + my_virial_a*rho_rspace%pw_grid%dvol
268 cpabort(
"Virial not debuged for CORE_PPL")
272 DEALLOCATE (hab, pab)
278 CALL timestop(handle)
291 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_rho_nlcc'
293 INTEGER :: atom_a, handle, iatom, iexp_nlcc, ikind, &
294 ithread, j, n, natom, nc, nexp_nlcc, &
296 INTEGER,
DIMENSION(:),
POINTER :: atom_list, cores, nct_nlcc
297 LOGICAL :: nlcc, use_virial
298 REAL(kind=
dp) :: alpha, eps_rho_rspace, radius
299 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
300 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
301 REAL(kind=
dp),
DIMENSION(:),
POINTER :: alpha_nlcc
302 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: cval_nlcc, hab, pab
310 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
314 CALL timeset(routinen, handle)
316 NULLIFY (pw_env, cores)
319 CALL pw_env_get(pw_env=pw_env, auxbas_rs_grid=rs_v)
324 atomic_kind_set=atomic_kind_set, &
325 qs_kind_set=qs_kind_set, &
327 dft_control=dft_control, &
328 particle_set=particle_set, &
330 force=force, virial=virial)
332 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
334 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
336 DO ikind = 1,
SIZE(atomic_kind_set)
338 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom, atom_list=atom_list)
339 CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential)
341 IF (.NOT.
ASSOCIATED(gth_potential)) cycle
342 CALL get_potential(potential=gth_potential, nlcc_present=nlcc, nexp_nlcc=nexp_nlcc, &
343 alpha_nlcc=alpha_nlcc, nct_nlcc=nct_nlcc, cval_nlcc=cval_nlcc)
345 IF (.NOT. nlcc) cycle
347 DO iexp_nlcc = 1, nexp_nlcc
349 alpha = alpha_nlcc(iexp_nlcc)
350 nc = nct_nlcc(iexp_nlcc)
357 ALLOCATE (hab(ni, 1), pab(ni, 1))
368 pab(1, 1) = cval_nlcc(1, iexp_nlcc)
371 pab(n, 1) = cval_nlcc(2, iexp_nlcc)/alpha**2
373 pab(n, 1) = cval_nlcc(2, iexp_nlcc)/alpha**2
375 pab(n, 1) = cval_nlcc(2, iexp_nlcc)/alpha**2
378 pab(n, 1) = cval_nlcc(3, iexp_nlcc)/alpha**4
380 pab(n, 1) = cval_nlcc(3, iexp_nlcc)/alpha**4
382 pab(n, 1) = cval_nlcc(3, iexp_nlcc)/alpha**4
384 pab(n, 1) = 2._dp*cval_nlcc(3, iexp_nlcc)/alpha**4
386 pab(n, 1) = 2._dp*cval_nlcc(3, iexp_nlcc)/alpha**4
388 pab(n, 1) = 2._dp*cval_nlcc(3, iexp_nlcc)/alpha**4
391 pab(n, 1) = cval_nlcc(4, iexp_nlcc)/alpha**6
393 pab(n, 1) = cval_nlcc(4, iexp_nlcc)/alpha**6
395 pab(n, 1) = cval_nlcc(4, iexp_nlcc)/alpha**6
397 pab(n, 1) = 3._dp*cval_nlcc(4, iexp_nlcc)/alpha**6
399 pab(n, 1) = 3._dp*cval_nlcc(4, iexp_nlcc)/alpha**6
401 pab(n, 1) = 3._dp*cval_nlcc(4, iexp_nlcc)/alpha**6
403 pab(n, 1) = 3._dp*cval_nlcc(4, iexp_nlcc)/alpha**6
405 pab(n, 1) = 3._dp*cval_nlcc(4, iexp_nlcc)/alpha**6
407 pab(n, 1) = 3._dp*cval_nlcc(4, iexp_nlcc)/alpha**6
409 pab(n, 1) = 6._dp*cval_nlcc(4, iexp_nlcc)/alpha**6
411 CALL cp_abort(__location__, &
412 "Only 1, 2, 3, 4 are supported as the "// &
413 "value of j in integrate_rho_nlcc")
416 IF (dft_control%nspins == 2) pab = pab*0.5_dp
419 atom_a = atom_list(iatom)
420 ra(:) =
pbc(particle_set(atom_a)%r, cell)
421 IF (rs_v%desc%parallel .AND. .NOT. rs_v%desc%distributed)
THEN
423 IF (
modulo(iatom, rs_v%desc%group_size) == rs_v%desc%my_pos)
THEN
436 atom_a = atom_list(iatom)
437 ra(:) =
pbc(particle_set(atom_a)%r, cell)
448 ra=ra, rb=ra, rp=ra, &
449 zetp=1/(2*alpha**2), eps=eps_rho_rspace, &
450 pab=pab, o1=0, o2=0, &
451 prefactor=1.0_dp, cutoff=1.0_dp)
454 0, 0.0_dp, 0, ra, [0.0_dp, 0.0_dp, 0.0_dp], &
455 rs_v, hab, pab=pab, o1=0, o2=0, &
457 calculate_forces=.true., force_a=force_a, &
458 force_b=force_b, use_virial=use_virial, my_virial_a=my_virial_a, &
459 my_virial_b=my_virial_b, use_subpatch=.true., subpatch_pattern=0)
461 force(ikind)%gth_nlcc(:, iatom) = &
462 force(ikind)%gth_nlcc(:, iatom) + force_a(:)*rho_rspace%pw_grid%dvol
465 virial%pv_nlcc = virial%pv_nlcc + my_virial_a*rho_rspace%pw_grid%dvol
466 virial%pv_virial = virial%pv_virial + my_virial_a*rho_rspace%pw_grid%dvol
470 DEALLOCATE (hab, pab)
478 CALL timestop(handle)
492 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL :: atecc
494 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_v_core_rspace'
496 INTEGER :: atom_a, handle, iatom, ikind, j, natom, &
498 INTEGER,
DIMENSION(:),
POINTER :: atom_list, cores
499 LOGICAL :: paw_atom, skip_fcore, use_virial
500 REAL(kind=
dp) :: alpha_core_charge, ccore_charge, &
501 eps_rho_rspace, radius
502 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
503 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
504 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab
512 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
516 CALL timeset(routinen, handle)
517 NULLIFY (virial, force, atprop, dft_control)
519 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
523 IF (dft_control%qs_control%gapw)
THEN
524 IF (.NOT. dft_control%qs_control%gapw_control%nopaw_as_gpw) skip_fcore = .true.
527 IF (.NOT. skip_fcore)
THEN
534 CALL pw_env_get(pw_env=pw_env, auxbas_rs_grid=rs_v)
539 atomic_kind_set=atomic_kind_set, &
540 qs_kind_set=qs_kind_set, &
542 dft_control=dft_control, &
543 particle_set=particle_set, &
550 natom =
SIZE(particle_set)
551 IF (
ASSOCIATED(atprop))
THEN
555 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
557 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
559 DO ikind = 1,
SIZE(atomic_kind_set)
561 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
562 CALL get_qs_kind(qs_kind_set(ikind), paw_atom=paw_atom)
564 IF (dft_control%qs_control%gapw .AND. paw_atom) cycle
566 CALL get_qs_kind(qs_kind_set(ikind), alpha_core_charge=alpha_core_charge, &
567 ccore_charge=ccore_charge)
569 pab(1, 1) = -ccore_charge
570 IF (alpha_core_charge == 0.0_dp .OR. pab(1, 1) == 0.0_dp) cycle
576 DO iatom = 1, natom_of_kind
577 atom_a = atom_list(iatom)
578 ra(:) =
pbc(particle_set(atom_a)%r, cell)
579 IF (rs_v%desc%parallel .AND. .NOT. rs_v%desc%distributed)
THEN
581 IF (
modulo(iatom, rs_v%desc%group_size) == rs_v%desc%my_pos)
THEN
594 atom_a = atom_list(iatom)
595 ra(:) =
pbc(particle_set(atom_a)%r, cell)
605 ra=ra, rb=ra, rp=ra, &
606 zetp=alpha_core_charge, eps=eps_rho_rspace, &
607 pab=pab, o1=0, o2=0, &
608 prefactor=1.0_dp, cutoff=1.0_dp)
611 0, 0.0_dp, 0, ra, [0.0_dp, 0.0_dp, 0.0_dp], &
612 rs_v, hab, pab=pab, o1=0, o2=0, &
614 calculate_forces=.true., force_a=force_a, &
615 force_b=force_b, use_virial=use_virial, my_virial_a=my_virial_a, &
616 my_virial_b=my_virial_b, use_subpatch=.true., subpatch_pattern=0)
618 IF (
ASSOCIATED(force))
THEN
619 force(ikind)%rho_core(:, iatom) = force(ikind)%rho_core(:, iatom) + force_a(:)
622 virial%pv_ehartree = virial%pv_ehartree + my_virial_a
623 virial%pv_virial = virial%pv_virial + my_virial_a
625 IF (
ASSOCIATED(atprop))
THEN
626 atprop%ateb(atom_a) = atprop%ateb(atom_a) + 0.5_dp*hab(1, 1)*pab(1, 1)
628 IF (
PRESENT(atecc))
THEN
629 atecc(atom_a) = atecc(atom_a) + 0.5_dp*hab(1, 1)*pab(1, 1)
636 DEALLOCATE (hab, pab, cores)
640 CALL timestop(handle)
655 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: alpha, ccore
656 REAL(kind=
dp),
DIMENSION(:) :: atecc
658 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_v_gaussian_rspace'
660 INTEGER :: atom_a, handle, iatom, ikind, j, natom, &
662 INTEGER,
DIMENSION(:),
POINTER :: atom_list, cores
663 REAL(kind=
dp) :: alpha_core_charge, eps_rho_rspace, radius
664 REAL(kind=
dp),
DIMENSION(3) :: ra
665 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab
671 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
674 CALL timeset(routinen, handle)
676 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
679 cpassert(.NOT. dft_control%qs_control%gapw)
687 CALL pw_env_get(pw_env=pw_env, auxbas_rs_grid=rs_v)
692 atomic_kind_set=atomic_kind_set, &
693 qs_kind_set=qs_kind_set, &
695 dft_control=dft_control, &
696 particle_set=particle_set, &
700 natom =
SIZE(particle_set)
701 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
703 DO ikind = 1,
SIZE(atomic_kind_set)
705 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
706 pab(1, 1) = -ccore(ikind)
707 alpha_core_charge = alpha(ikind)
708 IF (alpha_core_charge == 0.0_dp .OR. pab(1, 1) == 0.0_dp) cycle
714 DO iatom = 1, natom_of_kind
715 atom_a = atom_list(iatom)
716 ra(:) =
pbc(particle_set(atom_a)%r, cell)
717 IF (rs_v%desc%parallel .AND. .NOT. rs_v%desc%distributed)
THEN
719 IF (
modulo(iatom, rs_v%desc%group_size) == rs_v%desc%my_pos)
THEN
732 atom_a = atom_list(iatom)
733 ra(:) =
pbc(particle_set(atom_a)%r, cell)
737 ra=ra, rb=ra, rp=ra, &
738 zetp=alpha_core_charge, eps=eps_rho_rspace, &
739 pab=pab, o1=0, o2=0, &
740 prefactor=1.0_dp, cutoff=1.0_dp)
743 0, 0.0_dp, 0, ra, [0.0_dp, 0.0_dp, 0.0_dp], &
744 rs_v, hab, pab=pab, o1=0, o2=0, &
745 radius=radius, calculate_forces=.false., &
746 use_subpatch=.true., subpatch_pattern=0)
747 atecc(atom_a) = atecc(atom_a) + 0.5_dp*hab(1, 1)*pab(1, 1)
753 DEALLOCATE (hab, pab, cores)
755 CALL timestop(handle)
770 calculate_forces, basis_type, atomlist)
774 LOGICAL,
INTENT(IN) :: calculate_forces
775 CHARACTER(len=*),
INTENT(IN) :: basis_type
776 INTEGER,
DIMENSION(:),
OPTIONAL :: atomlist
778 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_v_rspace_one_center'
780 INTEGER :: atom_a, group_size, handle, i, iatom, igrid_level, ikind, ipgf, iset, m1, &
781 max_npgf, maxco, maxsgf_set, my_pos, na1, natom_of_kind, ncoa, nkind, nseta, offset, sgfa
782 INTEGER,
DIMENSION(:),
POINTER :: atom_list, la_max, la_min, npgfa, &
784 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgfa
785 LOGICAL :: use_virial
786 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: map_it
787 REAL(kind=
dp) :: eps_rho_rspace, radius
788 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
789 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
790 REAL(kind=
dp),
DIMENSION(:),
POINTER :: set_radius_a
791 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab, rpgfa, sphi_a, work_f, work_i, &
800 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
805 CALL timeset(routinen, handle)
807 NULLIFY (atomic_kind_set, qs_kind_set, atom_list, cell, dft_control, &
808 first_sgfa, gridlevel_info, hab, la_max, la_min, lri_basis_set, &
809 npgfa, nsgf_seta, pab, particle_set, pw_env, rpgfa, &
810 rs_grid, rs_v, virial, set_radius_a, sphi_a, work_f, &
820 gridlevel_info => pw_env%gridlevel_info
825 atomic_kind_set=atomic_kind_set, &
826 qs_kind_set=qs_kind_set, &
828 dft_control=dft_control, &
830 particle_set=particle_set, &
834 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
836 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
839 my_pos = v_rspace%pw_grid%para%group%mepos
840 group_size = v_rspace%pw_grid%para%group%num_pe
844 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
845 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type=basis_type)
847 first_sgf=first_sgfa, &
851 maxsgf_set=maxsgf_set, &
854 nsgf_set=nsgf_seta, &
856 set_radius=set_radius_a, &
860 ALLOCATE (hab(maxco, 1), pab(maxco, 1))
863 max_npgf = maxval(npgfa(1:nseta))
864 ALLOCATE (map_it(max_npgf))
865 ALLOCATE (work_i(maxsgf_set, 1))
866 IF (calculate_forces)
ALLOCATE (work_f(maxsgf_set, 1))
868 DO iatom = 1, natom_of_kind
870 atom_a = atom_list(iatom)
871 IF (
PRESENT(atomlist))
THEN
872 IF (atomlist(atom_a) == 0) cycle
874 ra(:) =
pbc(particle_set(atom_a)%r, cell)
877 my_virial_a(:, :) = 0._dp
878 my_virial_b(:, :) = 0._dp
883 DO ipgf = 1, npgfa(iset)
885 rs_grid => rs_v(igrid_level)
886 map_it(ipgf) =
map_gaussian_here(rs_grid, cell%h_inv, ra, offset, group_size, my_pos)
890 IF (any(map_it(1:npgfa(iset))))
THEN
891 sgfa = first_sgfa(1, iset)
892 ncoa = npgfa(iset)*
ncoset(la_max(iset))
894 work_i(1:nsgf_seta(iset), 1) = 0.0_dp
897 IF (calculate_forces)
THEN
898 m1 = sgfa + nsgf_seta(iset) - 1
899 work_f(1:nsgf_seta(iset), 1) = int_res(ikind)%acoef(iatom, sgfa:m1)
900 CALL dgemm(
"N",
"N", ncoa, 1, nsgf_seta(iset), 1.0_dp, sphi_a(1, sgfa), &
901 SIZE(sphi_a, 1), work_f(1, 1),
SIZE(work_f, 1), 0.0_dp, pab(1, 1), &
905 DO ipgf = 1, npgfa(iset)
906 na1 = (ipgf - 1)*
ncoset(la_max(iset))
908 rs_grid => rs_v(igrid_level)
911 lb_min=0, lb_max=0, ra=ra, rb=ra, rp=ra, &
912 zetp=zeta(ipgf, iset), eps=eps_rho_rspace, &
913 prefactor=1.0_dp, cutoff=1.0_dp)
915 IF (map_it(ipgf))
THEN
916 IF (.NOT. calculate_forces)
THEN
918 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
919 lb_max=0, zetb=0.0_dp, lb_min=0, &
920 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
922 hab=hab, o1=na1, o2=0, radius=radius, &
923 calculate_forces=calculate_forces)
926 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
927 lb_max=0, zetb=0.0_dp, lb_min=0, &
928 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
930 hab=hab, pab=pab, o1=na1, o2=0, radius=radius, &
931 calculate_forces=calculate_forces, &
932 force_a=force_a, force_b=force_b, &
933 use_virial=use_virial, &
934 my_virial_a=my_virial_a, my_virial_b=my_virial_b)
939 CALL dgemm(
"T",
"N", nsgf_seta(iset), 1, ncoa, 1.0_dp, sphi_a(1, sgfa), &
940 SIZE(sphi_a, 1), hab(1, 1),
SIZE(hab, 1), 0.0_dp, work_i(1, 1),
SIZE(work_i, 1))
942 int_res(ikind)%v_int(iatom, sgfa:sgfa - 1 + nsgf_seta(iset)) = &
943 int_res(ikind)%v_int(iatom, sgfa:sgfa - 1 + nsgf_seta(iset)) + work_i(1:nsgf_seta(iset), 1)
947 IF (calculate_forces)
THEN
948 int_res(ikind)%v_dfdr(iatom, :) = int_res(ikind)%v_dfdr(iatom, :) + force_a(:)
950 virial%pv_lrigpw = virial%pv_lrigpw + my_virial_a
951 virial%pv_virial = virial%pv_virial + my_virial_a
957 IF (calculate_forces)
DEALLOCATE (work_f)
958 DEALLOCATE (work_i, map_it)
959 DEALLOCATE (hab, pab)
962 CALL timestop(handle)
979 TYPE(
dbcsr_type),
INTENT(INOUT) :: ksmat, pmat
981 LOGICAL,
INTENT(IN) :: calculate_forces
982 CHARACTER(len=*),
INTENT(IN) :: basis_type
984 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_v_rspace_diagonal'
986 INTEGER :: atom_a, group_size, handle, iatom, igrid_level, ikind, ipgf, iset, jpgf, jset, &
987 m1, maxco, maxsgf_set, my_pos, na1, na2, natom_of_kind, nb1, nb2, ncoa, ncob, nkind, &
988 nseta, nsgfa, offset, sgfa, sgfb
989 INTEGER,
DIMENSION(:),
POINTER :: atom_list, la_max, la_min, npgfa, &
991 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgfa
992 LOGICAL :: found, use_virial
993 LOGICAL,
ALLOCATABLE,
DIMENSION(:, :) :: map_it2
994 REAL(kind=
dp) :: eps_rho_rspace, radius, zetp
995 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
996 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
997 REAL(kind=
dp),
DIMENSION(:),
POINTER :: set_radius_a
998 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: h_block, hab, hmat, p_block, pab, pblk, &
999 rpgfa, sphi_a, work, zeta
1009 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1014 CALL timeset(routinen, handle)
1016 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
1020 gridlevel_info => pw_env%gridlevel_info
1023 atomic_kind_set=atomic_kind_set, &
1024 qs_kind_set=qs_kind_set, &
1026 dft_control=dft_control, &
1028 particle_set=particle_set, &
1033 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
1034 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
1037 my_pos = v_rspace%pw_grid%para%group%mepos
1038 group_size = v_rspace%pw_grid%para%group%num_pe
1042 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
1043 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=basis_type)
1045 lmax=la_max, lmin=la_min, maxco=maxco, maxsgf_set=maxsgf_set, &
1046 npgf=npgfa, nset=nseta, nsgf_set=nsgf_seta, nsgf=nsgfa, &
1047 first_sgf=first_sgfa, pgf_radius=rpgfa, set_radius=set_radius_a, &
1048 sphi=sphi_a, zet=zeta)
1050 ALLOCATE (hab(maxco, maxco), work(maxco, maxsgf_set), hmat(nsgfa, nsgfa))
1051 IF (calculate_forces)
ALLOCATE (pab(maxco, maxco), pblk(nsgfa, nsgfa))
1053 DO iatom = 1, natom_of_kind
1054 atom_a = atom_list(iatom)
1055 ra(:) =
pbc(particle_set(atom_a)%r, cell)
1057 IF (calculate_forces)
THEN
1058 CALL dbcsr_get_block_p(matrix=pmat, row=atom_a, col=atom_a, block=p_block, found=found)
1060 pblk(1:nsgfa, 1:nsgfa) = p_block(1:nsgfa, 1:nsgfa)
1064 CALL para_env%sum(pblk)
1067 IF (use_virial)
THEN
1068 my_virial_a = 0.0_dp
1069 my_virial_b = 0.0_dp
1072 m1 = maxval(npgfa(1:nseta))
1073 ALLOCATE (map_it2(m1, m1))
1075 sgfa = first_sgfa(1, iset)
1076 ncoa = npgfa(iset)*
ncoset(la_max(iset))
1078 sgfb = first_sgfa(1, jset)
1079 ncob = npgfa(jset)*
ncoset(la_max(jset))
1082 DO ipgf = 1, npgfa(iset)
1083 DO jpgf = 1, npgfa(jset)
1084 zetp = zeta(ipgf, iset) + zeta(jpgf, jset)
1086 rs_grid => rs_v(igrid_level)
1087 map_it2(ipgf, jpgf) =
map_gaussian_here(rs_grid, cell%h_inv, ra, offset, group_size, my_pos)
1092 IF (any(map_it2(1:npgfa(iset), 1:npgfa(jset))))
THEN
1094 IF (calculate_forces)
THEN
1095 CALL dgemm(
"N",
"N", ncoa, nsgf_seta(jset), nsgf_seta(iset), &
1096 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
1097 pblk(sgfa, sgfb),
SIZE(pblk, 1), &
1098 0.0_dp, work(1, 1),
SIZE(work, 1))
1099 CALL dgemm(
"N",
"T", ncoa, ncob, nsgf_seta(jset), &
1100 1.0_dp, work(1, 1),
SIZE(work, 1), &
1101 sphi_a(1, sgfb),
SIZE(sphi_a, 1), &
1102 0.0_dp, pab(1, 1),
SIZE(pab, 1))
1105 DO ipgf = 1, npgfa(iset)
1106 na1 = (ipgf - 1)*
ncoset(la_max(iset))
1107 na2 = ipgf*
ncoset(la_max(iset))
1108 DO jpgf = 1, npgfa(jset)
1109 nb1 = (jpgf - 1)*
ncoset(la_max(jset))
1110 nb2 = jpgf*
ncoset(la_max(jset))
1111 zetp = zeta(ipgf, iset) + zeta(jpgf, jset)
1113 rs_grid => rs_v(igrid_level)
1116 lb_min=la_min(jset), lb_max=la_max(jset), &
1117 ra=ra, rb=ra, rp=ra, &
1118 zetp=zetp, eps=eps_rho_rspace, &
1119 prefactor=1.0_dp, cutoff=1.0_dp)
1121 IF (map_it2(ipgf, jpgf))
THEN
1122 IF (calculate_forces)
THEN
1124 la_max(iset), zeta(ipgf, iset), la_min(iset), &
1125 la_max(jset), zeta(jpgf, jset), la_min(jset), &
1126 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
1127 rsgrid=rs_v(igrid_level), &
1128 hab=hab, pab=pab, o1=na1, o2=nb1, &
1130 calculate_forces=.true., &
1131 force_a=force_a, force_b=force_b, &
1132 use_virial=use_virial, my_virial_a=my_virial_a, my_virial_b=my_virial_b)
1135 la_max(iset), zeta(ipgf, iset), la_min(iset), &
1136 la_max(jset), zeta(jpgf, jset), la_min(jset), &
1137 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
1138 rsgrid=rs_v(igrid_level), &
1139 hab=hab, o1=na1, o2=nb1, &
1141 calculate_forces=.false.)
1147 CALL dgemm(
"N",
"N", ncoa, nsgf_seta(jset), ncob, &
1148 1.0_dp, hab(1, 1),
SIZE(hab, 1), &
1149 sphi_a(1, sgfb),
SIZE(sphi_a, 1), &
1150 0.0_dp, work(1, 1),
SIZE(work, 1))
1151 CALL dgemm(
"T",
"N", nsgf_seta(iset), nsgf_seta(jset), ncoa, &
1152 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
1153 work(1, 1),
SIZE(work, 1), &
1154 1.0_dp, hmat(sgfa, sgfb),
SIZE(hmat, 1))
1158 DEALLOCATE (map_it2)
1160 CALL para_env%sum(hmat)
1161 CALL dbcsr_get_block_p(matrix=ksmat, row=atom_a, col=atom_a, block=h_block, found=found)
1163 h_block(1:nsgfa, 1:nsgfa) = h_block(1:nsgfa, 1:nsgfa) + hmat(1:nsgfa, 1:nsgfa)
1165 IF (calculate_forces)
THEN
1166 force(ikind)%rho_elec(:, iatom) = force(ikind)%rho_elec(:, iatom) + 2.0_dp*force_a(:)
1167 IF (use_virial)
THEN
1168 IF (use_virial .AND. calculate_forces)
THEN
1169 virial%pv_lrigpw = virial%pv_lrigpw + 2.0_dp*my_virial_a
1170 virial%pv_virial = virial%pv_virial + 2.0_dp*my_virial_a
1175 DEALLOCATE (hab, work, hmat)
1176 IF (calculate_forces)
DEALLOCATE (pab, pblk)
1179 CALL timestop(handle)
1197 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: f_coef
1198 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: f_integral
1199 LOGICAL,
INTENT(IN) :: calculate_forces
1200 CHARACTER(len=*),
INTENT(IN) :: basis_type
1202 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_function'
1204 INTEGER :: atom_a, group_size, handle, i, iatom, igrid_level, ikind, ipgf, iset, maxco, &
1205 maxsgf_set, my_pos, na1, natom, ncoa, nkind, nseta, offset, sgfa
1206 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atom_of_kind
1207 INTEGER,
DIMENSION(:),
POINTER :: la_max, la_min, npgfa, nsgfa
1208 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgfa
1209 LOGICAL :: use_virial
1210 REAL(kind=
dp) :: eps_rho_rspace, radius
1211 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
1212 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
1213 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab, sphi_a, work, zeta
1222 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1227 CALL timeset(routinen, handle)
1229 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
1230 gridlevel_info => pw_env%gridlevel_info
1236 atomic_kind_set=atomic_kind_set, &
1237 qs_kind_set=qs_kind_set, &
1240 dft_control=dft_control, &
1243 particle_set=particle_set, &
1248 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
1249 IF (use_virial)
THEN
1250 cpabort(
"Virial NYA")
1253 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
1256 maxco=maxco, maxsgf_set=maxsgf_set, basis_type=basis_type)
1257 ALLOCATE (hab(maxco, 1), pab(maxco, 1), work(maxco, 1))
1260 my_pos = v_rspace%pw_grid%para%group%mepos
1261 group_size = v_rspace%pw_grid%para%group%num_pe
1264 ikind = particle_set(iatom)%atomic_kind%kind_number
1265 atom_a = atom_of_kind(iatom)
1266 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=basis_type)
1268 first_sgf=first_sgfa, &
1276 ra(:) =
pbc(particle_set(iatom)%r, cell)
1280 my_virial_a(:, :) = 0._dp
1281 my_virial_b(:, :) = 0._dp
1285 ncoa = npgfa(iset)*
ncoset(la_max(iset))
1286 sgfa = first_sgfa(1, iset)
1291 DO i = 1, nsgfa(iset)
1292 work(i, 1) = f_coef(offset + i)
1295 CALL dgemm(
"N",
"N", ncoa, 1, nsgfa(iset), &
1296 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
1297 work(1, 1),
SIZE(work, 1), &
1298 0.0_dp, pab(1, 1),
SIZE(pab, 1))
1300 DO ipgf = 1, npgfa(iset)
1302 na1 = (ipgf - 1)*
ncoset(la_max(iset))
1305 rs_grid => rs_v(igrid_level)
1307 IF (
map_gaussian_here(rs_grid, cell%h_inv, ra, offset, group_size, my_pos))
THEN
1309 lb_min=0, lb_max=0, ra=ra, rb=ra, rp=ra, &
1310 zetp=zeta(ipgf, iset), eps=eps_rho_rspace, &
1311 prefactor=1.0_dp, cutoff=1.0_dp)
1313 IF (calculate_forces)
THEN
1315 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
1316 lb_max=0, zetb=0.0_dp, lb_min=0, &
1317 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
1319 hab=hab, pab=pab, o1=na1, o2=0, radius=radius, &
1320 calculate_forces=.true., &
1321 force_a=force_a, force_b=force_b, &
1322 use_virial=use_virial, &
1323 my_virial_a=my_virial_a, my_virial_b=my_virial_b)
1326 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
1327 lb_max=0, zetb=0.0_dp, lb_min=0, &
1328 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
1330 hab=hab, o1=na1, o2=0, radius=radius, &
1331 calculate_forces=.false.)
1338 CALL dgemm(
"T",
"N", nsgfa(iset), 1, ncoa, 1.0_dp, sphi_a(1, sgfa), &
1339 SIZE(sphi_a, 1), hab(1, 1),
SIZE(hab, 1), 0.0_dp, work(1, 1),
SIZE(work, 1))
1340 DO i = 1, nsgfa(iset)
1341 f_integral(offset + i) = work(i, 1)
1344 offset = offset + nsgfa(iset)
1348 IF (calculate_forces)
THEN
1349 force(ikind)%rho_elec(:, atom_a) = force(ikind)%rho_elec(:, atom_a) + force_a(:)
1350 IF (use_virial)
THEN
1351 virial%pv_virial = virial%pv_virial + my_virial_a
1357 DEALLOCATE (hab, pab, work)
1359 CALL timestop(handle)
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
static void dgemm(const char transa, const char transb, const int m, const int n, const int k, const double alpha, const double *a, const int lda, const double *b, const int ldb, const double beta, double *c, const int ldc)
Convenient wrapper to hide Fortran nature of dgemm_, swapping a and b.
All kind of helpful little routines.
real(kind=dp) function, public exp_radius_very_extended(la_min, la_max, lb_min, lb_max, pab, o1, o2, ra, rb, rp, zetp, eps, prefactor, cutoff, epsabs)
computes the radius of the Gaussian outside of which it is smaller than eps
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind_set(atomic_kind_set, atom_of_kind, kind_of, natom_of_kind, maxatom, natom, nshell, fist_potential_present, shell_present, shell_adiabatic, shell_check_distance, damping_present)
Get attributes of an atomic kind set.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
Holds information on atomic properties.
subroutine, public atprop_array_init(atarray, natom)
...
subroutine, public get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius, npgf_seg_sum, ccon)
...
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_get_block_p(matrix, row, col, block, found, row_size, col_size)
...
Definition of the atomic potential types.
integer function, public gaussian_gridlevel(gridlevel_info, exponent)
...
Fortran API for the grid package, which is written in C.
subroutine, public integrate_pgf_product(la_max, zeta, la_min, lb_max, zetb, lb_min, ra, rab, rsgrid, hab, pab, o1, o2, radius, calculate_forces, force_a, force_b, compute_tau, use_virial, my_virial_a, my_virial_b, hdab, hadb, a_hdab, use_subpatch, subpatch_pattern)
low level function to compute matrix elements of primitive gaussian functions
Defines the basic variable types.
integer, parameter, public dp
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
Utility routines for the memory handling.
Interface to the message passing library MPI.
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public ncoset
integer, dimension(:, :, :), allocatable, public coset
Define the data structure for the particle information.
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
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.
Build up the plane wave density by collocating the primitive Gaussian functions (pgf).
subroutine, public integrate_function(qs_env, v_rspace, f_coef, f_integral, calculate_forces, basis_type)
computes integrals of product of v_rspace times a basis function (vector function) and possible force...
subroutine, public integrate_v_gaussian_rspace(v_rspace, qs_env, alpha, ccore, atecc)
computes the overlap of a set of Gaussians with a potential on grid
subroutine, public integrate_v_rspace_diagonal(v_rspace, ksmat, pmat, qs_env, calculate_forces, basis_type)
computes integrals of product of v_rspace times the diagonal block basis functions required for LRIGP...
subroutine, public integrate_v_core_rspace(v_rspace, qs_env, atecc)
computes the forces/virial due to the ionic cores with a potential on grid
subroutine, public integrate_v_rspace_one_center(v_rspace, qs_env, int_res, calculate_forces, basis_type, atomlist)
computes integrals of product of v_rspace times a one-center function required for LRIGPW
subroutine, public integrate_ppl_rspace(rho_rspace, qs_env)
computes the forces/virial due to the local pseudopotential
subroutine, public integrate_rho_nlcc(rho_rspace, qs_env)
computes the forces/virial due to the nlcc pseudopotential
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
subroutine, public transfer_pw2rs(rs, pw)
...
pure logical function, public map_gaussian_here(rs_grid, h_inv, ra, offset, group_size, my_pos)
...
subroutine, public rs_grid_zero(rs)
Initialize grid to zero.
Transfers densities from PW to RS grids and potentials from PW to RS.
subroutine, public potential_pw2rs(rs_v, v_rspace, pw_env)
transfers a potential from a pw_grid to a vector of realspace multigrids
Provides all information about an atomic kind.
type for the atomic properties
Type defining parameters related to the simulation cell.
stores all the informations relevant to an mpi environment
contained for different pw related things
Provides all information about a quickstep kind.