48 #include "./base/base_uses.f90"
54 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'hartree_local_methods'
69 TYPE(hartree_local_type),
POINTER :: hartree_local
70 INTEGER,
INTENT(IN) :: natom
72 CHARACTER(len=*),
PARAMETER :: routinen =
'init_coulomb_local'
75 TYPE(ecoul_1center_type),
DIMENSION(:),
POINTER :: ecoul_1c
77 CALL timeset(routinen, handle)
82 hartree_local%ecoul_1c => ecoul_1c
104 REAL(
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vrad_h, vrad_s
105 TYPE(rho_atom_coeff),
DIMENSION(:),
INTENT(IN) :: rrad_h, rrad_s
106 REAL(
dp),
DIMENSION(:, :),
INTENT(IN) :: rrad_0
107 REAL(
dp),
DIMENSION(:),
INTENT(IN) :: rrad_z
108 TYPE(grid_atom_type),
POINTER :: grid_atom
110 CHARACTER(len=*),
PARAMETER :: routinen =
'calculate_Vh_1center'
112 INTEGER :: handle, ir, iso, ispin, l_ang, &
113 max_s_harm, nchannels, nr, nspins
114 REAL(
dp) :: i1_down, i1_up, i2_down, i2_up, prefactor
115 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: rho_1, rho_2
116 REAL(
dp),
DIMENSION(:),
POINTER :: wr
117 REAL(
dp),
DIMENSION(:, :),
POINTER :: oor2l, r2l
119 CALL timeset(routinen, handle)
122 max_s_harm =
SIZE(vrad_h, 2)
123 nspins =
SIZE(rrad_h, 1)
124 nchannels =
SIZE(rrad_0, 2)
126 r2l => grid_atom%rad2l
127 oor2l => grid_atom%oorad2l
130 ALLOCATE (rho_1(nr, max_s_harm), rho_2(nr, max_s_harm))
135 rho_1(:, 1) = rrad_z(:)
136 rho_2(:, 1) = rrad_0(:, 1)
138 DO iso = 2, nchannels
139 rho_2(:, iso) = rrad_0(:, iso)
142 DO iso = 1, max_s_harm
144 rho_1(:, iso) = rho_1(:, iso) + rrad_h(ispin)%r_coef(:, iso)
145 rho_2(:, iso) = rho_2(:, iso) + rrad_s(ispin)%r_coef(:, iso)
148 l_ang =
indso(1, iso)
149 prefactor =
fourpi/(2._dp*l_ang + 1._dp)
151 rho_1(:, iso) = rho_1(:, iso)*wr(:)
152 rho_2(:, iso) = rho_2(:, iso)*wr(:)
159 i1_up = r2l(nr, l_ang)*rho_1(nr, iso)
160 i2_up = r2l(nr, l_ang)*rho_2(nr, iso)
162 DO ir = nr - 1, 1, -1
163 i1_down = i1_down + oor2l(ir, l_ang + 1)*rho_1(ir, iso)
164 i2_down = i2_down + oor2l(ir, l_ang + 1)*rho_2(ir, iso)
167 vrad_h(nr, iso) = vrad_h(nr, iso) + prefactor* &
168 (oor2l(nr, l_ang + 1)*i1_up + r2l(nr, l_ang)*i1_down)
169 vrad_s(nr, iso) = vrad_s(nr, iso) + prefactor* &
170 (oor2l(nr, l_ang + 1)*i2_up + r2l(nr, l_ang)*i2_down)
172 DO ir = nr - 1, 1, -1
173 i1_up = i1_up + r2l(ir, l_ang)*rho_1(ir, iso)
174 i1_down = i1_down - oor2l(ir, l_ang + 1)*rho_1(ir, iso)
175 i2_up = i2_up + r2l(ir, l_ang)*rho_2(ir, iso)
176 i2_down = i2_down - oor2l(ir, l_ang + 1)*rho_2(ir, iso)
178 vrad_h(ir, iso) = vrad_h(ir, iso) + prefactor* &
179 (oor2l(ir, l_ang + 1)*i1_up + r2l(ir, l_ang)*i1_down)
180 vrad_s(ir, iso) = vrad_s(ir, iso) + prefactor* &
181 (oor2l(ir, l_ang + 1)*i2_up + r2l(ir, l_ang)*i2_down)
187 DEALLOCATE (rho_1, rho_2)
189 CALL timestop(handle)
210 SUBROUTINE vh_1c_gg_integrals(qs_env, energy_hartree_1c, ecoul_1c, local_rho_set, para_env, tddft, local_rho_set_2nd, &
213 TYPE(qs_environment_type),
POINTER :: qs_env
214 REAL(kind=
dp),
INTENT(out) :: energy_hartree_1c
215 TYPE(ecoul_1center_type),
DIMENSION(:),
POINTER :: ecoul_1c
216 TYPE(local_rho_type),
POINTER :: local_rho_set
217 TYPE(mp_para_env_type),
POINTER :: para_env
218 LOGICAL,
INTENT(IN) :: tddft
219 TYPE(local_rho_type),
OPTIONAL,
POINTER :: local_rho_set_2nd
220 LOGICAL,
INTENT(IN),
OPTIONAL :: core_2nd
222 CHARACTER(LEN=*),
PARAMETER :: routinen =
'Vh_1c_gg_integrals'
224 INTEGER :: bo(2), handle, iat, iatom, ikind, ipgf1, is1, iset1, iso, l_ang, llmax, lmax0, &
225 lmax0_2nd, lmax_0, m1, max_iso, max_iso_not0, max_s_harm, maxl, maxso, mepos, n1, nat, &
226 nchan_0, nkind, nr, nset, nsotot, nspins, num_pe
227 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: cg_n_list
228 INTEGER,
ALLOCATABLE,
DIMENSION(:, :, :) :: cg_list
229 INTEGER,
DIMENSION(:),
POINTER :: atom_list, lmax, lmin, npgf
230 LOGICAL :: core_charge, l_2nd_local_rho, &
231 my_core_2nd, my_periodic, paw_atom
232 REAL(
dp) :: back_ch, factor
233 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: gexp, sqrtwr
234 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: avh1b_00, avh1b_hh, avh1b_ss, g0_h_w
235 REAL(
dp),
DIMENSION(:),
POINTER :: rrad_z, vrrad_z
236 REAL(
dp),
DIMENSION(:, :),
POINTER :: g0_h, g0_h_2nd, gsph, rrad_0, vh1_h, &
238 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: my_cg, qlm_gg, qlm_gg_2nd
239 TYPE(atomic_kind_type),
DIMENSION(:),
POINTER :: atomic_kind_set
240 TYPE(cell_type),
POINTER :: cell
241 TYPE(dft_control_type),
POINTER :: dft_control
242 TYPE(grid_atom_type),
POINTER :: grid_atom
243 TYPE(gto_basis_set_type),
POINTER :: basis_1c
244 TYPE(harmonics_atom_type),
POINTER :: harmonics
245 TYPE(pw_env_type),
POINTER :: pw_env
246 TYPE(pw_poisson_type),
POINTER :: poisson_env
247 TYPE(qs_charges_type),
POINTER :: qs_charges
248 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
249 TYPE(rho0_atom_type),
DIMENSION(:),
POINTER :: rho0_atom_set, rho0_atom_set_2nd
250 TYPE(rho0_mpole_type),
POINTER :: rho0_mpole, rho0_mpole_2nd
251 TYPE(rho_atom_type),
DIMENSION(:),
POINTER :: rho_atom_set, rho_atom_set_2nd
252 TYPE(rho_atom_type),
POINTER :: rho_atom
253 TYPE(rhoz_type),
DIMENSION(:),
POINTER :: rhoz_set, rhoz_set_2nd
255 CALL timeset(routinen, handle)
257 NULLIFY (cell, dft_control, poisson_env, pw_env, qs_charges)
258 NULLIFY (atomic_kind_set, qs_kind_set, rho_atom_set, rho0_atom_set)
259 NULLIFY (rho0_mpole, rhoz_set)
260 NULLIFY (atom_list, grid_atom, harmonics)
261 NULLIFY (basis_1c, lmin, lmax, npgf, zet)
265 cell=cell, dft_control=dft_control, &
266 atomic_kind_set=atomic_kind_set, &
267 qs_kind_set=qs_kind_set, &
268 pw_env=pw_env, qs_charges=qs_charges)
270 CALL pw_env_get(pw_env, poisson_env=poisson_env)
273 back_ch = qs_charges%background*cell%deth
276 CALL get_local_rho(local_rho_set, rho_atom_set, rho0_atom_set, rho0_mpole, rhoz_set)
279 l_2nd_local_rho = .false.
280 IF (
PRESENT(local_rho_set_2nd))
THEN
281 l_2nd_local_rho = .true.
282 NULLIFY (rho_atom_set_2nd, rho0_atom_set_2nd, rhoz_set_2nd)
283 CALL get_local_rho(local_rho_set_2nd, rho_atom_set_2nd, rho0_atom_set_2nd, rho0_mpole_2nd, rhoz_set=rhoz_set_2nd)
286 nkind =
SIZE(atomic_kind_set, 1)
287 nspins = dft_control%nspins
289 core_charge = .NOT. tddft
291 IF (
PRESENT(core_2nd)) my_core_2nd = .NOT. core_2nd
306 energy_hartree_1c = 0.0_dp
311 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=nat)
313 grid_atom=grid_atom, &
314 harmonics=harmonics, ngrid_rad=nr, &
315 max_iso_not0=max_iso_not0, paw_atom=paw_atom)
317 basis_set=basis_1c, basis_type=
"GAPW_1C")
322 maxso=maxso, npgf=npgf, maxl=maxl, &
325 max_s_harm = harmonics%max_s_harm
326 llmax = harmonics%llmax
329 ALLOCATE (gsph(nr, nsotot))
331 ALLOCATE (sqrtwr(nr), g0_h_w(nr, 0:lmax_0))
333 NULLIFY (vh1_h, vh1_s)
334 ALLOCATE (vh1_h(nr, max_iso_not0))
335 ALLOCATE (vh1_s(nr, max_iso_not0))
337 ALLOCATE (avh1b_hh(nsotot, nsotot))
338 ALLOCATE (avh1b_ss(nsotot, nsotot))
339 ALLOCATE (avh1b_00(nsotot, nsotot))
340 ALLOCATE (cg_list(2,
nsoset(maxl)**2, max_s_harm), cg_n_list(max_s_harm))
342 NULLIFY (qlm_gg, g0_h)
345 qlm_gg=qlm_gg, g0_h=g0_h)
347 IF (
PRESENT(local_rho_set_2nd))
THEN
348 NULLIFY (qlm_gg_2nd, g0_h_2nd)
350 l0_ikind=lmax0_2nd, &
351 qlm_gg=qlm_gg_2nd, g0_h=g0_h_2nd)
355 IF (nchan_0 > max_iso_not0) cpabort(
"channels for rho0 > # max of spherical harmonics")
357 NULLIFY (rrad_z, my_cg)
358 my_cg => harmonics%my_CG
366 sqrtwr(1:nr) = sqrt(grid_atom%wr(1:nr))
368 g0_h_w(1:nr, l_ang) = g0_h(1:nr, l_ang)*grid_atom%wr(1:nr)
374 DO ipgf1 = 1, npgf(iset1)
375 gexp(1:nr) = exp(-zet(ipgf1, iset1)*grid_atom%rad2(1:nr))*sqrtwr(1:nr)
376 DO is1 =
nsoset(lmin(iset1) - 1) + 1,
nsoset(lmax(iset1))
377 iso = is1 + (ipgf1 - 1)*n1 + m1
378 l_ang =
indso(1, is1)
379 gsph(1:nr, iso) = grid_atom%rad2l(1:nr, l_ang)*gexp(1:nr)
386 num_pe = para_env%num_pe
387 mepos = para_env%mepos
390 DO iat = bo(1), bo(2)
391 iatom = atom_list(iat)
392 rho_atom => rho_atom_set(iatom)
394 NULLIFY (rrad_z, vrrad_z, rrad_0, vrrad_0)
395 IF (core_charge)
THEN
396 rrad_z => rhoz_set(ikind)%r_coef
398 IF (my_core_2nd)
THEN
399 IF (l_2nd_local_rho)
THEN
400 vrrad_z => rhoz_set_2nd(ikind)%vr_coef
402 vrrad_z => rhoz_set(ikind)%vr_coef
405 rrad_0 => rho0_atom_set(iatom)%rho0_rad_h%r_coef
406 vrrad_0 => rho0_atom_set(iatom)%vrho0_rad_h%r_coef
407 IF (l_2nd_local_rho)
THEN
408 rho_atom => rho_atom_set_2nd(iatom)
409 vrrad_0 => rho0_atom_set_2nd(iatom)%vrho0_rad_h%r_coef
411 IF (my_periodic .AND. back_ch .GT. 1.e-3_dp)
THEN
412 factor = -2.0_dp*
pi/3.0_dp*sqrt(
fourpi)*qs_charges%background
417 CALL vh_1c_atom_potential(rho_atom, vrrad_0, &
418 grid_atom, my_core_2nd, vrrad_z, vh1_h, vh1_s, &
419 nchan_0, nspins, max_iso_not0, factor)
421 IF (l_2nd_local_rho) rho_atom => rho_atom_set(iatom)
423 CALL vh_1c_atom_energy(energy_hartree_1c, ecoul_1c, rho_atom, rrad_0, &
424 grid_atom, iatom, core_charge, rrad_z, vh1_h, vh1_s, &
425 nchan_0, nspins, max_iso_not0)
427 IF (l_2nd_local_rho) rho_atom => rho_atom_set_2nd(iatom)
429 CALL vh_1c_atom_integrals(rho_atom, &
432 avh1b_hh, avh1b_ss, avh1b_00, vh1_h, vh1_s, max_iso_not0, &
433 max_s_harm, llmax, cg_list, cg_n_list, &
434 nset, npgf, lmin, lmax, nsotot, maxso, nspins, nchan_0, gsph, &
435 g0_h_w, my_cg, qlm_gg)
439 DEALLOCATE (avh1b_hh)
440 DEALLOCATE (avh1b_ss)
441 DEALLOCATE (avh1b_00)
442 DEALLOCATE (vh1_h, vh1_s)
443 DEALLOCATE (cg_list, cg_n_list)
446 DEALLOCATE (sqrtwr, g0_h_w)
455 CALL para_env%sum(energy_hartree_1c)
457 CALL timestop(handle)
477 SUBROUTINE vh_1c_atom_potential(rho_atom, vrrad_0, &
478 grid_atom, core_charge, vrrad_z, Vh1_h, Vh1_s, &
479 nchan_0, nspins, max_iso_not0, bfactor)
481 TYPE(rho_atom_type),
POINTER :: rho_atom
482 REAL(
dp),
DIMENSION(:, :),
POINTER :: vrrad_0
483 TYPE(grid_atom_type),
POINTER :: grid_atom
484 LOGICAL,
INTENT(IN) :: core_charge
485 REAL(
dp),
DIMENSION(:),
POINTER :: vrrad_z
486 REAL(
dp),
DIMENSION(:, :),
POINTER :: vh1_h, vh1_s
487 INTEGER,
INTENT(IN) :: nchan_0, nspins, max_iso_not0
488 REAL(
dp),
INTENT(IN) :: bfactor
490 INTEGER :: ir, iso, ispin, nr
491 TYPE(rho_atom_coeff),
DIMENSION(:),
POINTER :: vr_h, vr_s
496 CALL get_rho_atom(rho_atom=rho_atom, vrho_rad_h=vr_h, vrho_rad_s=vr_s)
501 IF (core_charge) vh1_h(:, 1) = vrrad_z(:)
504 vh1_s(:, iso) = vrrad_0(:, iso)
508 DO iso = 1, max_iso_not0
509 vh1_h(:, iso) = vh1_h(:, iso) + vr_h(ispin)%r_coef(:, iso)
510 vh1_s(:, iso) = vh1_s(:, iso) + vr_s(ispin)%r_coef(:, iso)
514 IF (bfactor /= 0._dp)
THEN
516 vh1_h(ir, 1) = vh1_h(ir, 1) + bfactor*grid_atom%rad2(ir)*grid_atom%wr(ir)
517 vh1_s(ir, 1) = vh1_s(ir, 1) + bfactor*grid_atom%rad2(ir)*grid_atom%wr(ir)
521 END SUBROUTINE vh_1c_atom_potential
541 SUBROUTINE vh_1c_atom_energy(energy_hartree_1c, ecoul_1c, rho_atom, rrad_0, &
542 grid_atom, iatom, core_charge, rrad_z, Vh1_h, Vh1_s, &
543 nchan_0, nspins, max_iso_not0)
545 REAL(
dp),
INTENT(INOUT) :: energy_hartree_1c
546 TYPE(ecoul_1center_type),
DIMENSION(:),
POINTER :: ecoul_1c
547 TYPE(rho_atom_type),
POINTER :: rho_atom
548 REAL(
dp),
DIMENSION(:, :),
POINTER :: rrad_0
549 TYPE(grid_atom_type),
POINTER :: grid_atom
550 INTEGER,
INTENT(IN) :: iatom
551 LOGICAL,
INTENT(IN) :: core_charge
552 REAL(
dp),
DIMENSION(:),
POINTER :: rrad_z
553 REAL(
dp),
DIMENSION(:, :),
POINTER :: vh1_h, vh1_s
554 INTEGER,
INTENT(IN) :: nchan_0, nspins, max_iso_not0
556 INTEGER :: iso, ispin, nr
557 REAL(
dp) :: ecoul_1_0, ecoul_1_h, ecoul_1_s, &
559 TYPE(rho_atom_coeff),
DIMENSION(:),
POINTER :: r_h, r_s
564 CALL get_rho_atom(rho_atom=rho_atom, rho_rad_h=r_h, rho_rad_s=r_s)
568 IF (core_charge)
THEN
569 ecoul_1_z = 0.5_dp*sum(vh1_h(:, 1)*rrad_z(:)*grid_atom%wr(:))
575 ecoul_1_0 = ecoul_1_0 + 0.5_dp*sum(vh1_s(:, iso)*rrad_0(:, iso)*grid_atom%wr(:))
582 DO iso = 1, max_iso_not0
583 ecoul_1_s = ecoul_1_s + 0.5_dp*sum(vh1_s(:, iso)*r_s(ispin)%r_coef(:, iso)*grid_atom%wr(:))
584 ecoul_1_h = ecoul_1_h + 0.5_dp*sum(vh1_h(:, iso)*r_h(ispin)%r_coef(:, iso)*grid_atom%wr(:))
588 CALL set_ecoul_1c(ecoul_1c, iatom, ecoul_1_z=ecoul_1_z, ecoul_1_0=ecoul_1_0)
589 CALL set_ecoul_1c(ecoul_1c=ecoul_1c, iatom=iatom, ecoul_1_h=ecoul_1_h, ecoul_1_s=ecoul_1_s)
591 energy_hartree_1c = energy_hartree_1c + ecoul_1_z - ecoul_1_0
592 energy_hartree_1c = energy_hartree_1c + ecoul_1_h - ecoul_1_s
594 END SUBROUTINE vh_1c_atom_energy
624 SUBROUTINE vh_1c_atom_integrals(rho_atom, &
625 aVh1b_hh, aVh1b_ss, aVh1b_00, Vh1_h, Vh1_s, max_iso_not0, &
626 max_s_harm, llmax, cg_list, cg_n_list, &
627 nset, npgf, lmin, lmax, nsotot, maxso, nspins, nchan_0, gsph, &
628 g0_h_w, my_CG, Qlm_gg)
630 TYPE(rho_atom_type),
POINTER :: rho_atom
631 REAL(
dp),
DIMENSION(:, :) :: avh1b_hh, avh1b_ss, avh1b_00
632 REAL(
dp),
DIMENSION(:, :),
POINTER :: vh1_h, vh1_s
633 INTEGER,
INTENT(IN) :: max_iso_not0, max_s_harm, llmax
634 INTEGER,
DIMENSION(:, :, :) :: cg_list
635 INTEGER,
DIMENSION(:) :: cg_n_list
636 INTEGER,
INTENT(IN) :: nset
637 INTEGER,
DIMENSION(:),
POINTER :: npgf, lmin, lmax
638 INTEGER,
INTENT(IN) :: nsotot, maxso, nspins, nchan_0
639 REAL(
dp),
DIMENSION(:, :),
POINTER :: gsph
640 REAL(
dp),
DIMENSION(:, 0:) :: g0_h_w
641 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: my_cg, qlm_gg
643 INTEGER :: icg, ipgf1, ipgf2, ir, is1, is2, iset1, &
644 iset2, iso, iso1, iso2, ispin, l_ang, &
645 m1, m2, max_iso_not0_local, n1, n2, nr
646 REAL(
dp) :: gvg_0, gvg_h, gvg_s
647 TYPE(rho_atom_coeff),
DIMENSION(:),
POINTER :: int_local_h, int_local_s
649 NULLIFY (int_local_h, int_local_s)
651 ga_vlocal_gb_h=int_local_h, &
652 ga_vlocal_gb_s=int_local_s)
665 CALL get_none0_cg_list(my_cg, lmin(iset1), lmax(iset1), lmin(iset2), lmax(iset2), &
666 max_s_harm, llmax, cg_list, cg_n_list, max_iso_not0_local)
669 DO ipgf1 = 1, npgf(iset1)
671 DO ipgf2 = 1, npgf(iset2)
674 l_ang =
indso(1, iso)
675 gvg_0 = sum(vh1_s(:, iso)*g0_h_w(:, l_ang))
676 DO icg = 1, cg_n_list(iso)
677 is1 = cg_list(1, icg, iso)
678 is2 = cg_list(2, icg, iso)
680 iso1 = is1 + n1*(ipgf1 - 1) + m1
681 iso2 = is2 + n2*(ipgf2 - 1) + m2
686 gvg_h = gvg_h + gsph(ir, iso1)*gsph(ir, iso2)*vh1_h(ir, iso)
687 gvg_s = gvg_s + gsph(ir, iso1)*gsph(ir, iso2)*vh1_s(ir, iso)
690 avh1b_hh(iso1, iso2) = avh1b_hh(iso1, iso2) + gvg_h*my_cg(is1, is2, iso)
691 avh1b_ss(iso1, iso2) = avh1b_ss(iso1, iso2) + gvg_s*my_cg(is1, is2, iso)
692 avh1b_00(iso1, iso2) = avh1b_00(iso1, iso2) + gvg_0*qlm_gg(iso1, iso2, iso)
697 DO iso = nchan_0 + 1, max_iso_not0
698 DO icg = 1, cg_n_list(iso)
699 is1 = cg_list(1, icg, iso)
700 is2 = cg_list(2, icg, iso)
702 iso1 = is1 + n1*(ipgf1 - 1) + m1
703 iso2 = is2 + n2*(ipgf2 - 1) + m2
708 gvg_h = gvg_h + gsph(ir, iso1)*gsph(ir, iso2)*vh1_h(ir, iso)
709 gvg_s = gvg_s + gsph(ir, iso1)*gsph(ir, iso2)*vh1_s(ir, iso)
712 avh1b_hh(iso1, iso2) = avh1b_hh(iso1, iso2) + gvg_h*my_cg(is1, is2, iso)
713 avh1b_ss(iso1, iso2) = avh1b_ss(iso1, iso2) + gvg_s*my_cg(is1, is2, iso)
724 CALL daxpy(nsotot*nsotot, 1.0_dp, avh1b_hh, 1, int_local_h(ispin)%r_coef, 1)
725 CALL daxpy(nsotot*nsotot, 1.0_dp, avh1b_ss, 1, int_local_s(ispin)%r_coef, 1)
726 CALL daxpy(nsotot*nsotot, -1.0_dp, avh1b_00, 1, int_local_h(ispin)%r_coef, 1)
727 CALL daxpy(nsotot*nsotot, -1.0_dp, avh1b_00, 1, int_local_s(ispin)%r_coef, 1)
730 END SUBROUTINE vh_1c_atom_integrals
Define the atomic kind types and their sub types.
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.
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)
...
Handles all functions related to the CELL.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public init_coulomb_local(hartree_local, natom)
...
subroutine, public vh_1c_gg_integrals(qs_env, energy_hartree_1c, ecoul_1c, local_rho_set, para_env, tddft, local_rho_set_2nd, core_2nd)
Calculates one center GAPW Hartree energies and matrix elements Hartree potentials are input Takes po...
subroutine, public calculate_vh_1center(vrad_h, vrad_s, rrad_h, rrad_s, rrad_0, rrad_z, grid_atom)
Calculates Hartree potential for hard and soft densities (including nuclear charge and compensation c...
subroutine, public allocate_ecoul_1center(ecoul_1c, natom)
...
subroutine, public set_ecoul_1c(ecoul_1c, iatom, ecoul_1_h, ecoul_1_s, ecoul_1_z, ecoul_1_0)
...
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
real(kind=dp), parameter, public fourpi
Interface to the message passing library MPI.
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public nsoset
integer, dimension(:, :), allocatable, public indso
container for various plainwaves related things
subroutine, public pw_env_get(pw_env, pw_pools, cube_info, gridlevel_info, auxbas_pw_pool, auxbas_grid, auxbas_rs_desc, auxbas_rs_grid, rs_descs, rs_grids, xc_pw_pool, vdw_pw_pool, poisson_env, interp_section)
returns the various attributes of the pw env
functions related to the poisson solver on regular grids
integer, parameter, public pw_poisson_periodic
container for information about total charges on the grids
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_RI_aux_kp, matrix_s, matrix_s_RI_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, WannierCentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, rhs)
Get the QUICKSTEP environment.
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, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, 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_r3d_rs_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_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)
Get attributes of an atomic kind set.
subroutine, public get_local_rho(local_rho_set, rho_atom_set, rho0_atom_set, rho0_mpole, rhoz_set)
...
subroutine, public get_rho0_mpole(rho0_mpole, g0_h, vg0_h, iat, ikind, lmax_0, l0_ikind, mp_gau_ikind, mp_rho, norm_g0l_h, Qlm_gg, Qlm_car, Qlm_tot, zet0_h, igrid_zet0_s, rpgf0_h, rpgf0_s, max_rpgf0_s, rho0_s_rs, rho0_s_gs)
...
subroutine, public get_rho_atom(rho_atom, cpc_h, cpc_s, rho_rad_h, rho_rad_s, drho_rad_h, drho_rad_s, vrho_rad_h, vrho_rad_s, rho_rad_h_d, rho_rad_s_d, ga_Vlocal_gb_h, ga_Vlocal_gb_s, int_scr_h, int_scr_s)
...
All kind of helpful little routines.
pure integer function, dimension(2), public get_limit(m, n, me)
divide m entries into n parts, return size of part me