subroutine checkGrid(grid,staggerloc,rc)
!
! !ARGUMENTS:
type (ESMF_Grid) :: grid
type(ESMF_StaggerLoc) :: staggerloc
integer, intent(out), optional :: rc
!
! !DESCRIPTION:
! Check the grid to make sure it can be used to create XGrid
!
! The arguments are:
! \begin{description}
! \item [grid]
! the {\tt ESMF\_Grid} object.
! \item [staggerloc]
! the {\tt ESMF\_STAGGERLOC} object.
! \item [{[rc]}]
! Return code; equals {\tt ESMF\_SUCCESS} only if successful.
! \end{description}
!
!EOPI
type(ESMF_GridDecompType) :: decompType
integer :: localDECount, lDE, ec(ESMF_MAXDIM)
integer :: localrc, i, dimCount
if (present(rc)) rc = ESMF_RC_NOT_IMPL
! Make sure Grid isn't arbitrarily distributed
call ESMF_GridGetDecompType(grid, decompType, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! Error if decompType is ARBITRARY
if (decompType .eq. ESMF_GRID_ARBITRARY) then
call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_BAD, &
msg="- can't currently regrid an arbitrarily distributed Grid", &
ESMF_CONTEXT, rcToReturn=rc)
return
endif
! Make sure Grid doesn't contain width 1 DEs
call ESMF_GridGet(grid,localDECount=localDECount, dimCount=dimCount, &
rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
if (dimCount .ne. 2) then
call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_BAD, &
msg="- can currently only create xgrid on 2D grids", &
ESMF_CONTEXT, rcToReturn=rc)
return
endif
! loop through checking DEs
do lDE=0,localDECount-1
! Get bounds of DE
call ESMF_GridGet(grid,staggerloc=staggerloc, localDE=lDE, &
exclusivecount=ec,rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! loop and make sure they aren't too small in any dimension
do i=1,dimCount
if (ec(i) .lt. 2) then
call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_BAD, &
msg="- can't currently regrid a grid that contains a DE of width less than 2", &
ESMF_CONTEXT, rcToReturn=rc)
return
endif
enddo
enddo
if(present(rc)) rc = ESMF_SUCCESS
end subroutine checkGrid