Sum the locally accumulated corrections to the diagonal and one-body terms up and add them to the global terms, then deallocate temporaries. This is called after reading in the 6-index integrals
subroutine flush_freeze_buffers()
integer(MPIArg) :: tmat_size
integer(MPIArg) :: ierr
if(nFrozen > 0) then
if(.not. allocated(TMat_local) .or. .not. allocated(TMat_total)) &
call stop_all("flush_freeze_buffers", &
"Buffers for freezing three-body interaction not allocated")
! Sum the core energy from each proc on this node
call MPI_Allreduce(ECore_local, ECore_tot, 1, MPI_DOUBLE_PRECISION, MPI_SUM, &
mpi_comm_intra, ierr)
ECore = ECore + ECore_tot
tmat_size = size(TMat_local)
! Sum the 1-body terms from each proc on this node
call MPI_Allreduce(TMat_local, TMat_total, tmat_size, MPI_DOUBLE_PRECISION, MPI_SUM, &
mpi_comm_intra, ierr)
TMat2D = TMat2D+TMat_total
! Deallocate the temporary for the 1-body integrals
deallocate(TMat_local)
deallocate(TMat_total)
! The 2-body terms are shared memory, no operation is required at this point
end if
end subroutine flush_freeze_buffers