39#include "./base/base_uses.f90"
48 INTEGER :: compression = -1
49 REAL(kind=
dp),
DIMENSION(:),
POINTER :: cdp => null()
50 REAL(kind=
sp),
DIMENSION(:),
POINTER :: csp => null()
51 INTEGER(INT_8),
DIMENSION(:),
POINTER :: cip => null()
55 INTEGER :: na = -1, nb = -1, nc = -1
56 TYPE(
carray),
DIMENSION(:),
POINTER :: ca => null()
69 REAL(kind=
dp),
DIMENSION(:),
POINTER :: avec => null()
70 REAL(kind=
dp),
DIMENSION(:),
POINTER :: aveca => null()
71 REAL(kind=
dp),
DIMENSION(:),
POINTER :: avecb => null()
73 REAL(kind=
dp),
DIMENSION(:),
POINTER :: tvec => null()
74 REAL(kind=
dp),
DIMENSION(:),
POINTER :: tveca => null()
75 REAL(kind=
dp),
DIMENSION(:),
POINTER :: tvecb => null()
77 REAL(kind=
dp) :: nst = 0.0_dp
78 REAL(kind=
dp) :: nsta = 0.0_dp
79 REAL(kind=
dp) :: nstb = 0.0_dp
81 REAL(kind=
dp) :: lambda = 0.0_dp
82 REAL(kind=
dp) :: lambdaa = 0.0_dp
83 REAL(kind=
dp) :: lambdab = 0.0_dp
85 REAL(kind=
dp) :: charge = 0.0_dp
86 REAL(kind=
dp) :: chargea = 0.0_dp
87 REAL(kind=
dp) :: chargeb = 0.0_dp
94 LOGICAL :: calc_force_pair = .false.
104 REAL(kind=
dp) :: cond_num = 0.0_dp
106 REAL(kind=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: abaint
107 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: abascr
109 REAL(kind=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: abbint
110 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: abbscr
116 REAL(kind=
dp),
DIMENSION(:, :, :, :),
ALLOCATABLE :: dabdaint
118 REAL(kind=
dp),
DIMENSION(:, :, :, :),
ALLOCATABLE :: dabbint
120 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: soo
122 REAL(kind=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: dsoo
124 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: sab
126 REAL(kind=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: dsab
128 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: sinv => null()
130 REAL(kind=
dp),
DIMENSION(:),
POINTER :: n => null()
132 REAL(kind=
dp),
DIMENSION(:),
POINTER :: sn => null()
134 REAL(kind=
dp) :: nsn = 0.0_dp
136 LOGICAL :: lrisr = .false.
137 LOGICAL :: lriff = .false.
138 REAL(kind=
dp) :: wsr = 0.0_dp, wff = 0.0_dp, dwsr = 0.0_dp, dwff = 0.0_dp
139 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: asinv => null(), bsinv => null()
140 REAL(kind=
dp),
DIMENSION(:),
POINTER :: na => null(), nb => null()
141 REAL(kind=
dp),
DIMENSION(:),
POINTER :: sna => null(), snb => null()
142 REAL(kind=
dp) :: nsna = 0.0_dp, nsnb = 0.0_dp
146 REAL(kind=
dp) :: dmax_ab = 0.0_dp
148 REAL(kind=
dp) :: dmax_oo = 0.0_dp
150 REAL(kind=
dp) :: dmax_aba = 0.0_dp
152 REAL(kind=
dp) :: dmax_abb = 0.0_dp
157 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: soaabb => null()
159 REAL(kind=
dp) :: dmax_aabb = 0.0_dp
164 TYPE(
lri_int_type),
DIMENSION(:),
POINTER :: lri_int => null()
166 TYPE(
lri_rhoab_type),
DIMENSION(:),
POINTER :: lri_rhoab => null()
167 END TYPE lri_node_type
171 TYPE(lri_node_type),
DIMENSION(:),
POINTER :: lri_node => null()
172 END TYPE lri_atom_type
176 TYPE(lri_atom_type),
DIMENSION(:),
POINTER :: lri_atom => null()
181 END TYPE lri_list_p_type
186 INTEGER,
DIMENSION(:, :, :),
POINTER :: orb_index => null()
187 INTEGER,
DIMENSION(:, :, :),
POINTER :: ri_index => null()
189 REAL(kind=
dp),
DIMENSION(:),
POINTER :: int_fbas => null()
191 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ri_ovlp => null()
193 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ri_ovlp_inv => null()
195 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: orb_ovlp => null()
197 REAL(kind=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: ovlp3
199 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: scon_ri => null()
201 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: scon_orb => null()
203 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: scon_mix => null()
204 END TYPE lri_bas_type
208 TYPE lri_clebsch_gordon_type
210 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: cg_coeff => null()
212 INTEGER,
DIMENSION(:, :, :),
POINTER :: cg_none0_list => null()
214 INTEGER,
DIMENSION(:, :),
POINTER :: ncg_none0 => null()
215 END TYPE lri_clebsch_gordon_type
221 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: v_int => null()
222 END TYPE lri_ppl_type
224 TYPE lri_ppl_int_type
225 TYPE(lri_ppl_type),
DIMENSION(:),
POINTER :: lri_ppl => null()
226 REAL(kind=
dp) :: ecore_pp_ri = 0.0_dp
227 END TYPE lri_ppl_int_type
232 INTEGER,
DIMENSION(:, :),
POINTER :: bas_ptr => null()
233 REAL(kind=
dp),
DIMENSION(:),
POINTER :: nvec => null()
234 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rm1n => null()
235 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: tvec => null()
236 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: rm1t => null()
237 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: avec => null()
238 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: fout => null()
239 REAL(kind=
dp) :: ntrm1n = 0.0_dp
240 REAL(kind=
dp),
DIMENSION(2) :: ftrm1n = 0.0_dp
241 REAL(kind=
dp),
DIMENSION(2) :: echarge = 0.0_dp
242 REAL(kind=
dp),
DIMENSION(2) :: lambda = 0.0_dp
247 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: mat => null()
251 REAL(kind=
dp),
DIMENSION(:),
POINTER :: vec => null()
255 REAL(kind=
dp) :: pairs_tt = 0.0_dp
256 REAL(kind=
dp) :: pairs_sr = 0.0_dp
257 REAL(kind=
dp) :: pairs_ff = 0.0_dp
258 REAL(kind=
dp) :: overlap_error = 0.0_dp
259 REAL(kind=
dp) :: rho_tt = 0.0_dp
260 REAL(kind=
dp) :: rho_sr = 0.0_dp
261 REAL(kind=
dp) :: rho_ff = 0.0_dp
262 REAL(kind=
dp) :: rho_1c = 0.0_dp
263 REAL(kind=
dp) :: coef_mem = 0.0_dp
264 REAL(kind=
dp) :: oint_mem = 0.0_dp
265 REAL(kind=
dp) :: rhos_mem = 0.0_dp
266 REAL(kind=
dp) :: abai_mem = 0.0_dp
267 REAL(kind=
dp) :: ppli_mem = 0.0_dp
273 INTEGER :: lri_overlap_inv = -1
275 LOGICAL :: debug = .false.
277 LOGICAL :: use_shg_integrals = .false.
280 REAL(kind=
dp) :: cond_max = 0.0_dp
282 REAL(kind=
dp) :: delta = 0.0_dp
284 REAL(kind=
dp) :: eps_o3_int = 0.0_dp
296 TYPE(lri_ppl_int_type),
POINTER :: lri_ppl_ints => null()
300 TYPE(lri_bas_type),
DIMENSION(:),
POINTER :: bas_prop => null()
302 TYPE(lri_clebsch_gordon_type),
POINTER :: cg_shg => null()
306 LOGICAL :: statistics = .false.
307 TYPE(stat_type) :: stat = stat_type()
309 LOGICAL :: exact_1c_terms = .false.
311 LOGICAL :: ppl_ri = .false.
313 LOGICAL :: store_integrals = .false.
315 LOGICAL :: distant_pair_approximation = .false.
316 CHARACTER(len=10) :: distant_pair_method =
""
317 REAL(kind=
dp) :: r_in = 0.0_dp
318 REAL(kind=
dp) :: r_out = 0.0_dp
319 REAL(kind=
dp),
DIMENSION(:),
POINTER :: aradius => null()
320 TYPE(wbas_type),
DIMENSION(:),
POINTER :: wbas => null()
321 TYPE(wmat_type),
DIMENSION(:, :),
POINTER :: wmat => null()
325 TYPE(ri_fit_type),
POINTER :: ri_fit => null()
326 CHARACTER(len=10) :: ri_sinv_app =
""
334 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: acoef => null()
336 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: v_int => null()
338 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: v_dadr => null()
340 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: v_dfdr => null()
344 TYPE(
lri_kind_type),
DIMENSION(:),
POINTER :: lri_kinds => null()
345 END TYPE lri_spin_type
350 REAL(kind=
dp),
DIMENSION(:),
POINTER :: st => null()
351 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: dssn => null(), &
354 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: dtvec => null()
362 TYPE(lri_list_p_type),
DIMENSION(:),
POINTER :: lri_rhos => null()
364 TYPE(lri_spin_type),
DIMENSION(:),
POINTER :: lri_coefs => null()
369 CHARACTER(len=*),
PARAMETER,
PRIVATE :: modulen =
'lri_environment_types'
395 lri_env%debug = .false.
396 lri_env%delta = 1.e-6_dp
398 lri_env%store_integrals = .false.
400 NULLIFY (lri_env%orb_basis)
401 NULLIFY (lri_env%ri_basis)
403 NULLIFY (lri_env%soo_list)
404 NULLIFY (lri_env%saa_list)
405 NULLIFY (lri_env%soa_list)
406 NULLIFY (lri_env%lri_ints)
407 NULLIFY (lri_env%lri_ppl_ints)
408 NULLIFY (lri_env%lri_ints_rho)
409 NULLIFY (lri_env%bas_prop)
411 NULLIFY (lri_env%ob_smat)
412 NULLIFY (lri_env%ri_smat)
413 NULLIFY (lri_env%ri_sinv)
414 NULLIFY (lri_env%ri_fit)
415 NULLIFY (lri_env%o3c)
416 NULLIFY (lri_env%aradius)
417 NULLIFY (lri_env%wmat)
418 NULLIFY (lri_env%wbas)
420 NULLIFY (lri_env%cg_shg)
421 ALLOCATE (lri_env%cg_shg)
422 NULLIFY (lri_env%cg_shg%cg_coeff)
423 NULLIFY (lri_env%cg_shg%cg_none0_list)
424 NULLIFY (lri_env%cg_shg%ncg_none0)
436 INTEGER :: i, ikind, j, nkind
439 IF (
ASSOCIATED(lri_env%orb_basis))
THEN
440 nkind =
SIZE(lri_env%orb_basis)
444 DEALLOCATE (lri_env%orb_basis)
446 IF (
ASSOCIATED(lri_env%ri_basis))
THEN
447 nkind =
SIZE(lri_env%ri_basis)
451 DEALLOCATE (lri_env%ri_basis)
456 IF (
ASSOCIATED(lri_env%lri_ints))
THEN
459 IF (
ASSOCIATED(lri_env%lri_ppl_ints))
THEN
462 IF (
ASSOCIATED(lri_env%lri_ints_rho))
THEN
466 IF (
ASSOCIATED(lri_env%aradius))
THEN
467 DEALLOCATE (lri_env%aradius)
469 IF (
ASSOCIATED(lri_env%wmat))
THEN
470 DO i = 1,
SIZE(lri_env%wmat, 1)
471 DO j = 1,
SIZE(lri_env%wmat, 2)
472 IF (
ASSOCIATED(lri_env%wmat(i, j)%mat))
THEN
473 DEALLOCATE (lri_env%wmat(i, j)%mat)
477 DEALLOCATE (lri_env%wmat)
479 IF (
ASSOCIATED(lri_env%wbas))
THEN
480 DO i = 1,
SIZE(lri_env%wbas, 1)
481 IF (
ASSOCIATED(lri_env%wbas(i)%vec))
THEN
482 DEALLOCATE (lri_env%wbas(i)%vec)
485 DEALLOCATE (lri_env%wbas)
487 IF (
ASSOCIATED(lri_env%cg_shg))
THEN
488 IF (
ASSOCIATED(lri_env%cg_shg%cg_coeff))
THEN
489 DEALLOCATE (lri_env%cg_shg%cg_coeff)
491 IF (
ASSOCIATED(lri_env%cg_shg%cg_none0_list))
THEN
492 DEALLOCATE (lri_env%cg_shg%cg_none0_list)
494 IF (
ASSOCIATED(lri_env%cg_shg%ncg_none0))
THEN
495 DEALLOCATE (lri_env%cg_shg%ncg_none0)
497 DEALLOCATE (lri_env%cg_shg)
503 IF (
ASSOCIATED(lri_env%ri_fit))
THEN
504 IF (
ASSOCIATED(lri_env%ri_fit%nvec))
THEN
505 DEALLOCATE (lri_env%ri_fit%nvec)
507 IF (
ASSOCIATED(lri_env%ri_fit%rm1n))
THEN
508 DEALLOCATE (lri_env%ri_fit%rm1n)
510 IF (
ASSOCIATED(lri_env%ri_fit%tvec))
THEN
511 DEALLOCATE (lri_env%ri_fit%tvec)
513 IF (
ASSOCIATED(lri_env%ri_fit%rm1t))
THEN
514 DEALLOCATE (lri_env%ri_fit%rm1t)
516 IF (
ASSOCIATED(lri_env%ri_fit%avec))
THEN
517 DEALLOCATE (lri_env%ri_fit%avec)
519 IF (
ASSOCIATED(lri_env%ri_fit%fout))
THEN
520 DEALLOCATE (lri_env%ri_fit%fout)
522 IF (
ASSOCIATED(lri_env%ri_fit%bas_ptr))
THEN
523 DEALLOCATE (lri_env%ri_fit%bas_ptr)
525 DEALLOCATE (lri_env%ri_fit)
527 IF (
ASSOCIATED(lri_env%o3c))
THEN
529 DEALLOCATE (lri_env%o3c)
542 lri_density%nspin = 0
544 NULLIFY (lri_density%lri_rhos)
545 NULLIFY (lri_density%lri_coefs)
557 CALL deallocate_lri_rhos(lri_density%lri_rhos)
558 CALL deallocate_lri_coefs(lri_density%lri_coefs)
572 INTEGER,
INTENT(IN) :: nkind
574 INTEGER :: i, iac, iatom, ikind, ilist, jatom, &
575 jkind, jneighbor, nba, nbb, nfa, nfb, &
578 REAL(kind=
dp) :: dab, ra, rab(3), rb
582 DIMENSION(:),
POINTER :: nl_iterator
584 cpassert(
ASSOCIATED(lri_env))
586 NULLIFY (fbasa, fbasb, lrii, nl_iterator, obasa, obasb)
590 dpa = lri_env%distant_pair_approximation
593 lri_env%stat%oint_mem = 0.0_dp
595 lri_ints%nkind = nkind
596 ALLOCATE (lri_ints%lri_atom(nkind*nkind))
598 DO i = 1, nkind*nkind
599 NULLIFY (lri_ints%lri_atom(i)%lri_node)
600 lri_ints%lri_atom(i)%natom = 0
607 nlist=nlist, ilist=ilist, nnode=nneighbor, inode=jneighbor, &
608 iatom=iatom, jatom=jatom, r=rab)
610 iac = ikind + nkind*(jkind - 1)
611 dab = sqrt(sum(rab*rab))
613 obasa => lri_env%orb_basis(ikind)%gto_basis_set
614 obasb => lri_env%orb_basis(jkind)%gto_basis_set
615 fbasa => lri_env%ri_basis(ikind)%gto_basis_set
616 fbasb => lri_env%ri_basis(jkind)%gto_basis_set
618 IF (.NOT.
ASSOCIATED(obasa)) cycle
619 IF (.NOT.
ASSOCIATED(obasb)) cycle
621 IF (.NOT.
ASSOCIATED(lri_ints%lri_atom(iac)%lri_node))
THEN
622 lri_ints%lri_atom(iac)%natom = nlist
623 ALLOCATE (lri_ints%lri_atom(iac)%lri_node(nlist))
625 NULLIFY (lri_ints%lri_atom(iac)%lri_node(i)%lri_int)
626 lri_ints%lri_atom(iac)%lri_node(i)%nnode = 0
629 IF (.NOT.
ASSOCIATED(lri_ints%lri_atom(iac)%lri_node(ilist)%lri_int))
THEN
630 lri_ints%lri_atom(iac)%lri_node(ilist)%nnode = nneighbor
631 ALLOCATE (lri_ints%lri_atom(iac)%lri_node(ilist)%lri_int(nneighbor))
634 lrii => lri_ints%lri_atom(iac)%lri_node(ilist)%lri_int(jneighbor)
642 IF (iatom == jatom .AND. dab < lri_env%delta)
THEN
643 e1c = lri_env%exact_1c_terms
649 ALLOCATE (lrii%abascr(nfa))
651 ALLOCATE (lrii%abbscr(nfb))
653 lri_env%stat%oint_mem = lri_env%stat%oint_mem + nfa + nfb
657 lrii%wsr =
pswitch(dab, ra, rb, 0)
658 lrii%wff = 1.0_dp - lrii%wsr
659 lrii%dwsr =
pswitch(dab, ra, rb, 1)
660 lrii%dwff = -lrii%dwsr
661 lrii%lrisr = (lrii%wsr > 0.0_dp)
662 lrii%lriff = (lrii%wff > 0.0_dp)
663 NULLIFY (lrii%asinv, lrii%bsinv)
671 NULLIFY (lrii%asinv, lrii%bsinv)
675 NULLIFY (lrii%cabai%ca, lrii%cabbi%ca)
680 NULLIFY (lrii%n, lrii%sn)
683 ALLOCATE (lrii%soo(nba, nbb))
684 lri_env%stat%oint_mem = lri_env%stat%oint_mem + nba*nbb
687 IF (iatom == jatom .AND. dab < lri_env%delta)
THEN
688 ALLOCATE (lrii%sinv(nfa, nfa))
689 lri_env%stat%oint_mem = lri_env%stat%oint_mem + nfa*nfa
691 ALLOCATE (lrii%sinv(nn, nn))
692 lri_env%stat%oint_mem = lri_env%stat%oint_mem + nn*nn
696 IF (iatom == jatom .AND. dab < lri_env%delta)
THEN
697 ALLOCATE (lrii%n(nfa), lrii%sn(nfa))
698 lri_env%stat%oint_mem = lri_env%stat%oint_mem + 2.*nfa
700 ALLOCATE (lrii%n(nn), lrii%sn(nn))
701 lri_env%stat%oint_mem = lri_env%stat%oint_mem + 2.*nn
707 NULLIFY (lrii%n, lrii%sn)
713 lrii%asinv => lri_env%bas_prop(ikind)%ri_ovlp_inv
714 lrii%bsinv => lri_env%bas_prop(jkind)%ri_ovlp_inv
715 ALLOCATE (lrii%na(nfa), lrii%sna(nfa))
716 lri_env%stat%oint_mem = lri_env%stat%oint_mem + 2.*nfa
719 ALLOCATE (lrii%nb(nfb), lrii%snb(nfb))
720 lri_env%stat%oint_mem = lri_env%stat%oint_mem + 2.*nfb
723 IF (.NOT.
ALLOCATED(lrii%soo))
THEN
724 ALLOCATE (lrii%soo(nba, nbb))
725 lri_env%stat%oint_mem = lri_env%stat%oint_mem + nba*nbb
728 cpassert(
SIZE(lrii%soo, 1) == nba .AND.
SIZE(lrii%soo, 2) == nbb)
731 NULLIFY (lrii%na, lrii%sna)
732 NULLIFY (lrii%nb, lrii%snb)
737 lrii%dmax_aba = 0._dp
738 lrii%dmax_abb = 0._dp
740 lrii%calc_force_pair = .false.
757 TYPE(lri_ppl_int_type),
POINTER :: lri_ppl_ints
760 INTEGER :: ikind, natom, nfa, nkind
764 cpassert(
ASSOCIATED(lri_env))
766 lri_env%stat%ppli_mem = 0.0_dp
767 nkind =
SIZE(atomic_kind_set)
768 ALLOCATE (lri_ppl_ints)
769 ALLOCATE (lri_ppl_ints%lri_ppl(nkind))
771 fbasa => lri_env%ri_basis(ikind)%gto_basis_set
773 atomic_kind => atomic_kind_set(ikind)
775 ALLOCATE (lri_ppl_ints%lri_ppl(ikind)%v_int(natom, nfa))
776 lri_env%stat%ppli_mem = lri_env%stat%ppli_mem + natom*nfa
791 INTEGER,
INTENT(IN) :: nkind
793 INTEGER :: i, iac, iatom, ikind, ilist, jatom, &
794 jkind, jneighbor, nba, nbb, nlist, &
799 DIMENSION(:),
POINTER :: nl_iterator
801 cpassert(
ASSOCIATED(lri_env))
803 ALLOCATE (lri_ints_rho)
805 lri_ints_rho%nkind = nkind
806 ALLOCATE (lri_ints_rho%lri_atom(nkind*nkind))
808 DO i = 1, nkind*nkind
809 NULLIFY (lri_ints_rho%lri_atom(i)%lri_node)
810 lri_ints_rho%lri_atom(i)%natom = 0
817 nlist=nlist, ilist=ilist, nnode=nneighbor, inode=jneighbor, &
818 iatom=iatom, jatom=jatom)
820 iac = ikind + nkind*(jkind - 1)
822 obasa => lri_env%orb_basis(ikind)%gto_basis_set
823 obasb => lri_env%orb_basis(jkind)%gto_basis_set
825 IF (.NOT.
ASSOCIATED(obasa)) cycle
826 IF (.NOT.
ASSOCIATED(obasb)) cycle
828 IF (.NOT.
ASSOCIATED(lri_ints_rho%lri_atom(iac)%lri_node))
THEN
829 lri_ints_rho%lri_atom(iac)%natom = nlist
830 ALLOCATE (lri_ints_rho%lri_atom(iac)%lri_node(nlist))
832 NULLIFY (lri_ints_rho%lri_atom(iac)%lri_node(i)%lri_int_rho)
833 lri_ints_rho%lri_atom(iac)%lri_node(i)%nnode = 0
836 IF (.NOT.
ASSOCIATED(lri_ints_rho%lri_atom(iac)%lri_node(ilist)%lri_int_rho))
THEN
837 lri_ints_rho%lri_atom(iac)%lri_node(ilist)%nnode = nneighbor
838 ALLOCATE (lri_ints_rho%lri_atom(iac)%lri_node(ilist)%lri_int_rho(nneighbor))
841 lriir => lri_ints_rho%lri_atom(iac)%lri_node(ilist)%lri_int_rho(jneighbor)
846 ALLOCATE (lriir%soaabb(nba, nba, nbb, nbb))
848 lriir%dmax_aabb = 0._dp
866 TYPE(lri_list_p_type),
DIMENSION(:),
POINTER :: lri_rhos
867 INTEGER,
INTENT(IN) :: nspin, nkind
869 INTEGER :: i, iac, iatom, ikind, ilist, ispin, &
870 jatom, jkind, jneighbor, nfa, nfb, &
872 REAL(kind=
dp) :: dab, rab(3)
877 DIMENSION(:),
POINTER :: nl_iterator
879 cpassert(
ASSOCIATED(lri_env))
881 NULLIFY (lri_rho, lrho, lrii, nl_iterator)
883 ALLOCATE (lri_rhos(nspin))
885 lri_env%stat%rhos_mem = 0.0_dp
889 ALLOCATE (lri_rhos(ispin)%lri_list)
891 lri_rhos(ispin)%lri_list%nkind = nkind
892 ALLOCATE (lri_rhos(ispin)%lri_list%lri_atom(nkind*nkind))
894 DO i = 1, nkind*nkind
895 NULLIFY (lri_rhos(ispin)%lri_list%lri_atom(i)%lri_node)
896 lri_rhos(ispin)%lri_list%lri_atom(i)%natom = 0
899 lri_rho => lri_rhos(ispin)%lri_list
904 iatom=iatom, jatom=jatom, nlist=nlist, ilist=ilist, &
905 nnode=nneighbor, inode=jneighbor, r=rab)
907 iac = ikind + nkind*(jkind - 1)
908 dab = sqrt(sum(rab*rab))
910 IF (.NOT.
ASSOCIATED(lri_env%lri_ints%lri_atom(iac)%lri_node)) cycle
912 IF (.NOT.
ASSOCIATED(lri_rho%lri_atom(iac)%lri_node))
THEN
913 lri_rho%lri_atom(iac)%natom = nlist
914 ALLOCATE (lri_rho%lri_atom(iac)%lri_node(nlist))
916 NULLIFY (lri_rho%lri_atom(iac)%lri_node(i)%lri_rhoab)
917 lri_rho%lri_atom(iac)%lri_node(i)%nnode = 0
920 IF (.NOT.
ASSOCIATED(lri_rho%lri_atom(iac)%lri_node(ilist)%lri_rhoab))
THEN
921 lri_rho%lri_atom(iac)%lri_node(ilist)%nnode = nneighbor
922 ALLOCATE (lri_rho%lri_atom(iac)%lri_node(ilist)%lri_rhoab(nneighbor))
925 lrho => lri_rho%lri_atom(iac)%lri_node(ilist)%lri_rhoab(jneighbor)
926 lrii => lri_env%lri_ints%lri_atom(iac)%lri_node(ilist)%lri_int(jneighbor)
937 NULLIFY (lrho%avec, lrho%tvec)
939 IF (iatom == jatom .AND. dab < lri_env%delta)
THEN
940 IF (.NOT. lri_env%exact_1c_terms)
THEN
941 ALLOCATE (lrho%avec(nfa))
942 ALLOCATE (lrho%tvec(nfa))
943 lri_env%stat%rhos_mem = lri_env%stat%rhos_mem + 2*nfa
946 ALLOCATE (lrho%avec(nn))
947 ALLOCATE (lrho%tvec(nn))
948 lri_env%stat%rhos_mem = lri_env%stat%rhos_mem + 2*nn
951 NULLIFY (lrho%aveca, lrho%tveca)
952 NULLIFY (lrho%avecb, lrho%tvecb)
954 ALLOCATE (lrho%aveca(nfa))
955 ALLOCATE (lrho%avecb(nfb))
956 ALLOCATE (lrho%tveca(nfa))
957 ALLOCATE (lrho%tvecb(nfb))
958 lri_env%stat%rhos_mem = lri_env%stat%rhos_mem + 2*(nfa + nfb)
981 INTEGER :: ikind, ispin, natom, nkind, nsgf, nspin
984 TYPE(lri_spin_type),
DIMENSION(:),
POINTER :: lri_coefs
986 cpassert(
ASSOCIATED(lri_density))
988 NULLIFY (atomic_kind, fbas, lri_coefs)
990 nkind =
SIZE(atomic_kind_set)
991 nspin = lri_density%nspin
993 lri_env%stat%coef_mem = 0.0_dp
995 ALLOCATE (lri_density%lri_coefs(nspin))
996 lri_coefs => lri_density%lri_coefs
999 ALLOCATE (lri_coefs(ispin)%lri_kinds(nkind))
1001 NULLIFY (lri_coefs(ispin)%lri_kinds(ikind)%acoef)
1002 NULLIFY (lri_coefs(ispin)%lri_kinds(ikind)%v_int)
1003 NULLIFY (lri_coefs(ispin)%lri_kinds(ikind)%v_dadr)
1004 NULLIFY (lri_coefs(ispin)%lri_kinds(ikind)%v_dfdr)
1005 atomic_kind => atomic_kind_set(ikind)
1007 fbas => lri_env%ri_basis(ikind)%gto_basis_set
1009 ALLOCATE (lri_coefs(ispin)%lri_kinds(ikind)%acoef(natom, nsgf))
1010 lri_coefs(ispin)%lri_kinds(ikind)%acoef = 0._dp
1011 ALLOCATE (lri_coefs(ispin)%lri_kinds(ikind)%v_int(natom, nsgf))
1012 lri_coefs(ispin)%lri_kinds(ikind)%v_int = 0._dp
1013 ALLOCATE (lri_coefs(ispin)%lri_kinds(ikind)%v_dadr(natom, 3))
1014 lri_coefs(ispin)%lri_kinds(ikind)%v_dadr = 0._dp
1015 ALLOCATE (lri_coefs(ispin)%lri_kinds(ikind)%v_dfdr(natom, 3))
1016 lri_coefs(ispin)%lri_kinds(ikind)%v_dfdr = 0._dp
1018 lri_env%stat%coef_mem = lri_env%stat%coef_mem + 2._dp*natom*(nsgf + 3)
1033 INTEGER,
INTENT(IN) :: nfa, nfb
1039 cpassert(.NOT.
ASSOCIATED(lri_force))
1041 ALLOCATE (lri_force)
1043 ALLOCATE (lri_force%st(nn))
1044 lri_force%st = 0._dp
1045 ALLOCATE (lri_force%dsst(nn, 3))
1046 lri_force%dsst = 0._dp
1047 ALLOCATE (lri_force%dssn(nn, 3))
1048 lri_force%dssn = 0._dp
1049 ALLOCATE (lri_force%dtvec(nn, 3))
1050 lri_force%dtvec = 0._dp
1065 IF (
ASSOCIATED(lri_env%bas_prop))
THEN
1066 DO i = 1,
SIZE(lri_env%bas_prop)
1067 IF (
ASSOCIATED(lri_env%bas_prop(i)%int_fbas))
THEN
1068 DEALLOCATE (lri_env%bas_prop(i)%int_fbas)
1070 IF (
ASSOCIATED(lri_env%bas_prop(i)%ri_ovlp))
THEN
1071 DEALLOCATE (lri_env%bas_prop(i)%ri_ovlp)
1073 IF (
ASSOCIATED(lri_env%bas_prop(i)%ri_ovlp_inv))
THEN
1074 DEALLOCATE (lri_env%bas_prop(i)%ri_ovlp_inv)
1076 IF (
ASSOCIATED(lri_env%bas_prop(i)%orb_ovlp))
THEN
1077 DEALLOCATE (lri_env%bas_prop(i)%orb_ovlp)
1079 IF (
ALLOCATED(lri_env%bas_prop(i)%ovlp3))
THEN
1080 DEALLOCATE (lri_env%bas_prop(i)%ovlp3)
1082 IF (
ASSOCIATED(lri_env%bas_prop(i)%scon_ri))
THEN
1083 DEALLOCATE (lri_env%bas_prop(i)%scon_ri)
1085 IF (
ASSOCIATED(lri_env%bas_prop(i)%scon_orb))
THEN
1086 DEALLOCATE (lri_env%bas_prop(i)%scon_orb)
1088 IF (
ASSOCIATED(lri_env%bas_prop(i)%orb_index))
THEN
1089 DEALLOCATE (lri_env%bas_prop(i)%orb_index)
1091 IF (
ASSOCIATED(lri_env%bas_prop(i)%ri_index))
THEN
1092 DEALLOCATE (lri_env%bas_prop(i)%ri_index)
1094 IF (
ASSOCIATED(lri_env%bas_prop(i)%scon_mix))
THEN
1095 DEALLOCATE (lri_env%bas_prop(i)%scon_mix)
1098 DEALLOCATE (lri_env%bas_prop)
1111 INTEGER :: i, iatom, ijkind, inode, natom, nkind, &
1115 cpassert(
ASSOCIATED(lri_ints))
1116 nkind = lri_ints%nkind
1119 DO ijkind = 1,
SIZE(lri_ints%lri_atom)
1120 natom = lri_ints%lri_atom(ijkind)%natom
1123 nnode = lri_ints%lri_atom(ijkind)%lri_node(iatom)%nnode
1125 IF (
ASSOCIATED(lri_ints%lri_atom(ijkind)%lri_node(iatom)%lri_int))
THEN
1127 lri_int => lri_ints%lri_atom(ijkind)%lri_node(iatom)%lri_int(inode)
1128 IF (
ALLOCATED(lri_int%sab))
THEN
1129 DEALLOCATE (lri_int%sab)
1131 IF (
ALLOCATED(lri_int%soo))
THEN
1132 DEALLOCATE (lri_int%soo)
1134 IF (
ALLOCATED(lri_int%abaint))
THEN
1135 DEALLOCATE (lri_int%abaint)
1137 IF (
ALLOCATED(lri_int%abascr))
THEN
1138 DEALLOCATE (lri_int%abascr)
1140 IF (
ALLOCATED(lri_int%abbint))
THEN
1141 DEALLOCATE (lri_int%abbint)
1143 IF (
ALLOCATED(lri_int%abbscr))
THEN
1144 DEALLOCATE (lri_int%abbscr)
1146 IF (
ALLOCATED(lri_int%dsab))
THEN
1147 DEALLOCATE (lri_int%dsab)
1149 IF (
ALLOCATED(lri_int%dsoo))
THEN
1150 DEALLOCATE (lri_int%dsoo)
1152 IF (
ALLOCATED(lri_int%dabbint))
THEN
1153 DEALLOCATE (lri_int%dabbint)
1155 IF (
ALLOCATED(lri_int%dabdaint))
THEN
1156 DEALLOCATE (lri_int%dabdaint)
1158 IF (
ASSOCIATED(lri_int%sinv))
THEN
1159 DEALLOCATE (lri_int%sinv)
1161 IF (
ASSOCIATED(lri_int%n))
THEN
1162 DEALLOCATE (lri_int%n)
1164 IF (
ASSOCIATED(lri_int%sn))
THEN
1165 DEALLOCATE (lri_int%sn)
1167 IF (
ASSOCIATED(lri_int%na))
THEN
1168 DEALLOCATE (lri_int%na)
1170 IF (
ASSOCIATED(lri_int%nb))
THEN
1171 DEALLOCATE (lri_int%nb)
1173 IF (
ASSOCIATED(lri_int%sna))
THEN
1174 DEALLOCATE (lri_int%sna)
1176 IF (
ASSOCIATED(lri_int%snb))
THEN
1177 DEALLOCATE (lri_int%snb)
1180 IF (
ASSOCIATED(lri_int%cabai%ca))
THEN
1181 DO i = 1,
SIZE(lri_int%cabai%ca)
1182 IF (
ASSOCIATED(lri_int%cabai%ca(i)%cdp))
DEALLOCATE (lri_int%cabai%ca(i)%cdp)
1183 IF (
ASSOCIATED(lri_int%cabai%ca(i)%csp))
DEALLOCATE (lri_int%cabai%ca(i)%csp)
1184 IF (
ASSOCIATED(lri_int%cabai%ca(i)%cip))
DEALLOCATE (lri_int%cabai%ca(i)%cip)
1186 DEALLOCATE (lri_int%cabai%ca)
1188 IF (
ASSOCIATED(lri_int%cabbi%ca))
THEN
1189 DO i = 1,
SIZE(lri_int%cabbi%ca)
1190 IF (
ASSOCIATED(lri_int%cabbi%ca(i)%cdp))
DEALLOCATE (lri_int%cabbi%ca(i)%cdp)
1191 IF (
ASSOCIATED(lri_int%cabbi%ca(i)%csp))
DEALLOCATE (lri_int%cabbi%ca(i)%csp)
1192 IF (
ASSOCIATED(lri_int%cabbi%ca(i)%cip))
DEALLOCATE (lri_int%cabbi%ca(i)%cip)
1194 DEALLOCATE (lri_int%cabbi%ca)
1197 DEALLOCATE (lri_ints%lri_atom(ijkind)%lri_node(iatom)%lri_int)
1201 DEALLOCATE (lri_ints%lri_atom(ijkind)%lri_node)
1204 DEALLOCATE (lri_ints%lri_atom)
1206 DEALLOCATE (lri_ints)
1216 TYPE(lri_ppl_int_type),
POINTER :: lri_ppl_ints
1218 INTEGER :: ikind, nkind
1220 cpassert(
ASSOCIATED(lri_ppl_ints))
1221 IF (
ASSOCIATED(lri_ppl_ints%lri_ppl))
THEN
1222 nkind =
SIZE(lri_ppl_ints%lri_ppl)
1224 IF (
ASSOCIATED(lri_ppl_ints%lri_ppl(ikind)%v_int))
THEN
1225 DEALLOCATE (lri_ppl_ints%lri_ppl(ikind)%v_int)
1228 DEALLOCATE (lri_ppl_ints%lri_ppl)
1230 DEALLOCATE (lri_ppl_ints)
1242 INTEGER :: iatom, ijkind, inode, natom, nkind, nnode
1244 cpassert(
ASSOCIATED(lri_ints_rho))
1245 nkind = lri_ints_rho%nkind
1248 DO ijkind = 1,
SIZE(lri_ints_rho%lri_atom)
1249 natom = lri_ints_rho%lri_atom(ijkind)%natom
1252 nnode = lri_ints_rho%lri_atom(ijkind)%lri_node(iatom)%nnode
1254 IF (
ASSOCIATED(lri_ints_rho%lri_atom(ijkind)%lri_node(iatom)%lri_int_rho))
THEN
1256 IF (
ASSOCIATED(lri_ints_rho%lri_atom(ijkind)%lri_node(iatom)%lri_int_rho(inode)%soaabb))
THEN
1257 DEALLOCATE (lri_ints_rho%lri_atom(ijkind)%lri_node(iatom)%lri_int_rho(inode)%soaabb)
1260 DEALLOCATE (lri_ints_rho%lri_atom(ijkind)%lri_node(iatom)%lri_int_rho)
1264 DEALLOCATE (lri_ints_rho%lri_atom(ijkind)%lri_node)
1267 DEALLOCATE (lri_ints_rho%lri_atom)
1269 DEALLOCATE (lri_ints_rho)
1277 SUBROUTINE deallocate_lri_rhos(lri_rhos)
1279 TYPE(lri_list_p_type),
DIMENSION(:),
POINTER :: lri_rhos
1281 INTEGER :: i, iatom, ijkind, inode, natom, nkind, &
1286 IF (
ASSOCIATED(lri_rhos))
THEN
1287 DO i = 1,
SIZE(lri_rhos)
1288 lri_rho => lri_rhos(i)%lri_list
1289 cpassert(
ASSOCIATED(lri_rho))
1290 nkind = lri_rho%nkind
1292 cpassert(
ASSOCIATED(lri_rho%lri_atom))
1293 DO ijkind = 1,
SIZE(lri_rho%lri_atom)
1294 natom = lri_rho%lri_atom(ijkind)%natom
1296 cpassert(
ASSOCIATED(lri_rho%lri_atom(ijkind)%lri_node))
1298 nnode = lri_rho%lri_atom(ijkind)%lri_node(iatom)%nnode
1300 IF (
ASSOCIATED(lri_rho%lri_atom(ijkind)%lri_node(iatom)%lri_rhoab))
THEN
1302 lri_rhoab => lri_rho%lri_atom(ijkind)%lri_node(iatom)%lri_rhoab(inode)
1303 IF (
ASSOCIATED(lri_rhoab%avec))
DEALLOCATE (lri_rhoab%avec)
1304 IF (
ASSOCIATED(lri_rhoab%tvec))
DEALLOCATE (lri_rhoab%tvec)
1305 IF (
ASSOCIATED(lri_rhoab%aveca))
DEALLOCATE (lri_rhoab%aveca)
1306 IF (
ASSOCIATED(lri_rhoab%tveca))
DEALLOCATE (lri_rhoab%tveca)
1307 IF (
ASSOCIATED(lri_rhoab%avecb))
DEALLOCATE (lri_rhoab%avecb)
1308 IF (
ASSOCIATED(lri_rhoab%tvecb))
DEALLOCATE (lri_rhoab%tvecb)
1310 DEALLOCATE (lri_rho%lri_atom(ijkind)%lri_node(iatom)%lri_rhoab)
1314 DEALLOCATE (lri_rho%lri_atom(ijkind)%lri_node)
1317 DEALLOCATE (lri_rho%lri_atom)
1319 DEALLOCATE (lri_rho)
1322 DEALLOCATE (lri_rhos)
1327 END SUBROUTINE deallocate_lri_rhos
1333 SUBROUTINE deallocate_lri_coefs(lri_coefs)
1334 TYPE(lri_spin_type),
DIMENSION(:),
POINTER :: lri_coefs
1338 IF (
ASSOCIATED(lri_coefs))
THEN
1339 DO i = 1,
SIZE(lri_coefs)
1340 DO j = 1,
SIZE(lri_coefs(i)%lri_kinds)
1341 IF (
ASSOCIATED(lri_coefs(i)%lri_kinds(j)%acoef))
THEN
1342 DEALLOCATE (lri_coefs(i)%lri_kinds(j)%acoef)
1344 IF (
ASSOCIATED(lri_coefs(i)%lri_kinds(j)%v_int))
THEN
1345 DEALLOCATE (lri_coefs(i)%lri_kinds(j)%v_int)
1347 IF (
ASSOCIATED(lri_coefs(i)%lri_kinds(j)%v_dadr))
THEN
1348 DEALLOCATE (lri_coefs(i)%lri_kinds(j)%v_dadr)
1350 IF (
ASSOCIATED(lri_coefs(i)%lri_kinds(j)%v_dfdr))
THEN
1351 DEALLOCATE (lri_coefs(i)%lri_kinds(j)%v_dfdr)
1354 DEALLOCATE (lri_coefs(i)%lri_kinds)
1356 DEALLOCATE (lri_coefs)
1361 END SUBROUTINE deallocate_lri_coefs
1371 IF (
ASSOCIATED(lri_force))
THEN
1372 IF (
ASSOCIATED(lri_force%st))
THEN
1373 DEALLOCATE (lri_force%st)
1375 IF (
ASSOCIATED(lri_force%dssn))
THEN
1376 DEALLOCATE (lri_force%dssn)
1378 IF (
ASSOCIATED(lri_force%dsst))
THEN
1379 DEALLOCATE (lri_force%dsst)
1381 IF (
ASSOCIATED(lri_force%dtvec))
THEN
1382 DEALLOCATE (lri_force%dtvec)
1384 DEALLOCATE (lri_force)
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 deallocate_gto_basis_set(gto_basis_set)
...
DBCSR operations in CP2K.
Defines the basic variable types.
integer, parameter, public int_8
integer, parameter, public dp
integer, parameter, public sp
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
subroutine, public deallocate_bas_properties(lri_env)
deallocates one-center overlap integrals, integral of ri basis and scon matrices
subroutine, public allocate_lri_ints_rho(lri_env, lri_ints_rho, nkind)
allocate lri_ints_rho, storing integral for the exact density
subroutine, public lri_env_create(lri_env)
creates and initializes an lri_env
subroutine, public deallocate_lri_ppl_ints(lri_ppl_ints)
deallocates the given lri_ppl_ints
subroutine, public allocate_lri_ppl_ints(lri_env, lri_ppl_ints, atomic_kind_set)
allocate lri_ppl_ints, matrices that store LRI integrals
subroutine, public deallocate_lri_force_components(lri_force)
releases the given lri_force_type
subroutine, public allocate_lri_coefs(lri_env, lri_density, atomic_kind_set)
creates and initializes lri_coefs
subroutine, public allocate_lri_force_components(lri_force, nfa, nfb)
creates and initializes lri_force
subroutine, public lri_density_release(lri_density)
releases the given lri_density
subroutine, public allocate_lri_ints(lri_env, lri_ints, nkind)
allocate lri_ints, matrices that store LRI integrals
subroutine, public deallocate_lri_ints(lri_ints)
deallocates the given lri_ints
subroutine, public deallocate_lri_ints_rho(lri_ints_rho)
deallocates the given lri_ints_rho
subroutine, public lri_env_release(lri_env)
releases the given lri_env
subroutine, public lri_density_create(lri_density)
creates and initializes an lri_density environment
subroutine, public allocate_lri_rhos(lri_env, lri_rhos, nspin, nkind)
creates and initializes lri_rhos
Collection of simple mathematical functions and subroutines.
real(kind=dp) function, public pswitch(x, a, b, order)
Polynomial (5th degree) switching function f(a) = 1 .... f(b) = 0 with f'(a) = f"(a) = f'(b) = f"(b) ...
Define the neighbor list data types and the corresponding functionality.
subroutine, public release_neighbor_list_sets(nlists)
releases an array of neighbor_list_sets
subroutine, public neighbor_list_iterator_create(iterator_set, nl, search, nthread)
Neighbor list iterator functions.
subroutine, public neighbor_list_iterator_release(iterator_set)
...
integer function, public neighbor_list_iterate(iterator_set, mepos)
...
subroutine, public get_iterator_info(iterator_set, mepos, ikind, jkind, nkind, ilist, nlist, inode, nnode, iatom, jatom, r, cell)
...
3-center overlap type integrals containers
subroutine, public release_o3c_container(o3c_container)
...
Provides all information about an atomic kind.