Send calculation result over MPI (blocking) Sends energy components and conditionally sends gradient based on has_gradient flag
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(calculation_result_t), | intent(in) | :: | result | |||
| type(comm_t), | intent(in) | :: | comm | |||
| integer, | intent(in) | :: | dest | |||
| integer, | intent(in) | :: | tag |
subroutine result_send(result, comm, dest, tag) !! Send calculation result over MPI (blocking) !! Sends energy components and conditionally sends gradient based on has_gradient flag type(calculation_result_t), intent(in) :: result type(comm_t), intent(in) :: comm integer, intent(in) :: dest, tag ! Send energy components call send(comm, result%energy%scf, dest, tag) call send(comm, result%energy%mp2%ss, dest, tag) call send(comm, result%energy%mp2%os, dest, tag) call send(comm, result%energy%cc%singles, dest, tag) call send(comm, result%energy%cc%doubles, dest, tag) call send(comm, result%energy%cc%triples, dest, tag) ! Send fragment metadata call send(comm, result%distance, dest, tag) ! Send gradient flag and data if present call send(comm, result%has_gradient, dest, tag) if (result%has_gradient) then call send(comm, result%gradient, dest, tag) end if ! Send Hessian flag and data if present call send(comm, result%has_hessian, dest, tag) if (result%has_hessian) then call send(comm, result%hessian, dest, tag) end if ! Send dipole flag and data if present call send(comm, result%has_dipole, dest, tag) if (result%has_dipole) then call send(comm, result%dipole, dest, tag) end if ! Send dipole derivatives flag and data if present call send(comm, result%has_dipole_derivatives, dest, tag) if (result%has_dipole_derivatives) then call send(comm, result%dipole_derivatives, dest, tag) end if end subroutine result_send