Receive calculation result over MPI (blocking) Receives energy components and conditionally receives gradient based on flag
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(calculation_result_t), | intent(inout) | :: | result | |||
| type(comm_t), | intent(in) | :: | comm | |||
| integer, | intent(in) | :: | source | |||
| integer, | intent(in) | :: | tag | |||
| type(MPI_Status), | intent(out) | :: | status |
subroutine result_recv(result, comm, source, tag, status) !! Receive calculation result over MPI (blocking) !! Receives energy components and conditionally receives gradient based on flag type(calculation_result_t), intent(inout) :: result type(comm_t), intent(in) :: comm integer, intent(in) :: source, tag type(MPI_Status), intent(out) :: status ! Receive energy components call recv(comm, result%energy%scf, source, tag, status) call recv(comm, result%energy%mp2%ss, source, tag, status) call recv(comm, result%energy%mp2%os, source, tag, status) call recv(comm, result%energy%cc%singles, source, tag, status) call recv(comm, result%energy%cc%doubles, source, tag, status) call recv(comm, result%energy%cc%triples, source, tag, status) result%has_energy = .true. ! Receive fragment metadata call recv(comm, result%distance, source, tag, status) ! Receive gradient flag and data if present call recv(comm, result%has_gradient, source, tag, status) if (result%has_gradient) then ! Receive allocatable gradient array (MPI lib handles allocation) call recv(comm, result%gradient, source, tag, status) end if ! Receive Hessian flag and data if present call recv(comm, result%has_hessian, source, tag, status) if (result%has_hessian) then ! Receive allocatable Hessian array (MPI lib handles allocation) call recv(comm, result%hessian, source, tag, status) end if ! Receive dipole flag and data if present call recv(comm, result%has_dipole, source, tag, status) if (result%has_dipole) then ! Receive allocatable dipole array (MPI lib handles allocation) call recv(comm, result%dipole, source, tag, status) end if ! Receive dipole derivatives flag and data if present call recv(comm, result%has_dipole_derivatives, source, tag, status) if (result%has_dipole_derivatives) then ! Receive allocatable dipole derivatives array (MPI lib handles allocation) call recv(comm, result%dipole_derivatives, source, tag, status) end if end subroutine result_recv