Send calculation result over MPI (non-blocking) Sends SCF energy (non-blocking) and other components (blocking)
| 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 | |||
| type(request_t), | intent(out) | :: | req |
subroutine result_isend(result, comm, dest, tag, req) !! Send calculation result over MPI (non-blocking) !! Sends SCF energy (non-blocking) and other components (blocking) type(calculation_result_t), intent(in) :: result type(comm_t), intent(in) :: comm integer, intent(in) :: dest, tag type(request_t), intent(out) :: req ! Send SCF energy (non-blocking) call isend(comm, result%energy%scf, dest, tag, req) ! Send other energy components (blocking to avoid needing multiple request handles) 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 (blocking to avoid needing multiple request handles) 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 (blocking to avoid needing multiple request handles) 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 (blocking to avoid needing multiple request handles) 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 (blocking to avoid needing multiple request handles) 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_isend