par_IReduce_array1D Subroutine

private subroutine par_IReduce_array1D(arr, parOP, toRank, req_out)

Uses

  • proc~~par_ireduce_array1d~~UsesGraph proc~par_ireduce_array1d par_IReduce_array1D module~modgvec_globals MODgvec_Globals proc~par_ireduce_array1d->module~modgvec_globals iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env

Find on MPI rank 'toRank' MAX/MIN/SUM of 1D array (assumed-shape) across all MPI ranks (nonblocking).

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: arr(:)
character(len=3), intent(in) :: parOP
integer, intent(in) :: toRank
real :: req_out

Calls

proc~~par_ireduce_array1d~~CallsGraph proc~par_ireduce_array1d par_IReduce_array1D mpi_ireduce mpi_ireduce proc~par_ireduce_array1d->mpi_ireduce

Called by

proc~~par_ireduce_array1d~~CalledByGraph proc~par_ireduce_array1d par_IReduce_array1D interface~par_ireduce par_IReduce interface~par_ireduce->proc~par_ireduce_array1d proc~evalforce EvalForce proc~evalforce->interface~par_ireduce proc~initsolutionmhd3d t_functional_mhd3d%InitSolutionMHD3D proc~initsolutionmhd3d->proc~evalforce proc~minimizemhd3d_descent MinimizeMHD3D_descent proc~minimizemhd3d_descent->proc~evalforce program~gvec_post GVEC_POST program~gvec_post->proc~evalforce proc~minimizemhd3d t_functional_mhd3d%MinimizeMHD3D proc~minimizemhd3d->proc~minimizemhd3d_descent

Source Code

  SUBROUTINE par_IReduce_array1D(arr,parOP,toRank,req_out)
  ! MODULES
    USE MODgvec_Globals, ONLY : wp,myRank
    IMPLICIT NONE
  !--------------------------------------------------------------------------------------------------------------------------------
  ! INPUT VARIABLES
    REAL(wp), INTENT(INOUT)        :: arr(:)
    CHARACTER(LEN=3), INTENT(IN)   :: parOP
    INTEGER, INTENT(IN)            :: toRank  ! =0 by default
    MPI_request_TYPE, INTENT(OUT) :: req_out
  !--------------------------------------------------------------------------------------------------------------------------------
  ! LOCAL VARIABLES
#   if MPI
    MPI_op_TYPE  :: mpiOP
    INTEGER      :: ierr
    INTEGER      :: sz
  !================================================================================================================================
  ! BODY
    sz=SIZE(arr)
    SELECT CASE(parOP)
      CASE('MAX')
        mpiOP=MPI_MAX
      CASE('MIN')
        mpiOP=MPI_MIN
      CASE('SUM')
        mpiOP=MPI_SUM
    END SELECT
    IF (myRank.EQ.toRank) THEN
      CALL MPI_IReduce(MPI_IN_PLACE, arr, sz, dType, mpiOP, toRank, worldComm, req_out, ierr)
    ELSE
      CALL MPI_IReduce(arr, arr, sz, dType, mpiOP, toRank, worldComm, req_out, ierr)
    END IF
#   endif
  END SUBROUTINE par_IReduce_array1D