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
152 cpassert(
PRESENT(ref_point))
153 ELSE IF (my_rvr .OR. my_rrv_vrr)
THEN
160 IF (my_r_doublecom)
THEN
161 cpassert(
PRESENT(pseudoatom))
164 periodic = any(cell%perd > 0)
166 IF (
PRESENT(ref_point))
THEN
167 IF (.NOT. periodic)
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)))
509 IF (iatom <= jatom)
THEN
511 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) + &
512 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
514 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) - &
515 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 4)))
517 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) - &
518 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
520 blocks_rxrv(1)%block(1:na, 1:nb) = blocks_rxrv(1)%block(1:na, 1:nb) + &
521 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 3)))
524 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) + &
525 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
527 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) - &
528 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 4)))
530 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) - &
531 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
533 blocks_rxrv(1)%block(1:nb, 1:na) = blocks_rxrv(1)%block(1:nb, 1:na) + &
534 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 3)))
538 IF (iatom <= jatom)
THEN
540 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) + &
541 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
543 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) - &
544 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 2)))
546 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) - &
547 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
549 blocks_rxrv(2)%block(1:na, 1:nb) = blocks_rxrv(2)%block(1:na, 1:nb) + &
550 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 4)))
553 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) + &
554 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
556 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) - &
557 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 2)))
559 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) - &
560 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
562 blocks_rxrv(2)%block(1:nb, 1:na) = blocks_rxrv(2)%block(1:nb, 1:na) + &
563 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 4)))
567 IF (iatom <= jatom)
THEN
569 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) + &
570 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
572 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) - &
573 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 3)))
575 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) - &
576 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
578 blocks_rxrv(3)%block(1:na, 1:nb) = blocks_rxrv(3)%block(1:na, 1:nb) + &
579 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 2)))
582 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) + &
583 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
585 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) - &
586 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 3)))
588 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) - &
589 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
591 blocks_rxrv(3)%block(1:nb, 1:na) = blocks_rxrv(3)%block(1:nb, 1:na) + &
592 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 2)))
598 IF (iatom <= jatom)
THEN
600 blocks_rrv(1)%block(1:na, 1:nb) = blocks_rrv(1)%block(1:na, 1:nb) + &
601 matmul(achint(1:na, 1:np, 5), transpose(bcint(1:nb, 1:np, 1)))
603 blocks_rrv(2)%block(1:na, 1:nb) = blocks_rrv(2)%block(1:na, 1:nb) + &
604 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
606 blocks_rrv(3)%block(1:na, 1:nb) = blocks_rrv(3)%block(1:na, 1:nb) + &
607 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
609 blocks_rrv(4)%block(1:na, 1:nb) = blocks_rrv(4)%block(1:na, 1:nb) + &
610 matmul(achint(1:na, 1:np, 8), transpose(bcint(1:nb, 1:np, 1)))
612 blocks_rrv(5)%block(1:na, 1:nb) = blocks_rrv(5)%block(1:na, 1:nb) + &
613 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
615 blocks_rrv(6)%block(1:na, 1:nb) = blocks_rrv(6)%block(1:na, 1:nb) + &
616 matmul(achint(1:na, 1:np, 10), transpose(bcint(1:nb, 1:np, 1)))
619 blocks_rrv(1)%block(1:nb, 1:na) = blocks_rrv(1)%block(1:nb, 1:na) + &
620 matmul(bchint(1:nb, 1:np, 5), transpose(acint(1:na, 1:np, 1)))
622 blocks_rrv(2)%block(1:nb, 1:na) = blocks_rrv(2)%block(1:nb, 1:na) + &
623 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
625 blocks_rrv(3)%block(1:nb, 1:na) = blocks_rrv(3)%block(1:nb, 1:na) + &
626 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
628 blocks_rrv(4)%block(1:nb, 1:na) = blocks_rrv(4)%block(1:nb, 1:na) + &
629 matmul(bchint(1:nb, 1:np, 8), transpose(acint(1:na, 1:np, 1)))
631 blocks_rrv(5)%block(1:nb, 1:na) = blocks_rrv(5)%block(1:nb, 1:na) + &
632 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
634 blocks_rrv(6)%block(1:nb, 1:na) = blocks_rrv(6)%block(1:nb, 1:na) + &
635 matmul(bchint(1:nb, 1:np, 10), transpose(acint(1:na, 1:np, 1)))
639 IF (iatom <= jatom)
THEN
641 blocks_rrv(1)%block(1:na, 1:nb) = blocks_rrv(1)%block(1:na, 1:nb) - &
642 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 5)))
644 blocks_rrv(2)%block(1:na, 1:nb) = blocks_rrv(2)%block(1:na, 1:nb) - &
645 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 6)))
647 blocks_rrv(3)%block(1:na, 1:nb) = blocks_rrv(3)%block(1:na, 1:nb) - &
648 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 7)))
650 blocks_rrv(4)%block(1:na, 1:nb) = blocks_rrv(4)%block(1:na, 1:nb) - &
651 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 8)))
653 blocks_rrv(5)%block(1:na, 1:nb) = blocks_rrv(5)%block(1:na, 1:nb) - &
654 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 9)))
656 blocks_rrv(6)%block(1:na, 1:nb) = blocks_rrv(6)%block(1:na, 1:nb) - &
657 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 10)))
660 blocks_rrv(1)%block(1:nb, 1:na) = blocks_rrv(1)%block(1:nb, 1:na) - &
661 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 5)))
663 blocks_rrv(2)%block(1:nb, 1:na) = blocks_rrv(2)%block(1:nb, 1:na) - &
664 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 6)))
666 blocks_rrv(3)%block(1:nb, 1:na) = blocks_rrv(3)%block(1:nb, 1:na) - &
667 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 7)))
669 blocks_rrv(4)%block(1:nb, 1:na) = blocks_rrv(4)%block(1:nb, 1:na) - &
670 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 8)))
672 blocks_rrv(5)%block(1:nb, 1:na) = blocks_rrv(5)%block(1:nb, 1:na) - &
673 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 9)))
675 blocks_rrv(6)%block(1:nb, 1:na) = blocks_rrv(6)%block(1:nb, 1:na) - &
676 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 10)))
682 IF (iatom <= jatom)
THEN
684 blocks_rvr(1)%block(1:na, 1:nb) = blocks_rvr(1)%block(1:na, 1:nb) + &
685 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 2)))
687 blocks_rvr(2)%block(1:na, 1:nb) = blocks_rvr(2)%block(1:na, 1:nb) + &
688 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 3)))
690 blocks_rvr(3)%block(1:na, 1:nb) = blocks_rvr(3)%block(1:na, 1:nb) + &
691 matmul(achint(1:na, 1:np, 2), transpose(bcint(1:nb, 1:np, 4)))
693 blocks_rvr(4)%block(1:na, 1:nb) = blocks_rvr(4)%block(1:na, 1:nb) + &
694 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 3)))
696 blocks_rvr(5)%block(1:na, 1:nb) = blocks_rvr(5)%block(1:na, 1:nb) + &
697 matmul(achint(1:na, 1:np, 3), transpose(bcint(1:nb, 1:np, 4)))
699 blocks_rvr(6)%block(1:na, 1:nb) = blocks_rvr(6)%block(1:na, 1:nb) + &
700 matmul(achint(1:na, 1:np, 4), transpose(bcint(1:nb, 1:np, 4)))
703 blocks_rvr(1)%block(1:nb, 1:na) = blocks_rvr(1)%block(1:nb, 1:na) + &
704 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 2)))
706 blocks_rvr(2)%block(1:nb, 1:na) = blocks_rvr(2)%block(1:nb, 1:na) + &
707 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 3)))
709 blocks_rvr(3)%block(1:nb, 1:na) = blocks_rvr(3)%block(1:nb, 1:na) + &
710 matmul(bchint(1:nb, 1:np, 2), transpose(acint(1:na, 1:np, 4)))
712 blocks_rvr(4)%block(1:nb, 1:na) = blocks_rvr(4)%block(1:nb, 1:na) + &
713 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 3)))
715 blocks_rvr(5)%block(1:nb, 1:na) = blocks_rvr(5)%block(1:nb, 1:na) + &
716 matmul(bchint(1:nb, 1:np, 3), transpose(acint(1:na, 1:np, 4)))
718 blocks_rvr(6)%block(1:nb, 1:na) = blocks_rvr(6)%block(1:nb, 1:na) + &
719 matmul(bchint(1:nb, 1:np, 4), transpose(acint(1:na, 1:np, 4)))
725 IF (iatom <= jatom)
THEN
727 blocks_rrv_vrr(1)%block(1:na, 1:nb) = blocks_rrv_vrr(1)%block(1:na, 1:nb) + &
728 matmul(achint(1:na, 1:np, 5), transpose(bcint(1:nb, 1:np, 1)))
730 blocks_rrv_vrr(2)%block(1:na, 1:nb) = blocks_rrv_vrr(2)%block(1:na, 1:nb) + &
731 matmul(achint(1:na, 1:np, 6), transpose(bcint(1:nb, 1:np, 1)))
733 blocks_rrv_vrr(3)%block(1:na, 1:nb) = blocks_rrv_vrr(3)%block(1:na, 1:nb) + &
734 matmul(achint(1:na, 1:np, 7), transpose(bcint(1:nb, 1:np, 1)))
736 blocks_rrv_vrr(4)%block(1:na, 1:nb) = blocks_rrv_vrr(4)%block(1:na, 1:nb) + &
737 matmul(achint(1:na, 1:np, 8), transpose(bcint(1:nb, 1:np, 1)))
739 blocks_rrv_vrr(5)%block(1:na, 1:nb) = blocks_rrv_vrr(5)%block(1:na, 1:nb) + &
740 matmul(achint(1:na, 1:np, 9), transpose(bcint(1:nb, 1:np, 1)))
742 blocks_rrv_vrr(6)%block(1:na, 1:nb) = blocks_rrv_vrr(6)%block(1:na, 1:nb) + &
743 matmul(achint(1:na, 1:np, 10), transpose(bcint(1:nb, 1:np, 1)))
746 blocks_rrv_vrr(1)%block(1:nb, 1:na) = blocks_rrv_vrr(1)%block(1:nb, 1:na) + &
747 matmul(bchint(1:nb, 1:np, 5), transpose(acint(1:na, 1:np, 1)))
749 blocks_rrv_vrr(2)%block(1:nb, 1:na) = blocks_rrv_vrr(2)%block(1:nb, 1:na) + &
750 matmul(bchint(1:nb, 1:np, 6), transpose(acint(1:na, 1:np, 1)))
752 blocks_rrv_vrr(3)%block(1:nb, 1:na) = blocks_rrv_vrr(3)%block(1:nb, 1:na) + &
753 matmul(bchint(1:nb, 1:np, 7), transpose(acint(1:na, 1:np, 1)))
755 blocks_rrv_vrr(4)%block(1:nb, 1:na) = blocks_rrv_vrr(4)%block(1:nb, 1:na) + &
756 matmul(bchint(1:nb, 1:np, 8), transpose(acint(1:na, 1:np, 1)))
758 blocks_rrv_vrr(5)%block(1:nb, 1:na) = blocks_rrv_vrr(5)%block(1:nb, 1:na) + &
759 matmul(bchint(1:nb, 1:np, 9), transpose(acint(1:na, 1:np, 1)))
761 blocks_rrv_vrr(6)%block(1:nb, 1:na) = blocks_rrv_vrr(6)%block(1:nb, 1:na) + &
762 matmul(bchint(1:nb, 1:np, 10), transpose(acint(1:na, 1:np, 1)))
765 IF (iatom <= jatom)
THEN
767 blocks_rrv_vrr(1)%block(1:na, 1:nb) = blocks_rrv_vrr(1)%block(1:na, 1:nb) + &
768 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 5)))
770 blocks_rrv_vrr(2)%block(1:na, 1:nb) = blocks_rrv_vrr(2)%block(1:na, 1:nb) + &
771 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 6)))
773 blocks_rrv_vrr(3)%block(1:na, 1:nb) = blocks_rrv_vrr(3)%block(1:na, 1:nb) + &
774 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 7)))
776 blocks_rrv_vrr(4)%block(1:na, 1:nb) = blocks_rrv_vrr(4)%block(1:na, 1:nb) + &
777 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 8)))
779 blocks_rrv_vrr(5)%block(1:na, 1:nb) = blocks_rrv_vrr(5)%block(1:na, 1:nb) + &
780 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 9)))
782 blocks_rrv_vrr(6)%block(1:na, 1:nb) = blocks_rrv_vrr(6)%block(1:na, 1:nb) + &
783 matmul(achint(1:na, 1:np, 1), transpose(bcint(1:nb, 1:np, 10)))
786 blocks_rrv_vrr(1)%block(1:nb, 1:na) = blocks_rrv_vrr(1)%block(1:nb, 1:na) + &
787 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 5)))
789 blocks_rrv_vrr(2)%block(1:nb, 1:na) = blocks_rrv_vrr(2)%block(1:nb, 1:na) + &
790 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 6)))
792 blocks_rrv_vrr(3)%block(1:nb, 1:na) = blocks_rrv_vrr(3)%block(1:nb, 1:na) + &
793 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 7)))
795 blocks_rrv_vrr(4)%block(1:nb, 1:na) = blocks_rrv_vrr(4)%block(1:nb, 1:na) + &
796 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 8)))
798 blocks_rrv_vrr(5)%block(1:nb, 1:na) = blocks_rrv_vrr(5)%block(1:nb, 1:na) + &
799 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 9)))
801 blocks_rrv_vrr(6)%block(1:nb, 1:na) = blocks_rrv_vrr(6)%block(1:nb, 1:na) + &
802 matmul(bchint(1:nb, 1:np, 1), transpose(acint(1:na, 1:np, 10)))
812 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) = &
813 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) + &
814 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_z)))
815 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) = &
816 blocks_r_rxvr(1, 1)%block(1:na, 1:nb) - &
817 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_y)))
820 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) = &
821 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) + &
822 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_x)))
823 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) = &
824 blocks_r_rxvr(2, 1)%block(1:na, 1:nb) - &
825 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_z)))
828 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) = &
829 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) + &
830 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_y)))
831 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) = &
832 blocks_r_rxvr(3, 1)%block(1:na, 1:nb) - &
833 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_x)))
837 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) = &
838 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) + &
839 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_z)))
840 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) = &
841 blocks_r_rxvr(1, 2)%block(1:na, 1:nb) - &
842 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_y)))
845 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) = &
846 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) + &
847 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_x)))
848 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) = &
849 blocks_r_rxvr(2, 2)%block(1:na, 1:nb) - &
850 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_z)))
853 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) = &
854 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) + &
855 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_y)))
856 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) = &
857 blocks_r_rxvr(3, 2)%block(1:na, 1:nb) - &
858 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_x)))
862 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) = &
863 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) + &
864 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_z)))
865 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) = &
866 blocks_r_rxvr(1, 3)%block(1:na, 1:nb) - &
867 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_y)))
870 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) = &
871 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) + &
872 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_x)))
873 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) = &
874 blocks_r_rxvr(2, 3)%block(1:na, 1:nb) - &
875 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_z)))
878 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) = &
879 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) + &
880 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_y)))
881 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) = &
882 blocks_r_rxvr(3, 3)%block(1:na, 1:nb) - &
883 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_x)))
894 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) = &
895 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) + &
896 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zx)))
897 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) = &
898 blocks_rxvr_r(1, 1)%block(1:na, 1:nb) - &
899 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yx)))
902 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) = &
903 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) + &
904 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xx)))
905 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) = &
906 blocks_rxvr_r(2, 1)%block(1:na, 1:nb) - &
907 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zx)))
910 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) = &
911 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) + &
912 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yx)))
913 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) = &
914 blocks_rxvr_r(3, 1)%block(1:na, 1:nb) - &
915 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xx)))
919 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) = &
920 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) + &
921 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zy)))
922 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) = &
923 blocks_rxvr_r(1, 2)%block(1:na, 1:nb) - &
924 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yy)))
927 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) = &
928 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) + &
929 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xy)))
930 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) = &
931 blocks_rxvr_r(2, 2)%block(1:na, 1:nb) - &
932 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zy)))
935 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) = &
936 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) + &
937 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yy)))
938 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) = &
939 blocks_rxvr_r(3, 2)%block(1:na, 1:nb) - &
940 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xy)))
944 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) = &
945 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) + &
946 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zz)))
947 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) = &
948 blocks_rxvr_r(1, 3)%block(1:na, 1:nb) - &
949 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yz)))
952 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) = &
953 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) + &
954 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xz)))
955 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) = &
956 blocks_rxvr_r(2, 3)%block(1:na, 1:nb) - &
957 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zz)))
960 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) = &
961 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) + &
962 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yz)))
963 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) = &
964 blocks_rxvr_r(3, 3)%block(1:na, 1:nb) - &
965 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xz)))
972 IF (my_r_doublecom)
THEN
975 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
976 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) + &
977 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xz)))
978 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
979 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) - &
980 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xy)))
981 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
982 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) - &
983 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_z)))
984 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) = &
985 blocks_r_doublecom(1, 1)%block(1:na, 1:nb) + &
986 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_y)))
989 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
990 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) + &
991 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_xx)))
992 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
993 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) - &
994 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_xz)))
995 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
996 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) - &
997 matmul(achint(1:na, 1:np, i_zx), transpose(bcint(1:nb, 1:np, i_x)))
998 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) = &
999 blocks_r_doublecom(2, 1)%block(1:na, 1:nb) + &
1000 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_z)))
1003 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1004 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) + &
1005 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_xy)))
1006 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1007 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) - &
1008 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_xx)))
1009 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1010 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) - &
1011 matmul(achint(1:na, 1:np, i_xx), transpose(bcint(1:nb, 1:np, i_y)))
1012 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) = &
1013 blocks_r_doublecom(3, 1)%block(1:na, 1:nb) + &
1014 matmul(achint(1:na, 1:np, i_yx), transpose(bcint(1:nb, 1:np, i_x)))
1018 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1019 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) + &
1020 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_yz)))
1021 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1022 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) - &
1023 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yy)))
1024 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1025 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) - &
1026 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_z)))
1027 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) = &
1028 blocks_r_doublecom(1, 2)%block(1:na, 1:nb) + &
1029 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_y)))
1032 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1033 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) + &
1034 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_yx)))
1035 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1036 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) - &
1037 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yz)))
1038 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1039 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) - &
1040 matmul(achint(1:na, 1:np, i_zy), transpose(bcint(1:nb, 1:np, i_x)))
1041 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) = &
1042 blocks_r_doublecom(2, 2)%block(1:na, 1:nb) + &
1043 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_z)))
1046 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1047 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) + &
1048 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_yy)))
1049 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1050 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) - &
1051 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_yx)))
1052 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1053 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) - &
1054 matmul(achint(1:na, 1:np, i_xy), transpose(bcint(1:nb, 1:np, i_y)))
1055 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) = &
1056 blocks_r_doublecom(3, 2)%block(1:na, 1:nb) + &
1057 matmul(achint(1:na, 1:np, i_yy), transpose(bcint(1:nb, 1:np, i_x)))
1061 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1062 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) + &
1063 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zz)))
1064 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1065 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) - &
1066 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_zy)))
1067 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1068 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) - &
1069 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_z)))
1070 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) = &
1071 blocks_r_doublecom(1, 3)%block(1:na, 1:nb) + &
1072 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_y)))
1075 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1076 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) + &
1077 matmul(achint(1:na, 1:np, i_z), transpose(bcint(1:nb, 1:np, i_zx)))
1078 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1079 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) - &
1080 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zz)))
1081 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1082 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) - &
1083 matmul(achint(1:na, 1:np, i_zz), transpose(bcint(1:nb, 1:np, i_x)))
1084 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) = &
1085 blocks_r_doublecom(2, 3)%block(1:na, 1:nb) + &
1086 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_z)))
1089 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1090 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) + &
1091 matmul(achint(1:na, 1:np, i_x), transpose(bcint(1:nb, 1:np, i_zy)))
1092 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1093 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) - &
1094 matmul(achint(1:na, 1:np, i_y), transpose(bcint(1:nb, 1:np, i_zx)))
1095 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1096 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) - &
1097 matmul(achint(1:na, 1:np, i_xz), transpose(bcint(1:nb, 1:np, i_y)))
1098 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) = &
1099 blocks_r_doublecom(3, 3)%block(1:na, 1:nb) + &
1100 matmul(achint(1:na, 1:np, i_yz), transpose(bcint(1:nb, 1:np, i_x)))
1112 NULLIFY (blocks_rv(ind)%block)
1114 DEALLOCATE (blocks_rv)
1118 NULLIFY (blocks_rxrv(ind)%block)
1120 DEALLOCATE (blocks_rxrv)
1124 NULLIFY (blocks_rrv(ind)%block)
1126 DEALLOCATE (blocks_rrv)
1130 NULLIFY (blocks_rvr(ind)%block)
1132 DEALLOCATE (blocks_rvr)
1134 IF (my_rrv_vrr)
THEN
1136 NULLIFY (blocks_rrv_vrr(ind)%block)
1138 DEALLOCATE (blocks_rrv_vrr)
1143 NULLIFY (blocks_r_rxvr(ind, ind2)%block)
1146 DEALLOCATE (blocks_r_rxvr)
1151 NULLIFY (blocks_rxvr_r(ind, ind2)%block)
1154 DEALLOCATE (blocks_rxvr_r)
1156 IF (my_r_doublecom)
THEN
1159 NULLIFY (blocks_r_doublecom(ind, ind2)%block)
1162 DEALLOCATE (blocks_r_doublecom)
1180 DEALLOCATE (basis_set)
1182 CALL timestop(handle)