74 SUBROUTINE build_com_mom_nl(qs_kind_set, sab_all, sap_ppnl, eps_ppnl, particle_set, cell, matrix_rv, matrix_rxrv, &
75 matrix_rrv, matrix_rvr, matrix_rrv_vrr, matrix_r_rxvr, matrix_rxvr_r, matrix_r_doublecom, pseudoatom, ref_point)
78 POINTER :: qs_kind_set
80 INTENT(IN),
POINTER :: sab_all, sap_ppnl
81 REAL(kind=
dp),
INTENT(IN) :: eps_ppnl
83 POINTER :: particle_set
84 TYPE(
cell_type),
INTENT(IN),
POINTER :: cell
86 OPTIONAL :: matrix_rv, matrix_rxrv, matrix_rrv, &
87 matrix_rvr, matrix_rrv_vrr
89 INTENT(INOUT),
OPTIONAL :: matrix_r_rxvr, matrix_rxvr_r, &
91 INTEGER,
INTENT(in),
OPTIONAL :: pseudoatom
92 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN),
OPTIONAL :: ref_point
94 CHARACTER(LEN=*),
PARAMETER :: routinen =
'build_com_mom_nl'
95 INTEGER,
PARAMETER :: i_x = 2, i_xx = 5, i_xy = 6, i_xz = 7, i_y = 3, i_yx = i_xy, i_yy = 8, &
96 i_yz = 9, i_z = 4, i_zx = i_xz, i_zy = i_yz, i_zz = 10
98 INTEGER :: handle, i, iab, iac, iatom, ibc, icol, &
99 ikind, ind, ind2, irow, jatom, jkind, &
100 kac, kbc, kkind, na, natom, nb, nkind, &
102 INTEGER,
DIMENSION(3) :: cell_b
103 LOGICAL :: asso_r_doublecom, asso_r_rxvr, asso_rrv, asso_rrv_vrr, asso_rv, asso_rvr, &
104 asso_rxrv, asso_rxvr_r, do_symmetric, found, go, my_r_doublecom, my_r_rxvr, my_ref, &
105 my_rrv, my_rrv_vrr, my_rv, my_rvr, my_rxrv, my_rxvr_r, periodic, ppnl_present, trans
106 REAL(kind=
dp),
DIMENSION(3) :: rab, rf
107 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: achint, acint, bchint, bcint
108 TYPE(
alist_type),
POINTER :: alist_ac, alist_bc
109 TYPE(
block_p_type),
ALLOCATABLE,
DIMENSION(:) :: blocks_rrv, blocks_rrv_vrr, blocks_rv, &
110 blocks_rvr, blocks_rxrv
111 TYPE(
block_p_type),
ALLOCATABLE,
DIMENSION(:, :) :: blocks_r_doublecom, blocks_r_rxvr, &
114 DIMENSION(:) :: basis_set
123 ppnl_present =
ASSOCIATED(sap_ppnl)
124 IF (.NOT. ppnl_present)
RETURN
126 CALL timeset(routinen, handle)
128 my_r_doublecom = .false.
136 IF (
PRESENT(matrix_r_doublecom)) my_r_doublecom = .true.
137 IF (
PRESENT(matrix_r_rxvr)) my_r_rxvr = .true.
138 IF (
PRESENT(matrix_rxvr_r)) my_rxvr_r = .true.
139 IF (
PRESENT(matrix_rxrv)) my_rxrv = .true.
140 IF (
PRESENT(matrix_rrv)) my_rrv = .true.
141 IF (
PRESENT(matrix_rv)) my_rv = .true.
142 IF (
PRESENT(matrix_rvr)) my_rvr = .true.
143 IF (
PRESENT(matrix_rrv_vrr)) my_rrv_vrr = .true.
144 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
145 cpabort(
'No dbcsr matrix provided for commutator calculation!')
148 natom =
SIZE(particle_set)
150 IF (my_rxrv .OR. my_rrv .OR. my_r_rxvr .OR. my_rxvr_r .OR. my_r_doublecom)
THEN
151 cpassert(
PRESENT(ref_point))
156 IF (my_rrv .OR. my_rrv_vrr .OR. my_r_rxvr .OR. my_rxvr_r .OR. my_r_doublecom) order = 2
159 IF (my_r_doublecom)
THEN
160 cpassert(
PRESENT(pseudoatom))
163 periodic = any(cell%perd > 0)
165 IF (
PRESENT(ref_point))
THEN
166 IF (.NOT. periodic)
THEN
171 IF (order > 1 .OR. my_rxrv .OR. my_rvr)
THEN
172 cpwarn(
"Not clear how to define reference point for order > 1 in periodic cells.")
177 nkind =
SIZE(qs_kind_set)
181 ALLOCATE (sap_int(nkind*nkind))
182 DO i = 1, nkind*nkind
183 NULLIFY (sap_int(i)%alist, sap_int(i)%asort, sap_int(i)%aindex)
184 sap_int(i)%nalist = 0
189 CALL build_sap_ints(sap_int, sap_ppnl, qs_kind_set, order, moment_mode=.true., refpoint=rf, &
190 particle_set=particle_set, cell=cell)
192 CALL build_sap_ints(sap_int, sap_ppnl, qs_kind_set, order, moment_mode=.true.)
198 ALLOCATE (basis_set(nkind))
200 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
201 IF (
ASSOCIATED(orb_basis_set))
THEN
202 basis_set(ikind)%gto_basis_set => orb_basis_set
204 NULLIFY (basis_set(ikind)%gto_basis_set)
243 DO slot = 1, sab_all(1)%nl_size
245 ikind = sab_all(1)%nlist_task(slot)%ikind
246 jkind = sab_all(1)%nlist_task(slot)%jkind
247 iatom = sab_all(1)%nlist_task(slot)%iatom
248 jatom = sab_all(1)%nlist_task(slot)%jatom
249 cell_b(:) = sab_all(1)%nlist_task(slot)%cell(:)
250 rab(1:3) = sab_all(1)%nlist_task(slot)%r(1:3)
252 IF (.NOT.
ASSOCIATED(basis_set(ikind)%gto_basis_set)) cycle
253 IF (.NOT.
ASSOCIATED(basis_set(jkind)%gto_basis_set)) cycle
254 iab = ikind + nkind*(jkind - 1)
256 IF (do_symmetric)
THEN
257 IF (iatom <= jatom)
THEN
268 trans = do_symmetric .AND. (iatom > jatom)
272 ALLOCATE (blocks_rv(3))
275 ALLOCATE (blocks_rxrv(3))
278 ALLOCATE (blocks_rrv(6))
281 ALLOCATE (blocks_rvr(6))
284 ALLOCATE (blocks_rrv_vrr(6))
287 ALLOCATE (blocks_r_rxvr(3, 3))
291 ALLOCATE (blocks_rxvr_r(3, 3))
294 IF (my_r_doublecom)
THEN
295 ALLOCATE (blocks_r_doublecom(3, 3))
301 CALL dbcsr_get_block_p(matrix_rv(ind)%matrix, irow, icol, blocks_rv(ind)%block, found)
307 CALL dbcsr_get_block_p(matrix_rxrv(ind)%matrix, irow, icol, blocks_rxrv(ind)%block, found)
308 blocks_rxrv(ind)%block(:, :) = 0._dp
314 CALL dbcsr_get_block_p(matrix_rrv(ind)%matrix, irow, icol, blocks_rrv(ind)%block, found)
320 CALL dbcsr_get_block_p(matrix_rvr(ind)%matrix, irow, icol, blocks_rvr(ind)%block, found)
326 CALL dbcsr_get_block_p(matrix_rrv_vrr(ind)%matrix, irow, icol, blocks_rrv_vrr(ind)%block, found)
334 blocks_r_rxvr(ind, ind2)%block, found)
335 blocks_r_rxvr(ind, ind2)%block(:, :) = 0._dp
344 blocks_rxvr_r(ind, ind2)%block, found)
345 blocks_rxvr_r(ind, ind2)%block(:, :) = 0._dp
350 IF (my_r_doublecom)
THEN
354 blocks_r_doublecom(ind, ind2)%block, found)
355 blocks_r_doublecom(ind, ind2)%block(:, :) = 0._dp
363 asso_rv = (
ASSOCIATED(blocks_rv(1)%block) .AND.
ASSOCIATED(blocks_rv(2)%block) .AND. &
364 ASSOCIATED(blocks_rv(3)%block))
365 go = go .AND. asso_rv
369 asso_rxrv = (
ASSOCIATED(blocks_rxrv(1)%block) .AND.
ASSOCIATED(blocks_rxrv(2)%block) .AND. &
370 ASSOCIATED(blocks_rxrv(3)%block))
371 go = go .AND. asso_rxrv
375 asso_rrv = (
ASSOCIATED(blocks_rrv(1)%block) .AND.
ASSOCIATED(blocks_rrv(2)%block) .AND. &
376 ASSOCIATED(blocks_rrv(3)%block) .AND.
ASSOCIATED(blocks_rrv(4)%block) .AND. &
377 ASSOCIATED(blocks_rrv(5)%block) .AND.
ASSOCIATED(blocks_rrv(6)%block))
378 go = go .AND. asso_rrv
382 asso_rvr = (
ASSOCIATED(blocks_rvr(1)%block) .AND.
ASSOCIATED(blocks_rvr(2)%block) .AND. &
383 ASSOCIATED(blocks_rvr(3)%block) .AND.
ASSOCIATED(blocks_rvr(4)%block) .AND. &
384 ASSOCIATED(blocks_rvr(5)%block) .AND.
ASSOCIATED(blocks_rvr(6)%block))
385 go = go .AND. asso_rvr
389 asso_rrv_vrr = (
ASSOCIATED(blocks_rrv_vrr(1)%block) .AND.
ASSOCIATED(blocks_rrv_vrr(2)%block) .AND. &
390 ASSOCIATED(blocks_rrv_vrr(3)%block) .AND.
ASSOCIATED(blocks_rrv_vrr(4)%block) .AND. &
391 ASSOCIATED(blocks_rrv_vrr(5)%block) .AND.
ASSOCIATED(blocks_rrv_vrr(6)%block))
392 go = go .AND. asso_rrv_vrr
399 asso_r_rxvr = asso_r_rxvr .AND.
ASSOCIATED(blocks_r_rxvr(ind, ind2)%block)
402 go = go .AND. asso_r_rxvr
409 asso_rxvr_r = asso_rxvr_r .AND.
ASSOCIATED(blocks_rxvr_r(ind, ind2)%block)
412 go = go .AND. asso_rxvr_r
415 IF (my_r_doublecom)
THEN
416 asso_r_doublecom = .true.
419 asso_r_doublecom = asso_r_doublecom .AND.
ASSOCIATED(blocks_r_doublecom(ind, ind2)%block)
422 go = go .AND. asso_r_doublecom
429 iac = ikind + nkind*(kkind - 1)
430 ibc = jkind + nkind*(kkind - 1)
431 IF (.NOT.
ASSOCIATED(sap_int(iac)%alist)) cycle
432 IF (.NOT.
ASSOCIATED(sap_int(ibc)%alist)) cycle
433 CALL get_alist(sap_int(iac), alist_ac, iatom)
434 CALL get_alist(sap_int(ibc), alist_bc, jatom)
435 IF (.NOT.
ASSOCIATED(alist_ac)) cycle
436 IF (.NOT.
ASSOCIATED(alist_bc)) cycle
437 DO kac = 1, alist_ac%nclist
438 DO kbc = 1, alist_bc%nclist
439 IF (alist_ac%clist(kac)%catom /= alist_bc%clist(kbc)%catom) cycle
440 IF (
PRESENT(pseudoatom))
THEN
441 IF (alist_ac%clist(kac)%catom /= pseudoatom) cycle
444 IF (all(cell_b + alist_bc%clist(kbc)%cell - alist_ac%clist(kac)%cell == 0))
THEN
445 IF (alist_ac%clist(kac)%maxac*alist_bc%clist(kbc)%maxach < eps_ppnl) cycle
446 acint => alist_ac%clist(kac)%acint
447 bcint => alist_bc%clist(kbc)%acint
448 achint => alist_ac%clist(kac)%achint
449 bchint => alist_bc%clist(kbc)%achint
464 IF (.NOT. trans)
THEN
466 blocks_rv(1)%block(1:na, 1:nb) = blocks_rv(1)%block(1:na, 1:nb) + &
467 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 1)))
468 blocks_rv(2)%block(1:na, 1:nb) = blocks_rv(2)%block(1:na, 1:nb) + &
469 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 1)))
470 blocks_rv(3)%block(1:na, 1:nb) = blocks_rv(3)%block(1:na, 1:nb) + &
471 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 1)))
473 blocks_rv(1)%block(1:nb, 1:na) = blocks_rv(1)%block(1:nb, 1:na) + &
474 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 1)))
475 blocks_rv(2)%block(1:nb, 1:na) = blocks_rv(2)%block(1:nb, 1:na) + &
476 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 1)))
477 blocks_rv(3)%block(1:nb, 1:na) = blocks_rv(3)%block(1:nb, 1:na) + &
478 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 1)))
489 IF (.NOT. trans)
THEN
490 blocks_rv(1)%block(1:na, 1:nb) = blocks_rv(1)%block(1:na, 1:nb) - &
491 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 2)))
492 blocks_rv(2)%block(1:na, 1:nb) = blocks_rv(2)%block(1:na, 1:nb) - &
493 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 3)))
494 blocks_rv(3)%block(1:na, 1:nb) = blocks_rv(3)%block(1:na, 1:nb) - &
495 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 4)))
497 blocks_rv(1)%block(1:nb, 1:na) = blocks_rv(1)%block(1:nb, 1:na) - &
498 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 2)))
499 blocks_rv(2)%block(1:nb, 1:na) = blocks_rv(2)%block(1:nb, 1:na) - &
500 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 3)))
501 blocks_rv(3)%block(1:nb, 1:na) = blocks_rv(3)%block(1:nb, 1:na) - &
502 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 4)))
510 IF (iatom <= jatom)
THEN
512 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) - &
513 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 4)))
515 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) + &
516 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 3)))
519 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) - &
520 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 4)))
522 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) + &
523 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 3)))
527 IF (iatom <= jatom)
THEN
529 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) - &
530 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 2)))
532 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) + &
533 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 4)))
536 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) - &
537 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 2)))
539 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) + &
540 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 4)))
544 IF (iatom <= jatom)
THEN
546 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) - &
547 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 3)))
549 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) + &
550 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 2)))
553 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) - &
554 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 3)))
556 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) + &
557 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 2)))
563 IF (iatom <= jatom)
THEN
565 blocks_rrv(1)%block(1:na, 1:nb) = blocks_rrv(1)%block(1:na, 1:nb) + &
566 matmul(achint(1:na, 1:np, 5), transpose(bcint(1:nb, 1:np, 1)))
568 blocks_rrv(2)%block(1:na, 1:nb) = blocks_rrv(2)%block(1:na, 1:nb) + &
569 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
571 blocks_rrv(3)%block(1:na, 1:nb) = blocks_rrv(3)%block(1:na, 1:nb) + &
572 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
574 blocks_rrv(4)%block(1:na, 1:nb) = blocks_rrv(4)%block(1:na, 1:nb) + &
575 matmul(achint(1:na, 1:np, 8), transpose(bcint(1:nb, 1:np, 1)))
577 blocks_rrv(5)%block(1:na, 1:nb) = blocks_rrv(5)%block(1:na, 1:nb) + &
578 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
580 blocks_rrv(6)%block(1:na, 1:nb) = blocks_rrv(6)%block(1:na, 1:nb) + &
581 matmul(achint(1:na, 1:np, 10), transpose(bcint(1:nb, 1:np, 1)))
584 blocks_rrv(1)%block(1:nb, 1:na) = blocks_rrv(1)%block(1:nb, 1:na) + &
585 matmul(bchint(1:nb, 1:np, 5), transpose(acint(1:na, 1:np, 1)))
587 blocks_rrv(2)%block(1:nb, 1:na) = blocks_rrv(2)%block(1:nb, 1:na) + &
588 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
590 blocks_rrv(3)%block(1:nb, 1:na) = blocks_rrv(3)%block(1:nb, 1:na) + &
591 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
593 blocks_rrv(4)%block(1:nb, 1:na) = blocks_rrv(4)%block(1:nb, 1:na) + &
594 matmul(bchint(1:nb, 1:np, 8), transpose(acint(1:na, 1:np, 1)))
596 blocks_rrv(5)%block(1:nb, 1:na) = blocks_rrv(5)%block(1:nb, 1:na) + &
597 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
599 blocks_rrv(6)%block(1:nb, 1:na) = blocks_rrv(6)%block(1:nb, 1:na) + &
600 matmul(bchint(1:nb, 1:np, 10), transpose(acint(1:na, 1:np, 1)))
604 IF (iatom <= jatom)
THEN
606 blocks_rrv(1)%block(1:na, 1:nb) = blocks_rrv(1)%block(1:na, 1:nb) - &
607 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 5)))
609 blocks_rrv(2)%block(1:na, 1:nb) = blocks_rrv(2)%block(1:na, 1:nb) - &
610 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 6)))
612 blocks_rrv(3)%block(1:na, 1:nb) = blocks_rrv(3)%block(1:na, 1:nb) - &
613 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 7)))
615 blocks_rrv(4)%block(1:na, 1:nb) = blocks_rrv(4)%block(1:na, 1:nb) - &
616 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 8)))
618 blocks_rrv(5)%block(1:na, 1:nb) = blocks_rrv(5)%block(1:na, 1:nb) - &
619 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 9)))
621 blocks_rrv(6)%block(1:na, 1:nb) = blocks_rrv(6)%block(1:na, 1:nb) - &
622 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 10)))
625 blocks_rrv(1)%block(1:nb, 1:na) = blocks_rrv(1)%block(1:nb, 1:na) - &
626 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 5)))
628 blocks_rrv(2)%block(1:nb, 1:na) = blocks_rrv(2)%block(1:nb, 1:na) - &
629 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 6)))
631 blocks_rrv(3)%block(1:nb, 1:na) = blocks_rrv(3)%block(1:nb, 1:na) - &
632 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 7)))
634 blocks_rrv(4)%block(1:nb, 1:na) = blocks_rrv(4)%block(1:nb, 1:na) - &
635 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 8)))
637 blocks_rrv(5)%block(1:nb, 1:na) = blocks_rrv(5)%block(1:nb, 1:na) - &
638 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 9)))
640 blocks_rrv(6)%block(1:nb, 1:na) = blocks_rrv(6)%block(1:nb, 1:na) - &
641 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 10)))
647 IF (iatom <= jatom)
THEN
649 blocks_rvr(1)%block(1:na, 1:nb) = blocks_rvr(1)%block(1:na, 1:nb) + &
650 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 2)))
652 blocks_rvr(2)%block(1:na, 1:nb) = blocks_rvr(2)%block(1:na, 1:nb) + &
653 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 3)))
655 blocks_rvr(3)%block(1:na, 1:nb) = blocks_rvr(3)%block(1:na, 1:nb) + &
656 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 4)))
658 blocks_rvr(4)%block(1:na, 1:nb) = blocks_rvr(4)%block(1:na, 1:nb) + &
659 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 3)))
661 blocks_rvr(5)%block(1:na, 1:nb) = blocks_rvr(5)%block(1:na, 1:nb) + &
662 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 4)))
664 blocks_rvr(6)%block(1:na, 1:nb) = blocks_rvr(6)%block(1:na, 1:nb) + &
665 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 4)))
668 blocks_rvr(1)%block(1:nb, 1:na) = blocks_rvr(1)%block(1:nb, 1:na) + &
669 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 2)))
671 blocks_rvr(2)%block(1:nb, 1:na) = blocks_rvr(2)%block(1:nb, 1:na) + &
672 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 3)))
674 blocks_rvr(3)%block(1:nb, 1:na) = blocks_rvr(3)%block(1:nb, 1:na) + &
675 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 4)))
677 blocks_rvr(4)%block(1:nb, 1:na) = blocks_rvr(4)%block(1:nb, 1:na) + &
678 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 3)))
680 blocks_rvr(5)%block(1:nb, 1:na) = blocks_rvr(5)%block(1:nb, 1:na) + &
681 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 4)))
683 blocks_rvr(6)%block(1:nb, 1:na) = blocks_rvr(6)%block(1:nb, 1:na) + &
684 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 4)))
690 IF (iatom <= jatom)
THEN
692 blocks_rrv_vrr(1)%block(1:na, 1:nb) = blocks_rrv_vrr(1)%block(1:na, 1:nb) + &
693 matmul(achint(1:na, 1:np, 5), transpose(bcint(1:nb, 1:np, 1)))
695 blocks_rrv_vrr(2)%block(1:na, 1:nb) = blocks_rrv_vrr(2)%block(1:na, 1:nb) + &
696 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
698 blocks_rrv_vrr(3)%block(1:na, 1:nb) = blocks_rrv_vrr(3)%block(1:na, 1:nb) + &
699 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
701 blocks_rrv_vrr(4)%block(1:na, 1:nb) = blocks_rrv_vrr(4)%block(1:na, 1:nb) + &
702 matmul(achint(1:na, 1:np, 8), transpose(bcint(1:nb, 1:np, 1)))
704 blocks_rrv_vrr(5)%block(1:na, 1:nb) = blocks_rrv_vrr(5)%block(1:na, 1:nb) + &
705 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
707 blocks_rrv_vrr(6)%block(1:na, 1:nb) = blocks_rrv_vrr(6)%block(1:na, 1:nb) + &
708 matmul(achint(1:na, 1:np, 10), transpose(bcint(1:nb, 1:np, 1)))
711 blocks_rrv_vrr(1)%block(1:nb, 1:na) = blocks_rrv_vrr(1)%block(1:nb, 1:na) + &
712 matmul(bchint(1:nb, 1:np, 5), transpose(acint(1:na, 1:np, 1)))
714 blocks_rrv_vrr(2)%block(1:nb, 1:na) = blocks_rrv_vrr(2)%block(1:nb, 1:na) + &
715 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
717 blocks_rrv_vrr(3)%block(1:nb, 1:na) = blocks_rrv_vrr(3)%block(1:nb, 1:na) + &
718 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
720 blocks_rrv_vrr(4)%block(1:nb, 1:na) = blocks_rrv_vrr(4)%block(1:nb, 1:na) + &
721 matmul(bchint(1:nb, 1:np, 8), transpose(acint(1:na, 1:np, 1)))
723 blocks_rrv_vrr(5)%block(1:nb, 1:na) = blocks_rrv_vrr(5)%block(1:nb, 1:na) + &
724 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
726 blocks_rrv_vrr(6)%block(1:nb, 1:na) = blocks_rrv_vrr(6)%block(1:nb, 1:na) + &
727 matmul(bchint(1:nb, 1:np, 10), transpose(acint(1:na, 1:np, 1)))
730 IF (iatom <= jatom)
THEN
732 blocks_rrv_vrr(1)%block(1:na, 1:nb) = blocks_rrv_vrr(1)%block(1:na, 1:nb) + &
733 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 5)))
735 blocks_rrv_vrr(2)%block(1:na, 1:nb) = blocks_rrv_vrr(2)%block(1:na, 1:nb) + &
736 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 6)))
738 blocks_rrv_vrr(3)%block(1:na, 1:nb) = blocks_rrv_vrr(3)%block(1:na, 1:nb) + &
739 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 7)))
741 blocks_rrv_vrr(4)%block(1:na, 1:nb) = blocks_rrv_vrr(4)%block(1:na, 1:nb) + &
742 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 8)))
744 blocks_rrv_vrr(5)%block(1:na, 1:nb) = blocks_rrv_vrr(5)%block(1:na, 1:nb) + &
745 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 9)))
747 blocks_rrv_vrr(6)%block(1:na, 1:nb) = blocks_rrv_vrr(6)%block(1:na, 1:nb) + &
748 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 10)))
751 blocks_rrv_vrr(1)%block(1:nb, 1:na) = blocks_rrv_vrr(1)%block(1:nb, 1:na) + &
752 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 5)))
754 blocks_rrv_vrr(2)%block(1:nb, 1:na) = blocks_rrv_vrr(2)%block(1:nb, 1:na) + &
755 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 6)))
757 blocks_rrv_vrr(3)%block(1:nb, 1:na) = blocks_rrv_vrr(3)%block(1:nb, 1:na) + &
758 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 7)))
760 blocks_rrv_vrr(4)%block(1:nb, 1:na) = blocks_rrv_vrr(4)%block(1:nb, 1:na) + &
761 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 8)))
763 blocks_rrv_vrr(5)%block(1:nb, 1:na) = blocks_rrv_vrr(5)%block(1:nb, 1:na) + &
764 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 9)))
766 blocks_rrv_vrr(6)%block(1:nb, 1:na) = blocks_rrv_vrr(6)%block(1:nb, 1:na) + &
767 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 10)))
777 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) = &
778 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) + &
779 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_z)))
780 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) = &
781 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) - &
782 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_y)))
785 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) = &
786 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) + &
787 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_x)))
788 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) = &
789 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) - &
790 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_z)))
793 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) = &
794 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) + &
795 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_y)))
796 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) = &
797 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) - &
798 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_x)))
802 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) = &
803 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) + &
804 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_z)))
805 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) = &
806 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) - &
807 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_y)))
810 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) = &
811 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) + &
812 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_x)))
813 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) = &
814 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) - &
815 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_z)))
818 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) = &
819 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) + &
820 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_y)))
821 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) = &
822 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) - &
823 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_x)))
827 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) = &
828 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) + &
829 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_z)))
830 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) = &
831 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) - &
832 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_y)))
835 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) = &
836 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) + &
837 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_x)))
838 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) = &
839 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) - &
840 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_z)))
843 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) = &
844 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) + &
845 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_y)))
846 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) = &
847 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) - &
848 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_x)))
859 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) = &
860 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) + &
861 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zx)))
862 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) = &
863 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) - &
864 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yx)))
867 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) = &
868 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) + &
869 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xx)))
870 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) = &
871 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) - &
872 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zx)))
875 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) = &
876 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) + &
877 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yx)))
878 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) = &
879 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) - &
880 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xx)))
884 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) = &
885 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) + &
886 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zy)))
887 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) = &
888 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) - &
889 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yy)))
892 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) = &
893 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) + &
894 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xy)))
895 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) = &
896 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) - &
897 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zy)))
900 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) = &
901 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) + &
902 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yy)))
903 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) = &
904 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) - &
905 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xy)))
909 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) = &
910 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) + &
911 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zz)))
912 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) = &
913 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) - &
914 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yz)))
917 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) = &
918 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) + &
919 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xz)))
920 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) = &
921 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) - &
922 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zz)))
925 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) = &
926 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) + &
927 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yz)))
928 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) = &
929 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) - &
930 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xz)))
937 IF (my_r_doublecom)
THEN
940 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
941 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) + &
942 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xz)))
943 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
944 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) - &
945 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xy)))
946 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
947 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) - &
948 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_z)))
949 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
950 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) + &
951 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_y)))
954 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
955 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) + &
956 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xx)))
957 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
958 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) - &
959 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_xz)))
960 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
961 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) - &
962 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_x)))
963 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
964 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) + &
965 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_z)))
968 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
969 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) + &
970 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_xy)))
971 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
972 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) - &
973 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xx)))
974 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
975 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) - &
976 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_y)))
977 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
978 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) + &
979 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_x)))
983 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
984 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) + &
985 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_yz)))
986 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
987 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) - &
988 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yy)))
989 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
990 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) - &
991 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_z)))
992 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
993 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) + &
994 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_y)))
997 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
998 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) + &
999 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yx)))
1000 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1001 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) - &
1002 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yz)))
1003 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1004 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) - &
1005 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_x)))
1006 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1007 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) + &
1008 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_z)))
1011 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1012 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) + &
1013 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yy)))
1014 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1015 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) - &
1016 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_yx)))
1017 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1018 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) - &
1019 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_y)))
1020 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1021 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) + &
1022 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_x)))
1026 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1027 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) + &
1028 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zz)))
1029 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1030 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) - &
1031 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_zy)))
1032 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1033 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) - &
1034 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_z)))
1035 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1036 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) + &
1037 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_y)))
1040 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1041 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) + &
1042 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_zx)))
1043 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1044 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) - &
1045 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zz)))
1046 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1047 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) - &
1048 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_x)))
1049 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1050 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) + &
1051 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_z)))
1054 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1055 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) + &
1056 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zy)))
1057 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1058 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) - &
1059 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zx)))
1060 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1061 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) - &
1062 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_y)))
1063 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1064 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) + &
1065 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_x)))
1077 NULLIFY (blocks_rv(ind)%block)
1079 DEALLOCATE (blocks_rv)
1083 NULLIFY (blocks_rxrv(ind)%block)
1085 DEALLOCATE (blocks_rxrv)
1089 NULLIFY (blocks_rrv(ind)%block)
1091 DEALLOCATE (blocks_rrv)
1095 NULLIFY (blocks_rvr(ind)%block)
1097 DEALLOCATE (blocks_rvr)
1099 IF (my_rrv_vrr)
THEN
1101 NULLIFY (blocks_rrv_vrr(ind)%block)
1103 DEALLOCATE (blocks_rrv_vrr)
1108 NULLIFY (blocks_r_rxvr(ind, ind2)%block)
1111 DEALLOCATE (blocks_r_rxvr)
1116 NULLIFY (blocks_rxvr_r(ind, ind2)%block)
1119 DEALLOCATE (blocks_rxvr_r)
1121 IF (my_r_doublecom)
THEN
1124 NULLIFY (blocks_r_doublecom(ind, ind2)%block)
1127 DEALLOCATE (blocks_r_doublecom)
1145 DEALLOCATE (basis_set)
1147 CALL timestop(handle)