function ESMF_LocStreamCreateReg(regDecomp, decompFlag, &
minIndex, maxIndex, keywordEnforcer, &
coordSys, indexflag, name, rc)
!
! !RETURN VALUE:
type(ESMF_LocStream) :: ESMF_LocStreamCreateReg
!
! !ARGUMENTS:
integer, intent(in), optional :: regDecomp
type(ESMF_Decomp_Flag), intent(in), optional :: decompflag
integer, intent(in), optional :: minIndex
integer, intent(in) :: maxIndex
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
type(ESMF_CoordSys_Flag), intent(in), optional :: coordSys
type(ESMF_Index_Flag), intent(in), optional :: indexflag
character (len=*), intent(in), optional :: name
integer, intent(out), optional :: rc
!
! !DESCRIPTION:
! Allocates memory for a new {\tt ESMF\_LocStream} object, constructs its
! internal derived types. The {\tt ESMF\_DistGrid} is set up, indicating
! how the LocStream is distributed.
!
! The arguments are:
! \begin{description}
! \item[{[regDecomp]}]
! Specify into how many chunks to divide the locations.
! If not specified, defaults to the number of PETs.
! \item[{[decompFlag]}]
! \begin{sloppypar}
! Specify what to do with leftover locations after division.
! If not specified, defaults to {\tt ESMF\_DECOMP\_BALANCED}. Please
! see Section~\ref{const:decompflag} for a full description of the
! possible options.
! \end{sloppypar}
! \item[{[minIndex]}]
! If indexflag={\tt ESMF\_INDEX\_DELOCAL}, this setting is used to indicate
! the number to start the index ranges at. If not present, defaults to 1.
! \item[maxIndex]
! The maximum index across all PETs.
! \item[{[coordSys]}]
! The coordinate system of the location stream coordinate data.
! For a full list of options, please see Section~\ref{const:coordsys}.
! If not specified then defaults to ESMF\_COORDSYS\_SPH\_DEG.
! \item[{[indexflag]}]
! Flag that indicates how the DE-local indices are to be defined.
! Defaults to {\tt ESMF\_INDEX\_DELOCAL}, which indicates
! that the index range on each DE starts at 1. See Section~\ref{const:indexflag}
! for the full range of options.
! \item[{[name]}]
! Name of the location stream
! \item[{[rc]}]
! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
! \end{description}
!
!EOP
integer :: localrc ! Error status
type(ESMF_DistGrid) :: distgrid
integer :: minIndexLocal,regDecompLocal
type(ESMF_Decomp_Flag) :: decompFlagLocal
type(ESMF_Index_Flag) :: indexflagLocal
type(ESMF_CoordSys_Flag) :: coordSysLocal
type(ESMF_VM) :: vm
! Initialize return code; assume failure until success is certain
if (present(rc)) rc = ESMF_RC_NOT_IMPL
! Set defaults
if (present(decompflag)) then
decompFlagLocal=decompflag
else
decompFlagLocal=ESMF_DECOMP_BALANCED
endif
if (present(indexflag)) then
indexflagLocal=indexflag
else
indexflagLocal=ESMF_INDEX_DELOCAL
endif
if (present(coordSys)) then
coordSysLocal=coordSys
else
coordSysLocal=ESMF_COORDSYS_SPH_DEG
endif
if (present(minIndex)) then
minIndexLocal=minIndex
else
minIndexLocal=1
endif
if (present(regDecomp)) then
regDecompLocal=regDecomp
else
! By default set regdecomp to the number of PETs
!! Get VM for this context
call ESMF_VMGetCurrent(vm, rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
!! Get petCount from VM
call ESMF_VMGet(vm, petCount=regDecompLocal, rc=localrc )
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
endif
! Create DistGrid
distgrid=ESMF_DistGridCreate(minIndex=(/minIndexLocal/), &
maxIndex=(/maxIndex/), &
regDecomp=(/regDecompLocal/), &
decompFlag=(/decompFlagLocal/), &
indexflag=indexflagLocal, &
rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! Create LocStream using CreateFromDistGrid version
ESMF_LocStreamCreateReg=ESMF_LocStreamCreateFromDG(name=name, &
distgrid=distgrid, &
indexflag=indexflagLocal,&
coordSys=coordSysLocal, &
rc=localrc )
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! Set distgrid to be destroyed, since ESMF created it
ESMF_LocStreamCreateReg%lstypep%destroyDistgrid=.true.
! return successfully
if (present(rc)) rc = ESMF_SUCCESS
end function ESMF_LocStreamCreateReg