subroutine ESMF_ArrayReduceFarray(array, farray, reduceflag, rootPET, &
dimList, tile, vm, rc)
!
! !ARGUMENTS:
type(ESMF_Array), intent(inout) :: array
real(ESMF_KIND_R8), target, intent(out), optional :: farray(:,:)
type(ESMF_Reduce_Flag), intent(in) :: reduceflag
integer, intent(in) :: rootPET
integer, intent(in) :: dimList(:)
integer, intent(in), optional :: tile
type(ESMF_VM), intent(in), optional :: vm
integer, intent(out), optional :: rc
!
! !DESCRIPTION:
! Reduce the dimensions specified in {\tt dimList} of the Array object
! into {\tt farray} on {\tt rootPET} according to the operation specified
! in {\tt reduceflag}. Only root must provide a valid {\tt farray} argument.
!
! This partial reduction operation is tile specific, i.e. only a single
! DistGrid tile of the Array will be reduced. The tile can be selected
! by the optional {\tt tile} argument. The shape of the provided
! {\tt farray} argument must match that of the Array tile reduced by the
! dimensions specified in {\tt dimList}.
!
!
! This version of the interface
! implements the PET-based blocking paradigm: Each PET of the VM must issue
! this call exactly once for {\em all} of its DEs. The
! call will block until all PET-local data objects are accessible.
!
! The arguments are:
! \begin{description}
! \item[array]
! The {\tt ESMF\_Array} object across which data will be scattered.
! \item[{[farray]}]
! Fortran array into which to reduce the Array. Only root
! must provide a valid {\tt farray} argument.
! \item[reduceflag]
! Reduction operation. See section \ref{const:reduce} for a list of
! valid reduce operations. There will be options that determine the
! sequence of operations to ensure bit-wise reproducibility.
! \item[rootPET]
! root.
! \item[dimList]
! List of Array dimensions to be reduced.
! \item[{[tile]}]
! The DistGrid tile in {\tt array} to reduce into {\tt farray}.
! By default tile 1 of {\tt farray} will be reduced.
! \item[{[vm]}]
! Optional {\tt ESMF\_VM} object of the current context. Providing the
! VM of the current context will lower the method's overhead.
! \item[{[rc]}]
! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
! \end{description}
!
!EOPI
!------------------------------------------------------------------------------
integer :: localrc ! local return code
! initialize return code; assume routine not implemented
localrc = ESMF_RC_NOT_IMPL
if (present(rc)) rc = ESMF_RC_NOT_IMPL
end subroutine ESMF_ArrayReduceFarray