21 clmp,
clmxx,
clmxy,
clmyy,
clmz,
clmzp,
clmzz,
clm_d,
clm_sp,
ijkl_ind,
indexa,
indexb, &
24 se_int_control_type, &
28 #include "./base/base_uses.f90"
45 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
46 REAL(KIND=
dp),
DIMENSION(3),
INTENT(IN) :: rjiv
47 TYPE(rotmat_type),
POINTER :: ij_matrix
48 LOGICAL,
INTENT(IN) :: do_invert
66 se_int_control_type, &
68 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
69 REAL(dp),
INTENT(IN) :: r, dssss
70 INTEGER,
INTENT(IN) :: itype
71 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
72 TYPE(se_taper_type),
POINTER :: se_taper
90 se_int_control_type, &
92 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
93 REAL(dp),
INTENT(IN) :: r
94 REAL(dp),
DIMENSION(10, 2),
INTENT(IN) :: dcore
95 INTEGER,
INTENT(IN) :: itype
96 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
97 TYPE(se_taper_type),
POINTER :: se_taper
112 e1b, e2a, de1b, de2a)
115 se_int_control_type, &
117 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
118 REAL(dp),
DIMENSION(3),
INTENT(IN) :: rijv
119 INTEGER,
INTENT(IN) :: itype
120 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
121 TYPE(se_taper_type),
POINTER :: se_taper
122 REAL(dp),
DIMENSION(45),
INTENT(IN),
OPTIONAL :: e1b, e2a
123 REAL(dp),
DIMENSION(45, 3),
INTENT(IN),
OPTIONAL :: de1b, de2a
138 se_taper, enuc, denuc)
141 se_int_control_type, &
143 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
144 REAL(dp),
DIMENSION(3),
INTENT(IN) :: rijv
145 INTEGER,
INTENT(IN) :: itype
146 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
147 TYPE(se_taper_type),
POINTER :: se_taper
148 REAL(dp),
INTENT(IN),
OPTIONAL :: enuc
149 REAL(dp),
DIMENSION(3),
INTENT(IN),
OPTIONAL :: denuc
168 se_int_control_type, &
170 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
171 REAL(KIND=
dp),
DIMENSION(3),
INTENT(IN) :: rijv
172 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
173 TYPE(se_taper_type),
POINTER :: se_taper
174 LOGICAL,
INTENT(IN) :: invert
175 INTEGER,
INTENT(IN) :: ii, kk
176 REAL(KIND=
dp),
DIMENSION(45, 45, 3),
INTENT(IN) :: v_d
193 se_int_control_type, &
195 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
196 REAL(dp),
INTENT(IN) :: r
197 REAL(dp),
DIMENSION(491),
INTENT(IN) :: ri, dri
198 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
199 TYPE(se_taper_type),
POINTER :: se_taper
200 LOGICAL,
INTENT(IN) :: lgrad
217 se_int_control_type, &
219 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
220 REAL(dp),
DIMENSION(3),
INTENT(IN) :: rijv
221 REAL(dp),
DIMENSION(2025),
INTENT(IN),
OPTIONAL :: w
222 REAL(dp),
DIMENSION(2025, 3),
INTENT(IN),
OPTIONAL :: dw
223 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
224 TYPE(se_taper_type),
POINTER :: se_taper
229 LOGICAL,
PARAMETER,
PRIVATE :: debug_this_module = .false.
230 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'semi_empirical_int_utils'
249 FUNCTION eval_func_sp(r, l1_i, l2_i, m1_i, m2_i, da_i, db_i, add0, fact_screen)
RESULT(charg)
251 REAL(KIND=
dp),
INTENT(IN) :: r
252 INTEGER,
INTENT(IN) :: l1_i, l2_i, m1_i, m2_i
253 REAL(KIND=
dp),
INTENT(IN) :: da_i, db_i, add0, fact_screen
254 REAL(KIND=
dp) :: charg
256 END FUNCTION eval_func_sp
272 FUNCTION eval_func_d(r, l1_i, l2_i, m, da_i, db_i, add0, fact_screen)
RESULT(charg)
274 REAL(KIND=
dp),
INTENT(IN) :: r
275 INTEGER,
INTENT(IN) :: l1_i, l2_i, m
276 REAL(KIND=
dp),
INTENT(IN) :: da_i, db_i, add0, fact_screen
277 REAL(KIND=
dp) :: charg
308 FUNCTION ijkl_sp(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_control, &
309 se_int_screen, itype)
RESULT(res)
310 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
311 INTEGER,
INTENT(IN) :: ij, kl, li, lj, lk, ll, ic
312 REAL(kind=
dp),
INTENT(IN) :: r
313 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
314 TYPE(se_int_screen_type),
INTENT(IN) :: se_int_screen
315 INTEGER,
INTENT(IN) :: itype
318 res = ijkl_sp_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
319 se_int_control%integral_screening, se_int_control%shortrange, &
320 se_int_control%pc_coulomb_int, se_int_control%max_multipole, &
321 itype, charg_int_nri)
324 IF ((.NOT. se_int_control%pc_coulomb_int) .AND. (itype /=
do_method_pchg))
THEN
326 IF (se_int_control%shortrange .AND. se_int_control%do_ewald_r3)
THEN
327 res = res -
ijkl_low_3(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, &
357 FUNCTION d_ijkl_sp(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_control, &
358 se_int_screen, itype)
RESULT(res)
359 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
360 INTEGER,
INTENT(IN) :: ij, kl, li, lj, lk, ll, ic
361 REAL(kind=
dp),
INTENT(IN) :: r
362 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
363 TYPE(se_int_screen_type),
INTENT(IN) :: se_int_screen
364 INTEGER,
INTENT(IN) :: itype
367 REAL(kind=
dp) :: dfs, srd
370 res = ijkl_sp_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
371 se_int_control%integral_screening, .false., &
372 se_int_control%pc_coulomb_int, se_int_control%max_multipole, &
373 itype, dcharg_int_nri)
375 IF (.NOT. se_int_control%pc_coulomb_int)
THEN
376 dfs = ijkl_sp_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
377 se_int_control%integral_screening, .false., .false., &
378 se_int_control%max_multipole, itype, dcharg_int_nri_fs)
379 res = res + dfs*se_int_screen%dft
383 IF (se_int_control%shortrange)
THEN
384 srd = ijkl_sp_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
385 se_int_control%integral_screening, .false., .true., &
386 se_int_control%max_multipole, itype, dcharg_int_nri)
391 res = ijkl_sp_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
392 se_int_control%integral_screening, se_int_control%shortrange, &
393 se_int_control%pc_coulomb_int, se_int_control%max_multipole, &
394 itype, dcharg_int_nri)
398 IF ((.NOT. se_int_control%pc_coulomb_int) .AND. (itype /=
do_method_pchg))
THEN
400 IF (se_int_control%shortrange .AND. se_int_control%do_ewald_r3)
THEN
401 res = res -
ijkl_low_3(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, &
437 FUNCTION ijkl_sp_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
438 iscreen, shortrange, pc_coulomb_int, max_multipole, itype, eval)
RESULT(res)
439 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
440 INTEGER,
INTENT(IN) :: ij, kl, li, lj, lk, ll, ic
441 REAL(kind=
dp),
INTENT(IN) :: r
442 TYPE(se_int_screen_type),
INTENT(IN) :: se_int_screen
443 INTEGER,
INTENT(IN) :: iscreen
444 LOGICAL,
INTENT(IN) :: shortrange, pc_coulomb_int
445 INTEGER,
INTENT(IN) :: max_multipole, itype
447 PROCEDURE(eval_func_sp) :: eval
450 INTEGER :: ccc, l1, l1max, l1min, l2, l2max, l2min, &
452 REAL(kind=
dp) :: add, chrg, dij, dkl, fact_ij, fact_kl, &
453 fact_screen, pij, pkl, s1, sum
457 lij =
indexb(li + 1, lj + 1)
460 lkl =
indexb(lk + 1, ll + 1)
462 l1max = min(l1max, 2)
463 l1min = min(l1min, 2)
464 l2max = min(l2max, 2)
465 l2min = min(l2min, 2)
472 IF (lij == 3) fact_ij = sqrt(2.0_dp)
473 IF (lkl == 3) fact_kl = sqrt(2.0_dp)
474 IF (.NOT. pc_coulomb_int)
THEN
481 IF (ic == -1 .OR. ic == 1)
THEN
484 ELSE IF (lij == 3)
THEN
488 dij = sepi%cs(lij)*fact_ij
496 IF (ic == -1 .OR. ic == 2)
THEN
499 ELSE IF (lkl == 3)
THEN
503 dkl = sepj%cs(lkl)*fact_kl
515 IF (abs(ccc) > epsilon(0.0_dp))
THEN
516 chrg = eval(r, l1, l2,
clm_sp(ij, l1, m),
clm_sp(kl, l2, m), dij, dkl, add, fact_screen)
526 IF (shortrange .OR. pc_coulomb_int)
THEN
533 IF (l1 > max_multipole) cycle
535 dij = sepi%cs(lij)*fact_ij
539 IF (l2 > max_multipole) cycle
541 dkl = sepj%cs(lkl)*fact_kl
547 IF (abs(ccc) > epsilon(0.0_dp))
THEN
548 chrg = eval(r, l1, l2,
clm_sp(ij, l1, m),
clm_sp(kl, l2, m), dij, dkl, add, fact_screen)
555 IF (pc_coulomb_int) res = sum
556 IF (shortrange) res = res - sum
558 END FUNCTION ijkl_sp_low
583 FUNCTION charg_int_nri(r, l1_i, l2_i, m1_i, m2_i, da_i, db_i, add0, fact_screen)
RESULT(charg)
584 REAL(kind=
dp),
INTENT(in) :: r
585 INTEGER,
INTENT(in) :: l1_i, l2_i, m1_i, m2_i
586 REAL(kind=
dp),
INTENT(in) :: da_i, db_i, add0, fact_screen
587 REAL(kind=
dp) :: charg
589 INTEGER :: l1, l2, m1, m2
590 REAL(kind=
dp) :: add, da, db, dxdx, dxqxz, dzdz, dzqxx, &
591 dzqzz, fact, qqxx, qqzz, qxxqxx, &
592 qxxqyy, qxzqxz, xyxy, zzzz
596 IF (l1_i < l2_i)
THEN
604 ELSE IF (l1_i > l2_i)
THEN
611 fact = (-1.0_dp)**(l1 + l2)
612 ELSE IF (l1_i == l2_i)
THEN
615 IF (m1_i <= m2_i)
THEN
628 add = add0*fact_screen
631 IF (l1 == 0 .AND. l2 == 0)
THEN
632 charg = fact/sqrt(r**2 + add)
636 IF (l1 == 0 .AND. l2 == 1 .AND. m2 ==
clmz)
THEN
637 charg = 1.0_dp/sqrt((r + db)**2 + add) - 1.0_dp/sqrt((r - db)**2 + add)
638 charg = charg*0.5_dp*fact
642 IF (l1 == 1 .AND. l2 == 1 .AND. m1 ==
clmz .AND. m2 ==
clmz)
THEN
644 +1.0_dp/sqrt((r + da - db)**2 + add) + 1.0_dp/sqrt((r - da + db)**2 + add) &
645 - 1.0_dp/sqrt((r - da - db)**2 + add) - 1.0_dp/sqrt((r + da + db)**2 + add)
646 charg = dzdz*0.25_dp*fact
650 IF (l1 == 1 .AND. l2 == 1 .AND. m1 ==
clmp .AND. m2 ==
clmp)
THEN
651 dxdx = 2.0_dp/sqrt(r**2 + (da - db)**2 + add) - 2.0_dp/sqrt(r**2 + (da + db)**2 + add)
652 charg = dxdx*0.25_dp*fact
656 IF (l1 == 0 .AND. l2 == 2 .AND. m2 ==
clmzz)
THEN
657 qqzz = 1.0_dp/sqrt((r - db)**2 + add) - 2.0_dp/sqrt(r**2 + add) + 1.0_dp/sqrt((r + db)**2 + add)
658 charg = qqzz*0.25_dp*fact
662 IF (l1 == 0 .AND. l2 == 2 .AND. (m2 ==
clmyy .OR. m2 ==
clmxx))
THEN
663 qqxx = -1.0_dp/sqrt(r**2 + add) + 1.0_dp/sqrt(r**2 + add + db**2)
664 charg = qqxx*0.5_dp*fact
668 IF (l1 == 1 .AND. l2 == 2 .AND. m1 ==
clmz .AND. m2 ==
clmzz)
THEN
670 +1.0_dp/sqrt((r - da - db)**2 + add) - 2.0_dp/sqrt((r - da)**2 + add) &
671 + 1.0_dp/sqrt((r - da + db)**2 + add) - 1.0_dp/sqrt((r + da - db)**2 + add) &
672 + 2.0_dp/sqrt((r + da)**2 + add) - 1.0_dp/sqrt((r + da + db)**2 + add)
673 charg = dzqzz*0.125_dp*fact
677 IF (l1 == 1 .AND. l2 == 2 .AND. m1 ==
clmz .AND. (m2 ==
clmyy .OR. m2 ==
clmxx))
THEN
679 +1.0_dp/sqrt((r + da)**2 + add) - 1.0_dp/sqrt((r + da)**2 + add + db**2) &
680 - 1.0_dp/sqrt((r - da)**2 + add) + 1.0_dp/sqrt((r - da)**2 + add + db**2)
681 charg = dzqxx*0.25_dp*fact
685 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmzz .AND. m2 ==
clmzz)
THEN
687 +1.0_dp/sqrt((r - da - db)**2 + add) + 1.0_dp/sqrt((r + da + db)**2 + add) &
688 + 1.0_dp/sqrt((r - da + db)**2 + add) + 1.0_dp/sqrt((r + da - db)**2 + add)
690 +1.0_dp/sqrt((r - da)**2 + add) + 1.0_dp/sqrt((r + da)**2 + add) &
691 + 1.0_dp/sqrt((r - db)**2 + add) + 1.0_dp/sqrt((r + db)**2 + add) &
692 - 2.0_dp/sqrt(r**2 + add)
693 charg = (zzzz*0.0625_dp - xyxy*0.125_dp)*fact
697 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmzz .AND. (m2 ==
clmxx .OR. m2 ==
clmyy))
THEN
699 -1.0_dp/sqrt((r + da)**2 + add) + 1.0_dp/sqrt((r + da)**2 + db**2 + add) &
700 - 1.0_dp/sqrt((r - da)**2 + add) + 1.0_dp/sqrt((r - da)**2 + db**2 + add)
702 +1.0_dp/sqrt(r**2 + db**2 + add) - 1.0_dp/sqrt(r**2 + add)
703 charg = (zzzz*0.125_dp - xyxy*0.25_dp)*fact
707 IF (l1 == 1 .AND. l2 == 2 .AND. m1 ==
clmp .AND. m2 ==
clmzp)
THEN
710 -1.0_dp/sqrt((r - db)**2 + (da - db)**2 + add) + 1.0_dp/sqrt((r + db)**2 + (da - db)**2 + add) &
711 + 1.0_dp/sqrt((r - db)**2 + (da + db)**2 + add) - 1.0_dp/sqrt((r + db)**2 + (da + db)**2 + add)
712 charg = dxqxz*0.25_dp*fact
716 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmzp .AND. m2 ==
clmzp)
THEN
720 +1.0_dp/sqrt((r + da - db)**2 + (da - db)**2 + add) - 1.0_dp/sqrt((r + da + db)**2 + (da - db)**2 + add) &
721 - 1.0_dp/sqrt((r - da - db)**2 + (da - db)**2 + add) + 1.0_dp/sqrt((r - da + db)**2 + (da - db)**2 + add) &
722 - 1.0_dp/sqrt((r + da - db)**2 + (da + db)**2 + add) + 1.0_dp/sqrt((r + da + db)**2 + (da + db)**2 + add) &
723 + 1.0_dp/sqrt((r - da - db)**2 + (da + db)**2 + add) - 1.0_dp/sqrt((r - da + db)**2 + (da + db)**2 + add)
724 charg = qxzqxz*0.125_dp*fact
728 IF (l1 == 2 .AND. l2 == 2 .AND. (((m1 ==
clmyy) .AND. (m2 ==
clmyy)) .OR. ((m1 ==
clmxx) .AND. (m2 ==
clmxx))))
THEN
730 +2.0_dp/sqrt(r**2 + add) + 1.0_dp/sqrt(r**2 + (da - db)**2 + add) &
731 + 1.0_dp/sqrt(r**2 + (da + db)**2 + add) - 2.0_dp/sqrt(r**2 + da**2 + add) &
732 - 2.0_dp/sqrt(r**2 + db**2 + add)
733 charg = qxxqxx*0.125_dp*fact
737 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmyy .AND. m2 ==
clmxx)
THEN
739 +1.0_dp/sqrt(r**2 + add) - 1.0_dp/sqrt(r**2 + da**2 + add) &
740 - 1.0_dp/sqrt(r**2 + db**2 + add) + 1.0_dp/sqrt(r**2 + da**2 + db**2 + add)
741 charg = qxxqyy*0.25_dp*fact
745 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmxy .AND. m2 ==
clmxy)
THEN
747 +2.0_dp/sqrt(r**2 + add) + 1.0_dp/sqrt(r**2 + (da - db)**2 + add) &
748 + 1.0_dp/sqrt(r**2 + (da + db)**2 + add) - 2.0_dp/sqrt(r**2 + da**2 + add) &
749 - 2.0_dp/sqrt(r**2 + db**2 + add)
751 +1.0_dp/sqrt(r**2 + add) - 1.0_dp/sqrt(r**2 + da**2 + add) &
752 - 1.0_dp/sqrt(r**2 + db**2 + add) + 1.0_dp/sqrt(r**2 + da**2 + db**2 + add)
753 charg = 0.5_dp*(qxxqxx*0.125_dp - qxxqyy*0.25_dp)*fact
758 END FUNCTION charg_int_nri
785 FUNCTION dcharg_int_nri(r, l1_i, l2_i, m1_i, m2_i, da_i, db_i, add0, fact_screen)
RESULT(charg)
786 REAL(kind=
dp),
INTENT(in) :: r
787 INTEGER,
INTENT(in) :: l1_i, l2_i, m1_i, m2_i
788 REAL(kind=
dp),
INTENT(in) :: da_i, db_i, add0, fact_screen
789 REAL(kind=
dp) :: charg
791 INTEGER :: l1, l2, m1, m2
792 REAL(kind=
dp) :: add, da, db, dxdx, dxqxz, dzdz, dzqxx, &
793 dzqzz, fact, qqxx, qqzz, qxxqxx, &
794 qxxqyy, qxzqxz, xyxy, zzzz
798 IF (l1_i < l2_i)
THEN
806 ELSE IF (l1_i > l2_i)
THEN
813 fact = (-1.0_dp)**(l1 + l2)
814 ELSE IF (l1_i == l2_i)
THEN
817 IF (m1_i <= m2_i)
THEN
831 add = add0*fact_screen
833 IF (l1 == 0 .AND. l2 == 0)
THEN
834 charg = r/sqrt(r**2 + add)**3
839 IF (l1 == 0 .AND. l2 == 1 .AND. m2 ==
clmz)
THEN
840 charg = (r + db)/sqrt((r + db)**2 + add)**3 - (r - db)/sqrt((r - db)**2 + add)**3
841 charg = -charg*0.5_dp*fact
845 IF (l1 == 1 .AND. l2 == 1 .AND. m1 ==
clmz .AND. m2 ==
clmz)
THEN
847 +(r + da - db)/sqrt((r + da - db)**2 + add)**3 + (r - da + db)/sqrt((r - da + db)**2 + add)**3 &
848 - (r - da - db)/sqrt((r - da - db)**2 + add)**3 - (r + da + db)/sqrt((r + da + db)**2 + add)**3
849 charg = -dzdz*0.25_dp*fact
853 IF (l1 == 1 .AND. l2 == 1 .AND. m1 ==
clmp .AND. m2 ==
clmp)
THEN
854 dxdx = 2.0_dp*r/sqrt(r**2 + (da - db)**2 + add)**3 - 2.0_dp*r/sqrt(r**2 + (da + db)**2 + add)**3
855 charg = -dxdx*0.25_dp*fact
859 IF (l1 == 0 .AND. l2 == 2 .AND. m2 ==
clmzz)
THEN
860 qqzz = (r - db)/sqrt((r - db)**2 + add)**3 - 2.0_dp*r/sqrt(r**2 + add)**3 + (r + db)/sqrt((r + db)**2 + add)**3
861 charg = -qqzz*0.25_dp*fact
865 IF (l1 == 0 .AND. l2 == 2 .AND. (m2 ==
clmyy .OR. m2 ==
clmxx))
THEN
866 qqxx = -r/sqrt(r**2 + add)**3 + r/sqrt(r**2 + add + db**2)**3
867 charg = -qqxx*0.5_dp*fact
871 IF (l1 == 1 .AND. l2 == 2 .AND. m1 ==
clmz .AND. m2 ==
clmzz)
THEN
873 +(r - da - db)/sqrt((r - da - db)**2 + add)**3 - 2.0_dp*(r - da)/sqrt((r - da)**2 + add)**3 &
874 + (r - da + db)/sqrt((r - da + db)**2 + add)**3 - (r + da - db)/sqrt((r + da - db)**2 + add)**3 &
875 + 2.0_dp*(r + da)/sqrt((r + da)**2 + add)**3 - (r + da + db)/sqrt((r + da + db)**2 + add)**3
876 charg = -dzqzz*0.125_dp*fact
880 IF (l1 == 1 .AND. l2 == 2 .AND. m1 ==
clmz .AND. (m2 ==
clmyy .OR. m2 ==
clmxx))
THEN
882 +(r + da)/sqrt((r + da)**2 + add)**3 - (r + da)/sqrt((r + da)**2 + add + db**2)**3 &
883 - (r - da)/sqrt((r - da)**2 + add)**3 + (r - da)/sqrt((r - da)**2 + add + db**2)**3
884 charg = -dzqxx*0.25_dp*fact
888 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmzz .AND. m2 ==
clmzz)
THEN
890 +(r - da - db)/sqrt((r - da - db)**2 + add)**3 + (r + da + db)/sqrt((r + da + db)**2 + add)**3 &
891 + (r - da + db)/sqrt((r - da + db)**2 + add)**3 + (r + da - db)/sqrt((r + da - db)**2 + add)**3
893 +(r - da)/sqrt((r - da)**2 + add)**3 + (r + da)/sqrt((r + da)**2 + add)**3 &
894 + (r - db)/sqrt((r - db)**2 + add)**3 + (r + db)/sqrt((r + db)**2 + add)**3 &
895 - 2.0_dp*r/sqrt(r**2 + add)**3
896 charg = -(zzzz*0.0625_dp - xyxy*0.125_dp)*fact
900 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmzz .AND. (m2 ==
clmxx .OR. m2 ==
clmyy))
THEN
902 -(r + da)/sqrt((r + da)**2 + add)**3 + (r + da)/sqrt((r + da)**2 + db**2 + add)**3 &
903 - (r - da)/sqrt((r - da)**2 + add)**3 + (r - da)/sqrt((r - da)**2 + db**2 + add)**3
904 xyxy = r/sqrt(r**2 + db**2 + add)**3 - r/sqrt(r**2 + add)**3
905 charg = -(zzzz*0.125_dp - xyxy*0.25_dp)*fact
909 IF (l1 == 1 .AND. l2 == 2 .AND. m1 ==
clmp .AND. m2 ==
clmzp)
THEN
912 -(r - db)/sqrt((r - db)**2 + (da - db)**2 + add)**3 + (r + db)/sqrt((r + db)**2 + (da - db)**2 + add)**3 &
913 + (r - db)/sqrt((r - db)**2 + (da + db)**2 + add)**3 - (r + db)/sqrt((r + db)**2 + (da + db)**2 + add)**3
914 charg = -dxqxz*0.25_dp*fact
918 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmzp .AND. m2 ==
clmzp)
THEN
922 +(r + da - db)/sqrt((r + da - db)**2 + (da - db)**2 + add)**3 - (r + da + db)/sqrt((r + da + db)**2 + (da - db)**2 + add)**3 &
923 - (r - da - db)/sqrt((r - da - db)**2 + (da - db)**2 + add)**3 + (r - da + db)/sqrt((r - da + db)**2 + (da - db)**2 + add)**3 &
924 - (r + da - db)/sqrt((r + da - db)**2 + (da + db)**2 + add)**3 + (r + da + db)/sqrt((r + da + db)**2 + (da + db)**2 + add)**3 &
925 + (r - da - db)/sqrt((r - da - db)**2 + (da + db)**2 + add)**3 - (r - da + db)/sqrt((r - da + db)**2 + (da + db)**2 + add)**3
926 charg = -qxzqxz*0.125_dp*fact
930 IF (l1 == 2 .AND. l2 == 2 .AND. (((m1 ==
clmyy) .AND. (m2 ==
clmyy)) .OR. ((m1 ==
clmxx) .AND. (m2 ==
clmxx))))
THEN
932 +2.0_dp*r/sqrt(r**2 + add)**3 + r/sqrt(r**2 + (da - db)**2 + add)**3 &
933 + r/sqrt(r**2 + (da + db)**2 + add)**3 - 2.0_dp*r/sqrt(r**2 + da**2 + add)**3 &
934 - 2.0_dp*r/sqrt(r**2 + db**2 + add)**3
935 charg = -qxxqxx*0.125_dp*fact
939 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmyy .AND. m2 ==
clmxx)
THEN
941 +r/sqrt(r**2 + add)**3 - r/sqrt(r**2 + da**2 + add)**3 &
942 - r/sqrt(r**2 + db**2 + add)**3 + r/sqrt(r**2 + da**2 + db**2 + add)**3
943 charg = -qxxqyy*0.25_dp*fact
947 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmxy .AND. m2 ==
clmxy)
THEN
949 +2.0_dp*r/sqrt(r**2 + add)**3 + r/sqrt(r**2 + (da - db)**2 + add)**3 &
950 + r/sqrt(r**2 + (da + db)**2 + add)**3 - 2.0_dp*r/sqrt(r**2 + da**2 + add)**3 &
951 - 2.0_dp*r/sqrt(r**2 + db**2 + add)**3
953 +r/sqrt(r**2 + add)**3 - r/sqrt(r**2 + da**2 + add)**3 &
954 - r/sqrt(r**2 + db**2 + add)**3 + r/sqrt(r**2 + da**2 + db**2 + add)**3
955 charg = -0.5_dp*(qxxqxx*0.125_dp - qxxqyy*0.25_dp)*fact
960 END FUNCTION dcharg_int_nri
988 FUNCTION dcharg_int_nri_fs(r, l1_i, l2_i, m1_i, m2_i, da_i, db_i, add0, fact_screen)
RESULT(charg)
989 REAL(kind=
dp),
INTENT(in) :: r
990 INTEGER,
INTENT(in) :: l1_i, l2_i, m1_i, m2_i
991 REAL(kind=
dp),
INTENT(in) :: da_i, db_i, add0, fact_screen
992 REAL(kind=
dp) :: charg
994 INTEGER :: l1, l2, m1, m2
995 REAL(kind=
dp) :: add, da, db, dxdx, dxqxz, dzdz, dzqxx, &
996 dzqzz, fact, qqxx, qqzz, qxxqxx, &
997 qxxqyy, qxzqxz, xyxy, zzzz
1001 IF (l1_i < l2_i)
THEN
1009 ELSE IF (l1_i > l2_i)
THEN
1016 fact = (-1.0_dp)**(l1 + l2)
1017 ELSE IF (l1_i == l2_i)
THEN
1020 IF (m1_i <= m2_i)
THEN
1034 add = add0*fact_screen
1038 IF (l1 == 0 .AND. l2 == 0)
THEN
1039 charg = add0/sqrt(r**2 + add)**3
1044 IF (l1 == 0 .AND. l2 == 1 .AND. m2 ==
clmz)
THEN
1045 charg = add0/sqrt((r + db)**2 + add)**3 - add0/sqrt((r - db)**2 + add)**3
1046 charg = -charg*0.5_dp*fact
1050 IF (l1 == 1 .AND. l2 == 1 .AND. m1 ==
clmz .AND. m2 ==
clmz)
THEN
1052 +add0/sqrt((r + da - db)**2 + add)**3 + add0/sqrt((r - da + db)**2 + add)**3 &
1053 - add0/sqrt((r - da - db)**2 + add)**3 - add0/sqrt((r + da + db)**2 + add)**3
1054 charg = -dzdz*0.25_dp*fact
1058 IF (l1 == 1 .AND. l2 == 1 .AND. m1 ==
clmp .AND. m2 ==
clmp)
THEN
1059 dxdx = 2.0_dp*add0/sqrt(r**2 + (da - db)**2 + add)**3 - 2.0_dp*add0/sqrt(r**2 + (da + db)**2 + add)**3
1060 charg = -dxdx*0.25_dp*fact
1064 IF (l1 == 0 .AND. l2 == 2 .AND. m2 ==
clmzz)
THEN
1065 qqzz = add0/sqrt((r - db)**2 + add)**3 - 2.0_dp*add0/sqrt(r**2 + add)**3 + add0/sqrt((r + db)**2 + add)**3
1066 charg = -qqzz*0.25_dp*fact
1070 IF (l1 == 0 .AND. l2 == 2 .AND. (m2 ==
clmyy .OR. m2 ==
clmxx))
THEN
1071 qqxx = -add0/sqrt(r**2 + add)**3 + add0/sqrt(r**2 + add + db**2)**3
1072 charg = -qqxx*0.5_dp*fact
1076 IF (l1 == 1 .AND. l2 == 2 .AND. m1 ==
clmz .AND. m2 ==
clmzz)
THEN
1078 +add0/sqrt((r - da - db)**2 + add)**3 - 2.0_dp*add0/sqrt((r - da)**2 + add)**3 &
1079 + add0/sqrt((r - da + db)**2 + add)**3 - add0/sqrt((r + da - db)**2 + add)**3 &
1080 + 2.0_dp*add0/sqrt((r + da)**2 + add)**3 - add0/sqrt((r + da + db)**2 + add)**3
1081 charg = -dzqzz*0.125_dp*fact
1085 IF (l1 == 1 .AND. l2 == 2 .AND. m1 ==
clmz .AND. (m2 ==
clmyy .OR. m2 ==
clmxx))
THEN
1087 +add0/sqrt((r + da)**2 + add)**3 - add0/sqrt((r + da)**2 + add + db**2)**3 &
1088 - add0/sqrt((r - da)**2 + add)**3 + add0/sqrt((r - da)**2 + add + db**2)**3
1089 charg = -dzqxx*0.25_dp*fact
1093 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmzz .AND. m2 ==
clmzz)
THEN
1095 +add0/sqrt((r - da - db)**2 + add)**3 + add0/sqrt((r + da + db)**2 + add)**3 &
1096 + add0/sqrt((r - da + db)**2 + add)**3 + add0/sqrt((r + da - db)**2 + add)**3
1098 +add0/sqrt((r - da)**2 + add)**3 + add0/sqrt((r + da)**2 + add)**3 &
1099 + add0/sqrt((r - db)**2 + add)**3 + add0/sqrt((r + db)**2 + add)**3 &
1100 - 2.0_dp*add0/sqrt(r**2 + add)**3
1101 charg = -(zzzz*0.0625_dp - xyxy*0.125_dp)*fact
1105 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmzz .AND. (m2 ==
clmxx .OR. m2 ==
clmyy))
THEN
1107 -add0/sqrt((r + da)**2 + add)**3 + add0/sqrt((r + da)**2 + db**2 + add)**3 &
1108 - add0/sqrt((r - da)**2 + add)**3 + add0/sqrt((r - da)**2 + db**2 + add)**3
1109 xyxy = add0/sqrt(r**2 + db**2 + add)**3 - add0/sqrt(r**2 + add)**3
1110 charg = -(zzzz*0.125_dp - xyxy*0.25_dp)*fact
1114 IF (l1 == 1 .AND. l2 == 2 .AND. m1 ==
clmp .AND. m2 ==
clmzp)
THEN
1117 -add0/sqrt((r - db)**2 + (da - db)**2 + add)**3 + add0/sqrt((r + db)**2 + (da - db)**2 + add)**3 &
1118 + add0/sqrt((r - db)**2 + (da + db)**2 + add)**3 - add0/sqrt((r + db)**2 + (da + db)**2 + add)**3
1119 charg = -dxqxz*0.25_dp*fact
1123 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmzp .AND. m2 ==
clmzp)
THEN
1127 +add0/sqrt((r + da - db)**2 + (da - db)**2 + add)**3 - add0/sqrt((r + da + db)**2 + (da - db)**2 + add)**3 &
1128 - add0/sqrt((r - da - db)**2 + (da - db)**2 + add)**3 + add0/sqrt((r - da + db)**2 + (da - db)**2 + add)**3 &
1129 - add0/sqrt((r + da - db)**2 + (da + db)**2 + add)**3 + add0/sqrt((r + da + db)**2 + (da + db)**2 + add)**3 &
1130 + add0/sqrt((r - da - db)**2 + (da + db)**2 + add)**3 - add0/sqrt((r - da + db)**2 + (da + db)**2 + add)**3
1131 charg = -qxzqxz*0.125_dp*fact
1135 IF (l1 == 2 .AND. l2 == 2 .AND. (((m1 ==
clmyy) .AND. (m2 ==
clmyy)) .OR. ((m1 ==
clmxx) .AND. (m2 ==
clmxx))))
THEN
1137 +2.0_dp*add0/sqrt(r**2 + add)**3 + add0/sqrt(r**2 + (da - db)**2 + add)**3 &
1138 + add0/sqrt(r**2 + (da + db)**2 + add)**3 - 2.0_dp*add0/sqrt(r**2 + da**2 + add)**3 &
1139 - 2.0_dp*add0/sqrt(r**2 + db**2 + add)**3
1140 charg = -qxxqxx*0.125_dp*fact
1144 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmyy .AND. m2 ==
clmxx)
THEN
1146 +add0/sqrt(r**2 + add)**3 - add0/sqrt(r**2 + da**2 + add)**3 &
1147 - add0/sqrt(r**2 + db**2 + add)**3 + add0/sqrt(r**2 + da**2 + db**2 + add)**3
1148 charg = -qxxqyy*0.25_dp*fact
1152 IF (l1 == 2 .AND. l2 == 2 .AND. m1 ==
clmxy .AND. m2 ==
clmxy)
THEN
1154 +2.0_dp*add0/sqrt(r**2 + add)**3 + add0/sqrt(r**2 + (da - db)**2 + add)**3 &
1155 + add0/sqrt(r**2 + (da + db)**2 + add)**3 - 2.0_dp*add0/sqrt(r**2 + da**2 + add)**3 &
1156 - 2.0_dp*add0/sqrt(r**2 + db**2 + add)**3
1158 +add0/sqrt(r**2 + add)**3 - add0/sqrt(r**2 + da**2 + add)**3 &
1159 - add0/sqrt(r**2 + db**2 + add)**3 + add0/sqrt(r**2 + da**2 + db**2 + add)**3
1160 charg = -0.5_dp*(qxxqxx*0.125_dp - qxxqyy*0.25_dp)*fact
1165 END FUNCTION dcharg_int_nri_fs
1197 FUNCTION ijkl_d(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_control, &
1198 se_int_screen, itype)
RESULT(res)
1199 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
1200 INTEGER,
INTENT(IN) :: ij, kl, li, lj, lk, ll, ic
1201 REAL(kind=
dp),
INTENT(IN) :: r
1202 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
1203 TYPE(se_int_screen_type),
INTENT(IN) :: se_int_screen
1204 INTEGER,
INTENT(IN) :: itype
1205 REAL(kind=
dp) :: res
1207 res = ijkl_d_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
1208 se_int_control%integral_screening, se_int_control%shortrange, &
1209 se_int_control%pc_coulomb_int, se_int_control%max_multipole, &
1210 itype, charg_int_ri)
1213 IF ((.NOT. se_int_control%pc_coulomb_int) .AND. (itype /=
do_method_pchg))
THEN
1215 IF (se_int_control%shortrange .AND. se_int_control%do_ewald_r3)
THEN
1216 res = res -
ijkl_low_3(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, &
1252 FUNCTION d_ijkl_d(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_control, &
1253 se_int_screen, itype)
RESULT(res)
1254 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
1255 INTEGER,
INTENT(IN) :: ij, kl, li, lj, lk, ll, ic
1256 REAL(kind=
dp),
INTENT(IN) :: r
1257 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
1258 TYPE(se_int_screen_type),
INTENT(IN) :: se_int_screen
1259 INTEGER,
INTENT(IN) :: itype
1260 REAL(kind=
dp) :: res
1262 REAL(kind=
dp) :: dfs, srd
1265 res = ijkl_d_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
1266 se_int_control%integral_screening, .false., &
1267 se_int_control%pc_coulomb_int, se_int_control%max_multipole, &
1268 itype, dcharg_int_ri)
1270 IF (.NOT. se_int_control%pc_coulomb_int)
THEN
1271 dfs = ijkl_d_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
1272 se_int_control%integral_screening, .false., .false., &
1273 se_int_control%max_multipole, itype, dcharg_int_ri_fs)
1274 res = res + dfs*se_int_screen%dft
1278 IF (se_int_control%shortrange)
THEN
1279 srd = ijkl_d_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
1280 se_int_control%integral_screening, .false., .true., &
1281 se_int_control%max_multipole, itype, dcharg_int_ri)
1286 res = ijkl_d_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
1287 se_int_control%integral_screening, se_int_control%shortrange, &
1288 se_int_control%pc_coulomb_int, se_int_control%max_multipole, &
1289 itype, dcharg_int_ri)
1293 IF ((.NOT. se_int_control%pc_coulomb_int) .AND. (itype /=
do_method_pchg))
THEN
1295 IF (se_int_control%shortrange .AND. se_int_control%do_ewald_r3)
THEN
1296 res = res -
ijkl_low_3(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, &
1337 FUNCTION ijkl_d_low(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_screen, &
1338 iscreen, shortrange, pc_coulomb_int, max_multipole, itype, eval)
RESULT(res)
1339 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
1340 INTEGER,
INTENT(IN) :: ij, kl, li, lj, lk, ll, ic
1341 REAL(kind=
dp),
INTENT(IN) :: r
1342 TYPE(se_int_screen_type),
INTENT(IN) :: se_int_screen
1343 INTEGER,
INTENT(IN) :: iscreen
1344 LOGICAL,
INTENT(IN) :: shortrange, pc_coulomb_int
1345 INTEGER,
INTENT(IN) :: max_multipole, itype
1348 REAL(kind=
dp) :: res
1350 INTEGER :: l1, l1max, l1min, l2, l2max, l2min, lij, &
1352 REAL(kind=
dp) :: add, ccc, chrg, dij, dkl, fact_screen, &
1355 l1min = abs(li - lj)
1357 lij =
indexb(li + 1, lj + 1)
1358 l2min = abs(lk - ll)
1360 lkl =
indexb(lk + 1, ll + 1)
1362 l1max = min(l1max, 2)
1363 l1min = min(l1min, 2)
1364 l2max = min(l2max, 2)
1365 l2min = min(l2min, 2)
1369 fact_screen = 1.0_dp
1370 IF (.NOT. pc_coulomb_int)
THEN
1373 DO l1 = l1min, l1max
1380 ELSE IF (lij == 3)
THEN
1382 ELSE IF (lij == 6)
THEN
1390 DO l2 = l2min, l2max
1397 ELSE IF (lkl == 3)
THEN
1399 ELSE IF (lkl == 6)
THEN
1409 add = (pij + pkl)**2
1415 IF (abs(ccc) > epsilon(0.0_dp))
THEN
1417 chrg = eval(r, l1, l2, mm, dij, dkl, add, fact_screen)
1427 IF (shortrange .OR. pc_coulomb_int)
THEN
1432 fact_screen = 0.0_dp
1433 DO l1 = l1min, l1max
1434 IF (l1 > max_multipole) cycle
1439 DO l2 = l2min, l2max
1440 IF (l2 > max_multipole) cycle
1448 IF (abs(ccc) > epsilon(0.0_dp))
THEN
1450 chrg = eval(r, l1, l2, mm, dij, dkl, add, fact_screen)
1457 IF (pc_coulomb_int) res = sum
1458 IF (shortrange) res = res - sum
1460 END FUNCTION ijkl_d_low
1484 FUNCTION charg_int_ri(r, l1_i, l2_i, m, da_i, db_i, add0, fact_screen)
RESULT(charg)
1485 REAL(kind=
dp),
INTENT(in) :: r
1486 INTEGER,
INTENT(in) :: l1_i, l2_i, m
1487 REAL(kind=
dp),
INTENT(in) :: da_i, db_i, add0, fact_screen
1488 REAL(kind=
dp) :: charg
1491 REAL(kind=
dp) :: aa, ab, add, da, db, dxdx, dxqxz, dzdz, &
1492 dzqzz, fact, qqzz, qxzqxz, xyxy, zzzz
1494 IF (l1_i <= l2_i)
THEN
1500 ELSE IF (l1_i > l2_i)
THEN
1505 fact = (-1.0_dp)**(l1 + l2)
1508 add = add0*fact_screen
1510 IF (l1 == 0 .AND. l2 == 0)
THEN
1511 charg = fact/sqrt(r**2 + add)
1515 IF (l1 == 0 .AND. l2 == 1)
THEN
1516 charg = 1.0_dp/sqrt((r + db)**2 + add) - 1.0_dp/sqrt((r - db)**2 + add)
1517 charg = charg*0.5_dp*fact
1521 IF (l1 == 1 .AND. l2 == 1 .AND. m == 0)
THEN
1523 +1.0_dp/sqrt((r + da - db)**2 + add) + 1.0_dp/sqrt((r - da + db)**2 + add) &
1524 - 1.0_dp/sqrt((r - da - db)**2 + add) - 1.0_dp/sqrt((r + da + db)**2 + add)
1525 charg = dzdz*0.25_dp*fact
1529 IF (l1 == 1 .AND. l2 == 1 .AND. m == 1)
THEN
1530 dxdx = 2.0_dp/sqrt(r**2 + (da - db)**2 + add) - 2.0_dp/sqrt(r**2 + (da + db)**2 + add)
1531 charg = dxdx*0.25_dp*fact
1535 IF (l1 == 0 .AND. l2 == 2)
THEN
1536 qqzz = 1.0_dp/sqrt((r - db)**2 + add) - 2.0_dp/sqrt(r**2 + db**2 + add) + 1.0_dp/sqrt((r + db)**2 + add)
1537 charg = qqzz*0.25_dp*fact
1541 IF (l1 == 1 .AND. l2 == 2 .AND. m == 0)
THEN
1543 +1.0_dp/sqrt((r - da - db)**2 + add) - 2.0_dp/sqrt((r - da)**2 + db**2 + add) &
1544 + 1.0_dp/sqrt((r + db - da)**2 + add) - 1.0_dp/sqrt((r - db + da)**2 + add) &
1545 + 2.0_dp/sqrt((r + da)**2 + db**2 + add) - 1.0_dp/sqrt((r + da + db)**2 + add)
1546 charg = dzqzz*0.125_dp*fact
1550 IF (l1 == 2 .AND. l2 == 2 .AND. m == 0)
THEN
1552 +1.0_dp/sqrt((r - da - db)**2 + add) + 1.0_dp/sqrt((r + da + db)**2 + add) &
1553 + 1.0_dp/sqrt((r - da + db)**2 + add) + 1.0_dp/sqrt((r + da - db)**2 + add) &
1554 - 2.0_dp/sqrt((r - da)**2 + db**2 + add) - 2.0_dp/sqrt((r - db)**2 + da**2 + add) &
1555 - 2.0_dp/sqrt((r + da)**2 + db**2 + add) - 2.0_dp/sqrt((r + db)**2 + da**2 + add) &
1556 + 2.0_dp/sqrt(r**2 + (da - db)**2 + add) + 2.0_dp/sqrt(r**2 + (da + db)**2 + add)
1558 +4.0_dp/sqrt(r**2 + (da - db)**2 + add) + 4.0_dp/sqrt(r**2 + (da + db)**2 + add) &
1559 - 8.0_dp/sqrt(r**2 + da**2 + db**2 + add)
1560 charg = (zzzz*0.0625_dp - xyxy*0.015625_dp)*fact
1564 IF (l1 == 1 .AND. l2 == 2 .AND. m == 1)
THEN
1565 ab = db/sqrt(2.0_dp)
1567 -2.0_dp/sqrt((r - ab)**2 + (da - ab)**2 + add) + 2.0_dp/sqrt((r + ab)**2 + (da - ab)**2 + add) &
1568 + 2.0_dp/sqrt((r - ab)**2 + (da + ab)**2 + add) - 2.0_dp/sqrt((r + ab)**2 + (da + ab)**2 + add)
1569 charg = dxqxz*0.125_dp*fact
1573 IF (l1 == 2 .AND. l2 == 2 .AND. m == 1)
THEN
1574 aa = da/sqrt(2.0_dp)
1575 ab = db/sqrt(2.0_dp)
1577 +2.0_dp/sqrt((r + aa - ab)**2 + (aa - ab)**2 + add) - 2.0_dp/sqrt((r + aa + ab)**2 + (aa - ab)**2 + add) &
1578 - 2.0_dp/sqrt((r - aa - ab)**2 + (aa - ab)**2 + add) + 2.0_dp/sqrt((r - aa + ab)**2 + (aa - ab)**2 + add) &
1579 - 2.0_dp/sqrt((r + aa - ab)**2 + (aa + ab)**2 + add) + 2.0_dp/sqrt((r + aa + ab)**2 + (aa + ab)**2 + add) &
1580 + 2.0_dp/sqrt((r - aa - ab)**2 + (aa + ab)**2 + add) - 2.0_dp/sqrt((r - aa + ab)**2 + (aa + ab)**2 + add)
1581 charg = qxzqxz*0.0625_dp*fact
1585 IF (l1 == 2 .AND. l2 == 2 .AND. m == 2)
THEN
1586 xyxy = 4.0_dp/sqrt(r**2 + (da - db)**2 + add) + 4.0_dp/sqrt(r**2 + (da + db)**2 + add) - 8.0_dp/sqrt(r**2 + da**2 + db**2 + add)
1587 charg = xyxy*0.0625_dp*fact
1592 END FUNCTION charg_int_ri
1617 FUNCTION dcharg_int_ri(r, l1_i, l2_i, m, da_i, db_i, add0, fact_screen)
RESULT(charg)
1618 REAL(kind=
dp),
INTENT(in) :: r
1619 INTEGER,
INTENT(in) :: l1_i, l2_i, m
1620 REAL(kind=
dp),
INTENT(in) :: da_i, db_i, add0, fact_screen
1621 REAL(kind=
dp) :: charg
1624 REAL(kind=
dp) :: aa, ab, add, da, db, dxdx, dxqxz, dzdz, &
1625 dzqzz, fact, qqzz, qxzqxz, xyxy, zzzz
1627 IF (l1_i <= l2_i)
THEN
1633 ELSE IF (l1_i > l2_i)
THEN
1638 fact = (-1.0_dp)**(l1 + l2)
1641 add = add0*fact_screen
1643 IF (l1 == 0 .AND. l2 == 0)
THEN
1644 charg = r/sqrt(r**2 + add)**3
1649 IF (l1 == 0 .AND. l2 == 1)
THEN
1650 charg = (r + db)/sqrt((r + db)**2 + add)**3 - (r - db)/sqrt((r - db)**2 + add)**3
1651 charg = -charg*0.5_dp*fact
1655 IF (l1 == 1 .AND. l2 == 1 .AND. m == 0)
THEN
1657 +(r + da - db)/sqrt((r + da - db)**2 + add)**3 + (r - da + db)/sqrt((r - da + db)**2 + add)**3 &
1658 - (r - da - db)/sqrt((r - da - db)**2 + add)**3 - (r + da + db)/sqrt((r + da + db)**2 + add)**3
1659 charg = -dzdz*0.25_dp*fact
1663 IF (l1 == 1 .AND. l2 == 1 .AND. m == 1)
THEN
1664 dxdx = 2.0_dp*r/sqrt(r**2 + (da - db)**2 + add)**3 - 2.0_dp*r/sqrt(r**2 + (da + db)**2 + add)**3
1665 charg = -dxdx*0.25_dp*fact
1669 IF (l1 == 0 .AND. l2 == 2)
THEN
1670 qqzz = (r - db)/sqrt((r - db)**2 + add)**3 - 2.0_dp*r/sqrt(r**2 + db**2 + add)**3 + (r + db)/sqrt((r + db)**2 + add)**3
1671 charg = -qqzz*0.25_dp*fact
1675 IF (l1 == 1 .AND. l2 == 2 .AND. m == 0)
THEN
1677 +(r - da - db)/sqrt((r - da - db)**2 + add)**3 - 2.0_dp*(r - da)/sqrt((r - da)**2 + db**2 + add)**3 &
1678 + (r + db - da)/sqrt((r + db - da)**2 + add)**3 - (r - db + da)/sqrt((r - db + da)**2 + add)**3 &
1679 + 2.0_dp*(r + da)/sqrt((r + da)**2 + db**2 + add)**3 - (r + da + db)/sqrt((r + da + db)**2 + add)**3
1680 charg = -dzqzz*0.125_dp*fact
1684 IF (l1 == 2 .AND. l2 == 2 .AND. m == 0)
THEN
1686 +(r - da - db)/sqrt((r - da - db)**2 + add)**3 + (r + da + db)/sqrt((r + da + db)**2 + add)**3 &
1687 + (r - da + db)/sqrt((r - da + db)**2 + add)**3 + (r + da - db)/sqrt((r + da - db)**2 + add)**3 &
1688 - 2.0_dp*(r - da)/sqrt((r - da)**2 + db**2 + add)**3 - 2.0_dp*(r - db)/sqrt((r - db)**2 + da**2 + add)**3 &
1689 - 2.0_dp*(r + da)/sqrt((r + da)**2 + db**2 + add)**3 - 2.0_dp*(r + db)/sqrt((r + db)**2 + da**2 + add)**3 &
1690 + 2.0_dp*r/sqrt(r**2 + (da - db)**2 + add)**3 + 2.0_dp*r/sqrt(r**2 + (da + db)**2 + add)**3
1692 +4.0_dp*r/sqrt(r**2 + (da - db)**2 + add)**3 + 4.0_dp*r/sqrt(r**2 + (da + db)**2 + add)**3 &
1693 - 8.0_dp*r/sqrt(r**2 + da**2 + db**2 + add)**3
1694 charg = -(zzzz*0.0625_dp - xyxy*0.015625_dp)*fact
1698 IF (l1 == 1 .AND. l2 == 2 .AND. m == 1)
THEN
1699 ab = db/sqrt(2.0_dp)
1701 -2.0_dp*(r - ab)/sqrt((r - ab)**2 + (da - ab)**2 + add)**3 + 2.0_dp*(r + ab)/sqrt((r + ab)**2 + (da - ab)**2 + add)**3 &
1702 + 2.0_dp*(r - ab)/sqrt((r - ab)**2 + (da + ab)**2 + add)**3 - 2.0_dp*(r + ab)/sqrt((r + ab)**2 + (da + ab)**2 + add)**3
1703 charg = -dxqxz*0.125_dp*fact
1707 IF (l1 == 2 .AND. l2 == 2 .AND. m == 1)
THEN
1708 aa = da/sqrt(2.0_dp)
1709 ab = db/sqrt(2.0_dp)
1711 +2.0_dp*(r+aa-ab)/sqrt((r+aa-ab)**2+(aa-ab)**2+add)**3-2.0_dp*(r+aa+ab)/sqrt((r+aa+ab)**2+(aa-ab)**2+add)**3 &
1712 -2.0_dp*(r-aa-ab)/sqrt((r-aa-ab)**2+(aa-ab)**2+add)**3+2.0_dp*(r-aa+ab)/sqrt((r-aa+ab)**2+(aa-ab)**2+add)**3 &
1713 -2.0_dp*(r+aa-ab)/sqrt((r+aa-ab)**2+(aa+ab)**2+add)**3+2.0_dp*(r+aa+ab)/sqrt((r+aa+ab)**2+(aa+ab)**2+add)**3 &
1714 +2.0_dp*(r-aa-ab)/sqrt((r-aa-ab)**2+(aa+ab)**2+add)**3-2.0_dp*(r-aa+ab)/sqrt((r-aa+ab)**2+(aa+ab)**2+add)**3
1715 charg = -qxzqxz*0.0625_dp*fact
1719 IF (l1 == 2 .AND. l2 == 2 .AND. m == 2)
THEN
1720 xyxy = 4.0_dp*r/sqrt(r**2+(da-db)**2+add)**3+4.0_dp*r/sqrt(r**2+(da+db)**2+add)**3-8.0_dp*r/sqrt(r**2+da**2+db**2+add)**3
1721 charg = -xyxy*0.0625_dp*fact
1726 END FUNCTION dcharg_int_ri
1752 FUNCTION dcharg_int_ri_fs(r, l1_i, l2_i, m, da_i, db_i, add0, fact_screen)
RESULT(charg)
1753 REAL(kind=
dp),
INTENT(in) :: r
1754 INTEGER,
INTENT(in) :: l1_i, l2_i, m
1755 REAL(kind=
dp),
INTENT(in) :: da_i, db_i, add0, fact_screen
1756 REAL(kind=
dp) :: charg
1759 REAL(kind=
dp) :: aa, ab, add, da, db, dxdx, dxqxz, dzdz, &
1760 dzqzz, fact, qqzz, qxzqxz, xyxy, zzzz
1762 IF (l1_i <= l2_i)
THEN
1768 ELSE IF (l1_i > l2_i)
THEN
1773 fact = (-1.0_dp)**(l1 + l2)
1776 add = add0*fact_screen
1780 IF (l1 == 0 .AND. l2 == 0)
THEN
1781 charg = add0/sqrt(r**2 + add)**3
1786 IF (l1 == 0 .AND. l2 == 1)
THEN
1787 charg = add0/sqrt((r + db)**2 + add)**3 - add0/sqrt((r - db)**2 + add)**3
1788 charg = -charg*0.5_dp*fact
1792 IF (l1 == 1 .AND. l2 == 1 .AND. m == 0)
THEN
1794 +add0/sqrt((r + da - db)**2 + add)**3 + add0/sqrt((r - da + db)**2 + add)**3 &
1795 - add0/sqrt((r - da - db)**2 + add)**3 - add0/sqrt((r + da + db)**2 + add)**3
1796 charg = -dzdz*0.25_dp*fact
1800 IF (l1 == 1 .AND. l2 == 1 .AND. m == 1)
THEN
1801 dxdx = 2.0_dp*add0/sqrt(r**2 + (da - db)**2 + add)**3 - 2.0_dp*add0/sqrt(r**2 + (da + db)**2 + add)**3
1802 charg = -dxdx*0.25_dp*fact
1806 IF (l1 == 0 .AND. l2 == 2)
THEN
1807 qqzz = add0/sqrt((r - db)**2 + add)**3 - 2.0_dp*add0/sqrt(r**2 + db**2 + add)**3 + add0/sqrt((r + db)**2 + add)**3
1808 charg = -qqzz*0.25_dp*fact
1812 IF (l1 == 1 .AND. l2 == 2 .AND. m == 0)
THEN
1814 +add0/sqrt((r - da - db)**2 + add)**3 - 2.0_dp*add0/sqrt((r - da)**2 + db**2 + add)**3 &
1815 + add0/sqrt((r + db - da)**2 + add)**3 - add0/sqrt((r - db + da)**2 + add)**3 &
1816 + 2.0_dp*add0/sqrt((r + da)**2 + db**2 + add)**3 - add0/sqrt((r + da + db)**2 + add)**3
1817 charg = -dzqzz*0.125_dp*fact
1821 IF (l1 == 2 .AND. l2 == 2 .AND. m == 0)
THEN
1823 +add0/sqrt((r - da - db)**2 + add)**3 + add0/sqrt((r + da + db)**2 + add)**3 &
1824 + add0/sqrt((r - da + db)**2 + add)**3 + add0/sqrt((r + da - db)**2 + add)**3 &
1825 - 2.0_dp*add0/sqrt((r - da)**2 + db**2 + add)**3 - 2.0_dp*add0/sqrt((r - db)**2 + da**2 + add)**3 &
1826 - 2.0_dp*add0/sqrt((r + da)**2 + db**2 + add)**3 - 2.0_dp*add0/sqrt((r + db)**2 + da**2 + add)**3 &
1827 + 2.0_dp*add0/sqrt(r**2 + (da - db)**2 + add)**3 + 2.0_dp*add0/sqrt(r**2 + (da + db)**2 + add)**3
1829 +4.0_dp*add0/sqrt(r**2 + (da - db)**2 + add)**3 + 4.0_dp*add0/sqrt(r**2 + (da + db)**2 + add)**3 &
1830 - 8.0_dp*add0/sqrt(r**2 + da**2 + db**2 + add)**3
1831 charg = -(zzzz*0.0625_dp - xyxy*0.015625_dp)*fact
1835 IF (l1 == 1 .AND. l2 == 2 .AND. m == 1)
THEN
1836 ab = db/sqrt(2.0_dp)
1838 -2.0_dp*add0/sqrt((r - ab)**2 + (da - ab)**2 + add)**3 + 2.0_dp*add0/sqrt((r + ab)**2 + (da - ab)**2 + add)**3 &
1839 + 2.0_dp*add0/sqrt((r - ab)**2 + (da + ab)**2 + add)**3 - 2.0_dp*add0/sqrt((r + ab)**2 + (da + ab)**2 + add)**3
1840 charg = -dxqxz*0.125_dp*fact
1844 IF (l1 == 2 .AND. l2 == 2 .AND. m == 1)
THEN
1845 aa = da/sqrt(2.0_dp)
1846 ab = db/sqrt(2.0_dp)
1848 +2.0_dp*add0/sqrt((r + aa - ab)**2 + (aa - ab)**2 + add)**3 - 2.0_dp*add0/sqrt((r + aa + ab)**2 + (aa - ab)**2 + add)**3 &
1849 - 2.0_dp*add0/sqrt((r - aa - ab)**2 + (aa - ab)**2 + add)**3 + 2.0_dp*add0/sqrt((r - aa + ab)**2 + (aa - ab)**2 + add)**3 &
1850 - 2.0_dp*add0/sqrt((r + aa - ab)**2 + (aa + ab)**2 + add)**3 + 2.0_dp*add0/sqrt((r + aa + ab)**2 + (aa + ab)**2 + add)**3 &
1851 + 2.0_dp*add0/sqrt((r - aa - ab)**2 + (aa + ab)**2 + add)**3 - 2.0_dp*add0/sqrt((r - aa + ab)**2 + (aa + ab)**2 + add)**3
1852 charg = -qxzqxz*0.0625_dp*fact
1856 IF (l1 == 2 .AND. l2 == 2 .AND. m == 2)
THEN
1857 xyxy = 4.0_dp*add0/sqrt(r**2 + (da - db)**2 + add)**3 + 4.0_dp*add0/sqrt(r**2 + (da + db)**2 + add)**3 - &
1858 8.0_dp*add0/sqrt(r**2 + da**2 + db**2 + add)**3
1859 charg = -xyxy*0.0625_dp*fact
1864 END FUNCTION dcharg_int_ri_fs
1881 RECURSIVE SUBROUTINE rotmat(sepi, sepj, rjiv, r, ij_matrix, do_derivatives, &
1882 do_invert, debug_invert)
1883 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
1884 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rjiv
1885 REAL(kind=
dp),
INTENT(IN) :: r
1886 TYPE(rotmat_type),
POINTER :: ij_matrix
1887 LOGICAL,
INTENT(IN) :: do_derivatives
1888 LOGICAL,
INTENT(OUT),
OPTIONAL :: do_invert
1889 LOGICAL,
INTENT(IN),
OPTIONAL :: debug_invert
1891 INTEGER :: imap(3), k, l
1892 LOGICAL :: dbg_inv, eval
1893 REAL(kind=
dp) :: b, c2a, c2b, ca, ca2, cb, cb2, check, &
1894 pt5sq3, r2i, s2a, s2b, sa, sb, sb2, &
1895 sqb, sqb2i, x11, x22, x33
1896 REAL(kind=
dp),
DIMENSION(3) :: b_d, c2a_d, c2b_d, ca2_d, ca_d, cb2_d, &
1897 cb_d, r_d, s2a_d, s2b_d, sa_d, sb2_d, &
1898 sb_d, sqb_d, x11_d, x22_d, x33_d
1899 REAL(kind=
dp),
DIMENSION(3, 3) :: p
1900 REAL(kind=
dp),
DIMENSION(3, 3, 3) :: p_d
1901 REAL(kind=
dp),
DIMENSION(3, 5, 5) :: d_d
1902 REAL(kind=
dp),
DIMENSION(5, 5) :: d
1904 cpassert(
ASSOCIATED(ij_matrix))
1905 IF (
PRESENT(do_invert)) do_invert = .false.
1906 IF ((sepi%natorb > 1) .OR. (sepj%natorb > 1))
THEN
1914 pt5sq3 = 0.5_dp*sqrt(3.0_dp)
1919 IF (
PRESENT(debug_invert)) dbg_inv = debug_invert
1921 IF (abs(check) > 0.99999999_dp)
THEN
1922 IF (
PRESENT(do_invert))
THEN
1931 IF (check < 0.0_dp)
THEN
1934 ELSE IF (check > 0.0_dp)
THEN
1947 cpassert(.NOT. do_derivatives)
1974 IF (sepi%dorb .OR. sepj%dorb)
THEN
1978 c2a = 2.0_dp*ca2 - 1.0_dp
1979 c2b = 2.0_dp*cb2 - 1.0_dp
1982 d(1, 1) = pt5sq3*c2a*sb2
1983 d(2, 1) = 0.5_dp*c2a*s2b
1985 d(4, 1) = c2a*(cb2 + 0.5_dp*sb2)
1987 d(1, 2) = pt5sq3*ca*s2b
1990 d(4, 2) = -0.5_dp*ca*s2b
1992 d(1, 3) = cb2 - 0.5_dp*sb2
1993 d(2, 3) = -pt5sq3*s2b
1995 d(4, 3) = pt5sq3*sb2
1997 d(1, 4) = pt5sq3*sa*s2b
2000 d(4, 4) = -0.5_dp*sa*s2b
2002 d(1, 5) = pt5sq3*s2a*sb2
2003 d(2, 5) = 0.5_dp*s2a*s2b
2005 d(4, 5) = s2a*(cb2 + 0.5_dp*sb2)
2011 ij_matrix%sp(k, l) = p(k, l)
2016 ij_matrix%pp(1, k, k) = p(k, 1)*p(k, 1)
2017 ij_matrix%pp(2, k, k) = p(k, 2)*p(k, 2)
2018 ij_matrix%pp(3, k, k) = p(k, 3)*p(k, 3)
2019 ij_matrix%pp(4, k, k) = p(k, 1)*p(k, 2)
2020 ij_matrix%pp(5, k, k) = p(k, 1)*p(k, 3)
2021 ij_matrix%pp(6, k, k) = p(k, 2)*p(k, 3)
2024 ij_matrix%pp(1, k, l) = 2.0_dp*p(k, 1)*p(l, 1)
2025 ij_matrix%pp(2, k, l) = 2.0_dp*p(k, 2)*p(l, 2)
2026 ij_matrix%pp(3, k, l) = 2.0_dp*p(k, 3)*p(l, 3)
2027 ij_matrix%pp(4, k, l) = p(k, 1)*p(l, 2) + p(k, 2)*p(l, 1)
2028 ij_matrix%pp(5, k, l) = p(k, 1)*p(l, 3) + p(k, 3)*p(l, 1)
2029 ij_matrix%pp(6, k, l) = p(k, 2)*p(l, 3) + p(k, 3)*p(l, 2)
2033 IF (sepi%dorb .OR. sepj%dorb)
THEN
2037 ij_matrix%sd(k, l) = d(k, l)
2043 ij_matrix%pd(1, k, l) = d(k, 1)*p(l, 1)
2044 ij_matrix%pd(2, k, l) = d(k, 1)*p(l, 2)
2045 ij_matrix%pd(3, k, l) = d(k, 1)*p(l, 3)
2046 ij_matrix%pd(4, k, l) = d(k, 2)*p(l, 1)
2047 ij_matrix%pd(5, k, l) = d(k, 2)*p(l, 2)
2048 ij_matrix%pd(6, k, l) = d(k, 2)*p(l, 3)
2049 ij_matrix%pd(7, k, l) = d(k, 3)*p(l, 1)
2050 ij_matrix%pd(8, k, l) = d(k, 3)*p(l, 2)
2051 ij_matrix%pd(9, k, l) = d(k, 3)*p(l, 3)
2052 ij_matrix%pd(10, k, l) = d(k, 4)*p(l, 1)
2053 ij_matrix%pd(11, k, l) = d(k, 4)*p(l, 2)
2054 ij_matrix%pd(12, k, l) = d(k, 4)*p(l, 3)
2055 ij_matrix%pd(13, k, l) = d(k, 5)*p(l, 1)
2056 ij_matrix%pd(14, k, l) = d(k, 5)*p(l, 2)
2057 ij_matrix%pd(15, k, l) = d(k, 5)*p(l, 3)
2062 ij_matrix%dd(1, k, k) = d(k, 1)*d(k, 1)
2063 ij_matrix%dd(2, k, k) = d(k, 2)*d(k, 2)
2064 ij_matrix%dd(3, k, k) = d(k, 3)*d(k, 3)
2065 ij_matrix%dd(4, k, k) = d(k, 4)*d(k, 4)
2066 ij_matrix%dd(5, k, k) = d(k, 5)*d(k, 5)
2067 ij_matrix%dd(6, k, k) = d(k, 1)*d(k, 2)
2068 ij_matrix%dd(7, k, k) = d(k, 1)*d(k, 3)
2069 ij_matrix%dd(8, k, k) = d(k, 2)*d(k, 3)
2070 ij_matrix%dd(9, k, k) = d(k, 1)*d(k, 4)
2071 ij_matrix%dd(10, k, k) = d(k, 2)*d(k, 4)
2072 ij_matrix%dd(11, k, k) = d(k, 3)*d(k, 4)
2073 ij_matrix%dd(12, k, k) = d(k, 1)*d(k, 5)
2074 ij_matrix%dd(13, k, k) = d(k, 2)*d(k, 5)
2075 ij_matrix%dd(14, k, k) = d(k, 3)*d(k, 5)
2076 ij_matrix%dd(15, k, k) = d(k, 4)*d(k, 5)
2079 ij_matrix%dd(1, k, l) = 2.0_dp*d(k, 1)*d(l, 1)
2080 ij_matrix%dd(2, k, l) = 2.0_dp*d(k, 2)*d(l, 2)
2081 ij_matrix%dd(3, k, l) = 2.0_dp*d(k, 3)*d(l, 3)
2082 ij_matrix%dd(4, k, l) = 2.0_dp*d(k, 4)*d(l, 4)
2083 ij_matrix%dd(5, k, l) = 2.0_dp*d(k, 5)*d(l, 5)
2084 ij_matrix%dd(6, k, l) = d(k, 1)*d(l, 2) + d(k, 2)*d(l, 1)
2085 ij_matrix%dd(7, k, l) = d(k, 1)*d(l, 3) + d(k, 3)*d(l, 1)
2086 ij_matrix%dd(8, k, l) = d(k, 2)*d(l, 3) + d(k, 3)*d(l, 2)
2087 ij_matrix%dd(9, k, l) = d(k, 1)*d(l, 4) + d(k, 4)*d(l, 1)
2088 ij_matrix%dd(10, k, l) = d(k, 2)*d(l, 4) + d(k, 4)*d(l, 2)
2089 ij_matrix%dd(11, k, l) = d(k, 3)*d(l, 4) + d(k, 4)*d(l, 3)
2090 ij_matrix%dd(12, k, l) = d(k, 1)*d(l, 5) + d(k, 5)*d(l, 1)
2091 ij_matrix%dd(13, k, l) = d(k, 2)*d(l, 5) + d(k, 5)*d(l, 2)
2092 ij_matrix%dd(14, k, l) = d(k, 3)*d(l, 5) + d(k, 5)*d(l, 3)
2093 ij_matrix%dd(15, k, l) = d(k, 4)*d(l, 5) + d(k, 5)*d(l, 4)
2099 IF (do_derivatives)
THEN
2103 x11_d = 0.0_dp; x11_d(1) = 1.0_dp
2104 x22_d = 0.0_dp; x22_d(2) = 1.0_dp
2105 x33_d = 0.0_dp; x33_d(3) = 1.0_dp
2106 r_d = (/x11, x22, x33/)/r
2107 b_d = 2.0_dp*(x11*x11_d + x22*x22_d)
2108 sqb_d = (0.5_dp/sqb)*b_d
2110 sqb2i = 1.0_dp/sqb**2
2111 cb_d = (x33_d*r - x33*r_d)*r2i
2112 ca_d = (x11_d*sqb - x11*sqb_d)*sqb2i
2113 sa_d = (x22_d*sqb - x22*sqb_d)*sqb2i
2114 sb_d = (sqb_d*r - sqb*r_d)*r2i
2116 p_d(:, 1, 1) = ca_d*sb + ca*sb_d
2117 p_d(:, 2, 1) = ca_d*cb + ca*cb_d
2118 p_d(:, 3, 1) = -sa_d
2119 p_d(:, 1, 2) = sa_d*sb + sa*sb_d
2120 p_d(:, 2, 2) = sa_d*cb + sa*cb_d
2123 p_d(:, 2, 3) = -sb_d
2124 p_d(:, 3, 3) = 0.0_dp
2125 IF (sepi%dorb .OR. sepj%dorb)
THEN
2126 ca2_d = 2.0_dp*ca*ca_d
2127 cb2_d = 2.0_dp*cb*cb_d
2128 sb2_d = 2.0_dp*sb*sb_d
2129 c2a_d = 2.0_dp*ca2_d
2130 c2b_d = 2.0_dp*cb2_d
2131 s2a_d = 2.0_dp*(sa_d*ca + sa*ca_d)
2132 s2b_d = 2.0_dp*(sb_d*cb + sb*cb_d)
2133 d_d(:, 1, 1) = pt5sq3*(c2a_d*sb2 + c2a*sb2_d)
2134 d_d(:, 2, 1) = 0.5_dp*(c2a_d*s2b + c2a*s2b_d)
2135 d_d(:, 3, 1) = -s2a_d*sb - s2a*sb_d
2136 d_d(:, 4, 1) = c2a_d*(cb2 + 0.5_dp*sb2) + c2a*(cb2_d + 0.5_dp*sb2_d)
2137 d_d(:, 5, 1) = -s2a_d*cb - s2a*cb_d
2138 d_d(:, 1, 2) = pt5sq3*(ca_d*s2b + ca*s2b_d)
2139 d_d(:, 2, 2) = ca_d*c2b + ca*c2b_d
2140 d_d(:, 3, 2) = -sa_d*cb - sa*cb_d
2141 d_d(:, 4, 2) = -0.5_dp*(ca_d*s2b + ca*s2b_d)
2142 d_d(:, 5, 2) = sa_d*sb + sa*sb_d
2143 d_d(:, 1, 3) = cb2_d - 0.5_dp*sb2_d
2144 d_d(:, 2, 3) = -pt5sq3*s2b_d
2145 d_d(:, 3, 3) = 0.0_dp
2146 d_d(:, 4, 3) = pt5sq3*sb2_d
2147 d_d(:, 5, 3) = 0.0_dp
2148 d_d(:, 1, 4) = pt5sq3*(sa_d*s2b + sa*s2b_d)
2149 d_d(:, 2, 4) = sa_d*c2b + sa*c2b_d
2150 d_d(:, 3, 4) = ca_d*cb + ca*cb_d
2151 d_d(:, 4, 4) = -0.5_dp*(sa_d*s2b + sa*s2b_d)
2152 d_d(:, 5, 4) = -ca_d*sb - ca*sb_d
2153 d_d(:, 1, 5) = pt5sq3*(s2a_d*sb2 + s2a*sb2_d)
2154 d_d(:, 2, 5) = 0.5_dp*(s2a_d*s2b + s2a*s2b_d)
2155 d_d(:, 3, 5) = c2a_d*sb + c2a*sb_d
2156 d_d(:, 4, 5) = s2a_d*(cb2 + 0.5_dp*sb2) + s2a*(cb2_d + 0.5_dp*sb2_d)
2157 d_d(:, 5, 5) = c2a_d*cb + c2a*cb_d
2162 ij_matrix%sp_d(:, k, l) = p_d(:, k, l)
2167 ij_matrix%pp_d(:, 1, k, k) = p_d(:, k, 1)*p(k, 1) + p(k, 1)*p_d(:, k, 1)
2168 ij_matrix%pp_d(:, 2, k, k) = p_d(:, k, 2)*p(k, 2) + p(k, 2)*p_d(:, k, 2)
2169 ij_matrix%pp_d(:, 3, k, k) = p_d(:, k, 3)*p(k, 3) + p(k, 3)*p_d(:, k, 3)
2170 ij_matrix%pp_d(:, 4, k, k) = p_d(:, k, 1)*p(k, 2) + p(k, 1)*p_d(:, k, 2)
2171 ij_matrix%pp_d(:, 5, k, k) = p_d(:, k, 1)*p(k, 3) + p(k, 1)*p_d(:, k, 3)
2172 ij_matrix%pp_d(:, 6, k, k) = p_d(:, k, 2)*p(k, 3) + p(k, 2)*p_d(:, k, 3)
2175 ij_matrix%pp_d(:, 1, k, l) = 2.0_dp*(p_d(:, k, 1)*p(l, 1) + p(k, 1)*p_d(:, l, 1))
2176 ij_matrix%pp_d(:, 2, k, l) = 2.0_dp*(p_d(:, k, 2)*p(l, 2) + p(k, 2)*p_d(:, l, 2))
2177 ij_matrix%pp_d(:, 3, k, l) = 2.0_dp*(p_d(:, k, 3)*p(l, 3) + p(k, 3)*p_d(:, l, 3))
2178 ij_matrix%pp_d(:, 4, k, l) = (p_d(:, k, 1)*p(l, 2) + p(k, 1)*p_d(:, l, 2)) + &
2179 (p_d(:, k, 2)*p(l, 1) + p(k, 2)*p_d(:, l, 1))
2180 ij_matrix%pp_d(:, 5, k, l) = (p_d(:, k, 1)*p(l, 3) + p(k, 1)*p_d(:, l, 3)) + &
2181 (p_d(:, k, 3)*p(l, 1) + p(k, 3)*p_d(:, l, 1))
2182 ij_matrix%pp_d(:, 6, k, l) = (p_d(:, k, 2)*p(l, 3) + p(k, 2)*p_d(:, l, 3)) + &
2183 (p_d(:, k, 3)*p(l, 2) + p(k, 3)*p_d(:, l, 2))
2187 IF (sepi%dorb .OR. sepj%dorb)
THEN
2191 ij_matrix%sd_d(:, k, l) = d_d(:, k, l)
2197 ij_matrix%pd_d(:, 1, k, l) = (d_d(:, k, 1)*p(l, 1) + d(k, 1)*p_d(:, l, 1))
2198 ij_matrix%pd_d(:, 2, k, l) = (d_d(:, k, 1)*p(l, 2) + d(k, 1)*p_d(:, l, 2))
2199 ij_matrix%pd_d(:, 3, k, l) = (d_d(:, k, 1)*p(l, 3) + d(k, 1)*p_d(:, l, 3))
2200 ij_matrix%pd_d(:, 4, k, l) = (d_d(:, k, 2)*p(l, 1) + d(k, 2)*p_d(:, l, 1))
2201 ij_matrix%pd_d(:, 5, k, l) = (d_d(:, k, 2)*p(l, 2) + d(k, 2)*p_d(:, l, 2))
2202 ij_matrix%pd_d(:, 6, k, l) = (d_d(:, k, 2)*p(l, 3) + d(k, 2)*p_d(:, l, 3))
2203 ij_matrix%pd_d(:, 7, k, l) = (d_d(:, k, 3)*p(l, 1) + d(k, 3)*p_d(:, l, 1))
2204 ij_matrix%pd_d(:, 8, k, l) = (d_d(:, k, 3)*p(l, 2) + d(k, 3)*p_d(:, l, 2))
2205 ij_matrix%pd_d(:, 9, k, l) = (d_d(:, k, 3)*p(l, 3) + d(k, 3)*p_d(:, l, 3))
2206 ij_matrix%pd_d(:, 10, k, l) = (d_d(:, k, 4)*p(l, 1) + d(k, 4)*p_d(:, l, 1))
2207 ij_matrix%pd_d(:, 11, k, l) = (d_d(:, k, 4)*p(l, 2) + d(k, 4)*p_d(:, l, 2))
2208 ij_matrix%pd_d(:, 12, k, l) = (d_d(:, k, 4)*p(l, 3) + d(k, 4)*p_d(:, l, 3))
2209 ij_matrix%pd_d(:, 13, k, l) = (d_d(:, k, 5)*p(l, 1) + d(k, 5)*p_d(:, l, 1))
2210 ij_matrix%pd_d(:, 14, k, l) = (d_d(:, k, 5)*p(l, 2) + d(k, 5)*p_d(:, l, 2))
2211 ij_matrix%pd_d(:, 15, k, l) = (d_d(:, k, 5)*p(l, 3) + d(k, 5)*p_d(:, l, 3))
2216 ij_matrix%dd_d(:, 1, k, k) = (d_d(:, k, 1)*d(k, 1) + d(k, 1)*d_d(:, k, 1))
2217 ij_matrix%dd_d(:, 2, k, k) = (d_d(:, k, 2)*d(k, 2) + d(k, 2)*d_d(:, k, 2))
2218 ij_matrix%dd_d(:, 3, k, k) = (d_d(:, k, 3)*d(k, 3) + d(k, 3)*d_d(:, k, 3))
2219 ij_matrix%dd_d(:, 4, k, k) = (d_d(:, k, 4)*d(k, 4) + d(k, 4)*d_d(:, k, 4))
2220 ij_matrix%dd_d(:, 5, k, k) = (d_d(:, k, 5)*d(k, 5) + d(k, 5)*d_d(:, k, 5))
2221 ij_matrix%dd_d(:, 6, k, k) = (d_d(:, k, 1)*d(k, 2) + d(k, 1)*d_d(:, k, 2))
2222 ij_matrix%dd_d(:, 7, k, k) = (d_d(:, k, 1)*d(k, 3) + d(k, 1)*d_d(:, k, 3))
2223 ij_matrix%dd_d(:, 8, k, k) = (d_d(:, k, 2)*d(k, 3) + d(k, 2)*d_d(:, k, 3))
2224 ij_matrix%dd_d(:, 9, k, k) = (d_d(:, k, 1)*d(k, 4) + d(k, 1)*d_d(:, k, 4))
2225 ij_matrix%dd_d(:, 10, k, k) = (d_d(:, k, 2)*d(k, 4) + d(k, 2)*d_d(:, k, 4))
2226 ij_matrix%dd_d(:, 11, k, k) = (d_d(:, k, 3)*d(k, 4) + d(k, 3)*d_d(:, k, 4))
2227 ij_matrix%dd_d(:, 12, k, k) = (d_d(:, k, 1)*d(k, 5) + d(k, 1)*d_d(:, k, 5))
2228 ij_matrix%dd_d(:, 13, k, k) = (d_d(:, k, 2)*d(k, 5) + d(k, 2)*d_d(:, k, 5))
2229 ij_matrix%dd_d(:, 14, k, k) = (d_d(:, k, 3)*d(k, 5) + d(k, 3)*d_d(:, k, 5))
2230 ij_matrix%dd_d(:, 15, k, k) = (d_d(:, k, 4)*d(k, 5) + d(k, 4)*d_d(:, k, 5))
2233 ij_matrix%dd_d(:, 1, k, l) = 2.0_dp*(d_d(:, k, 1)*d(l, 1) + d(k, 1)*d_d(:, l, 1))
2234 ij_matrix%dd_d(:, 2, k, l) = 2.0_dp*(d_d(:, k, 2)*d(l, 2) + d(k, 2)*d_d(:, l, 2))
2235 ij_matrix%dd_d(:, 3, k, l) = 2.0_dp*(d_d(:, k, 3)*d(l, 3) + d(k, 3)*d_d(:, l, 3))
2236 ij_matrix%dd_d(:, 4, k, l) = 2.0_dp*(d_d(:, k, 4)*d(l, 4) + d(k, 4)*d_d(:, l, 4))
2237 ij_matrix%dd_d(:, 5, k, l) = 2.0_dp*(d_d(:, k, 5)*d(l, 5) + d(k, 5)*d_d(:, l, 5))
2238 ij_matrix%dd_d(:, 6, k, l) = (d_d(:, k, 1)*d(l, 2) + d(k, 1)*d_d(:, l, 2)) + &
2239 (d_d(:, k, 2)*d(l, 1) + d(k, 2)*d_d(:, l, 1))
2240 ij_matrix%dd_d(:, 7, k, l) = (d_d(:, k, 1)*d(l, 3) + d(k, 1)*d_d(:, l, 3)) + &
2241 (d_d(:, k, 3)*d(l, 1) + d(k, 3)*d_d(:, l, 1))
2242 ij_matrix%dd_d(:, 8, k, l) = (d_d(:, k, 2)*d(l, 3) + d(k, 2)*d_d(:, l, 3)) + &
2243 (d_d(:, k, 3)*d(l, 2) + d(k, 3)*d_d(:, l, 2))
2244 ij_matrix%dd_d(:, 9, k, l) = (d_d(:, k, 1)*d(l, 4) + d(k, 1)*d_d(:, l, 4)) + &
2245 (d_d(:, k, 4)*d(l, 1) + d(k, 4)*d_d(:, l, 1))
2246 ij_matrix%dd_d(:, 10, k, l) = (d_d(:, k, 2)*d(l, 4) + d(k, 2)*d_d(:, l, 4)) + &
2247 (d_d(:, k, 4)*d(l, 2) + d(k, 4)*d_d(:, l, 2))
2248 ij_matrix%dd_d(:, 11, k, l) = (d_d(:, k, 3)*d(l, 4) + d(k, 3)*d_d(:, l, 4)) + &
2249 (d_d(:, k, 4)*d(l, 3) + d(k, 4)*d_d(:, l, 3))
2250 ij_matrix%dd_d(:, 12, k, l) = (d_d(:, k, 1)*d(l, 5) + d(k, 1)*d_d(:, l, 5)) + &
2251 (d_d(:, k, 5)*d(l, 1) + d(k, 5)*d_d(:, l, 1))
2252 ij_matrix%dd_d(:, 13, k, l) = (d_d(:, k, 2)*d(l, 5) + d(k, 2)*d_d(:, l, 5)) + &
2253 (d_d(:, k, 5)*d(l, 2) + d(k, 5)*d_d(:, l, 2))
2254 ij_matrix%dd_d(:, 14, k, l) = (d_d(:, k, 3)*d(l, 5) + d(k, 3)*d_d(:, l, 5)) + &
2255 (d_d(:, k, 5)*d(l, 3) + d(k, 5)*d_d(:, l, 3))
2256 ij_matrix%dd_d(:, 15, k, l) = (d_d(:, k, 4)*d(l, 5) + d(k, 4)*d_d(:, l, 5)) + &
2257 (d_d(:, k, 5)*d(l, 4) + d(k, 5)*d_d(:, l, 4))
2262 IF (debug_this_module)
THEN
2294 invert, ii, kk, rep, logv, ij_matrix, v, lgrad, rep_d, v_d, logv_d, drij)
2295 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
2296 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rijv
2297 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
2298 TYPE(se_taper_type),
POINTER :: se_taper
2299 LOGICAL,
INTENT(IN) :: invert
2300 INTEGER,
INTENT(IN) :: ii, kk
2301 REAL(kind=
dp),
DIMENSION(491),
INTENT(IN) :: rep
2302 LOGICAL,
DIMENSION(45, 45),
INTENT(OUT) :: logv
2303 TYPE(rotmat_type),
POINTER :: ij_matrix
2304 REAL(kind=
dp),
DIMENSION(45, 45),
INTENT(OUT) :: v
2305 LOGICAL,
INTENT(IN) :: lgrad
2306 REAL(kind=
dp),
DIMENSION(491),
INTENT(IN), &
2308 REAL(kind=
dp),
DIMENSION(3, 45, 45),
INTENT(OUT), &
2310 LOGICAL,
DIMENSION(45, 45),
INTENT(OUT),
OPTIONAL :: logv_d
2311 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN),
OPTIONAL :: drij
2313 INTEGER :: i, i1, ij, j1, k, k1, kl, l, l1, limkl, &
2315 REAL(kind=
dp) :: wrepp, wrepp_d(3)
2318 cpassert(
PRESENT(rep_d))
2319 cpassert(
PRESENT(v_d))
2320 cpassert(
PRESENT(logv_d))
2321 cpassert(
PRESENT(drij))
2326 logv(i, k) = .false.
2348 ELSE IF (mm == 2)
THEN
2350 v(ij, 2) = v(ij, 2) + ij_matrix%sp(k, 1)*wrepp
2351 v(ij, 4) = v(ij, 4) + ij_matrix%sp(k, 2)*wrepp
2352 v(ij, 7) = v(ij, 7) + ij_matrix%sp(k, 3)*wrepp
2353 ELSE IF (mm == 3)
THEN
2356 v(ij, 3) = v(ij, 3) + ij_matrix%pp(1, k, l)*wrepp
2357 v(ij, 6) = v(ij, 6) + ij_matrix%pp(2, k, l)*wrepp
2358 v(ij, 10) = v(ij, 10) + ij_matrix%pp(3, k, l)*wrepp
2359 v(ij, 5) = v(ij, 5) + ij_matrix%pp(4, k, l)*wrepp
2360 v(ij, 8) = v(ij, 8) + ij_matrix%pp(5, k, l)*wrepp
2361 v(ij, 9) = v(ij, 9) + ij_matrix%pp(6, k, l)*wrepp
2362 ELSE IF (mm == 4)
THEN
2364 v(ij, 11) = v(ij, 11) + ij_matrix%sd(k, 1)*wrepp
2365 v(ij, 16) = v(ij, 16) + ij_matrix%sd(k, 2)*wrepp
2366 v(ij, 22) = v(ij, 22) + ij_matrix%sd(k, 3)*wrepp
2367 v(ij, 29) = v(ij, 29) + ij_matrix%sd(k, 4)*wrepp
2368 v(ij, 37) = v(ij, 37) + ij_matrix%sd(k, 5)*wrepp
2369 ELSE IF (mm == 5)
THEN
2372 v(ij, 12) = v(ij, 12) + ij_matrix%pd(1, k, l)*wrepp
2373 v(ij, 13) = v(ij, 13) + ij_matrix%pd(2, k, l)*wrepp
2374 v(ij, 14) = v(ij, 14) + ij_matrix%pd(3, k, l)*wrepp
2375 v(ij, 17) = v(ij, 17) + ij_matrix%pd(4, k, l)*wrepp
2376 v(ij, 18) = v(ij, 18) + ij_matrix%pd(5, k, l)*wrepp
2377 v(ij, 19) = v(ij, 19) + ij_matrix%pd(6, k, l)*wrepp
2378 v(ij, 23) = v(ij, 23) + ij_matrix%pd(7, k, l)*wrepp
2379 v(ij, 24) = v(ij, 24) + ij_matrix%pd(8, k, l)*wrepp
2380 v(ij, 25) = v(ij, 25) + ij_matrix%pd(9, k, l)*wrepp
2381 v(ij, 30) = v(ij, 30) + ij_matrix%pd(10, k, l)*wrepp
2382 v(ij, 31) = v(ij, 31) + ij_matrix%pd(11, k, l)*wrepp
2383 v(ij, 32) = v(ij, 32) + ij_matrix%pd(12, k, l)*wrepp
2384 v(ij, 38) = v(ij, 38) + ij_matrix%pd(13, k, l)*wrepp
2385 v(ij, 39) = v(ij, 39) + ij_matrix%pd(14, k, l)*wrepp
2386 v(ij, 40) = v(ij, 40) + ij_matrix%pd(15, k, l)*wrepp
2387 ELSE IF (mm == 6)
THEN
2390 v(ij, 15) = v(ij, 15) + ij_matrix%dd(1, k, l)*wrepp
2391 v(ij, 21) = v(ij, 21) + ij_matrix%dd(2, k, l)*wrepp
2392 v(ij, 28) = v(ij, 28) + ij_matrix%dd(3, k, l)*wrepp
2393 v(ij, 36) = v(ij, 36) + ij_matrix%dd(4, k, l)*wrepp
2394 v(ij, 45) = v(ij, 45) + ij_matrix%dd(5, k, l)*wrepp
2395 v(ij, 20) = v(ij, 20) + ij_matrix%dd(6, k, l)*wrepp
2396 v(ij, 26) = v(ij, 26) + ij_matrix%dd(7, k, l)*wrepp
2397 v(ij, 27) = v(ij, 27) + ij_matrix%dd(8, k, l)*wrepp
2398 v(ij, 33) = v(ij, 33) + ij_matrix%dd(9, k, l)*wrepp
2399 v(ij, 34) = v(ij, 34) + ij_matrix%dd(10, k, l)*wrepp
2400 v(ij, 35) = v(ij, 35) + ij_matrix%dd(11, k, l)*wrepp
2401 v(ij, 41) = v(ij, 41) + ij_matrix%dd(12, k, l)*wrepp
2402 v(ij, 42) = v(ij, 42) + ij_matrix%dd(13, k, l)*wrepp
2403 v(ij, 43) = v(ij, 43) + ij_matrix%dd(14, k, l)*wrepp
2404 v(ij, 44) = v(ij, 44) + ij_matrix%dd(15, k, l)*wrepp
2410 logv(ij, kl) = (abs(v(ij, kl)) > 0.0_dp)
2418 logv_d(i, k) = .false.
2419 v_d(1, i, k) = 0.0_dp
2420 v_d(2, i, k) = 0.0_dp
2421 v_d(3, i, k) = 0.0_dp
2436 wrepp_d = rep_d(nd)*drij
2441 v_d(1, ij, 1) = wrepp_d(1)
2442 v_d(2, ij, 1) = wrepp_d(2)
2443 v_d(3, ij, 1) = wrepp_d(3)
2444 ELSE IF (mm == 2)
THEN
2446 v_d(1, ij, 2) = v_d(1, ij, 2) + ij_matrix%sp_d(1, k, 1)*wrepp + ij_matrix%sp(k, 1)*wrepp_d(1)
2447 v_d(1, ij, 4) = v_d(1, ij, 4) + ij_matrix%sp_d(1, k, 2)*wrepp + ij_matrix%sp(k, 2)*wrepp_d(1)
2448 v_d(1, ij, 7) = v_d(1, ij, 7) + ij_matrix%sp_d(1, k, 3)*wrepp + ij_matrix%sp(k, 3)*wrepp_d(1)
2450 v_d(2, ij, 2) = v_d(2, ij, 2) + ij_matrix%sp_d(2, k, 1)*wrepp + ij_matrix%sp(k, 1)*wrepp_d(2)
2451 v_d(2, ij, 4) = v_d(2, ij, 4) + ij_matrix%sp_d(2, k, 2)*wrepp + ij_matrix%sp(k, 2)*wrepp_d(2)
2452 v_d(2, ij, 7) = v_d(2, ij, 7) + ij_matrix%sp_d(2, k, 3)*wrepp + ij_matrix%sp(k, 3)*wrepp_d(2)
2454 v_d(3, ij, 2) = v_d(3, ij, 2) + ij_matrix%sp_d(3, k, 1)*wrepp + ij_matrix%sp(k, 1)*wrepp_d(3)
2455 v_d(3, ij, 4) = v_d(3, ij, 4) + ij_matrix%sp_d(3, k, 2)*wrepp + ij_matrix%sp(k, 2)*wrepp_d(3)
2456 v_d(3, ij, 7) = v_d(3, ij, 7) + ij_matrix%sp_d(3, k, 3)*wrepp + ij_matrix%sp(k, 3)*wrepp_d(3)
2457 ELSE IF (mm == 3)
THEN
2460 v_d(1, ij, 3) = v_d(1, ij, 3) + ij_matrix%pp_d(1, 1, k, l)*wrepp + ij_matrix%pp(1, k, l)*wrepp_d(1)
2461 v_d(1, ij, 6) = v_d(1, ij, 6) + ij_matrix%pp_d(1, 2, k, l)*wrepp + ij_matrix%pp(2, k, l)*wrepp_d(1)
2462 v_d(1, ij, 10) = v_d(1, ij, 10) + ij_matrix%pp_d(1, 3, k, l)*wrepp + ij_matrix%pp(3, k, l)*wrepp_d(1)
2463 v_d(1, ij, 5) = v_d(1, ij, 5) + ij_matrix%pp_d(1, 4, k, l)*wrepp + ij_matrix%pp(4, k, l)*wrepp_d(1)
2464 v_d(1, ij, 8) = v_d(1, ij, 8) + ij_matrix%pp_d(1, 5, k, l)*wrepp + ij_matrix%pp(5, k, l)*wrepp_d(1)
2465 v_d(1, ij, 9) = v_d(1, ij, 9) + ij_matrix%pp_d(1, 6, k, l)*wrepp + ij_matrix%pp(6, k, l)*wrepp_d(1)
2467 v_d(2, ij, 3) = v_d(2, ij, 3) + ij_matrix%pp_d(2, 1, k, l)*wrepp + ij_matrix%pp(1, k, l)*wrepp_d(2)
2468 v_d(2, ij, 6) = v_d(2, ij, 6) + ij_matrix%pp_d(2, 2, k, l)*wrepp + ij_matrix%pp(2, k, l)*wrepp_d(2)
2469 v_d(2, ij, 10) = v_d(2, ij, 10) + ij_matrix%pp_d(2, 3, k, l)*wrepp + ij_matrix%pp(3, k, l)*wrepp_d(2)
2470 v_d(2, ij, 5) = v_d(2, ij, 5) + ij_matrix%pp_d(2, 4, k, l)*wrepp + ij_matrix%pp(4, k, l)*wrepp_d(2)
2471 v_d(2, ij, 8) = v_d(2, ij, 8) + ij_matrix%pp_d(2, 5, k, l)*wrepp + ij_matrix%pp(5, k, l)*wrepp_d(2)
2472 v_d(2, ij, 9) = v_d(2, ij, 9) + ij_matrix%pp_d(2, 6, k, l)*wrepp + ij_matrix%pp(6, k, l)*wrepp_d(2)
2474 v_d(3, ij, 3) = v_d(3, ij, 3) + ij_matrix%pp_d(3, 1, k, l)*wrepp + ij_matrix%pp(1, k, l)*wrepp_d(3)
2475 v_d(3, ij, 6) = v_d(3, ij, 6) + ij_matrix%pp_d(3, 2, k, l)*wrepp + ij_matrix%pp(2, k, l)*wrepp_d(3)
2476 v_d(3, ij, 10) = v_d(3, ij, 10) + ij_matrix%pp_d(3, 3, k, l)*wrepp + ij_matrix%pp(3, k, l)*wrepp_d(3)
2477 v_d(3, ij, 5) = v_d(3, ij, 5) + ij_matrix%pp_d(3, 4, k, l)*wrepp + ij_matrix%pp(4, k, l)*wrepp_d(3)
2478 v_d(3, ij, 8) = v_d(3, ij, 8) + ij_matrix%pp_d(3, 5, k, l)*wrepp + ij_matrix%pp(5, k, l)*wrepp_d(3)
2479 v_d(3, ij, 9) = v_d(3, ij, 9) + ij_matrix%pp_d(3, 6, k, l)*wrepp + ij_matrix%pp(6, k, l)*wrepp_d(3)
2480 ELSE IF (mm == 4)
THEN
2482 v_d(1, ij, 11) = v_d(1, ij, 11) + ij_matrix%sd_d(1, k, 1)*wrepp + ij_matrix%sd(k, 1)*wrepp_d(1)
2483 v_d(1, ij, 16) = v_d(1, ij, 16) + ij_matrix%sd_d(1, k, 2)*wrepp + ij_matrix%sd(k, 2)*wrepp_d(1)
2484 v_d(1, ij, 22) = v_d(1, ij, 22) + ij_matrix%sd_d(1, k, 3)*wrepp + ij_matrix%sd(k, 3)*wrepp_d(1)
2485 v_d(1, ij, 29) = v_d(1, ij, 29) + ij_matrix%sd_d(1, k, 4)*wrepp + ij_matrix%sd(k, 4)*wrepp_d(1)
2486 v_d(1, ij, 37) = v_d(1, ij, 37) + ij_matrix%sd_d(1, k, 5)*wrepp + ij_matrix%sd(k, 5)*wrepp_d(1)
2488 v_d(2, ij, 11) = v_d(2, ij, 11) + ij_matrix%sd_d(2, k, 1)*wrepp + ij_matrix%sd(k, 1)*wrepp_d(2)
2489 v_d(2, ij, 16) = v_d(2, ij, 16) + ij_matrix%sd_d(2, k, 2)*wrepp + ij_matrix%sd(k, 2)*wrepp_d(2)
2490 v_d(2, ij, 22) = v_d(2, ij, 22) + ij_matrix%sd_d(2, k, 3)*wrepp + ij_matrix%sd(k, 3)*wrepp_d(2)
2491 v_d(2, ij, 29) = v_d(2, ij, 29) + ij_matrix%sd_d(2, k, 4)*wrepp + ij_matrix%sd(k, 4)*wrepp_d(2)
2492 v_d(2, ij, 37) = v_d(2, ij, 37) + ij_matrix%sd_d(2, k, 5)*wrepp + ij_matrix%sd(k, 5)*wrepp_d(2)
2494 v_d(3, ij, 11) = v_d(3, ij, 11) + ij_matrix%sd_d(3, k, 1)*wrepp + ij_matrix%sd(k, 1)*wrepp_d(3)
2495 v_d(3, ij, 16) = v_d(3, ij, 16) + ij_matrix%sd_d(3, k, 2)*wrepp + ij_matrix%sd(k, 2)*wrepp_d(3)
2496 v_d(3, ij, 22) = v_d(3, ij, 22) + ij_matrix%sd_d(3, k, 3)*wrepp + ij_matrix%sd(k, 3)*wrepp_d(3)
2497 v_d(3, ij, 29) = v_d(3, ij, 29) + ij_matrix%sd_d(3, k, 4)*wrepp + ij_matrix%sd(k, 4)*wrepp_d(3)
2498 v_d(3, ij, 37) = v_d(3, ij, 37) + ij_matrix%sd_d(3, k, 5)*wrepp + ij_matrix%sd(k, 5)*wrepp_d(3)
2499 ELSE IF (mm == 5)
THEN
2502 v_d(1, ij, 12) = v_d(1, ij, 12) + ij_matrix%pd_d(1, 1, k, l)*wrepp + ij_matrix%pd(1, k, l)*wrepp_d(1)
2503 v_d(1, ij, 13) = v_d(1, ij, 13) + ij_matrix%pd_d(1, 2, k, l)*wrepp + ij_matrix%pd(2, k, l)*wrepp_d(1)
2504 v_d(1, ij, 14) = v_d(1, ij, 14) + ij_matrix%pd_d(1, 3, k, l)*wrepp + ij_matrix%pd(3, k, l)*wrepp_d(1)
2505 v_d(1, ij, 17) = v_d(1, ij, 17) + ij_matrix%pd_d(1, 4, k, l)*wrepp + ij_matrix%pd(4, k, l)*wrepp_d(1)
2506 v_d(1, ij, 18) = v_d(1, ij, 18) + ij_matrix%pd_d(1, 5, k, l)*wrepp + ij_matrix%pd(5, k, l)*wrepp_d(1)
2507 v_d(1, ij, 19) = v_d(1, ij, 19) + ij_matrix%pd_d(1, 6, k, l)*wrepp + ij_matrix%pd(6, k, l)*wrepp_d(1)
2508 v_d(1, ij, 23) = v_d(1, ij, 23) + ij_matrix%pd_d(1, 7, k, l)*wrepp + ij_matrix%pd(7, k, l)*wrepp_d(1)
2509 v_d(1, ij, 24) = v_d(1, ij, 24) + ij_matrix%pd_d(1, 8, k, l)*wrepp + ij_matrix%pd(8, k, l)*wrepp_d(1)
2510 v_d(1, ij, 25) = v_d(1, ij, 25) + ij_matrix%pd_d(1, 9, k, l)*wrepp + ij_matrix%pd(9, k, l)*wrepp_d(1)
2511 v_d(1, ij, 30) = v_d(1, ij, 30) + ij_matrix%pd_d(1, 10, k, l)*wrepp + ij_matrix%pd(10, k, l)*wrepp_d(1)
2512 v_d(1, ij, 31) = v_d(1, ij, 31) + ij_matrix%pd_d(1, 11, k, l)*wrepp + ij_matrix%pd(11, k, l)*wrepp_d(1)
2513 v_d(1, ij, 32) = v_d(1, ij, 32) + ij_matrix%pd_d(1, 12, k, l)*wrepp + ij_matrix%pd(12, k, l)*wrepp_d(1)
2514 v_d(1, ij, 38) = v_d(1, ij, 38) + ij_matrix%pd_d(1, 13, k, l)*wrepp + ij_matrix%pd(13, k, l)*wrepp_d(1)
2515 v_d(1, ij, 39) = v_d(1, ij, 39) + ij_matrix%pd_d(1, 14, k, l)*wrepp + ij_matrix%pd(14, k, l)*wrepp_d(1)
2516 v_d(1, ij, 40) = v_d(1, ij, 40) + ij_matrix%pd_d(1, 15, k, l)*wrepp + ij_matrix%pd(15, k, l)*wrepp_d(1)
2518 v_d(2, ij, 12) = v_d(2, ij, 12) + ij_matrix%pd_d(2, 1, k, l)*wrepp + ij_matrix%pd(1, k, l)*wrepp_d(2)
2519 v_d(2, ij, 13) = v_d(2, ij, 13) + ij_matrix%pd_d(2, 2, k, l)*wrepp + ij_matrix%pd(2, k, l)*wrepp_d(2)
2520 v_d(2, ij, 14) = v_d(2, ij, 14) + ij_matrix%pd_d(2, 3, k, l)*wrepp + ij_matrix%pd(3, k, l)*wrepp_d(2)
2521 v_d(2, ij, 17) = v_d(2, ij, 17) + ij_matrix%pd_d(2, 4, k, l)*wrepp + ij_matrix%pd(4, k, l)*wrepp_d(2)
2522 v_d(2, ij, 18) = v_d(2, ij, 18) + ij_matrix%pd_d(2, 5, k, l)*wrepp + ij_matrix%pd(5, k, l)*wrepp_d(2)
2523 v_d(2, ij, 19) = v_d(2, ij, 19) + ij_matrix%pd_d(2, 6, k, l)*wrepp + ij_matrix%pd(6, k, l)*wrepp_d(2)
2524 v_d(2, ij, 23) = v_d(2, ij, 23) + ij_matrix%pd_d(2, 7, k, l)*wrepp + ij_matrix%pd(7, k, l)*wrepp_d(2)
2525 v_d(2, ij, 24) = v_d(2, ij, 24) + ij_matrix%pd_d(2, 8, k, l)*wrepp + ij_matrix%pd(8, k, l)*wrepp_d(2)
2526 v_d(2, ij, 25) = v_d(2, ij, 25) + ij_matrix%pd_d(2, 9, k, l)*wrepp + ij_matrix%pd(9, k, l)*wrepp_d(2)
2527 v_d(2, ij, 30) = v_d(2, ij, 30) + ij_matrix%pd_d(2, 10, k, l)*wrepp + ij_matrix%pd(10, k, l)*wrepp_d(2)
2528 v_d(2, ij, 31) = v_d(2, ij, 31) + ij_matrix%pd_d(2, 11, k, l)*wrepp + ij_matrix%pd(11, k, l)*wrepp_d(2)
2529 v_d(2, ij, 32) = v_d(2, ij, 32) + ij_matrix%pd_d(2, 12, k, l)*wrepp + ij_matrix%pd(12, k, l)*wrepp_d(2)
2530 v_d(2, ij, 38) = v_d(2, ij, 38) + ij_matrix%pd_d(2, 13, k, l)*wrepp + ij_matrix%pd(13, k, l)*wrepp_d(2)
2531 v_d(2, ij, 39) = v_d(2, ij, 39) + ij_matrix%pd_d(2, 14, k, l)*wrepp + ij_matrix%pd(14, k, l)*wrepp_d(2)
2532 v_d(2, ij, 40) = v_d(2, ij, 40) + ij_matrix%pd_d(2, 15, k, l)*wrepp + ij_matrix%pd(15, k, l)*wrepp_d(2)
2534 v_d(3, ij, 12) = v_d(3, ij, 12) + ij_matrix%pd_d(3, 1, k, l)*wrepp + ij_matrix%pd(1, k, l)*wrepp_d(3)
2535 v_d(3, ij, 13) = v_d(3, ij, 13) + ij_matrix%pd_d(3, 2, k, l)*wrepp + ij_matrix%pd(2, k, l)*wrepp_d(3)
2536 v_d(3, ij, 14) = v_d(3, ij, 14) + ij_matrix%pd_d(3, 3, k, l)*wrepp + ij_matrix%pd(3, k, l)*wrepp_d(3)
2537 v_d(3, ij, 17) = v_d(3, ij, 17) + ij_matrix%pd_d(3, 4, k, l)*wrepp + ij_matrix%pd(4, k, l)*wrepp_d(3)
2538 v_d(3, ij, 18) = v_d(3, ij, 18) + ij_matrix%pd_d(3, 5, k, l)*wrepp + ij_matrix%pd(5, k, l)*wrepp_d(3)
2539 v_d(3, ij, 19) = v_d(3, ij, 19) + ij_matrix%pd_d(3, 6, k, l)*wrepp + ij_matrix%pd(6, k, l)*wrepp_d(3)
2540 v_d(3, ij, 23) = v_d(3, ij, 23) + ij_matrix%pd_d(3, 7, k, l)*wrepp + ij_matrix%pd(7, k, l)*wrepp_d(3)
2541 v_d(3, ij, 24) = v_d(3, ij, 24) + ij_matrix%pd_d(3, 8, k, l)*wrepp + ij_matrix%pd(8, k, l)*wrepp_d(3)
2542 v_d(3, ij, 25) = v_d(3, ij, 25) + ij_matrix%pd_d(3, 9, k, l)*wrepp + ij_matrix%pd(9, k, l)*wrepp_d(3)
2543 v_d(3, ij, 30) = v_d(3, ij, 30) + ij_matrix%pd_d(3, 10, k, l)*wrepp + ij_matrix%pd(10, k, l)*wrepp_d(3)
2544 v_d(3, ij, 31) = v_d(3, ij, 31) + ij_matrix%pd_d(3, 11, k, l)*wrepp + ij_matrix%pd(11, k, l)*wrepp_d(3)
2545 v_d(3, ij, 32) = v_d(3, ij, 32) + ij_matrix%pd_d(3, 12, k, l)*wrepp + ij_matrix%pd(12, k, l)*wrepp_d(3)
2546 v_d(3, ij, 38) = v_d(3, ij, 38) + ij_matrix%pd_d(3, 13, k, l)*wrepp + ij_matrix%pd(13, k, l)*wrepp_d(3)
2547 v_d(3, ij, 39) = v_d(3, ij, 39) + ij_matrix%pd_d(3, 14, k, l)*wrepp + ij_matrix%pd(14, k, l)*wrepp_d(3)
2548 v_d(3, ij, 40) = v_d(3, ij, 40) + ij_matrix%pd_d(3, 15, k, l)*wrepp + ij_matrix%pd(15, k, l)*wrepp_d(3)
2549 ELSE IF (mm == 6)
THEN
2552 v_d(1, ij, 15) = v_d(1, ij, 15) + ij_matrix%dd_d(1, 1, k, l)*wrepp + ij_matrix%dd(1, k, l)*wrepp_d(1)
2553 v_d(1, ij, 21) = v_d(1, ij, 21) + ij_matrix%dd_d(1, 2, k, l)*wrepp + ij_matrix%dd(2, k, l)*wrepp_d(1)
2554 v_d(1, ij, 28) = v_d(1, ij, 28) + ij_matrix%dd_d(1, 3, k, l)*wrepp + ij_matrix%dd(3, k, l)*wrepp_d(1)
2555 v_d(1, ij, 36) = v_d(1, ij, 36) + ij_matrix%dd_d(1, 4, k, l)*wrepp + ij_matrix%dd(4, k, l)*wrepp_d(1)
2556 v_d(1, ij, 45) = v_d(1, ij, 45) + ij_matrix%dd_d(1, 5, k, l)*wrepp + ij_matrix%dd(5, k, l)*wrepp_d(1)
2557 v_d(1, ij, 20) = v_d(1, ij, 20) + ij_matrix%dd_d(1, 6, k, l)*wrepp + ij_matrix%dd(6, k, l)*wrepp_d(1)
2558 v_d(1, ij, 26) = v_d(1, ij, 26) + ij_matrix%dd_d(1, 7, k, l)*wrepp + ij_matrix%dd(7, k, l)*wrepp_d(1)
2559 v_d(1, ij, 27) = v_d(1, ij, 27) + ij_matrix%dd_d(1, 8, k, l)*wrepp + ij_matrix%dd(8, k, l)*wrepp_d(1)
2560 v_d(1, ij, 33) = v_d(1, ij, 33) + ij_matrix%dd_d(1, 9, k, l)*wrepp + ij_matrix%dd(9, k, l)*wrepp_d(1)
2561 v_d(1, ij, 34) = v_d(1, ij, 34) + ij_matrix%dd_d(1, 10, k, l)*wrepp + ij_matrix%dd(10, k, l)*wrepp_d(1)
2562 v_d(1, ij, 35) = v_d(1, ij, 35) + ij_matrix%dd_d(1, 11, k, l)*wrepp + ij_matrix%dd(11, k, l)*wrepp_d(1)
2563 v_d(1, ij, 41) = v_d(1, ij, 41) + ij_matrix%dd_d(1, 12, k, l)*wrepp + ij_matrix%dd(12, k, l)*wrepp_d(1)
2564 v_d(1, ij, 42) = v_d(1, ij, 42) + ij_matrix%dd_d(1, 13, k, l)*wrepp + ij_matrix%dd(13, k, l)*wrepp_d(1)
2565 v_d(1, ij, 43) = v_d(1, ij, 43) + ij_matrix%dd_d(1, 14, k, l)*wrepp + ij_matrix%dd(14, k, l)*wrepp_d(1)
2566 v_d(1, ij, 44) = v_d(1, ij, 44) + ij_matrix%dd_d(1, 15, k, l)*wrepp + ij_matrix%dd(15, k, l)*wrepp_d(1)
2568 v_d(2, ij, 15) = v_d(2, ij, 15) + ij_matrix%dd_d(2, 1, k, l)*wrepp + ij_matrix%dd(1, k, l)*wrepp_d(2)
2569 v_d(2, ij, 21) = v_d(2, ij, 21) + ij_matrix%dd_d(2, 2, k, l)*wrepp + ij_matrix%dd(2, k, l)*wrepp_d(2)
2570 v_d(2, ij, 28) = v_d(2, ij, 28) + ij_matrix%dd_d(2, 3, k, l)*wrepp + ij_matrix%dd(3, k, l)*wrepp_d(2)
2571 v_d(2, ij, 36) = v_d(2, ij, 36) + ij_matrix%dd_d(2, 4, k, l)*wrepp + ij_matrix%dd(4, k, l)*wrepp_d(2)
2572 v_d(2, ij, 45) = v_d(2, ij, 45) + ij_matrix%dd_d(2, 5, k, l)*wrepp + ij_matrix%dd(5, k, l)*wrepp_d(2)
2573 v_d(2, ij, 20) = v_d(2, ij, 20) + ij_matrix%dd_d(2, 6, k, l)*wrepp + ij_matrix%dd(6, k, l)*wrepp_d(2)
2574 v_d(2, ij, 26) = v_d(2, ij, 26) + ij_matrix%dd_d(2, 7, k, l)*wrepp + ij_matrix%dd(7, k, l)*wrepp_d(2)
2575 v_d(2, ij, 27) = v_d(2, ij, 27) + ij_matrix%dd_d(2, 8, k, l)*wrepp + ij_matrix%dd(8, k, l)*wrepp_d(2)
2576 v_d(2, ij, 33) = v_d(2, ij, 33) + ij_matrix%dd_d(2, 9, k, l)*wrepp + ij_matrix%dd(9, k, l)*wrepp_d(2)
2577 v_d(2, ij, 34) = v_d(2, ij, 34) + ij_matrix%dd_d(2, 10, k, l)*wrepp + ij_matrix%dd(10, k, l)*wrepp_d(2)
2578 v_d(2, ij, 35) = v_d(2, ij, 35) + ij_matrix%dd_d(2, 11, k, l)*wrepp + ij_matrix%dd(11, k, l)*wrepp_d(2)
2579 v_d(2, ij, 41) = v_d(2, ij, 41) + ij_matrix%dd_d(2, 12, k, l)*wrepp + ij_matrix%dd(12, k, l)*wrepp_d(2)
2580 v_d(2, ij, 42) = v_d(2, ij, 42) + ij_matrix%dd_d(2, 13, k, l)*wrepp + ij_matrix%dd(13, k, l)*wrepp_d(2)
2581 v_d(2, ij, 43) = v_d(2, ij, 43) + ij_matrix%dd_d(2, 14, k, l)*wrepp + ij_matrix%dd(14, k, l)*wrepp_d(2)
2582 v_d(2, ij, 44) = v_d(2, ij, 44) + ij_matrix%dd_d(2, 15, k, l)*wrepp + ij_matrix%dd(15, k, l)*wrepp_d(2)
2584 v_d(3, ij, 15) = v_d(3, ij, 15) + ij_matrix%dd_d(3, 1, k, l)*wrepp + ij_matrix%dd(1, k, l)*wrepp_d(3)
2585 v_d(3, ij, 21) = v_d(3, ij, 21) + ij_matrix%dd_d(3, 2, k, l)*wrepp + ij_matrix%dd(2, k, l)*wrepp_d(3)
2586 v_d(3, ij, 28) = v_d(3, ij, 28) + ij_matrix%dd_d(3, 3, k, l)*wrepp + ij_matrix%dd(3, k, l)*wrepp_d(3)
2587 v_d(3, ij, 36) = v_d(3, ij, 36) + ij_matrix%dd_d(3, 4, k, l)*wrepp + ij_matrix%dd(4, k, l)*wrepp_d(3)
2588 v_d(3, ij, 45) = v_d(3, ij, 45) + ij_matrix%dd_d(3, 5, k, l)*wrepp + ij_matrix%dd(5, k, l)*wrepp_d(3)
2589 v_d(3, ij, 20) = v_d(3, ij, 20) + ij_matrix%dd_d(3, 6, k, l)*wrepp + ij_matrix%dd(6, k, l)*wrepp_d(3)
2590 v_d(3, ij, 26) = v_d(3, ij, 26) + ij_matrix%dd_d(3, 7, k, l)*wrepp + ij_matrix%dd(7, k, l)*wrepp_d(3)
2591 v_d(3, ij, 27) = v_d(3, ij, 27) + ij_matrix%dd_d(3, 8, k, l)*wrepp + ij_matrix%dd(8, k, l)*wrepp_d(3)
2592 v_d(3, ij, 33) = v_d(3, ij, 33) + ij_matrix%dd_d(3, 9, k, l)*wrepp + ij_matrix%dd(9, k, l)*wrepp_d(3)
2593 v_d(3, ij, 34) = v_d(3, ij, 34) + ij_matrix%dd_d(3, 10, k, l)*wrepp + ij_matrix%dd(10, k, l)*wrepp_d(3)
2594 v_d(3, ij, 35) = v_d(3, ij, 35) + ij_matrix%dd_d(3, 11, k, l)*wrepp + ij_matrix%dd(11, k, l)*wrepp_d(3)
2595 v_d(3, ij, 41) = v_d(3, ij, 41) + ij_matrix%dd_d(3, 12, k, l)*wrepp + ij_matrix%dd(12, k, l)*wrepp_d(3)
2596 v_d(3, ij, 42) = v_d(3, ij, 42) + ij_matrix%dd_d(3, 13, k, l)*wrepp + ij_matrix%dd(13, k, l)*wrepp_d(3)
2597 v_d(3, ij, 43) = v_d(3, ij, 43) + ij_matrix%dd_d(3, 14, k, l)*wrepp + ij_matrix%dd(14, k, l)*wrepp_d(3)
2598 v_d(3, ij, 44) = v_d(3, ij, 44) + ij_matrix%dd_d(3, 15, k, l)*wrepp + ij_matrix%dd(15, k, l)*wrepp_d(3)
2604 logv_d(ij, kl) = (any(abs(v_d(1:3, ij, kl)) > 0.0_dp))
2608 IF (debug_this_module)
THEN
2630 INTEGER,
INTENT(IN) :: limij, limkl
2631 REAL(kind=
dp),
DIMENSION(limkl, limij), &
2632 INTENT(IN),
OPTIONAL :: ww
2633 REAL(kind=
dp),
DIMENSION(:),
INTENT(INOUT), &
2635 REAL(kind=
dp),
DIMENSION(limkl, limij), &
2636 INTENT(IN),
OPTIONAL :: ww_dx, ww_dy, ww_dz
2637 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT), &
2640 INTEGER :: ij, kl, l
2643 IF (
PRESENT(ww) .AND.
PRESENT(w))
THEN
2650 ELSE IF (
PRESENT(ww_dx) .AND.
PRESENT(ww_dy) .AND.
PRESENT(ww_dz) .AND.
PRESENT(dw))
THEN
2654 dw(1, l) = ww_dx(kl, ij)
2655 dw(2, l) = ww_dy(kl, ij)
2656 dw(3, l) = ww_dz(kl, ij)
Check Numerical Vs Analytical NUCINT core.
Check Numerical Vs Analytical CORECORE.
Check Numerical Vs Analytical ROTNUC.
Check Numerical Vs Analytical NUCINT ssss.
Check Numerical Vs Analytical check_dterep_ana.
Check Numerical Vs Analytical check_rotint_ana.
Check Numerical Vs Analytical rot_2el_2c_first.
Defines the basic variable types.
integer, parameter, public dp
Utilities for evaluating the residual part (1/r^3) of Integrals for semi-empiric methods.
real(kind=dp) function, public charg_int_3(r, l1, l2, add)
Evaluates the residual Interaction function between two point-charges The term evaluated is the 1/r^3...
real(kind=dp) function, public ijkl_low_3(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, itype, eval)
Low level general driver for computing residual part of semi-empirical integrals <ij|kl> and their de...
real(kind=dp) function, public dcharg_int_3(r, l1, l2, add)
Derivatives of residual interaction function between two point-charges.
Arrays of parameters used in the semi-empirical calculations \References Everywhere in this module TC...
integer, dimension(9, 9), public indexb
integer, dimension(45), parameter, public int2c_type
integer, parameter, public clmz
integer, dimension(45, 0:2, -2:2), public clm_sp
integer, parameter, public clmzp
integer, parameter, public clmxy
integer, parameter, public clmzz
integer, parameter, public clmyy
real(kind=dp), dimension(45, 0:2, -2:2), public clm_d
integer, parameter, public clmp
integer, parameter, public clmxx
integer, dimension(9, 9), public indexa
integer, dimension(45, 45), public ijkl_ind
Utilities for Integrals for semi-empiric methods.
real(kind=dp) function, public d_ijkl_sp(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_control, se_int_screen, itype)
General driver for computing derivatives of semi-empirical integrals <ij|kl> with sp basis set....
real(kind=dp) function, public ijkl_sp(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_control, se_int_screen, itype)
General driver for computing semi-empirical integrals <ij|kl> with sp basis set. This code uses the o...
subroutine, public store_2el_2c_diag(limij, limkl, ww, w, ww_dx, ww_dy, ww_dz, dw)
Store the two-electron two-center integrals in diagonal form.
recursive subroutine, public rotmat(sepi, sepj, rjiv, r, ij_matrix, do_derivatives, do_invert, debug_invert)
Computes the general rotation matrices for the integrals between I and J (J>=I)
recursive subroutine, public rot_2el_2c_first(sepi, sepj, rijv, se_int_control, se_taper, invert, ii, kk, rep, logv, ij_matrix, v, lgrad, rep_d, v_d, logv_d, drij)
First Step of the rotation of the two-electron two-center integrals in SPD basis.
real(kind=dp) function, public ijkl_d(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_control, se_int_screen, itype)
General driver for computing semi-empirical integrals <ij|kl> involving d-orbitals....
real(kind=dp) function, public d_ijkl_d(sepi, sepj, ij, kl, li, lj, lk, ll, ic, r, se_int_control, se_int_screen, itype)
General driver for computing the derivatives of semi-empirical integrals <ij|kl> involving d-orbitals...
Definition of the semi empirical parameter types.
subroutine check_rotmat_der(sepi, sepj, rjiv, ij_matrix, do_invert)
Debug the derivatives of the the rotational matrices.