par_Reduce_scalar_int Subroutine

private subroutine par_Reduce_scalar_int(scalar_int, parOP, toRank)

Uses

  • proc~~par_reduce_scalar_int~~UsesGraph proc~par_reduce_scalar_int par_Reduce_scalar_int module~modgvec_globals MODgvec_Globals proc~par_reduce_scalar_int->module~modgvec_globals iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env

Find on MPI rank 'toRank' MAX/MIN/SUM scalar value across MPI ranks.

Arguments

Type IntentOptional Attributes Name
integer, intent(inout) :: scalar_int
character(len=3), intent(in) :: parOP
integer, intent(in) :: toRank

Called by

proc~~par_reduce_scalar_int~~CalledByGraph proc~par_reduce_scalar_int par_Reduce_scalar_int interface~par_reduce par_Reduce interface~par_reduce->proc~par_reduce_scalar_int 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~2 InitSolution proc~initsolution~2->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_scalar_int(scalar_int,parOP,toRank)
  ! MODULES
    USE MODgvec_Globals, ONLY : wp,myRank
    IMPLICIT NONE
  !--------------------------------------------------------------------------------------------------------------------------------
  ! INPUT VARIABLES
    INTEGER, INTENT(INOUT)       :: scalar_int
    CHARACTER(LEN=3), INTENT(IN) :: parOP
    INTEGER, INTENT(IN)          :: toRank  ! =0 by default
  !--------------------------------------------------------------------------------------------------------------------------------
  ! LOCAL VARIABLES
    INTEGER     :: ierr
#   if MPI
    MPI_op_TYPE :: mpiOP
  !================================================================================================================================
  ! BODY
    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, scalar_int, 1, dType, mpiOP, toRank, worldComm, ierr)
    ELSE
      CALL MPI_Reduce(scalar_int, scalar_int, 1, dType, mpiOP, toRank, worldComm, ierr)
    END IF
#   endif
  END SUBROUTINE par_Reduce_scalar_int