subroutine mntoia(pao,pmo,va,vb,nocca,noccb)
use precision, only: dp
implicit none
real(kind=dp), intent(in), dimension(:,:) :: pao
real(kind=dp), intent(out), dimension(*) :: pmo
real(kind=dp), intent(in), target, dimension(:,:) :: va, vb
integer, intent(in) :: nocca, noccb
integer :: nbf
real(kind=dp), allocatable :: scr(:,:)
real(kind=dp), pointer :: vap(:,:), vbp(:,:)
nbf = ubound(pao, 1)
allocate(scr(nocca,nbf))
vap => va(:,1:nocca)
vbp => vb(:,noccb+1:)
call dgemm('t','n',nocca,nbf,nbf, &
1.0_dp,vap,nbf,pao,nbf, &
0.0_dp,scr,nocca)
call dgemm('n','n',nocca,nbf-noccb,nbf, &
1.0_dp,scr,nocca,vbp,nbf, &
0.0_dp,pmo,nocca)
deallocate(scr)
end subroutine mntoia