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)
217 DO iatom = 1, natom_of_kind
218 atom_a = atom_list(iatom)
219 ra(:) =
pbc(particle_set(atom_a)%r, cell)
220 IF (rs_v%desc%parallel .AND. .NOT. rs_v%desc%distributed)
THEN
222 IF (
modulo(iatom, rs_v%desc%group_size) == rs_v%desc%my_pos)
THEN
235 atom_a = atom_list(iatom)
236 ra(:) =
pbc(particle_set(atom_a)%r, cell)
247 ra=ra, rb=ra, rp=ra, &
248 zetp=alpha, eps=eps_rho_rspace, &
249 pab=pab, o1=0, o2=0, &
250 prefactor=1.0_dp, cutoff=1.0_dp)
253 0, 0.0_dp, 0, ra, [0.0_dp, 0.0_dp, 0.0_dp], &
254 rs_v, hab, pab=pab, o1=0, o2=0, &
256 calculate_forces=.true., force_a=force_a, &
257 force_b=force_b, use_virial=use_virial, my_virial_a=my_virial_a, &
258 my_virial_b=my_virial_b, use_subpatch=.true., subpatch_pattern=0)
260 force(ikind)%gth_ppl(:, iatom) = &
261 force(ikind)%gth_ppl(:, iatom) + force_a(:)*rho_rspace%pw_grid%dvol
264 virial%pv_ppl = virial%pv_ppl + my_virial_a*rho_rspace%pw_grid%dvol
265 virial%pv_virial = virial%pv_virial + my_virial_a*rho_rspace%pw_grid%dvol
266 cpabort(
"Virial not debuged for CORE_PPL")
270 DEALLOCATE (hab, pab)
276 CALL timestop(handle)
289 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_rho_nlcc'
291 INTEGER :: atom_a, handle, iatom, iexp_nlcc, ikind, &
292 ithread, j, n, natom, nc, nexp_nlcc, &
294 INTEGER,
DIMENSION(:),
POINTER :: atom_list, cores, nct_nlcc
295 LOGICAL :: nlcc, use_virial
296 REAL(kind=
dp) :: alpha, eps_rho_rspace, radius
297 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
298 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
299 REAL(kind=
dp),
DIMENSION(:),
POINTER :: alpha_nlcc
300 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: cval_nlcc, hab, pab
308 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
312 CALL timeset(routinen, handle)
314 NULLIFY (pw_env, cores)
317 CALL pw_env_get(pw_env=pw_env, auxbas_rs_grid=rs_v)
322 atomic_kind_set=atomic_kind_set, &
323 qs_kind_set=qs_kind_set, &
325 dft_control=dft_control, &
326 particle_set=particle_set, &
328 force=force, virial=virial)
330 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
332 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
334 DO ikind = 1,
SIZE(atomic_kind_set)
336 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom, atom_list=atom_list)
337 CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential)
339 IF (.NOT.
ASSOCIATED(gth_potential)) cycle
340 CALL get_potential(potential=gth_potential, nlcc_present=nlcc, nexp_nlcc=nexp_nlcc, &
341 alpha_nlcc=alpha_nlcc, nct_nlcc=nct_nlcc, cval_nlcc=cval_nlcc)
343 IF (.NOT. nlcc) cycle
345 DO iexp_nlcc = 1, nexp_nlcc
347 alpha = alpha_nlcc(iexp_nlcc)
348 nc = nct_nlcc(iexp_nlcc)
355 ALLOCATE (hab(ni, 1), pab(ni, 1))
366 pab(1, 1) = cval_nlcc(1, iexp_nlcc)
369 pab(n, 1) = cval_nlcc(2, iexp_nlcc)/alpha**2
371 pab(n, 1) = cval_nlcc(2, iexp_nlcc)/alpha**2
373 pab(n, 1) = cval_nlcc(2, iexp_nlcc)/alpha**2
376 pab(n, 1) = cval_nlcc(3, iexp_nlcc)/alpha**4
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) = 2._dp*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
389 pab(n, 1) = cval_nlcc(4, iexp_nlcc)/alpha**6
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) = 3._dp*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) = 6._dp*cval_nlcc(4, iexp_nlcc)/alpha**6
412 IF (dft_control%nspins == 2) pab = pab*0.5_dp
415 atom_a = atom_list(iatom)
416 ra(:) =
pbc(particle_set(atom_a)%r, cell)
417 IF (rs_v%desc%parallel .AND. .NOT. rs_v%desc%distributed)
THEN
419 IF (
modulo(iatom, rs_v%desc%group_size) == rs_v%desc%my_pos)
THEN
432 atom_a = atom_list(iatom)
433 ra(:) =
pbc(particle_set(atom_a)%r, cell)
444 ra=ra, rb=ra, rp=ra, &
445 zetp=1/(2*alpha**2), eps=eps_rho_rspace, &
446 pab=pab, o1=0, o2=0, &
447 prefactor=1.0_dp, cutoff=1.0_dp)
450 0, 0.0_dp, 0, ra, [0.0_dp, 0.0_dp, 0.0_dp], &
451 rs_v, hab, pab=pab, o1=0, o2=0, &
453 calculate_forces=.true., force_a=force_a, &
454 force_b=force_b, use_virial=use_virial, my_virial_a=my_virial_a, &
455 my_virial_b=my_virial_b, use_subpatch=.true., subpatch_pattern=0)
457 force(ikind)%gth_nlcc(:, iatom) = &
458 force(ikind)%gth_nlcc(:, iatom) + force_a(:)*rho_rspace%pw_grid%dvol
461 virial%pv_nlcc = virial%pv_nlcc + my_virial_a*rho_rspace%pw_grid%dvol
462 virial%pv_virial = virial%pv_virial + my_virial_a*rho_rspace%pw_grid%dvol
466 DEALLOCATE (hab, pab)
474 CALL timestop(handle)
488 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL :: atecc
490 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_v_core_rspace'
492 INTEGER :: atom_a, handle, iatom, ikind, j, natom, &
494 INTEGER,
DIMENSION(:),
POINTER :: atom_list, cores
495 LOGICAL :: paw_atom, skip_fcore, use_virial
496 REAL(kind=
dp) :: alpha_core_charge, ccore_charge, &
497 eps_rho_rspace, radius
498 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
499 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
500 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab
508 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
512 CALL timeset(routinen, handle)
513 NULLIFY (virial, force, atprop, dft_control)
515 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
519 IF (dft_control%qs_control%gapw)
THEN
520 IF (.NOT. dft_control%qs_control%gapw_control%nopaw_as_gpw) skip_fcore = .true.
523 IF (.NOT. skip_fcore)
THEN
530 CALL pw_env_get(pw_env=pw_env, auxbas_rs_grid=rs_v)
535 atomic_kind_set=atomic_kind_set, &
536 qs_kind_set=qs_kind_set, &
538 dft_control=dft_control, &
539 particle_set=particle_set, &
546 natom =
SIZE(particle_set)
547 IF (
ASSOCIATED(atprop))
THEN
551 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
553 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
555 DO ikind = 1,
SIZE(atomic_kind_set)
557 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
558 CALL get_qs_kind(qs_kind_set(ikind), paw_atom=paw_atom)
560 IF (dft_control%qs_control%gapw .AND. paw_atom) cycle
562 CALL get_qs_kind(qs_kind_set(ikind), alpha_core_charge=alpha_core_charge, &
563 ccore_charge=ccore_charge)
565 pab(1, 1) = -ccore_charge
566 IF (alpha_core_charge == 0.0_dp .OR. pab(1, 1) == 0.0_dp) cycle
572 DO iatom = 1, natom_of_kind
573 atom_a = atom_list(iatom)
574 ra(:) =
pbc(particle_set(atom_a)%r, cell)
575 IF (rs_v%desc%parallel .AND. .NOT. rs_v%desc%distributed)
THEN
577 IF (
modulo(iatom, rs_v%desc%group_size) == rs_v%desc%my_pos)
THEN
590 atom_a = atom_list(iatom)
591 ra(:) =
pbc(particle_set(atom_a)%r, cell)
601 ra=ra, rb=ra, rp=ra, &
602 zetp=alpha_core_charge, eps=eps_rho_rspace, &
603 pab=pab, o1=0, o2=0, &
604 prefactor=1.0_dp, cutoff=1.0_dp)
607 0, 0.0_dp, 0, ra, [0.0_dp, 0.0_dp, 0.0_dp], &
608 rs_v, hab, pab=pab, o1=0, o2=0, &
610 calculate_forces=.true., force_a=force_a, &
611 force_b=force_b, use_virial=use_virial, my_virial_a=my_virial_a, &
612 my_virial_b=my_virial_b, use_subpatch=.true., subpatch_pattern=0)
614 IF (
ASSOCIATED(force))
THEN
615 force(ikind)%rho_core(:, iatom) = force(ikind)%rho_core(:, iatom) + force_a(:)
618 virial%pv_ehartree = virial%pv_ehartree + my_virial_a
619 virial%pv_virial = virial%pv_virial + my_virial_a
621 IF (
ASSOCIATED(atprop))
THEN
622 atprop%ateb(atom_a) = atprop%ateb(atom_a) + 0.5_dp*hab(1, 1)*pab(1, 1)
624 IF (
PRESENT(atecc))
THEN
625 atecc(atom_a) = atecc(atom_a) + 0.5_dp*hab(1, 1)*pab(1, 1)
632 DEALLOCATE (hab, pab, cores)
636 CALL timestop(handle)
651 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: alpha, ccore
652 REAL(kind=
dp),
DIMENSION(:) :: atecc
654 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_v_gaussian_rspace'
656 INTEGER :: atom_a, handle, iatom, ikind, j, natom, &
658 INTEGER,
DIMENSION(:),
POINTER :: atom_list, cores
659 REAL(kind=
dp) :: alpha_core_charge, eps_rho_rspace, radius
660 REAL(kind=
dp),
DIMENSION(3) :: ra
661 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab
667 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
670 CALL timeset(routinen, handle)
672 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
675 cpassert(.NOT. dft_control%qs_control%gapw)
683 CALL pw_env_get(pw_env=pw_env, auxbas_rs_grid=rs_v)
688 atomic_kind_set=atomic_kind_set, &
689 qs_kind_set=qs_kind_set, &
691 dft_control=dft_control, &
692 particle_set=particle_set, &
696 natom =
SIZE(particle_set)
697 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
699 DO ikind = 1,
SIZE(atomic_kind_set)
701 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
702 pab(1, 1) = -ccore(ikind)
703 alpha_core_charge = alpha(ikind)
704 IF (alpha_core_charge == 0.0_dp .OR. pab(1, 1) == 0.0_dp) cycle
710 DO iatom = 1, natom_of_kind
711 atom_a = atom_list(iatom)
712 ra(:) =
pbc(particle_set(atom_a)%r, cell)
713 IF (rs_v%desc%parallel .AND. .NOT. rs_v%desc%distributed)
THEN
715 IF (
modulo(iatom, rs_v%desc%group_size) == rs_v%desc%my_pos)
THEN
728 atom_a = atom_list(iatom)
729 ra(:) =
pbc(particle_set(atom_a)%r, cell)
733 ra=ra, rb=ra, rp=ra, &
734 zetp=alpha_core_charge, eps=eps_rho_rspace, &
735 pab=pab, o1=0, o2=0, &
736 prefactor=1.0_dp, cutoff=1.0_dp)
739 0, 0.0_dp, 0, ra, [0.0_dp, 0.0_dp, 0.0_dp], &
740 rs_v, hab, pab=pab, o1=0, o2=0, &
741 radius=radius, calculate_forces=.false., &
742 use_subpatch=.true., subpatch_pattern=0)
743 atecc(atom_a) = atecc(atom_a) + 0.5_dp*hab(1, 1)*pab(1, 1)
749 DEALLOCATE (hab, pab, cores)
751 CALL timestop(handle)
766 calculate_forces, basis_type, atomlist)
770 LOGICAL,
INTENT(IN) :: calculate_forces
771 CHARACTER(len=*),
INTENT(IN) :: basis_type
772 INTEGER,
DIMENSION(:),
OPTIONAL :: atomlist
774 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_v_rspace_one_center'
776 INTEGER :: atom_a, group_size, handle, i, iatom, igrid_level, ikind, ipgf, iset, m1, &
777 max_npgf, maxco, maxsgf_set, my_pos, na1, natom_of_kind, ncoa, nkind, nseta, offset, sgfa
778 INTEGER,
DIMENSION(:),
POINTER :: atom_list, la_max, la_min, npgfa, &
780 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgfa
781 LOGICAL :: use_virial
782 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: map_it
783 REAL(kind=
dp) :: eps_rho_rspace, radius
784 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
785 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
786 REAL(kind=
dp),
DIMENSION(:),
POINTER :: set_radius_a
787 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab, rpgfa, sphi_a, work_f, work_i, &
796 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
801 CALL timeset(routinen, handle)
803 NULLIFY (atomic_kind_set, qs_kind_set, atom_list, cell, dft_control, &
804 first_sgfa, gridlevel_info, hab, la_max, la_min, lri_basis_set, &
805 npgfa, nsgf_seta, pab, particle_set, pw_env, rpgfa, &
806 rs_grid, rs_v, virial, set_radius_a, sphi_a, work_f, &
816 gridlevel_info => pw_env%gridlevel_info
821 atomic_kind_set=atomic_kind_set, &
822 qs_kind_set=qs_kind_set, &
824 dft_control=dft_control, &
826 particle_set=particle_set, &
830 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
832 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
835 my_pos = v_rspace%pw_grid%para%group%mepos
836 group_size = v_rspace%pw_grid%para%group%num_pe
840 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
841 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type=basis_type)
843 first_sgf=first_sgfa, &
847 maxsgf_set=maxsgf_set, &
850 nsgf_set=nsgf_seta, &
852 set_radius=set_radius_a, &
856 ALLOCATE (hab(maxco, 1), pab(maxco, 1))
859 max_npgf = maxval(npgfa(1:nseta))
860 ALLOCATE (map_it(max_npgf))
861 ALLOCATE (work_i(maxsgf_set, 1))
862 IF (calculate_forces)
ALLOCATE (work_f(maxsgf_set, 1))
864 DO iatom = 1, natom_of_kind
866 atom_a = atom_list(iatom)
867 IF (
PRESENT(atomlist))
THEN
868 IF (atomlist(atom_a) == 0) cycle
870 ra(:) =
pbc(particle_set(atom_a)%r, cell)
873 my_virial_a(:, :) = 0._dp
874 my_virial_b(:, :) = 0._dp
879 DO ipgf = 1, npgfa(iset)
881 rs_grid => rs_v(igrid_level)
882 map_it(ipgf) =
map_gaussian_here(rs_grid, cell%h_inv, ra, offset, group_size, my_pos)
886 IF (any(map_it(1:npgfa(iset))))
THEN
887 sgfa = first_sgfa(1, iset)
888 ncoa = npgfa(iset)*
ncoset(la_max(iset))
890 work_i(1:nsgf_seta(iset), 1) = 0.0_dp
893 IF (calculate_forces)
THEN
894 m1 = sgfa + nsgf_seta(iset) - 1
895 work_f(1:nsgf_seta(iset), 1) = int_res(ikind)%acoef(iatom, sgfa:m1)
896 CALL dgemm(
"N",
"N", ncoa, 1, nsgf_seta(iset), 1.0_dp, sphi_a(1, sgfa), &
897 SIZE(sphi_a, 1), work_f(1, 1),
SIZE(work_f, 1), 0.0_dp, pab(1, 1), &
901 DO ipgf = 1, npgfa(iset)
902 na1 = (ipgf - 1)*
ncoset(la_max(iset))
904 rs_grid => rs_v(igrid_level)
907 lb_min=0, lb_max=0, ra=ra, rb=ra, rp=ra, &
908 zetp=zeta(ipgf, iset), eps=eps_rho_rspace, &
909 prefactor=1.0_dp, cutoff=1.0_dp)
911 IF (map_it(ipgf))
THEN
912 IF (.NOT. calculate_forces)
THEN
914 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
915 lb_max=0, zetb=0.0_dp, lb_min=0, &
916 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
918 hab=hab, o1=na1, o2=0, radius=radius, &
919 calculate_forces=calculate_forces)
922 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
923 lb_max=0, zetb=0.0_dp, lb_min=0, &
924 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
926 hab=hab, pab=pab, o1=na1, o2=0, radius=radius, &
927 calculate_forces=calculate_forces, &
928 force_a=force_a, force_b=force_b, &
929 use_virial=use_virial, &
930 my_virial_a=my_virial_a, my_virial_b=my_virial_b)
935 CALL dgemm(
"T",
"N", nsgf_seta(iset), 1, ncoa, 1.0_dp, sphi_a(1, sgfa), &
936 SIZE(sphi_a, 1), hab(1, 1),
SIZE(hab, 1), 0.0_dp, work_i(1, 1),
SIZE(work_i, 1))
938 int_res(ikind)%v_int(iatom, sgfa:sgfa - 1 + nsgf_seta(iset)) = &
939 int_res(ikind)%v_int(iatom, sgfa:sgfa - 1 + nsgf_seta(iset)) + work_i(1:nsgf_seta(iset), 1)
943 IF (calculate_forces)
THEN
944 int_res(ikind)%v_dfdr(iatom, :) = int_res(ikind)%v_dfdr(iatom, :) + force_a(:)
946 virial%pv_lrigpw = virial%pv_lrigpw + my_virial_a
947 virial%pv_virial = virial%pv_virial + my_virial_a
953 IF (calculate_forces)
DEALLOCATE (work_f)
954 DEALLOCATE (work_i, map_it)
955 DEALLOCATE (hab, pab)
958 CALL timestop(handle)
975 TYPE(
dbcsr_type),
INTENT(INOUT) :: ksmat, pmat
977 LOGICAL,
INTENT(IN) :: calculate_forces
978 CHARACTER(len=*),
INTENT(IN) :: basis_type
980 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_v_rspace_diagonal'
982 INTEGER :: atom_a, group_size, handle, iatom, igrid_level, ikind, ipgf, iset, jpgf, jset, &
983 m1, maxco, maxsgf_set, my_pos, na1, na2, natom_of_kind, nb1, nb2, ncoa, ncob, nkind, &
984 nseta, nsgfa, offset, sgfa, sgfb
985 INTEGER,
DIMENSION(:),
POINTER :: atom_list, la_max, la_min, npgfa, &
987 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgfa
988 LOGICAL :: found, use_virial
989 LOGICAL,
ALLOCATABLE,
DIMENSION(:, :) :: map_it2
990 REAL(kind=
dp) :: eps_rho_rspace, radius, zetp
991 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
992 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
993 REAL(kind=
dp),
DIMENSION(:),
POINTER :: set_radius_a
994 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: h_block, hab, hmat, p_block, pab, pblk, &
995 rpgfa, sphi_a, work, zeta
1005 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1010 CALL timeset(routinen, handle)
1012 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
1016 gridlevel_info => pw_env%gridlevel_info
1019 atomic_kind_set=atomic_kind_set, &
1020 qs_kind_set=qs_kind_set, &
1022 dft_control=dft_control, &
1024 particle_set=particle_set, &
1029 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
1030 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
1033 my_pos = v_rspace%pw_grid%para%group%mepos
1034 group_size = v_rspace%pw_grid%para%group%num_pe
1038 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
1039 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=basis_type)
1041 lmax=la_max, lmin=la_min, maxco=maxco, maxsgf_set=maxsgf_set, &
1042 npgf=npgfa, nset=nseta, nsgf_set=nsgf_seta, nsgf=nsgfa, &
1043 first_sgf=first_sgfa, pgf_radius=rpgfa, set_radius=set_radius_a, &
1044 sphi=sphi_a, zet=zeta)
1046 ALLOCATE (hab(maxco, maxco), work(maxco, maxsgf_set), hmat(nsgfa, nsgfa))
1047 IF (calculate_forces)
ALLOCATE (pab(maxco, maxco), pblk(nsgfa, nsgfa))
1049 DO iatom = 1, natom_of_kind
1050 atom_a = atom_list(iatom)
1051 ra(:) =
pbc(particle_set(atom_a)%r, cell)
1053 IF (calculate_forces)
THEN
1054 CALL dbcsr_get_block_p(matrix=pmat, row=atom_a, col=atom_a, block=p_block, found=found)
1056 pblk(1:nsgfa, 1:nsgfa) = p_block(1:nsgfa, 1:nsgfa)
1060 CALL para_env%sum(pblk)
1063 IF (use_virial)
THEN
1064 my_virial_a = 0.0_dp
1065 my_virial_b = 0.0_dp
1068 m1 = maxval(npgfa(1:nseta))
1069 ALLOCATE (map_it2(m1, m1))
1071 sgfa = first_sgfa(1, iset)
1072 ncoa = npgfa(iset)*
ncoset(la_max(iset))
1074 sgfb = first_sgfa(1, jset)
1075 ncob = npgfa(jset)*
ncoset(la_max(jset))
1078 DO ipgf = 1, npgfa(iset)
1079 DO jpgf = 1, npgfa(jset)
1080 zetp = zeta(ipgf, iset) + zeta(jpgf, jset)
1082 rs_grid => rs_v(igrid_level)
1083 map_it2(ipgf, jpgf) =
map_gaussian_here(rs_grid, cell%h_inv, ra, offset, group_size, my_pos)
1088 IF (any(map_it2(1:npgfa(iset), 1:npgfa(jset))))
THEN
1090 IF (calculate_forces)
THEN
1091 CALL dgemm(
"N",
"N", ncoa, nsgf_seta(jset), nsgf_seta(iset), &
1092 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
1093 pblk(sgfa, sgfb),
SIZE(pblk, 1), &
1094 0.0_dp, work(1, 1),
SIZE(work, 1))
1095 CALL dgemm(
"N",
"T", ncoa, ncob, nsgf_seta(jset), &
1096 1.0_dp, work(1, 1),
SIZE(work, 1), &
1097 sphi_a(1, sgfb),
SIZE(sphi_a, 1), &
1098 0.0_dp, pab(1, 1),
SIZE(pab, 1))
1101 DO ipgf = 1, npgfa(iset)
1102 na1 = (ipgf - 1)*
ncoset(la_max(iset))
1103 na2 = ipgf*
ncoset(la_max(iset))
1104 DO jpgf = 1, npgfa(jset)
1105 nb1 = (jpgf - 1)*
ncoset(la_max(jset))
1106 nb2 = jpgf*
ncoset(la_max(jset))
1107 zetp = zeta(ipgf, iset) + zeta(jpgf, jset)
1109 rs_grid => rs_v(igrid_level)
1112 lb_min=la_min(jset), lb_max=la_max(jset), &
1113 ra=ra, rb=ra, rp=ra, &
1114 zetp=zetp, eps=eps_rho_rspace, &
1115 prefactor=1.0_dp, cutoff=1.0_dp)
1117 IF (map_it2(ipgf, jpgf))
THEN
1118 IF (calculate_forces)
THEN
1120 la_max(iset), zeta(ipgf, iset), la_min(iset), &
1121 la_max(jset), zeta(jpgf, jset), la_min(jset), &
1122 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
1123 rsgrid=rs_v(igrid_level), &
1124 hab=hab, pab=pab, o1=na1, o2=nb1, &
1126 calculate_forces=.true., &
1127 force_a=force_a, force_b=force_b, &
1128 use_virial=use_virial, my_virial_a=my_virial_a, my_virial_b=my_virial_b)
1131 la_max(iset), zeta(ipgf, iset), la_min(iset), &
1132 la_max(jset), zeta(jpgf, jset), la_min(jset), &
1133 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
1134 rsgrid=rs_v(igrid_level), &
1135 hab=hab, o1=na1, o2=nb1, &
1137 calculate_forces=.false.)
1143 CALL dgemm(
"N",
"N", ncoa, nsgf_seta(jset), ncob, &
1144 1.0_dp, hab(1, 1),
SIZE(hab, 1), &
1145 sphi_a(1, sgfb),
SIZE(sphi_a, 1), &
1146 0.0_dp, work(1, 1),
SIZE(work, 1))
1147 CALL dgemm(
"T",
"N", nsgf_seta(iset), nsgf_seta(jset), ncoa, &
1148 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
1149 work(1, 1),
SIZE(work, 1), &
1150 1.0_dp, hmat(sgfa, sgfb),
SIZE(hmat, 1))
1154 DEALLOCATE (map_it2)
1156 CALL para_env%sum(hmat)
1157 CALL dbcsr_get_block_p(matrix=ksmat, row=atom_a, col=atom_a, block=h_block, found=found)
1159 h_block(1:nsgfa, 1:nsgfa) = h_block(1:nsgfa, 1:nsgfa) + hmat(1:nsgfa, 1:nsgfa)
1161 IF (calculate_forces)
THEN
1162 force(ikind)%rho_elec(:, iatom) = force(ikind)%rho_elec(:, iatom) + 2.0_dp*force_a(:)
1163 IF (use_virial)
THEN
1164 IF (use_virial .AND. calculate_forces)
THEN
1165 virial%pv_lrigpw = virial%pv_lrigpw + 2.0_dp*my_virial_a
1166 virial%pv_virial = virial%pv_virial + 2.0_dp*my_virial_a
1171 DEALLOCATE (hab, work, hmat)
1172 IF (calculate_forces)
DEALLOCATE (pab, pblk)
1175 CALL timestop(handle)
1193 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: f_coef
1194 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: f_integral
1195 LOGICAL,
INTENT(IN) :: calculate_forces
1196 CHARACTER(len=*),
INTENT(IN) :: basis_type
1198 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_function'
1200 INTEGER :: atom_a, group_size, handle, i, iatom, igrid_level, ikind, ipgf, iset, maxco, &
1201 maxsgf_set, my_pos, na1, natom, ncoa, nkind, nseta, offset, sgfa
1202 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atom_of_kind
1203 INTEGER,
DIMENSION(:),
POINTER :: la_max, la_min, npgfa, nsgfa
1204 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgfa
1205 LOGICAL :: use_virial
1206 REAL(kind=
dp) :: eps_rho_rspace, radius
1207 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
1208 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
1209 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab, sphi_a, work, zeta
1218 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1223 CALL timeset(routinen, handle)
1225 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
1226 gridlevel_info => pw_env%gridlevel_info
1232 atomic_kind_set=atomic_kind_set, &
1233 qs_kind_set=qs_kind_set, &
1236 dft_control=dft_control, &
1239 particle_set=particle_set, &
1244 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
1245 IF (use_virial)
THEN
1246 cpabort(
"Virial NYA")
1249 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
1252 maxco=maxco, maxsgf_set=maxsgf_set, basis_type=basis_type)
1253 ALLOCATE (hab(maxco, 1), pab(maxco, 1), work(maxco, 1))
1256 my_pos = v_rspace%pw_grid%para%group%mepos
1257 group_size = v_rspace%pw_grid%para%group%num_pe
1260 ikind = particle_set(iatom)%atomic_kind%kind_number
1261 atom_a = atom_of_kind(iatom)
1262 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=basis_type)
1264 first_sgf=first_sgfa, &
1272 ra(:) =
pbc(particle_set(iatom)%r, cell)
1276 my_virial_a(:, :) = 0._dp
1277 my_virial_b(:, :) = 0._dp
1281 ncoa = npgfa(iset)*
ncoset(la_max(iset))
1282 sgfa = first_sgfa(1, iset)
1287 DO i = 1, nsgfa(iset)
1288 work(i, 1) = f_coef(offset + i)
1291 CALL dgemm(
"N",
"N", ncoa, 1, nsgfa(iset), &
1292 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
1293 work(1, 1),
SIZE(work, 1), &
1294 0.0_dp, pab(1, 1),
SIZE(pab, 1))
1296 DO ipgf = 1, npgfa(iset)
1298 na1 = (ipgf - 1)*
ncoset(la_max(iset))
1301 rs_grid => rs_v(igrid_level)
1303 IF (
map_gaussian_here(rs_grid, cell%h_inv, ra, offset, group_size, my_pos))
THEN
1305 lb_min=0, lb_max=0, ra=ra, rb=ra, rp=ra, &
1306 zetp=zeta(ipgf, iset), eps=eps_rho_rspace, &
1307 prefactor=1.0_dp, cutoff=1.0_dp)
1309 IF (calculate_forces)
THEN
1311 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
1312 lb_max=0, zetb=0.0_dp, lb_min=0, &
1313 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
1315 hab=hab, pab=pab, o1=na1, o2=0, radius=radius, &
1316 calculate_forces=.true., &
1317 force_a=force_a, force_b=force_b, &
1318 use_virial=use_virial, &
1319 my_virial_a=my_virial_a, my_virial_b=my_virial_b)
1322 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
1323 lb_max=0, zetb=0.0_dp, lb_min=0, &
1324 ra=ra, rab=[0.0_dp, 0.0_dp, 0.0_dp], &
1326 hab=hab, o1=na1, o2=0, radius=radius, &
1327 calculate_forces=.false.)
1334 CALL dgemm(
"T",
"N", nsgfa(iset), 1, ncoa, 1.0_dp, sphi_a(1, sgfa), &
1335 SIZE(sphi_a, 1), hab(1, 1),
SIZE(hab, 1), 0.0_dp, work(1, 1),
SIZE(work, 1))
1336 DO i = 1, nsgfa(iset)
1337 f_integral(offset + i) = work(i, 1)
1340 offset = offset + nsgfa(iset)
1344 IF (calculate_forces)
THEN
1345 force(ikind)%rho_elec(:, atom_a) = force(ikind)%rho_elec(:, atom_a) + force_a(:)
1346 IF (use_virial)
THEN
1347 virial%pv_virial = virial%pv_virial + my_virial_a
1353 DEALLOCATE (hab, pab, work)
1355 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)
...
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.