75 SUBROUTINE build_com_rpnl(matrix_rv, qs_kind_set, sab_orb, sap_ppnl, eps_ppnl)
80 POINTER :: sab_orb, sap_ppnl
81 REAL(kind=
dp),
INTENT(IN) :: eps_ppnl
83 CHARACTER(LEN=*),
PARAMETER :: routinen =
'build_com_rpnl'
85 INTEGER :: handle, i, iab, iac, iatom, ibc, icol, ikind, ilist, inode, irow, iset, jatom, &
86 jkind, jneighbor, kac, katom, kbc, kkind, l, lc_max, lc_min, ldai, ldsab, lppnl, maxco, &
87 maxder, maxl, maxlgto, maxlppnl, maxppnl, maxsgf, mepos, na, nb, ncoa, ncoc, nkind, &
88 nlist, nneighbor, nnode, np, nppnl, nprjc, nseta, nsgfa, nthread, prjc, sgfa
89 INTEGER,
DIMENSION(3) :: cell_b, cell_c
90 INTEGER,
DIMENSION(:),
POINTER :: la_max, la_min, npgfa, nprj_ppnl, &
92 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgfa
93 LOGICAL :: found, gpot, ppnl_present, spot
94 REAL(kind=
dp) :: dac, ppnl_radius
95 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: ai_work, sab, work
96 REAL(kind=
dp),
DIMENSION(1) :: rprjc, zetc
97 REAL(kind=
dp),
DIMENSION(3) :: rab, rac
98 REAL(kind=
dp),
DIMENSION(:),
POINTER :: alpha_ppnl, set_radius_a
99 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: cprj, rpgfa, sphi_a, vprj_ppnl, x_block, &
100 y_block, z_block, zeta
101 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: achint, acint, bchint, bcint
102 TYPE(
alist_type),
POINTER :: alist_ac, alist_bc
109 DIMENSION(:),
POINTER :: nl_iterator
114 CALL timeset(routinen, handle)
116 ppnl_present =
ASSOCIATED(sap_ppnl)
118 IF (ppnl_present)
THEN
120 nkind =
SIZE(qs_kind_set)
129 maxl = max(maxlgto, maxlppnl)
132 ldsab = max(maxco,
ncoset(maxlppnl), maxsgf, maxppnl)
136 ALLOCATE (sap_int(nkind*nkind))
137 DO i = 1, nkind*nkind
138 NULLIFY (sap_int(i)%alist, sap_int(i)%asort, sap_int(i)%aindex)
139 sap_int(i)%nalist = 0
143 ALLOCATE (basis_set(nkind), gpotential(nkind), spotential(nkind))
145 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
146 IF (
ASSOCIATED(orb_basis_set))
THEN
147 basis_set(ikind)%gto_basis_set => orb_basis_set
149 NULLIFY (basis_set(ikind)%gto_basis_set)
151 CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential, &
152 sgp_potential=sgp_potential)
153 IF (
ASSOCIATED(gth_potential))
THEN
154 gpotential(ikind)%gth_potential => gth_potential
155 NULLIFY (spotential(ikind)%sgp_potential)
156 ELSE IF (
ASSOCIATED(sgp_potential))
THEN
157 spotential(ikind)%sgp_potential => sgp_potential
158 NULLIFY (gpotential(ikind)%gth_potential)
160 NULLIFY (gpotential(ikind)%gth_potential)
161 NULLIFY (spotential(ikind)%sgp_potential)
184 ALLOCATE (sab(ldsab, ldsab, maxder), work(ldsab, ldsab, maxder))
186 ALLOCATE (ai_work(ldai, ldai, 1))
190 CALL get_iterator_info(nl_iterator, mepos=mepos, ikind=ikind, jkind=kkind, iatom=iatom, &
191 jatom=katom, nlist=nlist, ilist=ilist, nnode=nneighbor, inode=jneighbor, cell=cell_c, r=rac)
192 iac = ikind + nkind*(kkind - 1)
193 IF (.NOT.
ASSOCIATED(basis_set(ikind)%gto_basis_set)) cycle
194 gpot =
ASSOCIATED(gpotential(kkind)%gth_potential)
195 spot =
ASSOCIATED(spotential(kkind)%sgp_potential)
196 IF ((.NOT. gpot) .AND. (.NOT. spot)) cycle
198 first_sgfa => basis_set(ikind)%gto_basis_set%first_sgf
199 la_max => basis_set(ikind)%gto_basis_set%lmax
200 la_min => basis_set(ikind)%gto_basis_set%lmin
201 npgfa => basis_set(ikind)%gto_basis_set%npgf
202 nseta = basis_set(ikind)%gto_basis_set%nset
203 nsgfa = basis_set(ikind)%gto_basis_set%nsgf
204 nsgf_seta => basis_set(ikind)%gto_basis_set%nsgf_set
205 rpgfa => basis_set(ikind)%gto_basis_set%pgf_radius
206 set_radius_a => basis_set(ikind)%gto_basis_set%set_radius
207 sphi_a => basis_set(ikind)%gto_basis_set%sphi
208 zeta => basis_set(ikind)%gto_basis_set%zet
209 nsgfa = basis_set(ikind)%gto_basis_set%nsgf
213 alpha_ppnl => gpotential(kkind)%gth_potential%alpha_ppnl
214 cprj => gpotential(kkind)%gth_potential%cprj
215 lppnl = gpotential(kkind)%gth_potential%lppnl
216 nppnl = gpotential(kkind)%gth_potential%nppnl
217 nprj_ppnl => gpotential(kkind)%gth_potential%nprj_ppnl
218 ppnl_radius = gpotential(kkind)%gth_potential%ppnl_radius
219 vprj_ppnl => gpotential(kkind)%gth_potential%vprj_ppnl
221 cpabort(
'SGP not implemented')
223 cpabort(
'PPNL unknown')
226 IF (.NOT.
ASSOCIATED(sap_int(iac)%alist))
THEN
227 sap_int(iac)%a_kind = ikind
228 sap_int(iac)%p_kind = kkind
229 sap_int(iac)%nalist = nlist
230 ALLOCATE (sap_int(iac)%alist(nlist))
232 NULLIFY (sap_int(iac)%alist(i)%clist)
233 sap_int(iac)%alist(i)%aatom = 0
234 sap_int(iac)%alist(i)%nclist = 0
237 IF (.NOT.
ASSOCIATED(sap_int(iac)%alist(ilist)%clist))
THEN
238 sap_int(iac)%alist(ilist)%aatom = iatom
239 sap_int(iac)%alist(ilist)%nclist = nneighbor
240 ALLOCATE (sap_int(iac)%alist(ilist)%clist(nneighbor))
242 sap_int(iac)%alist(ilist)%clist(i)%catom = 0
246 dac = sqrt(sum(rac*rac))
247 clist => sap_int(iac)%alist(ilist)%clist(jneighbor)
251 ALLOCATE (clist%acint(nsgfa, nppnl, maxder), &
252 clist%achint(nsgfa, nppnl, maxder))
256 NULLIFY (clist%sgf_list)
258 ncoa = npgfa(iset)*
ncoset(la_max(iset))
259 sgfa = first_sgfa(1, iset)
263 nprjc = nprj_ppnl(l)*
nco(l)
264 IF (nprjc == 0) cycle
265 rprjc(1) = ppnl_radius
266 IF (set_radius_a(iset) + rprjc(1) < dac) cycle
267 lc_max = l + 2*(nprj_ppnl(l) - 1)
269 zetc(1) = alpha_ppnl(l)
272 CALL overlap(la_max(iset), la_min(iset), npgfa(iset), rpgfa(:, iset), zeta(:, iset), &
273 lc_max, lc_min, 1, rprjc, zetc, rac, dac, sab(:, :, 1), 0, .false., ai_work, ldai)
274 CALL moment(la_max(iset), npgfa(iset), zeta(:, iset), rpgfa(:, iset), la_min(iset), &
275 lc_max, 1, zetc, rprjc, 1, rac, (/0._dp, 0._dp, 0._dp/), sab(:, :, 2:4))
278 CALL dgemm(
"N",
"N", ncoa, nprjc, ncoc, 1.0_dp, sab(1, 1, i), ldsab, &
279 cprj(1, prjc),
SIZE(cprj, 1), 0.0_dp, work(1, 1, i), ldsab)
285 CALL dgemm(
"T",
"N", nsgf_seta(iset), nppnl, ncoa, 1.0_dp, sphi_a(1, sgfa),
SIZE(sphi_a, 1), &
286 work(1, 1, i), ldsab, 0.0_dp, clist%acint(sgfa, 1, i), nsgfa)
288 CALL dgemm(
"N",
"N", nsgf_seta(iset), nppnl, nppnl, 1.0_dp, clist%acint(sgfa, 1, i), nsgfa, &
289 vprj_ppnl(1, 1),
SIZE(vprj_ppnl, 1), 0.0_dp, clist%achint(sgfa, 1, i), nsgfa)
292 clist%maxac = maxval(abs(clist%acint(:, :, 1)))
293 clist%maxach = maxval(abs(clist%achint(:, :, 1)))
296 DEALLOCATE (sab, ai_work, work)
319 CALL get_iterator_info(nl_iterator, mepos=mepos, ikind=ikind, jkind=jkind, iatom=iatom, &
320 jatom=jatom, nlist=nlist, ilist=ilist, nnode=nnode, inode=inode, cell=cell_b, r=rab)
321 IF (.NOT.
ASSOCIATED(basis_set(ikind)%gto_basis_set)) cycle
322 IF (.NOT.
ASSOCIATED(basis_set(jkind)%gto_basis_set)) cycle
323 iab = ikind + nkind*(jkind - 1)
326 IF (iatom <= jatom)
THEN
338 IF (
ASSOCIATED(x_block) .AND.
ASSOCIATED(y_block) .AND.
ASSOCIATED(z_block))
THEN
340 iac = ikind + nkind*(kkind - 1)
341 ibc = jkind + nkind*(kkind - 1)
342 IF (.NOT.
ASSOCIATED(sap_int(iac)%alist)) cycle
343 IF (.NOT.
ASSOCIATED(sap_int(ibc)%alist)) cycle
344 CALL get_alist(sap_int(iac), alist_ac, iatom)
345 CALL get_alist(sap_int(ibc), alist_bc, jatom)
346 IF (.NOT.
ASSOCIATED(alist_ac)) cycle
347 IF (.NOT.
ASSOCIATED(alist_bc)) cycle
348 DO kac = 1, alist_ac%nclist
349 DO kbc = 1, alist_bc%nclist
350 IF (alist_ac%clist(kac)%catom /= alist_bc%clist(kbc)%catom) cycle
351 IF (all(cell_b + alist_bc%clist(kbc)%cell - alist_ac%clist(kac)%cell == 0))
THEN
352 IF (alist_ac%clist(kac)%maxac*alist_bc%clist(kbc)%maxach < eps_ppnl) cycle
353 acint => alist_ac%clist(kac)%acint
354 bcint => alist_bc%clist(kbc)%acint
355 achint => alist_ac%clist(kac)%achint
356 bchint => alist_bc%clist(kbc)%achint
361 IF (iatom <= jatom)
THEN
363 CALL dgemm(
"N",
"T", na, nb, np, 1._dp, achint(1, 1, 1), na, &
364 bcint(1, 1, 2), nb, 1.0_dp, x_block,
SIZE(x_block, 1))
365 CALL dgemm(
"N",
"T", na, nb, np, 1._dp, achint(1, 1, 1), na, &
366 bcint(1, 1, 3), nb, 1.0_dp, y_block,
SIZE(y_block, 1))
367 CALL dgemm(
"N",
"T", na, nb, np, 1._dp, achint(1, 1, 1), na, &
368 bcint(1, 1, 4), nb, 1.0_dp, z_block,
SIZE(z_block, 1))
370 CALL dgemm(
"N",
"T", na, nb, np, -1._dp, achint(1, 1, 2), na, &
371 bcint(1, 1, 1), nb, 1.0_dp, x_block,
SIZE(x_block, 1))
372 CALL dgemm(
"N",
"T", na, nb, np, -1._dp, achint(1, 1, 3), na, &
373 bcint(1, 1, 1), nb, 1.0_dp, y_block,
SIZE(y_block, 1))
374 CALL dgemm(
"N",
"T", na, nb, np, -1._dp, achint(1, 1, 4), na, &
375 bcint(1, 1, 1), nb, 1.0_dp, z_block,
SIZE(z_block, 1))
378 CALL dgemm(
"N",
"T", nb, na, np, 1.0_dp, bchint(1, 1, 2), nb, &
379 acint(1, 1, 1), na, 1.0_dp, x_block,
SIZE(x_block, 1))
380 CALL dgemm(
"N",
"T", nb, na, np, 1.0_dp, bchint(1, 1, 3), nb, &
381 acint(1, 1, 1), na, 1.0_dp, y_block,
SIZE(y_block, 1))
382 CALL dgemm(
"N",
"T", nb, na, np, 1.0_dp, bchint(1, 1, 4), nb, &
383 acint(1, 1, 1), na, 1.0_dp, z_block,
SIZE(z_block, 1))
385 CALL dgemm(
"N",
"T", nb, na, np, -1.0_dp, bchint(1, 1, 1), nb, &
386 acint(1, 1, 2), na, 1.0_dp, x_block,
SIZE(x_block, 1))
387 CALL dgemm(
"N",
"T", nb, na, np, -1.0_dp, bchint(1, 1, 1), nb, &
388 acint(1, 1, 3), na, 1.0_dp, y_block,
SIZE(y_block, 1))
389 CALL dgemm(
"N",
"T", nb, na, np, -1.0_dp, bchint(1, 1, 1), nb, &
390 acint(1, 1, 4), na, 1.0_dp, z_block,
SIZE(z_block, 1))
405 DEALLOCATE (basis_set, gpotential, spotential)
409 CALL timestop(handle)
437 SUBROUTINE build_com_mom_nl(qs_kind_set, sab_all, sap_ppnl, eps_ppnl, particle_set, cell, matrix_rv, matrix_rxrv, &
438 matrix_rrv, matrix_rvr, matrix_rrv_vrr, matrix_r_rxvr, matrix_rxvr_r, matrix_r_doublecom, pseudoatom, ref_point)
441 POINTER :: qs_kind_set
443 INTENT(IN),
POINTER :: sab_all, sap_ppnl
444 REAL(kind=
dp),
INTENT(IN) :: eps_ppnl
446 POINTER :: particle_set
447 TYPE(
cell_type),
INTENT(IN),
POINTER :: cell
449 OPTIONAL :: matrix_rv, matrix_rxrv, matrix_rrv, &
450 matrix_rvr, matrix_rrv_vrr
452 INTENT(INOUT),
OPTIONAL :: matrix_r_rxvr, matrix_rxvr_r, &
454 INTEGER,
INTENT(in),
OPTIONAL :: pseudoatom
455 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN),
OPTIONAL :: ref_point
457 CHARACTER(LEN=*),
PARAMETER :: routinen =
'build_com_mom_nl'
458 INTEGER,
PARAMETER :: i_x = 2, i_xx = 5, i_xy = 6, i_xz = 7, i_y = 3, i_yx = i_xy, i_yy = 8, &
459 i_yz = 9, i_z = 4, i_zx = i_xz, i_zy = i_yz, i_zz = 10
461 INTEGER :: handle, i, iab, iac, iatom, ibc, icol, &
462 ikind, ind, ind2, irow, jatom, jkind, &
463 kac, kbc, kkind, na, natom, nb, nkind, &
465 INTEGER,
DIMENSION(3) :: cell_b
466 LOGICAL :: asso_r_doublecom, asso_r_rxvr, asso_rrv, asso_rrv_vrr, asso_rv, asso_rvr, &
467 asso_rxrv, asso_rxvr_r, do_symmetric, found, go, my_r_doublecom, my_r_rxvr, my_ref, &
468 my_rrv, my_rrv_vrr, my_rv, my_rvr, my_rxrv, my_rxvr_r, periodic, ppnl_present
469 REAL(kind=
dp),
DIMENSION(3) :: rab, rf
470 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: achint, acint, bchint, bcint
471 TYPE(
alist_type),
POINTER :: alist_ac, alist_bc
472 TYPE(
block_p_type),
ALLOCATABLE,
DIMENSION(:) :: blocks_rrv, blocks_rrv_vrr, blocks_rv, &
473 blocks_rvr, blocks_rxrv
474 TYPE(
block_p_type),
ALLOCATABLE,
DIMENSION(:, :) :: blocks_r_doublecom, blocks_r_rxvr, &
477 DIMENSION(:) :: basis_set
486 ppnl_present =
ASSOCIATED(sap_ppnl)
487 IF (.NOT. ppnl_present)
RETURN
489 CALL timeset(routinen, handle)
491 my_r_doublecom = .false.
499 IF (
PRESENT(matrix_r_doublecom)) my_r_doublecom = .true.
500 IF (
PRESENT(matrix_r_rxvr)) my_r_rxvr = .true.
501 IF (
PRESENT(matrix_rxvr_r)) my_rxvr_r = .true.
502 IF (
PRESENT(matrix_rxrv)) my_rxrv = .true.
503 IF (
PRESENT(matrix_rrv)) my_rrv = .true.
504 IF (
PRESENT(matrix_rv)) my_rv = .true.
505 IF (
PRESENT(matrix_rvr)) my_rvr = .true.
506 IF (
PRESENT(matrix_rrv_vrr)) my_rrv_vrr = .true.
507 IF (.NOT. (my_rv .OR. my_rxrv .OR. my_rrv .OR. my_rvr .OR. my_rrv_vrr .OR. my_r_rxvr .OR. my_rxvr_r .OR. my_r_doublecom))
THEN
508 cpabort(
'No dbcsr matrix provided for commutator calculation!')
511 natom =
SIZE(particle_set)
513 IF (my_rxrv .OR. my_rrv .OR. my_r_rxvr .OR. my_rxvr_r .OR. my_r_doublecom)
THEN
515 cpassert(
PRESENT(ref_point))
516 ELSE IF (my_rvr .OR. my_rrv_vrr)
THEN
523 IF (my_r_doublecom)
THEN
524 cpassert(
PRESENT(pseudoatom))
527 periodic = any(cell%perd > 0)
529 IF (
PRESENT(ref_point))
THEN
530 IF (.NOT. periodic)
THEN
534 IF (order .GT. 1)
THEN
535 cpwarn(
"Not clear how to define reference point for order > 1 in periodic cells.")
540 nkind =
SIZE(qs_kind_set)
544 ALLOCATE (sap_int(nkind*nkind))
545 DO i = 1, nkind*nkind
546 NULLIFY (sap_int(i)%alist, sap_int(i)%asort, sap_int(i)%aindex)
547 sap_int(i)%nalist = 0
552 CALL build_sap_ints(sap_int, sap_ppnl, qs_kind_set, order, moment_mode=.true., refpoint=rf, &
553 particle_set=particle_set, cell=cell)
555 CALL build_sap_ints(sap_int, sap_ppnl, qs_kind_set, order, moment_mode=.true.)
561 ALLOCATE (basis_set(nkind))
563 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
564 IF (
ASSOCIATED(orb_basis_set))
THEN
565 basis_set(ikind)%gto_basis_set => orb_basis_set
567 NULLIFY (basis_set(ikind)%gto_basis_set)
606 DO slot = 1, sab_all(1)%nl_size
608 ikind = sab_all(1)%nlist_task(slot)%ikind
609 jkind = sab_all(1)%nlist_task(slot)%jkind
610 iatom = sab_all(1)%nlist_task(slot)%iatom
611 jatom = sab_all(1)%nlist_task(slot)%jatom
612 cell_b(:) = sab_all(1)%nlist_task(slot)%cell(:)
613 rab(1:3) = sab_all(1)%nlist_task(slot)%r(1:3)
615 IF (.NOT.
ASSOCIATED(basis_set(ikind)%gto_basis_set)) cycle
616 IF (.NOT.
ASSOCIATED(basis_set(jkind)%gto_basis_set)) cycle
617 iab = ikind + nkind*(jkind - 1)
619 IF (do_symmetric)
THEN
620 IF (iatom <= jatom)
THEN
634 ALLOCATE (blocks_rv(3))
637 ALLOCATE (blocks_rxrv(3))
640 ALLOCATE (blocks_rrv(6))
643 ALLOCATE (blocks_rvr(6))
646 ALLOCATE (blocks_rrv_vrr(6))
649 ALLOCATE (blocks_r_rxvr(3, 3))
653 ALLOCATE (blocks_rxvr_r(3, 3))
656 IF (my_r_doublecom)
THEN
657 ALLOCATE (blocks_r_doublecom(3, 3))
663 CALL dbcsr_get_block_p(matrix_rv(ind)%matrix, irow, icol, blocks_rv(ind)%block, found)
669 CALL dbcsr_get_block_p(matrix_rxrv(ind)%matrix, irow, icol, blocks_rxrv(ind)%block, found)
670 blocks_rxrv(ind)%block(:, :) = 0._dp
676 CALL dbcsr_get_block_p(matrix_rrv(ind)%matrix, irow, icol, blocks_rrv(ind)%block, found)
682 CALL dbcsr_get_block_p(matrix_rvr(ind)%matrix, irow, icol, blocks_rvr(ind)%block, found)
688 CALL dbcsr_get_block_p(matrix_rrv_vrr(ind)%matrix, irow, icol, blocks_rrv_vrr(ind)%block, found)
696 blocks_r_rxvr(ind, ind2)%block, found)
697 blocks_r_rxvr(ind, ind2)%block(:, :) = 0._dp
706 blocks_rxvr_r(ind, ind2)%block, found)
707 blocks_rxvr_r(ind, ind2)%block(:, :) = 0._dp
712 IF (my_r_doublecom)
THEN
716 blocks_r_doublecom(ind, ind2)%block, found)
717 blocks_r_doublecom(ind, ind2)%block(:, :) = 0._dp
725 asso_rv = (
ASSOCIATED(blocks_rv(1)%block) .AND.
ASSOCIATED(blocks_rv(2)%block) .AND. &
726 ASSOCIATED(blocks_rv(3)%block))
727 go = go .AND. asso_rv
731 asso_rxrv = (
ASSOCIATED(blocks_rxrv(1)%block) .AND.
ASSOCIATED(blocks_rxrv(2)%block) .AND. &
732 ASSOCIATED(blocks_rxrv(3)%block))
733 go = go .AND. asso_rxrv
737 asso_rrv = (
ASSOCIATED(blocks_rrv(1)%block) .AND.
ASSOCIATED(blocks_rrv(2)%block) .AND. &
738 ASSOCIATED(blocks_rrv(3)%block) .AND.
ASSOCIATED(blocks_rrv(4)%block) .AND. &
739 ASSOCIATED(blocks_rrv(5)%block) .AND.
ASSOCIATED(blocks_rrv(6)%block))
740 go = go .AND. asso_rrv
744 asso_rvr = (
ASSOCIATED(blocks_rvr(1)%block) .AND.
ASSOCIATED(blocks_rvr(2)%block) .AND. &
745 ASSOCIATED(blocks_rvr(3)%block) .AND.
ASSOCIATED(blocks_rvr(4)%block) .AND. &
746 ASSOCIATED(blocks_rvr(5)%block) .AND.
ASSOCIATED(blocks_rvr(6)%block))
747 go = go .AND. asso_rvr
751 asso_rrv_vrr = (
ASSOCIATED(blocks_rrv_vrr(1)%block) .AND.
ASSOCIATED(blocks_rrv_vrr(2)%block) .AND. &
752 ASSOCIATED(blocks_rrv_vrr(3)%block) .AND.
ASSOCIATED(blocks_rrv_vrr(4)%block) .AND. &
753 ASSOCIATED(blocks_rrv_vrr(5)%block) .AND.
ASSOCIATED(blocks_rrv_vrr(6)%block))
754 go = go .AND. asso_rrv_vrr
761 asso_r_rxvr = asso_r_rxvr .AND.
ASSOCIATED(blocks_r_rxvr(ind, ind2)%block)
764 go = go .AND. asso_r_rxvr
771 asso_rxvr_r = asso_rxvr_r .AND.
ASSOCIATED(blocks_rxvr_r(ind, ind2)%block)
774 go = go .AND. asso_rxvr_r
777 IF (my_r_doublecom)
THEN
778 asso_r_doublecom = .true.
781 asso_r_doublecom = asso_r_doublecom .AND.
ASSOCIATED(blocks_r_doublecom(ind, ind2)%block)
784 go = go .AND. asso_r_doublecom
791 iac = ikind + nkind*(kkind - 1)
792 ibc = jkind + nkind*(kkind - 1)
793 IF (.NOT.
ASSOCIATED(sap_int(iac)%alist)) cycle
794 IF (.NOT.
ASSOCIATED(sap_int(ibc)%alist)) cycle
795 CALL get_alist(sap_int(iac), alist_ac, iatom)
796 CALL get_alist(sap_int(ibc), alist_bc, jatom)
797 IF (.NOT.
ASSOCIATED(alist_ac)) cycle
798 IF (.NOT.
ASSOCIATED(alist_bc)) cycle
799 DO kac = 1, alist_ac%nclist
800 DO kbc = 1, alist_bc%nclist
801 IF (alist_ac%clist(kac)%catom /= alist_bc%clist(kbc)%catom) cycle
802 IF (
PRESENT(pseudoatom))
THEN
803 IF (alist_ac%clist(kac)%catom /= pseudoatom) cycle
806 IF (all(cell_b + alist_bc%clist(kbc)%cell - alist_ac%clist(kac)%cell == 0))
THEN
807 IF (alist_ac%clist(kac)%maxac*alist_bc%clist(kbc)%maxach < eps_ppnl) cycle
808 acint => alist_ac%clist(kac)%acint
809 bcint => alist_bc%clist(kbc)%acint
810 achint => alist_ac%clist(kac)%achint
811 bchint => alist_bc%clist(kbc)%achint
826 IF (iatom <= jatom)
THEN
828 blocks_rv(1)%block(1:na, 1:nb) = blocks_rv(1)%block(1:na, 1:nb) + &
829 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 1)))
830 blocks_rv(2)%block(1:na, 1:nb) = blocks_rv(2)%block(1:na, 1:nb) + &
831 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 1)))
832 blocks_rv(3)%block(1:na, 1:nb) = blocks_rv(3)%block(1:na, 1:nb) + &
833 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 1)))
835 blocks_rv(1)%block(1:nb, 1:na) = blocks_rv(1)%block(1:nb, 1:na) + &
836 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 1)))
837 blocks_rv(2)%block(1:nb, 1:na) = blocks_rv(2)%block(1:nb, 1:na) + &
838 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 1)))
839 blocks_rv(3)%block(1:nb, 1:na) = blocks_rv(3)%block(1:nb, 1:na) + &
840 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 1)))
851 IF (iatom <= jatom)
THEN
852 blocks_rv(1)%block(1:na, 1:nb) = blocks_rv(1)%block(1:na, 1:nb) - &
853 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 2)))
854 blocks_rv(2)%block(1:na, 1:nb) = blocks_rv(2)%block(1:na, 1:nb) - &
855 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 3)))
856 blocks_rv(3)%block(1:na, 1:nb) = blocks_rv(3)%block(1:na, 1:nb) - &
857 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 4)))
859 blocks_rv(1)%block(1:nb, 1:na) = blocks_rv(1)%block(1:nb, 1:na) - &
860 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 2)))
861 blocks_rv(2)%block(1:nb, 1:na) = blocks_rv(2)%block(1:nb, 1:na) - &
862 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 3)))
863 blocks_rv(3)%block(1:nb, 1:na) = blocks_rv(3)%block(1:nb, 1:na) - &
864 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 4)))
881 IF (iatom <= jatom)
THEN
882 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) + &
883 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
884 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) - &
885 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 4)))
886 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) - &
887 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
888 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) + &
889 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 3)))
891 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) + &
892 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
893 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) - &
894 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 4)))
895 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) - &
896 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
897 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) + &
898 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 3)))
912 IF (iatom <= jatom)
THEN
913 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) + &
914 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
915 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) - &
916 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 2)))
917 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) - &
918 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
919 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) + &
920 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 4)))
922 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) + &
923 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
924 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) - &
925 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 2)))
926 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) - &
927 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
928 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) + &
929 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 4)))
943 IF (iatom <= jatom)
THEN
944 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) + &
945 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
946 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) - &
947 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 3)))
948 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) - &
949 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
950 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) + &
951 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 2)))
953 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) + &
954 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
955 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) - &
956 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 3)))
957 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) - &
958 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
959 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) + &
960 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 2)))
980 IF (iatom <= jatom)
THEN
981 blocks_rrv(1)%block(1:na, 1:nb) = blocks_rrv(1)%block(1:na, 1:nb) + &
982 matmul(achint(1:na, 1:np, 5), transpose(bcint(1:nb, 1:np, 1)))
983 blocks_rrv(2)%block(1:na, 1:nb) = blocks_rrv(2)%block(1:na, 1:nb) + &
984 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
985 blocks_rrv(3)%block(1:na, 1:nb) = blocks_rrv(3)%block(1:na, 1:nb) + &
986 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
987 blocks_rrv(4)%block(1:na, 1:nb) = blocks_rrv(4)%block(1:na, 1:nb) + &
988 matmul(achint(1:na, 1:np, 8), transpose(bcint(1:nb, 1:np, 1)))
989 blocks_rrv(5)%block(1:na, 1:nb) = blocks_rrv(5)%block(1:na, 1:nb) + &
990 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
991 blocks_rrv(6)%block(1:na, 1:nb) = blocks_rrv(6)%block(1:na, 1:nb) + &
992 matmul(achint(1:na, 1:np, 10), transpose(bcint(1:nb, 1:np, 1)))
994 blocks_rrv(1)%block(1:nb, 1:na) = blocks_rrv(1)%block(1:nb, 1:na) + &
995 matmul(bchint(1:nb, 1:np, 5), transpose(acint(1:na, 1:np, 1)))
996 blocks_rrv(2)%block(1:nb, 1:na) = blocks_rrv(2)%block(1:nb, 1:na) + &
997 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
998 blocks_rrv(3)%block(1:nb, 1:na) = blocks_rrv(3)%block(1:nb, 1:na) + &
999 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
1000 blocks_rrv(4)%block(1:nb, 1:na) = blocks_rrv(4)%block(1:nb, 1:na) + &
1001 matmul(bchint(1:nb, 1:np, 8), transpose(acint(1:na, 1:np, 1)))
1002 blocks_rrv(5)%block(1:nb, 1:na) = blocks_rrv(5)%block(1:nb, 1:na) + &
1003 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
1004 blocks_rrv(6)%block(1:nb, 1:na) = blocks_rrv(6)%block(1:nb, 1:na) + &
1005 matmul(bchint(1:nb, 1:np, 10), transpose(acint(1:na, 1:np, 1)))
1023 IF (iatom <= jatom)
THEN
1024 blocks_rrv(1)%block(1:na, 1:nb) = blocks_rrv(1)%block(1:na, 1:nb) - &
1025 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 5)))
1026 blocks_rrv(2)%block(1:na, 1:nb) = blocks_rrv(2)%block(1:na, 1:nb) - &
1027 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 6)))
1028 blocks_rrv(3)%block(1:na, 1:nb) = blocks_rrv(3)%block(1:na, 1:nb) - &
1029 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 7)))
1030 blocks_rrv(4)%block(1:na, 1:nb) = blocks_rrv(4)%block(1:na, 1:nb) - &
1031 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 8)))
1032 blocks_rrv(5)%block(1:na, 1:nb) = blocks_rrv(5)%block(1:na, 1:nb) - &
1033 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 9)))
1034 blocks_rrv(6)%block(1:na, 1:nb) = blocks_rrv(6)%block(1:na, 1:nb) - &
1035 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 10)))
1037 blocks_rrv(1)%block(1:nb, 1:na) = blocks_rrv(1)%block(1:nb, 1:na) - &
1038 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 5)))
1039 blocks_rrv(2)%block(1:nb, 1:na) = blocks_rrv(2)%block(1:nb, 1:na) - &
1040 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 6)))
1041 blocks_rrv(3)%block(1:nb, 1:na) = blocks_rrv(3)%block(1:nb, 1:na) - &
1042 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 7)))
1043 blocks_rrv(4)%block(1:nb, 1:na) = blocks_rrv(4)%block(1:nb, 1:na) - &
1044 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 8)))
1045 blocks_rrv(5)%block(1:nb, 1:na) = blocks_rrv(5)%block(1:nb, 1:na) - &
1046 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 9)))
1047 blocks_rrv(6)%block(1:nb, 1:na) = blocks_rrv(6)%block(1:nb, 1:na) - &
1048 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 10)))
1054 IF (iatom <= jatom)
THEN
1055 blocks_rvr(1)%block(1:na, 1:nb) = blocks_rvr(1)%block(1:na, 1:nb) + &
1056 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 2)))
1057 blocks_rvr(2)%block(1:na, 1:nb) = blocks_rvr(2)%block(1:na, 1:nb) + &
1058 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 3)))
1059 blocks_rvr(3)%block(1:na, 1:nb) = blocks_rvr(3)%block(1:na, 1:nb) + &
1060 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 4)))
1061 blocks_rvr(4)%block(1:na, 1:nb) = blocks_rvr(4)%block(1:na, 1:nb) + &
1062 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 3)))
1063 blocks_rvr(5)%block(1:na, 1:nb) = blocks_rvr(5)%block(1:na, 1:nb) + &
1064 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 4)))
1065 blocks_rvr(6)%block(1:na, 1:nb) = blocks_rvr(6)%block(1:na, 1:nb) + &
1066 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 4)))
1068 blocks_rvr(1)%block(1:nb, 1:na) = blocks_rvr(1)%block(1:nb, 1:na) + &
1069 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 2)))
1070 blocks_rvr(2)%block(1:nb, 1:na) = blocks_rvr(2)%block(1:nb, 1:na) + &
1071 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 3)))
1072 blocks_rvr(3)%block(1:nb, 1:na) = blocks_rvr(3)%block(1:nb, 1:na) + &
1073 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 4)))
1074 blocks_rvr(4)%block(1:nb, 1:na) = blocks_rvr(4)%block(1:nb, 1:na) + &
1075 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 3)))
1076 blocks_rvr(5)%block(1:nb, 1:na) = blocks_rvr(5)%block(1:nb, 1:na) + &
1077 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 4)))
1078 blocks_rvr(6)%block(1:nb, 1:na) = blocks_rvr(6)%block(1:nb, 1:na) + &
1079 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 4)))
1083 IF (my_rrv_vrr)
THEN
1085 IF (iatom <= jatom)
THEN
1086 blocks_rrv_vrr(1)%block(1:na, 1:nb) = blocks_rrv_vrr(1)%block(1:na, 1:nb) + &
1087 matmul(achint(1:na, 1:np, 5), transpose(bcint(1:nb, 1:np, 1)))
1088 blocks_rrv_vrr(2)%block(1:na, 1:nb) = blocks_rrv_vrr(2)%block(1:na, 1:nb) + &
1089 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
1090 blocks_rrv_vrr(3)%block(1:na, 1:nb) = blocks_rrv_vrr(3)%block(1:na, 1:nb) + &
1091 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
1092 blocks_rrv_vrr(4)%block(1:na, 1:nb) = blocks_rrv_vrr(4)%block(1:na, 1:nb) + &
1093 matmul(achint(1:na, 1:np, 8), transpose(bcint(1:nb, 1:np, 1)))
1094 blocks_rrv_vrr(5)%block(1:na, 1:nb) = blocks_rrv_vrr(5)%block(1:na, 1:nb) + &
1095 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
1096 blocks_rrv_vrr(6)%block(1:na, 1:nb) = blocks_rrv_vrr(6)%block(1:na, 1:nb) + &
1097 matmul(achint(1:na, 1:np, 10), transpose(bcint(1:nb, 1:np, 1)))
1099 blocks_rrv_vrr(1)%block(1:nb, 1:na) = blocks_rrv_vrr(1)%block(1:nb, 1:na) + &
1100 matmul(bchint(1:nb, 1:np, 5), transpose(acint(1:na, 1:np, 1)))
1101 blocks_rrv_vrr(2)%block(1:nb, 1:na) = blocks_rrv_vrr(2)%block(1:nb, 1:na) + &
1102 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
1103 blocks_rrv_vrr(3)%block(1:nb, 1:na) = blocks_rrv_vrr(3)%block(1:nb, 1:na) + &
1104 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
1105 blocks_rrv_vrr(4)%block(1:nb, 1:na) = blocks_rrv_vrr(4)%block(1:nb, 1:na) + &
1106 matmul(bchint(1:nb, 1:np, 8), transpose(acint(1:na, 1:np, 1)))
1107 blocks_rrv_vrr(5)%block(1:nb, 1:na) = blocks_rrv_vrr(5)%block(1:nb, 1:na) + &
1108 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
1109 blocks_rrv_vrr(6)%block(1:nb, 1:na) = blocks_rrv_vrr(6)%block(1:nb, 1:na) + &
1110 matmul(bchint(1:nb, 1:np, 10), transpose(acint(1:na, 1:np, 1)))
1113 IF (iatom <= jatom)
THEN
1114 blocks_rrv_vrr(1)%block(1:na, 1:nb) = blocks_rrv_vrr(1)%block(1:na, 1:nb) + &
1115 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 5)))
1116 blocks_rrv_vrr(2)%block(1:na, 1:nb) = blocks_rrv_vrr(2)%block(1:na, 1:nb) + &
1117 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 6)))
1118 blocks_rrv_vrr(3)%block(1:na, 1:nb) = blocks_rrv_vrr(3)%block(1:na, 1:nb) + &
1119 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 7)))
1120 blocks_rrv_vrr(4)%block(1:na, 1:nb) = blocks_rrv_vrr(4)%block(1:na, 1:nb) + &
1121 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 8)))
1122 blocks_rrv_vrr(5)%block(1:na, 1:nb) = blocks_rrv_vrr(5)%block(1:na, 1:nb) + &
1123 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 9)))
1124 blocks_rrv_vrr(6)%block(1:na, 1:nb) = blocks_rrv_vrr(6)%block(1:na, 1:nb) + &
1125 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 10)))
1127 blocks_rrv_vrr(1)%block(1:nb, 1:na) = blocks_rrv_vrr(1)%block(1:nb, 1:na) + &
1128 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 5)))
1129 blocks_rrv_vrr(2)%block(1:nb, 1:na) = blocks_rrv_vrr(2)%block(1:nb, 1:na) + &
1130 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 6)))
1131 blocks_rrv_vrr(3)%block(1:nb, 1:na) = blocks_rrv_vrr(3)%block(1:nb, 1:na) + &
1132 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 7)))
1133 blocks_rrv_vrr(4)%block(1:nb, 1:na) = blocks_rrv_vrr(4)%block(1:nb, 1:na) + &
1134 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 8)))
1135 blocks_rrv_vrr(5)%block(1:nb, 1:na) = blocks_rrv_vrr(5)%block(1:nb, 1:na) + &
1136 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 9)))
1137 blocks_rrv_vrr(6)%block(1:nb, 1:na) = blocks_rrv_vrr(6)%block(1:nb, 1:na) + &
1138 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 10)))
1152 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) = &
1153 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) + &
1154 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_z)))
1155 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) = &
1156 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) - &
1157 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_y)))
1160 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) = &
1161 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) + &
1162 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_x)))
1163 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) = &
1164 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) - &
1165 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_z)))
1168 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) = &
1169 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) + &
1170 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_y)))
1171 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) = &
1172 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) - &
1173 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_x)))
1177 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) = &
1178 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) + &
1179 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_z)))
1180 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) = &
1181 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) - &
1182 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_y)))
1185 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) = &
1186 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) + &
1187 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_x)))
1188 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) = &
1189 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) - &
1190 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_z)))
1193 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) = &
1194 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) + &
1195 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_y)))
1196 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) = &
1197 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) - &
1198 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_x)))
1202 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) = &
1203 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) + &
1204 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_z)))
1205 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) = &
1206 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) - &
1207 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_y)))
1210 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) = &
1211 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) + &
1212 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_x)))
1213 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) = &
1214 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) - &
1215 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_z)))
1218 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) = &
1219 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) + &
1220 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_y)))
1221 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) = &
1222 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) - &
1223 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_x)))
1234 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) = &
1235 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) + &
1236 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zx)))
1237 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) = &
1238 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) - &
1239 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yx)))
1242 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) = &
1243 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) + &
1244 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xx)))
1245 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) = &
1246 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) - &
1247 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zx)))
1250 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) = &
1251 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) + &
1252 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yx)))
1253 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) = &
1254 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) - &
1255 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xx)))
1259 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) = &
1260 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) + &
1261 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zy)))
1262 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) = &
1263 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) - &
1264 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yy)))
1267 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) = &
1268 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) + &
1269 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xy)))
1270 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) = &
1271 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) - &
1272 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zy)))
1275 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) = &
1276 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) + &
1277 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yy)))
1278 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) = &
1279 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) - &
1280 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xy)))
1284 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) = &
1285 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) + &
1286 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zz)))
1287 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) = &
1288 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) - &
1289 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yz)))
1292 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) = &
1293 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) + &
1294 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xz)))
1295 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) = &
1296 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) - &
1297 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zz)))
1300 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) = &
1301 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) + &
1302 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yz)))
1303 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) = &
1304 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) - &
1305 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xz)))
1312 IF (my_r_doublecom)
THEN
1315 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
1316 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) + &
1317 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xz)))
1318 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
1319 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) - &
1320 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xy)))
1321 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
1322 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) - &
1323 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_z)))
1324 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
1325 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) + &
1326 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_y)))
1329 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
1330 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) + &
1331 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xx)))
1332 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
1333 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) - &
1334 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_xz)))
1335 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
1336 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) - &
1337 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_x)))
1338 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
1339 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) + &
1340 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_z)))
1343 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1344 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) + &
1345 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_xy)))
1346 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1347 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) - &
1348 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xx)))
1349 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1350 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) - &
1351 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_y)))
1352 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1353 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) + &
1354 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_x)))
1358 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1359 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) + &
1360 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_yz)))
1361 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1362 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) - &
1363 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yy)))
1364 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1365 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) - &
1366 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_z)))
1367 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1368 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) + &
1369 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_y)))
1372 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1373 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) + &
1374 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yx)))
1375 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1376 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) - &
1377 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yz)))
1378 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1379 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) - &
1380 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_x)))
1381 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1382 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) + &
1383 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_z)))
1386 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1387 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) + &
1388 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yy)))
1389 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1390 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) - &
1391 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_yx)))
1392 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1393 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) - &
1394 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_y)))
1395 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1396 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) + &
1397 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_x)))
1401 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1402 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) + &
1403 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zz)))
1404 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1405 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) - &
1406 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_zy)))
1407 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1408 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) - &
1409 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_z)))
1410 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1411 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) + &
1412 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_y)))
1415 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1416 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) + &
1417 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_zx)))
1418 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1419 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) - &
1420 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zz)))
1421 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1422 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) - &
1423 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_x)))
1424 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1425 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) + &
1426 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_z)))
1429 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1430 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) + &
1431 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zy)))
1432 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1433 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) - &
1434 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zx)))
1435 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1436 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) - &
1437 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_y)))
1438 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1439 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) + &
1440 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_x)))
1452 NULLIFY (blocks_rv(ind)%block)
1454 DEALLOCATE (blocks_rv)
1458 NULLIFY (blocks_rxrv(ind)%block)
1460 DEALLOCATE (blocks_rxrv)
1464 NULLIFY (blocks_rrv(ind)%block)
1466 DEALLOCATE (blocks_rrv)
1470 NULLIFY (blocks_rvr(ind)%block)
1472 DEALLOCATE (blocks_rvr)
1474 IF (my_rrv_vrr)
THEN
1476 NULLIFY (blocks_rrv_vrr(ind)%block)
1478 DEALLOCATE (blocks_rrv_vrr)
1483 NULLIFY (blocks_r_rxvr(ind, ind2)%block)
1486 DEALLOCATE (blocks_r_rxvr)
1491 NULLIFY (blocks_rxvr_r(ind, ind2)%block)
1494 DEALLOCATE (blocks_rxvr_r)
1496 IF (my_r_doublecom)
THEN
1499 NULLIFY (blocks_r_doublecom(ind, ind2)%block)
1502 DEALLOCATE (blocks_r_doublecom)
1520 DEALLOCATE (basis_set)
1522 CALL timestop(handle)