Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ESMF_XGrid), | intent(in) | :: | xgrid | |||
type(ESMF_DistGrid), | intent(out) | :: | distgrid | |||
type(ESMF_KeywordEnforcer), | optional | :: | keywordEnforcer | |||
type(ESMF_XGridSide_Flag), | intent(in), | optional | :: | xgridside | ||
integer, | intent(in), | optional | :: | gridindex | ||
integer, | intent(out), | optional | :: | rc |
subroutine ESMF_XGridGetDG(xgrid, distgrid, keywordEnforcer, & xgridside, gridindex, & rc) ! ! !ARGUMENTS: type(ESMF_XGrid), intent(in) :: xgrid type(ESMF_DistGrid), intent(out) :: distgrid type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below type(ESMF_XGridSide_Flag), intent(in), optional :: xgridside integer, intent(in), optional :: gridindex integer, intent(out), optional :: rc ! ! !DESCRIPTION: ! Get a distgrid from XGrid from a specific side. ! ! The arguments are: ! \begin{description} ! \item [xgrid] ! The {\tt ESMF\_XGrid} object used to retrieve information from. ! \item [distgrid] ! Distgrid whose sequence index list is an overlap between gridIndex-th Grid ! on xgridSide and the xgrid object. ! \item [{[xgridside]}] ! \begin{sloppypar} ! Which side of the XGrid to retrieve the distgrid from (either ESMF\_XGRIDSIDE\_A, ! ESMF\_XGRIDSIDE\_B, or ESMF\_XGRIDSIDE\_BALANCED). If not passed in then ! defaults to ESMF\_XGRIDSIDE\_BALANCED. ! \end{sloppypar} ! \item [{[gridindex]}] ! If xgridSide is ESMF\_XGRIDSIDE\_A or ESMF\_XGRIDSIDE\_B then this index ! selects the Distgrid associated with the Grid on ! that side. If not provided, defaults to 1. ! \item [{[rc]}] ! Return code; equals {\tt ESMF\_SUCCESS} only if the {\tt ESMF\_XGrid} ! is created. ! \end{description} ! !EOPI type(ESMF_XGridType), pointer :: xgtypep type(ESMF_XGridSide_Flag) :: l_xgridSide integer :: l_gridIndex ! Initialize return code if(present(rc)) rc = ESMF_RC_NOT_IMPL ! check init status of input XGrid ESMF_INIT_CHECK_DEEP(ESMF_XGridGetInit,xgrid,rc) xgtypep => xgrid%xgtypep if(present(xgridSide)) then l_xgridSide = xgridSide else l_xgridSide = ESMF_XGRIDSIDE_BALANCED endif if(present(gridIndex)) then l_gridIndex = gridIndex else l_gridIndex = 1 endif if(l_gridIndex .lt. 0) then call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & msg="- gridIndex cannot be less than 0", & ESMF_CONTEXT, rcToReturn=rc) return endif if(l_xgridSide .eq. ESMF_XGRIDSIDE_BALANCED) then distgrid = xgtypep%distgridM endif if(l_xgridSide .eq. ESMF_XGRIDSIDE_A) then if(l_gridIndex .gt. size(xgtypep%distgridA, 1)) then call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & msg="- gridIndex cannot be greater than the size of distgridA in the XGrid", & ESMF_CONTEXT, rcToReturn=rc) return endif distgrid = xgtypep%distgridA(l_gridIndex) endif if(l_xgridSide .eq. ESMF_XGRIDSIDE_B) then if(l_gridIndex .gt. size(xgtypep%distgridB, 1)) then call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & msg="- gridIndex cannot be greater than the size of distgridB in the XGrid", & ESMF_CONTEXT, rcToReturn=rc) return endif distgrid = xgtypep%distgridB(l_gridIndex) endif ! success if(present(rc)) rc = ESMF_SUCCESS end subroutine ESMF_XGridGetDG