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
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)))
871 IF (iatom <= jatom)
THEN
873 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) + &
874 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
876 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) - &
877 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 4)))
879 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) - &
880 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
882 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) + &
883 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 3)))
886 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) + &
887 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
889 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) - &
890 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 4)))
892 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) - &
893 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
895 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) + &
896 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 3)))
900 IF (iatom <= jatom)
THEN
902 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) + &
903 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
905 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) - &
906 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 2)))
908 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) - &
909 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
911 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) + &
912 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 4)))
915 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) + &
916 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
918 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) - &
919 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 2)))
921 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) - &
922 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, 2), transpose(acint(1:na, 1:np, 4)))
929 IF (iatom <= jatom)
THEN
931 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) + &
932 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
934 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) - &
935 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 3)))
937 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) - &
938 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
940 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) + &
941 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 2)))
944 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) + &
945 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
947 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) - &
948 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 3)))
950 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) - &
951 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
953 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) + &
954 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 2)))
960 IF (iatom <= jatom)
THEN
962 blocks_rrv(1)%block(1:na, 1:nb) = blocks_rrv(1)%block(1:na, 1:nb) + &
963 matmul(achint(1:na, 1:np, 5), transpose(bcint(1:nb, 1:np, 1)))
965 blocks_rrv(2)%block(1:na, 1:nb) = blocks_rrv(2)%block(1:na, 1:nb) + &
966 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
968 blocks_rrv(3)%block(1:na, 1:nb) = blocks_rrv(3)%block(1:na, 1:nb) + &
969 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
971 blocks_rrv(4)%block(1:na, 1:nb) = blocks_rrv(4)%block(1:na, 1:nb) + &
972 matmul(achint(1:na, 1:np, 8), transpose(bcint(1:nb, 1:np, 1)))
974 blocks_rrv(5)%block(1:na, 1:nb) = blocks_rrv(5)%block(1:na, 1:nb) + &
975 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
977 blocks_rrv(6)%block(1:na, 1:nb) = blocks_rrv(6)%block(1:na, 1:nb) + &
978 matmul(achint(1:na, 1:np, 10), transpose(bcint(1:nb, 1:np, 1)))
981 blocks_rrv(1)%block(1:nb, 1:na) = blocks_rrv(1)%block(1:nb, 1:na) + &
982 matmul(bchint(1:nb, 1:np, 5), transpose(acint(1:na, 1:np, 1)))
984 blocks_rrv(2)%block(1:nb, 1:na) = blocks_rrv(2)%block(1:nb, 1:na) + &
985 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
987 blocks_rrv(3)%block(1:nb, 1:na) = blocks_rrv(3)%block(1:nb, 1:na) + &
988 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
990 blocks_rrv(4)%block(1:nb, 1:na) = blocks_rrv(4)%block(1:nb, 1:na) + &
991 matmul(bchint(1:nb, 1:np, 8), transpose(acint(1:na, 1:np, 1)))
993 blocks_rrv(5)%block(1:nb, 1:na) = blocks_rrv(5)%block(1:nb, 1:na) + &
994 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
996 blocks_rrv(6)%block(1:nb, 1:na) = blocks_rrv(6)%block(1:nb, 1:na) + &
997 matmul(bchint(1:nb, 1:np, 10), transpose(acint(1:na, 1:np, 1)))
1001 IF (iatom <= jatom)
THEN
1003 blocks_rrv(1)%block(1:na, 1:nb) = blocks_rrv(1)%block(1:na, 1:nb) - &
1004 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 5)))
1006 blocks_rrv(2)%block(1:na, 1:nb) = blocks_rrv(2)%block(1:na, 1:nb) - &
1007 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 6)))
1009 blocks_rrv(3)%block(1:na, 1:nb) = blocks_rrv(3)%block(1:na, 1:nb) - &
1010 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 7)))
1012 blocks_rrv(4)%block(1:na, 1:nb) = blocks_rrv(4)%block(1:na, 1:nb) - &
1013 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 8)))
1015 blocks_rrv(5)%block(1:na, 1:nb) = blocks_rrv(5)%block(1:na, 1:nb) - &
1016 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 9)))
1018 blocks_rrv(6)%block(1:na, 1:nb) = blocks_rrv(6)%block(1:na, 1:nb) - &
1019 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 10)))
1022 blocks_rrv(1)%block(1:nb, 1:na) = blocks_rrv(1)%block(1:nb, 1:na) - &
1023 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 5)))
1025 blocks_rrv(2)%block(1:nb, 1:na) = blocks_rrv(2)%block(1:nb, 1:na) - &
1026 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 6)))
1028 blocks_rrv(3)%block(1:nb, 1:na) = blocks_rrv(3)%block(1:nb, 1:na) - &
1029 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 7)))
1031 blocks_rrv(4)%block(1:nb, 1:na) = blocks_rrv(4)%block(1:nb, 1:na) - &
1032 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 8)))
1034 blocks_rrv(5)%block(1:nb, 1:na) = blocks_rrv(5)%block(1:nb, 1:na) - &
1035 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 9)))
1037 blocks_rrv(6)%block(1:nb, 1:na) = blocks_rrv(6)%block(1:nb, 1:na) - &
1038 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 10)))
1044 IF (iatom <= jatom)
THEN
1046 blocks_rvr(1)%block(1:na, 1:nb) = blocks_rvr(1)%block(1:na, 1:nb) + &
1047 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 2)))
1049 blocks_rvr(2)%block(1:na, 1:nb) = blocks_rvr(2)%block(1:na, 1:nb) + &
1050 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 3)))
1052 blocks_rvr(3)%block(1:na, 1:nb) = blocks_rvr(3)%block(1:na, 1:nb) + &
1053 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 4)))
1055 blocks_rvr(4)%block(1:na, 1:nb) = blocks_rvr(4)%block(1:na, 1:nb) + &
1056 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 3)))
1058 blocks_rvr(5)%block(1:na, 1:nb) = blocks_rvr(5)%block(1:na, 1:nb) + &
1059 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 4)))
1061 blocks_rvr(6)%block(1:na, 1:nb) = blocks_rvr(6)%block(1:na, 1:nb) + &
1062 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 4)))
1065 blocks_rvr(1)%block(1:nb, 1:na) = blocks_rvr(1)%block(1:nb, 1:na) + &
1066 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 2)))
1068 blocks_rvr(2)%block(1:nb, 1:na) = blocks_rvr(2)%block(1:nb, 1:na) + &
1069 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 3)))
1071 blocks_rvr(3)%block(1:nb, 1:na) = blocks_rvr(3)%block(1:nb, 1:na) + &
1072 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)))
1077 blocks_rvr(5)%block(1:nb, 1:na) = blocks_rvr(5)%block(1:nb, 1:na) + &
1078 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 4)))
1080 blocks_rvr(6)%block(1:nb, 1:na) = blocks_rvr(6)%block(1:nb, 1:na) + &
1081 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 4)))
1085 IF (my_rrv_vrr)
THEN
1087 IF (iatom <= jatom)
THEN
1089 blocks_rrv_vrr(1)%block(1:na, 1:nb) = blocks_rrv_vrr(1)%block(1:na, 1:nb) + &
1090 matmul(achint(1:na, 1:np, 5), transpose(bcint(1:nb, 1:np, 1)))
1092 blocks_rrv_vrr(2)%block(1:na, 1:nb) = blocks_rrv_vrr(2)%block(1:na, 1:nb) + &
1093 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
1095 blocks_rrv_vrr(3)%block(1:na, 1:nb) = blocks_rrv_vrr(3)%block(1:na, 1:nb) + &
1096 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
1098 blocks_rrv_vrr(4)%block(1:na, 1:nb) = blocks_rrv_vrr(4)%block(1:na, 1:nb) + &
1099 matmul(achint(1:na, 1:np, 8), transpose(bcint(1:nb, 1:np, 1)))
1101 blocks_rrv_vrr(5)%block(1:na, 1:nb) = blocks_rrv_vrr(5)%block(1:na, 1:nb) + &
1102 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
1104 blocks_rrv_vrr(6)%block(1:na, 1:nb) = blocks_rrv_vrr(6)%block(1:na, 1:nb) + &
1105 matmul(achint(1:na, 1:np, 10), transpose(bcint(1:nb, 1:np, 1)))
1108 blocks_rrv_vrr(1)%block(1:nb, 1:na) = blocks_rrv_vrr(1)%block(1:nb, 1:na) + &
1109 matmul(bchint(1:nb, 1:np, 5), transpose(acint(1:na, 1:np, 1)))
1111 blocks_rrv_vrr(2)%block(1:nb, 1:na) = blocks_rrv_vrr(2)%block(1:nb, 1:na) + &
1112 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
1114 blocks_rrv_vrr(3)%block(1:nb, 1:na) = blocks_rrv_vrr(3)%block(1:nb, 1:na) + &
1115 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
1117 blocks_rrv_vrr(4)%block(1:nb, 1:na) = blocks_rrv_vrr(4)%block(1:nb, 1:na) + &
1118 matmul(bchint(1:nb, 1:np, 8), transpose(acint(1:na, 1:np, 1)))
1120 blocks_rrv_vrr(5)%block(1:nb, 1:na) = blocks_rrv_vrr(5)%block(1:nb, 1:na) + &
1121 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
1123 blocks_rrv_vrr(6)%block(1:nb, 1:na) = blocks_rrv_vrr(6)%block(1:nb, 1:na) + &
1124 matmul(bchint(1:nb, 1:np, 10), transpose(acint(1:na, 1:np, 1)))
1127 IF (iatom <= jatom)
THEN
1129 blocks_rrv_vrr(1)%block(1:na, 1:nb) = blocks_rrv_vrr(1)%block(1:na, 1:nb) + &
1130 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 5)))
1132 blocks_rrv_vrr(2)%block(1:na, 1:nb) = blocks_rrv_vrr(2)%block(1:na, 1:nb) + &
1133 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 6)))
1135 blocks_rrv_vrr(3)%block(1:na, 1:nb) = blocks_rrv_vrr(3)%block(1:na, 1:nb) + &
1136 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 7)))
1138 blocks_rrv_vrr(4)%block(1:na, 1:nb) = blocks_rrv_vrr(4)%block(1:na, 1:nb) + &
1139 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 8)))
1141 blocks_rrv_vrr(5)%block(1:na, 1:nb) = blocks_rrv_vrr(5)%block(1:na, 1:nb) + &
1142 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 9)))
1144 blocks_rrv_vrr(6)%block(1:na, 1:nb) = blocks_rrv_vrr(6)%block(1:na, 1:nb) + &
1145 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 10)))
1148 blocks_rrv_vrr(1)%block(1:nb, 1:na) = blocks_rrv_vrr(1)%block(1:nb, 1:na) + &
1149 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 5)))
1151 blocks_rrv_vrr(2)%block(1:nb, 1:na) = blocks_rrv_vrr(2)%block(1:nb, 1:na) + &
1152 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 6)))
1154 blocks_rrv_vrr(3)%block(1:nb, 1:na) = blocks_rrv_vrr(3)%block(1:nb, 1:na) + &
1155 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 7)))
1157 blocks_rrv_vrr(4)%block(1:nb, 1:na) = blocks_rrv_vrr(4)%block(1:nb, 1:na) + &
1158 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 8)))
1160 blocks_rrv_vrr(5)%block(1:nb, 1:na) = blocks_rrv_vrr(5)%block(1:nb, 1:na) + &
1161 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 9)))
1163 blocks_rrv_vrr(6)%block(1:nb, 1:na) = blocks_rrv_vrr(6)%block(1:nb, 1:na) + &
1164 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 10)))
1174 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) = &
1175 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) + &
1176 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_z)))
1177 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) = &
1178 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) - &
1179 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_y)))
1182 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) = &
1183 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) + &
1184 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_x)))
1185 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) = &
1186 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) - &
1187 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_z)))
1190 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) = &
1191 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) + &
1192 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_y)))
1193 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) = &
1194 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) - &
1195 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_x)))
1199 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) = &
1200 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) + &
1201 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_z)))
1202 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) = &
1203 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) - &
1204 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_y)))
1207 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) = &
1208 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) + &
1209 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_x)))
1210 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) = &
1211 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) - &
1212 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_z)))
1215 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) = &
1216 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) + &
1217 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_y)))
1218 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) = &
1219 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) - &
1220 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_x)))
1224 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) = &
1225 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) + &
1226 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_z)))
1227 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) = &
1228 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) - &
1229 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_y)))
1232 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) = &
1233 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) + &
1234 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_x)))
1235 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) = &
1236 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) - &
1237 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_z)))
1240 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) = &
1241 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) + &
1242 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_y)))
1243 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) = &
1244 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) - &
1245 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_x)))
1256 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) = &
1257 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) + &
1258 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zx)))
1259 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) = &
1260 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) - &
1261 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yx)))
1264 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) = &
1265 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) + &
1266 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xx)))
1267 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) = &
1268 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) - &
1269 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zx)))
1272 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) = &
1273 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) + &
1274 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yx)))
1275 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) = &
1276 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) - &
1277 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xx)))
1281 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) = &
1282 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) + &
1283 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zy)))
1284 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) = &
1285 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) - &
1286 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yy)))
1289 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) = &
1290 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) + &
1291 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xy)))
1292 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) = &
1293 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) - &
1294 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zy)))
1297 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) = &
1298 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) + &
1299 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yy)))
1300 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) = &
1301 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) - &
1302 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xy)))
1306 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) = &
1307 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) + &
1308 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zz)))
1309 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) = &
1310 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) - &
1311 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yz)))
1314 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) = &
1315 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) + &
1316 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xz)))
1317 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) = &
1318 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) - &
1319 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zz)))
1322 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) = &
1323 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) + &
1324 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yz)))
1325 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) = &
1326 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) - &
1327 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xz)))
1334 IF (my_r_doublecom)
THEN
1337 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
1338 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) + &
1339 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xz)))
1340 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
1341 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) - &
1342 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xy)))
1343 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
1344 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) - &
1345 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_z)))
1346 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
1347 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) + &
1348 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_y)))
1351 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
1352 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) + &
1353 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xx)))
1354 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
1355 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) - &
1356 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_xz)))
1357 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
1358 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) - &
1359 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_x)))
1360 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
1361 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) + &
1362 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_z)))
1365 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1366 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) + &
1367 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_xy)))
1368 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1369 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) - &
1370 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xx)))
1371 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1372 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) - &
1373 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_y)))
1374 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1375 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) + &
1376 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_x)))
1380 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1381 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) + &
1382 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_yz)))
1383 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1384 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) - &
1385 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yy)))
1386 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1387 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) - &
1388 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_z)))
1389 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1390 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) + &
1391 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_y)))
1394 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1395 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) + &
1396 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yx)))
1397 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1398 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) - &
1399 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yz)))
1400 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1401 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) - &
1402 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_x)))
1403 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1404 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) + &
1405 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_z)))
1408 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1409 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) + &
1410 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yy)))
1411 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1412 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) - &
1413 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_yx)))
1414 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1415 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) - &
1416 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_y)))
1417 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1418 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) + &
1419 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_x)))
1423 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1424 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) + &
1425 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zz)))
1426 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1427 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) - &
1428 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_zy)))
1429 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1430 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) - &
1431 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_z)))
1432 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1433 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) + &
1434 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_y)))
1437 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1438 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) + &
1439 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_zx)))
1440 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1441 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) - &
1442 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zz)))
1443 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1444 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) - &
1445 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_x)))
1446 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1447 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) + &
1448 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_z)))
1451 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1452 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) + &
1453 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zy)))
1454 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1455 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) - &
1456 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zx)))
1457 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1458 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) - &
1459 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_y)))
1460 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1461 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) + &
1462 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_x)))
1474 NULLIFY (blocks_rv(ind)%block)
1476 DEALLOCATE (blocks_rv)
1480 NULLIFY (blocks_rxrv(ind)%block)
1482 DEALLOCATE (blocks_rxrv)
1486 NULLIFY (blocks_rrv(ind)%block)
1488 DEALLOCATE (blocks_rrv)
1492 NULLIFY (blocks_rvr(ind)%block)
1494 DEALLOCATE (blocks_rvr)
1496 IF (my_rrv_vrr)
THEN
1498 NULLIFY (blocks_rrv_vrr(ind)%block)
1500 DEALLOCATE (blocks_rrv_vrr)
1505 NULLIFY (blocks_r_rxvr(ind, ind2)%block)
1508 DEALLOCATE (blocks_r_rxvr)
1513 NULLIFY (blocks_rxvr_r(ind, ind2)%block)
1516 DEALLOCATE (blocks_rxvr_r)
1518 IF (my_r_doublecom)
THEN
1521 NULLIFY (blocks_r_doublecom(ind, ind2)%block)
1524 DEALLOCATE (blocks_r_doublecom)
1542 DEALLOCATE (basis_set)
1544 CALL timestop(handle)