par_Reduce_array1D Subroutine

private subroutine par_Reduce_array1D(arr, parOP, toRank)

Uses

  • proc~~par_reduce_array1d~~UsesGraph proc~par_reduce_array1d par_Reduce_array1D module~modgvec_globals MODgvec_Globals proc~par_reduce_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.

Arguments

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

Called by

proc~~par_reduce_array1d~~CalledByGraph proc~par_reduce_array1d par_Reduce_array1D interface~par_reduce par_Reduce interface~par_reduce->proc~par_reduce_array1d proc~evaltotals EvalTotals proc~evaltotals->interface~par_reduce proc~init_la_from_solution Init_LA_from_Solution proc~init_la_from_solution->interface~par_reduce proc~initsolutionmhd3d t_functional_mhd3d%InitSolutionMHD3D proc~initsolutionmhd3d->proc~init_la_from_solution interface~writestate WriteState proc~initsolutionmhd3d->interface~writestate proc~writestatetoascii WriteStateToASCII proc~writestatetoascii->proc~evaltotals interface~writestate->proc~writestatetoascii proc~initsolution InitSolution proc~initsolution->proc~initsolutionmhd3d proc~rungvec rungvec proc~rungvec->proc~initsolutionmhd3d proc~minimizemhd3d t_functional_mhd3d%MinimizeMHD3D proc~rungvec->proc~minimizemhd3d proc~minimizemhd3d_descent t_minimizer_mhd3d%MinimizeMHD3D_descent proc~minimizemhd3d_descent->interface~writestate proc~start_rungvec start_rungvec proc~start_rungvec->proc~rungvec program~gvec GVEC program~gvec->proc~rungvec proc~minimizemhd3d->proc~minimizemhd3d_descent proc~minimize minimize proc~minimize->proc~minimizemhd3d

Source Code

  SUBROUTINE par_Reduce_array1D(arr,parOP,toRank)
  ! 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
  !--------------------------------------------------------------------------------------------------------------------------------
  ! 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_Reduce(MPI_IN_PLACE, arr, sz, dType, mpiOP, toRank, worldComm, ierr)
    ELSE
      CALL MPI_Reduce(arr, arr, sz, dType, mpiOP, toRank, worldComm, ierr)
    END IF
#   endif
  END SUBROUTINE par_Reduce_array1D