subroutine mrsfqropcal(pa, pb, tab, tij, z, noca, nocb)
use precision, only: dp
implicit none
real(kind=dp), intent(out), dimension(:,:) :: pa, pb
real(kind=dp), intent(in), dimension(:,:) :: tab, tij
real(kind=dp), intent(in), dimension(:) :: z
integer, intent(in) :: noca, nocb
integer :: nbf, i, j, a, x, ij
nbf = ubound(pa, 1)
! alpha
pa = 0.0_dp
do j=noca+1, nbf
do i=noca+1, nbf
pa(i, j) = tab(i-noca, j-noca)
end do
end do
! beta
pb = 0.0_dp
do j=1, nocb
do i=1, nocb
pb(i, j) = tij(i, j)
end do
end do
! doc-socc
ij = 0
do x = nocb+1, noca
do i = 1, nocb
ij = ij+1
pb(i,x) = pb(i,x)+z(ij)*0.5_dp
end do
end do
! doc-virt
do a = noca+1, nbf
do i = 1, nocb
ij = ij + 1
pa(i,a) = pa(i,a)+z(ij)*0.5_dp
pb(i,a) = pb(i,a)+z(ij)*0.5_dp
end do
end do
! socc-virt
do a = noca+1, nbf
do x = nocb+1, noca
ij = ij+1
pa(x,a) = pa(x,a)+z(ij)*0.5_dp
end do
end do
return
end subroutine mrsfqropcal