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, maxco, &
777 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))
860 DO iatom = 1, natom_of_kind
862 atom_a = atom_list(iatom)
863 IF (
PRESENT(atomlist))
THEN
864 IF (atomlist(atom_a) == 0) cycle
866 ra(:) =
pbc(particle_set(atom_a)%r, cell)
869 my_virial_a(:, :) = 0._dp
870 my_virial_b(:, :) = 0._dp
872 m1 = maxval(npgfa(1:nseta))
873 ALLOCATE (map_it(m1))
878 DO ipgf = 1, npgfa(iset)
880 rs_grid => rs_v(igrid_level)
881 map_it(ipgf) =
map_gaussian_here(rs_grid, cell%h_inv, ra, offset, group_size, my_pos)
885 IF (any(map_it(1:npgfa(iset))))
THEN
886 sgfa = first_sgfa(1, iset)
887 ncoa = npgfa(iset)*
ncoset(la_max(iset))
889 ALLOCATE (work_i(nsgf_seta(iset), 1))
893 IF (calculate_forces)
THEN
894 m1 = sgfa + nsgf_seta(iset) - 1
895 ALLOCATE (work_f(nsgf_seta(iset), 1))
896 work_f(1:nsgf_seta(iset), 1) = int_res(ikind)%acoef(iatom, sgfa:m1)
897 CALL dgemm(
"N",
"N", ncoa, 1, nsgf_seta(iset), 1.0_dp, sphi_a(1, sgfa), &
898 SIZE(sphi_a, 1), work_f(1, 1),
SIZE(work_f, 1), 0.0_dp, pab(1, 1), &
903 DO ipgf = 1, npgfa(iset)
904 na1 = (ipgf - 1)*
ncoset(la_max(iset))
906 rs_grid => rs_v(igrid_level)
909 lb_min=0, lb_max=0, ra=ra, rb=ra, rp=ra, &
910 zetp=zeta(ipgf, iset), eps=eps_rho_rspace, &
911 prefactor=1.0_dp, cutoff=1.0_dp)
913 IF (map_it(ipgf))
THEN
914 IF (.NOT. calculate_forces)
THEN
916 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
917 lb_max=0, zetb=0.0_dp, lb_min=0, &
918 ra=ra, rab=(/0.0_dp, 0.0_dp, 0.0_dp/), &
920 hab=hab, o1=na1, o2=0, radius=radius, &
921 calculate_forces=calculate_forces)
924 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
925 lb_max=0, zetb=0.0_dp, lb_min=0, &
926 ra=ra, rab=(/0.0_dp, 0.0_dp, 0.0_dp/), &
928 hab=hab, pab=pab, o1=na1, o2=0, radius=radius, &
929 calculate_forces=calculate_forces, &
930 force_a=force_a, force_b=force_b, &
931 use_virial=use_virial, &
932 my_virial_a=my_virial_a, my_virial_b=my_virial_b)
937 CALL dgemm(
"T",
"N", nsgf_seta(iset), 1, ncoa, 1.0_dp, sphi_a(1, sgfa), &
938 SIZE(sphi_a, 1), hab(1, 1),
SIZE(hab, 1), 0.0_dp, work_i(1, 1),
SIZE(work_i, 1))
940 int_res(ikind)%v_int(iatom, sgfa:sgfa - 1 + nsgf_seta(iset)) = &
941 int_res(ikind)%v_int(iatom, sgfa:sgfa - 1 + nsgf_seta(iset)) + work_i(1:nsgf_seta(iset), 1)
946 IF (calculate_forces)
THEN
947 int_res(ikind)%v_dfdr(iatom, :) = int_res(ikind)%v_dfdr(iatom, :) + force_a(:)
949 virial%pv_lrigpw = virial%pv_lrigpw + my_virial_a
950 virial%pv_virial = virial%pv_virial + my_virial_a
958 DEALLOCATE (hab, pab)
961 CALL timestop(handle)
978 TYPE(
dbcsr_type),
INTENT(INOUT) :: ksmat, pmat
980 LOGICAL,
INTENT(IN) :: calculate_forces
981 CHARACTER(len=*),
INTENT(IN) :: basis_type
983 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_v_rspace_diagonal'
985 INTEGER :: atom_a, group_size, handle, iatom, igrid_level, ikind, ipgf, iset, jpgf, jset, &
986 m1, maxco, maxsgf_set, my_pos, na1, na2, natom_of_kind, nb1, nb2, ncoa, ncob, nkind, &
987 nseta, nsgfa, offset, sgfa, sgfb
988 INTEGER,
DIMENSION(:),
POINTER :: atom_list, la_max, la_min, npgfa, &
990 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgfa
991 LOGICAL :: found, use_virial
992 LOGICAL,
ALLOCATABLE,
DIMENSION(:, :) :: map_it2
993 REAL(kind=
dp) :: eps_rho_rspace, radius, zetp
994 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
995 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
996 REAL(kind=
dp),
DIMENSION(:),
POINTER :: set_radius_a
997 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: h_block, hab, hmat, p_block, pab, pblk, &
998 rpgfa, sphi_a, work, zeta
1008 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1013 CALL timeset(routinen, handle)
1015 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
1019 gridlevel_info => pw_env%gridlevel_info
1022 atomic_kind_set=atomic_kind_set, &
1023 qs_kind_set=qs_kind_set, &
1025 dft_control=dft_control, &
1027 particle_set=particle_set, &
1032 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
1033 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
1036 my_pos = v_rspace%pw_grid%para%group%mepos
1037 group_size = v_rspace%pw_grid%para%group%num_pe
1041 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
1042 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=basis_type)
1044 lmax=la_max, lmin=la_min, maxco=maxco, maxsgf_set=maxsgf_set, &
1045 npgf=npgfa, nset=nseta, nsgf_set=nsgf_seta, nsgf=nsgfa, &
1046 first_sgf=first_sgfa, pgf_radius=rpgfa, set_radius=set_radius_a, &
1047 sphi=sphi_a, zet=zeta)
1049 ALLOCATE (hab(maxco, maxco), work(maxco, maxsgf_set), hmat(nsgfa, nsgfa))
1050 IF (calculate_forces)
ALLOCATE (pab(maxco, maxco), pblk(nsgfa, nsgfa))
1052 DO iatom = 1, natom_of_kind
1053 atom_a = atom_list(iatom)
1054 ra(:) =
pbc(particle_set(atom_a)%r, cell)
1056 IF (calculate_forces)
THEN
1057 CALL dbcsr_get_block_p(matrix=pmat, row=atom_a, col=atom_a, block=p_block, found=found)
1059 pblk(1:nsgfa, 1:nsgfa) = p_block(1:nsgfa, 1:nsgfa)
1063 CALL para_env%sum(pblk)
1066 IF (use_virial)
THEN
1067 my_virial_a = 0.0_dp
1068 my_virial_b = 0.0_dp
1071 m1 = maxval(npgfa(1:nseta))
1072 ALLOCATE (map_it2(m1, m1))
1074 sgfa = first_sgfa(1, iset)
1075 ncoa = npgfa(iset)*
ncoset(la_max(iset))
1077 sgfb = first_sgfa(1, jset)
1078 ncob = npgfa(jset)*
ncoset(la_max(jset))
1081 DO ipgf = 1, npgfa(iset)
1082 DO jpgf = 1, npgfa(jset)
1083 zetp = zeta(ipgf, iset) + zeta(jpgf, jset)
1085 rs_grid => rs_v(igrid_level)
1086 map_it2(ipgf, jpgf) =
map_gaussian_here(rs_grid, cell%h_inv, ra, offset, group_size, my_pos)
1091 IF (any(map_it2(1:npgfa(iset), 1:npgfa(jset))))
THEN
1093 IF (calculate_forces)
THEN
1094 CALL dgemm(
"N",
"N", ncoa, nsgf_seta(jset), nsgf_seta(iset), &
1095 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
1096 pblk(sgfa, sgfb),
SIZE(pblk, 1), &
1097 0.0_dp, work(1, 1),
SIZE(work, 1))
1098 CALL dgemm(
"N",
"T", ncoa, ncob, nsgf_seta(jset), &
1099 1.0_dp, work(1, 1),
SIZE(work, 1), &
1100 sphi_a(1, sgfb),
SIZE(sphi_a, 1), &
1101 0.0_dp, pab(1, 1),
SIZE(pab, 1))
1104 DO ipgf = 1, npgfa(iset)
1105 na1 = (ipgf - 1)*
ncoset(la_max(iset))
1106 na2 = ipgf*
ncoset(la_max(iset))
1107 DO jpgf = 1, npgfa(jset)
1108 nb1 = (jpgf - 1)*
ncoset(la_max(jset))
1109 nb2 = jpgf*
ncoset(la_max(jset))
1110 zetp = zeta(ipgf, iset) + zeta(jpgf, jset)
1112 rs_grid => rs_v(igrid_level)
1115 lb_min=la_min(jset), lb_max=la_max(jset), &
1116 ra=ra, rb=ra, rp=ra, &
1117 zetp=zetp, eps=eps_rho_rspace, &
1118 prefactor=1.0_dp, cutoff=1.0_dp)
1120 IF (map_it2(ipgf, jpgf))
THEN
1121 IF (calculate_forces)
THEN
1123 la_max(iset), zeta(ipgf, iset), la_min(iset), &
1124 la_max(jset), zeta(jpgf, jset), la_min(jset), &
1125 ra=ra, rab=(/0.0_dp, 0.0_dp, 0.0_dp/), &
1126 rsgrid=rs_v(igrid_level), &
1127 hab=hab, pab=pab, o1=na1, o2=nb1, &
1129 calculate_forces=.true., &
1130 force_a=force_a, force_b=force_b, &
1131 use_virial=use_virial, my_virial_a=my_virial_a, my_virial_b=my_virial_b)
1134 la_max(iset), zeta(ipgf, iset), la_min(iset), &
1135 la_max(jset), zeta(jpgf, jset), la_min(jset), &
1136 ra=ra, rab=(/0.0_dp, 0.0_dp, 0.0_dp/), &
1137 rsgrid=rs_v(igrid_level), &
1138 hab=hab, o1=na1, o2=nb1, &
1140 calculate_forces=.false.)
1146 CALL dgemm(
"N",
"N", ncoa, nsgf_seta(jset), ncob, &
1147 1.0_dp, hab(1, 1),
SIZE(hab, 1), &
1148 sphi_a(1, sgfb),
SIZE(sphi_a, 1), &
1149 0.0_dp, work(1, 1),
SIZE(work, 1))
1150 CALL dgemm(
"T",
"N", nsgf_seta(iset), nsgf_seta(jset), ncoa, &
1151 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
1152 work(1, 1),
SIZE(work, 1), &
1153 1.0_dp, hmat(sgfa, sgfb),
SIZE(hmat, 1))
1157 DEALLOCATE (map_it2)
1159 CALL para_env%sum(hmat)
1160 CALL dbcsr_get_block_p(matrix=ksmat, row=atom_a, col=atom_a, block=h_block, found=found)
1162 h_block(1:nsgfa, 1:nsgfa) = h_block(1:nsgfa, 1:nsgfa) + hmat(1:nsgfa, 1:nsgfa)
1164 IF (calculate_forces)
THEN
1165 force(ikind)%rho_elec(:, iatom) = force(ikind)%rho_elec(:, iatom) + 2.0_dp*force_a(:)
1166 IF (use_virial)
THEN
1167 IF (use_virial .AND. calculate_forces)
THEN
1168 virial%pv_lrigpw = virial%pv_lrigpw + 2.0_dp*my_virial_a
1169 virial%pv_virial = virial%pv_virial + 2.0_dp*my_virial_a
1174 DEALLOCATE (hab, work, hmat)
1175 IF (calculate_forces)
DEALLOCATE (pab, pblk)
1178 CALL timestop(handle)
1196 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: f_coef
1197 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: f_integral
1198 LOGICAL,
INTENT(IN) :: calculate_forces
1199 CHARACTER(len=*),
INTENT(IN) :: basis_type
1201 CHARACTER(len=*),
PARAMETER :: routinen =
'integrate_function'
1203 INTEGER :: atom_a, group_size, handle, i, iatom, igrid_level, ikind, ipgf, iset, maxco, &
1204 maxsgf_set, my_pos, na1, natom, ncoa, nkind, nseta, offset, sgfa
1205 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atom_of_kind
1206 INTEGER,
DIMENSION(:),
POINTER :: la_max, la_min, npgfa, nsgfa
1207 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgfa
1208 LOGICAL :: use_virial
1209 REAL(kind=
dp) :: eps_rho_rspace, radius
1210 REAL(kind=
dp),
DIMENSION(3) :: force_a, force_b, ra
1211 REAL(kind=
dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
1212 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hab, pab, sphi_a, work, zeta
1221 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1226 CALL timeset(routinen, handle)
1228 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
1229 gridlevel_info => pw_env%gridlevel_info
1235 atomic_kind_set=atomic_kind_set, &
1236 qs_kind_set=qs_kind_set, &
1239 dft_control=dft_control, &
1242 particle_set=particle_set, &
1247 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
1248 IF (use_virial)
THEN
1249 cpabort(
"Virial NYA")
1252 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
1255 maxco=maxco, maxsgf_set=maxsgf_set, basis_type=basis_type)
1256 ALLOCATE (hab(maxco, 1), pab(maxco, 1), work(maxco, 1))
1259 my_pos = v_rspace%pw_grid%para%group%mepos
1260 group_size = v_rspace%pw_grid%para%group%num_pe
1263 ikind = particle_set(iatom)%atomic_kind%kind_number
1264 atom_a = atom_of_kind(iatom)
1265 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=basis_type)
1267 first_sgf=first_sgfa, &
1275 ra(:) =
pbc(particle_set(iatom)%r, cell)
1279 my_virial_a(:, :) = 0._dp
1280 my_virial_b(:, :) = 0._dp
1284 ncoa = npgfa(iset)*
ncoset(la_max(iset))
1285 sgfa = first_sgfa(1, iset)
1290 DO i = 1, nsgfa(iset)
1291 work(i, 1) = f_coef(offset + i)
1294 CALL dgemm(
"N",
"N", ncoa, 1, nsgfa(iset), &
1295 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
1296 work(1, 1),
SIZE(work, 1), &
1297 0.0_dp, pab(1, 1),
SIZE(pab, 1))
1299 DO ipgf = 1, npgfa(iset)
1301 na1 = (ipgf - 1)*
ncoset(la_max(iset))
1304 rs_grid => rs_v(igrid_level)
1306 IF (
map_gaussian_here(rs_grid, cell%h_inv, ra, offset, group_size, my_pos))
THEN
1308 lb_min=0, lb_max=0, ra=ra, rb=ra, rp=ra, &
1309 zetp=zeta(ipgf, iset), eps=eps_rho_rspace, &
1310 prefactor=1.0_dp, cutoff=1.0_dp)
1312 IF (calculate_forces)
THEN
1314 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
1315 lb_max=0, zetb=0.0_dp, lb_min=0, &
1316 ra=ra, rab=(/0.0_dp, 0.0_dp, 0.0_dp/), &
1318 hab=hab, pab=pab, o1=na1, o2=0, radius=radius, &
1319 calculate_forces=.true., &
1320 force_a=force_a, force_b=force_b, &
1321 use_virial=use_virial, &
1322 my_virial_a=my_virial_a, my_virial_b=my_virial_b)
1325 zeta=zeta(ipgf, iset), la_min=la_min(iset), &
1326 lb_max=0, zetb=0.0_dp, lb_min=0, &
1327 ra=ra, rab=(/0.0_dp, 0.0_dp, 0.0_dp/), &
1329 hab=hab, o1=na1, o2=0, radius=radius, &
1330 calculate_forces=.false.)
1337 CALL dgemm(
"T",
"N", nsgfa(iset), 1, ncoa, 1.0_dp, sphi_a(1, sgfa), &
1338 SIZE(sphi_a, 1), hab(1, 1),
SIZE(hab, 1), 0.0_dp, work(1, 1),
SIZE(work, 1))
1339 DO i = 1, nsgfa(iset)
1340 f_integral(offset + i) = work(i, 1)
1343 offset = offset + nsgfa(iset)
1347 IF (calculate_forces)
THEN
1348 force(ikind)%rho_elec(:, atom_a) = force(ikind)%rho_elec(:, atom_a) + force_a(:)
1349 IF (use_virial)
THEN
1350 virial%pv_virial = virial%pv_virial + my_virial_a
1356 DEALLOCATE (hab, pab, work)
1358 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, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
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, 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.