subroutine test7d1(rc)
integer, intent(out) :: rc
real(ESMF_KIND_R8), dimension(:,:,:,:,:,:,:), pointer :: farray
type(ESMF_Field) :: f8
type(ESMF_Grid) :: grid
type(ESMF_DistGrid) :: distgrid
integer :: localrc
integer :: fsize(7)
localrc = ESMF_SUCCESS
rc = ESMF_SUCCESS
distgrid = ESMF_DistGridCreate(minIndex=(/1,1,1,1,1/), maxIndex=(/3,4,3,4,2/), &
regDecomp=(/2,1,2,1,1/), rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
grid = ESMF_GridCreate(distgrid=distgrid, name="grid", rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! Cannot use the following numbers, cause overflow on most systems due to memory requirement
! call ESMF_GridGetFieldBounds(grid, ungriddedLBound=(/1,2/), ungriddedUBound=(/10,23/), &
! totalLWidth=(/2,3,4,5,6/), totalUWidth=(/10,11,12,13,14/), &
! totalCount=fsize, &
! rc=localrc)
call ESMF_GridGetFieldBounds(grid, localDe=0, ungriddedLBound=(/1,2/), &
ungriddedUBound=(/2,3/), &
totalLWidth=(/1,1,1,2,2/), totalUWidth=(/1,2,3,2,1/), &
totalCount=fsize, &
rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
allocate(farray(fsize(1), fsize(2), fsize(3), fsize(4), fsize(5), fsize(6), fsize(7)))
f8 = ESMF_FieldCreate(grid, farray, &
indexflag=ESMF_INDEX_DELOCAL, &
ungriddedLBound=(/1,2/), ungriddedUBound=(/2,3/), &
totalLWidth=(/1,1,1,2,2/), totalUWidth=(/1,2,3,2,1/), &
rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
call ESMF_FieldDestroy(f8, rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
call ESMF_GridDestroy(grid, rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
call ESMF_DistGridDestroy(distgrid, rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
deallocate(farray)
end subroutine test7d1