subroutine check2DP1Bnds2x2UsingSLoc(grid, staggerloc, itemflag, localPet, petCount, &
ielbnd0,ieubnd0,iloff0,iuoff0, &
ielbnd1,ieubnd1,iloff1,iuoff1, &
ielbnd2,ieubnd2,iloff2,iuoff2, &
ielbnd3,ieubnd3,iloff3,iuoff3, &
correct, rc)
type (ESMF_Grid) :: grid
type (ESMF_StaggerLoc),intent(in) :: staggerloc
type (ESMF_GridItem_Flag), intent(in) :: itemflag
integer,intent(in) :: localPet, petCount
integer,intent(in) :: ielbnd0(:),ieubnd0(:),iloff0(:),iuoff0(:)
integer,intent(in) :: ielbnd1(:),ieubnd1(:),iloff1(:),iuoff1(:)
integer,intent(in) :: ielbnd2(:),ieubnd2(:),iloff2(:),iuoff2(:)
integer,intent(in) :: ielbnd3(:),ieubnd3(:),iloff3(:),iuoff3(:)
logical,intent(inout) :: correct
integer,intent(inout) :: rc
integer :: localrc
integer :: elbnd(3),eubnd(3),ecnt(3)
integer :: clbnd(3),cubnd(3),ccnt(3)
! Check if bounds are correct for each DE
if (petCount .eq. 1) then
! Note the order of DE's here is dependant on the ordering
! in ESMF_GridCreateNoPeriDim, if that changes then this will
! probably have to change also.
! check DE 0
call ESMF_GridGetItemBounds(grid, localDE=0, &
staggerLoc=staggerloc, itemflag=itemflag, &
exclusiveLBound=elbnd, exclusiveUBound=eubnd, exclusiveCount=ecnt, &
computationalLBound=clbnd, computationalUBound=cubnd, computationalCount=ccnt, rc=localrc)
if (localrc .ne. ESMF_SUCCESS) rc=ESMF_FAILURE
! write(*,*) "0:",clbnd,",",cubnd, correct
if (elbnd(1) .ne. ielbnd0(1)-iloff0(1)) correct=.false.
if (elbnd(2) .ne. ielbnd0(2)-iloff0(2)) correct=.false.
if (elbnd(3) .ne. ielbnd0(3)-iloff0(3)) correct=.false.
if (eubnd(1) .ne. ieubnd0(1)+iuoff0(1)) correct=.false.
if (eubnd(2) .ne. ieubnd0(2)+iuoff0(2)) correct=.false.
if (eubnd(3) .ne. ieubnd0(3)+iuoff0(3)) correct=.false.
if (ecnt(1) .ne. ieubnd0(1)-ielbnd0(1)+1+iloff0(1)+iuoff0(1)) correct=.false.
if (ecnt(2) .ne. ieubnd0(2)-ielbnd0(2)+1+iloff0(2)+iuoff0(2)) correct=.false.
if (ecnt(3) .ne. ieubnd0(3)-ielbnd0(3)+1+iloff0(3)+iuoff0(3)) correct=.false.
if (clbnd(1) .ne. ielbnd0(1)-iloff0(1)) correct=.false.
if (clbnd(2) .ne. ielbnd0(2)-iloff0(2)) correct=.false.
if (clbnd(3) .ne. ielbnd0(3)-iloff0(3)) correct=.false.
if (cubnd(1) .ne. ieubnd0(1)+iuoff0(1)) correct=.false.
if (cubnd(2) .ne. ieubnd0(2)+iuoff0(2)) correct=.false.
if (cubnd(3) .ne. ieubnd0(3)+iuoff0(3)) correct=.false.
if (ccnt(1) .ne. ieubnd0(1)-ielbnd0(1)+1+iloff0(1)+iuoff0(1)) correct=.false.
if (ccnt(2) .ne. ieubnd0(2)-ielbnd0(2)+1+iloff0(2)+iuoff0(2)) correct=.false.
if (ccnt(3) .ne. ieubnd0(3)-ielbnd0(3)+1+iloff0(3)+iuoff0(3)) correct=.false.
! check DE 1
call ESMF_GridGetItemBounds(grid, localDE=1, &
staggerLoc=staggerloc, itemflag=itemflag, &
exclusiveLBound=elbnd, exclusiveUBound=eubnd, exclusiveCount=ecnt, &
computationalLBound=clbnd, computationalUBound=cubnd, computationalCount=ccnt, rc=localrc)
if (localrc .ne. ESMF_SUCCESS) rc=ESMF_FAILURE
! write(*,*) "1:",clbnd,",",cubnd, correct
if (elbnd(1) .ne. ielbnd1(1)-iloff1(1)) correct=.false.
if (elbnd(2) .ne. ielbnd1(2)-iloff1(2)) correct=.false.
if (elbnd(3) .ne. ielbnd1(3)-iloff1(3)) correct=.false.
if (eubnd(1) .ne. ieubnd1(1)+iuoff1(1)) correct=.false.
if (eubnd(2) .ne. ieubnd1(2)+iuoff1(2)) correct=.false.
if (eubnd(3) .ne. ieubnd1(3)+iuoff1(3)) correct=.false.
if (ecnt(1) .ne. ieubnd1(1)-ielbnd1(1)+1+iloff1(1)+iuoff1(1)) correct=.false.
if (ecnt(2) .ne. ieubnd1(2)-ielbnd1(2)+1+iloff1(2)+iuoff1(2)) correct=.false.
if (ecnt(3) .ne. ieubnd1(3)-ielbnd1(3)+1+iloff1(3)+iuoff1(3)) correct=.false.
if (clbnd(1) .ne. ielbnd1(1)-iloff1(1)) correct=.false.
if (clbnd(2) .ne. ielbnd1(2)-iloff1(2)) correct=.false.
if (clbnd(3) .ne. ielbnd1(3)-iloff1(3)) correct=.false.
if (cubnd(1) .ne. ieubnd1(1)+iuoff1(1)) correct=.false.
if (cubnd(2) .ne. ieubnd1(2)+iuoff1(2)) correct=.false.
if (cubnd(3) .ne. ieubnd1(3)+iuoff1(3)) correct=.false.
if (ccnt(1) .ne. ieubnd1(1)-ielbnd1(1)+1+iloff1(1)+iuoff1(1)) correct=.false.
if (ccnt(2) .ne. ieubnd1(2)-ielbnd1(2)+1+iloff1(2)+iuoff1(2)) correct=.false.
if (ccnt(3) .ne. ieubnd1(3)-ielbnd1(3)+1+iloff1(3)+iuoff1(3)) correct=.false.
! check DE 2
call ESMF_GridGetItemBounds(grid, localDE=2, &
staggerLoc=staggerloc, itemflag=itemflag, &
exclusiveLBound=elbnd, exclusiveUBound=eubnd, exclusiveCount=ecnt, &
computationalLBound=clbnd, computationalUBound=cubnd, computationalCount=ccnt, rc=localrc)
if (localrc .ne. ESMF_SUCCESS) rc=ESMF_FAILURE
! write(*,*) "2:",clbnd,",",cubnd, correct
if (elbnd(1) .ne. ielbnd2(1)-iloff2(1)) correct=.false.
if (elbnd(2) .ne. ielbnd2(2)-iloff2(2)) correct=.false.
if (elbnd(3) .ne. ielbnd2(3)-iloff2(3)) correct=.false.
if (eubnd(1) .ne. ieubnd2(1)+iuoff2(1)) correct=.false.
if (eubnd(2) .ne. ieubnd2(2)+iuoff2(2)) correct=.false.
if (eubnd(3) .ne. ieubnd2(3)+iuoff2(3)) correct=.false.
if (ecnt(1) .ne. ieubnd2(1)-ielbnd2(1)+1+iloff2(1)+iuoff2(1)) correct=.false.
if (ecnt(2) .ne. ieubnd2(2)-ielbnd2(2)+1+iloff2(2)+iuoff2(2)) correct=.false.
if (ecnt(3) .ne. ieubnd2(3)-ielbnd2(3)+1+iloff2(3)+iuoff2(3)) correct=.false.
if (clbnd(1) .ne. ielbnd2(1)-iloff2(1)) correct=.false.
if (clbnd(2) .ne. ielbnd2(2)-iloff2(2)) correct=.false.
if (clbnd(3) .ne. ielbnd2(3)-iloff2(3)) correct=.false.
if (cubnd(1) .ne. ieubnd2(1)+iuoff2(1)) correct=.false.
if (cubnd(2) .ne. ieubnd2(2)+iuoff2(2)) correct=.false.
if (cubnd(3) .ne. ieubnd2(3)+iuoff2(3)) correct=.false.
if (ccnt(1) .ne. ieubnd2(1)-ielbnd2(1)+1+iloff2(1)+iuoff2(1)) correct=.false.
if (ccnt(2) .ne. ieubnd2(2)-ielbnd2(2)+1+iloff2(2)+iuoff2(2)) correct=.false.
if (ccnt(3) .ne. ieubnd2(3)-ielbnd2(3)+1+iloff2(3)+iuoff2(3)) correct=.false.
! check DE 3
call ESMF_GridGetItemBounds(grid, localDE=3, &
staggerLoc=staggerloc, itemflag=itemflag, &
exclusiveLBound=elbnd, exclusiveUBound=eubnd, exclusiveCount=ecnt, &
computationalLBound=clbnd, computationalUBound=cubnd, computationalCount=ccnt, rc=localrc)
if (localrc .ne. ESMF_SUCCESS) rc=ESMF_FAILURE
! write(*,*) "3:",clbnd,",",cubnd, correct
if (elbnd(1) .ne. ielbnd3(1)-iloff3(1)) correct=.false.
if (elbnd(2) .ne. ielbnd3(2)-iloff3(2)) correct=.false.
if (elbnd(3) .ne. ielbnd3(3)-iloff3(3)) correct=.false.
if (eubnd(1) .ne. ieubnd3(1)+iuoff3(1)) correct=.false.
if (eubnd(2) .ne. ieubnd3(2)+iuoff3(2)) correct=.false.
if (eubnd(3) .ne. ieubnd3(3)+iuoff3(3)) correct=.false.
if (ecnt(1) .ne. ieubnd3(1)-ielbnd3(1)+1+iloff3(1)+iuoff3(1)) correct=.false.
if (ecnt(2) .ne. ieubnd3(2)-ielbnd3(2)+1+iloff3(2)+iuoff3(2)) correct=.false.
if (ecnt(3) .ne. ieubnd3(3)-ielbnd3(3)+1+iloff3(3)+iuoff3(3)) correct=.false.
if (clbnd(1) .ne. ielbnd3(1)-iloff3(1)) correct=.false.
if (clbnd(2) .ne. ielbnd3(2)-iloff3(2)) correct=.false.
if (clbnd(3) .ne. ielbnd3(3)-iloff3(3)) correct=.false.
if (cubnd(1) .ne. ieubnd3(1)+iuoff3(1)) correct=.false.
if (cubnd(2) .ne. ieubnd3(2)+iuoff3(2)) correct=.false.
if (cubnd(3) .ne. ieubnd3(3)+iuoff3(3)) correct=.false.
if (ccnt(1) .ne. ieubnd3(1)-ielbnd3(1)+1+iloff3(1)+iuoff3(1)) correct=.false.
if (ccnt(2) .ne. ieubnd3(2)-ielbnd3(2)+1+iloff3(2)+iuoff3(2)) correct=.false.
if (ccnt(3) .ne. ieubnd3(3)-ielbnd3(3)+1+iloff3(3)+iuoff3(3)) correct=.false.
else if (petCount .eq. 4) then
call ESMF_GridGetItemBounds(grid, localDE=0, &
staggerLoc=staggerloc, itemflag=itemflag, &
exclusiveLBound=elbnd, exclusiveUBound=eubnd, exclusiveCount=ecnt, &
computationalLBound=clbnd, computationalUBound=cubnd, computationalCount=ccnt, rc=localrc)
if (localrc .ne. ESMF_SUCCESS) rc=ESMF_FAILURE
if (localPet .eq. 0) then
if (elbnd(1) .ne. ielbnd0(1)-iloff0(1)) correct=.false.
if (elbnd(2) .ne. ielbnd0(2)-iloff0(2)) correct=.false.
if (elbnd(3) .ne. ielbnd0(3)-iloff0(3)) correct=.false.
if (eubnd(1) .ne. ieubnd0(1)+iuoff0(1)) correct=.false.
if (eubnd(2) .ne. ieubnd0(2)+iuoff0(2)) correct=.false.
if (eubnd(3) .ne. ieubnd0(3)+iuoff0(3)) correct=.false.
if (ecnt(1) .ne. ieubnd0(1)-ielbnd0(1)+1+iloff0(1)+iuoff0(1)) correct=.false.
if (ecnt(2) .ne. ieubnd0(2)-ielbnd0(2)+1+iloff0(2)+iuoff0(2)) correct=.false.
if (ecnt(3) .ne. ieubnd0(3)-ielbnd0(3)+1+iloff0(3)+iuoff0(3)) correct=.false.
if (clbnd(1) .ne. ielbnd0(1)-iloff0(1)) correct=.false.
if (clbnd(2) .ne. ielbnd0(2)-iloff0(2)) correct=.false.
if (clbnd(3) .ne. ielbnd0(3)-iloff0(3)) correct=.false.
if (cubnd(1) .ne. ieubnd0(1)+iuoff0(1)) correct=.false.
if (cubnd(2) .ne. ieubnd0(2)+iuoff0(2)) correct=.false.
if (cubnd(3) .ne. ieubnd0(3)+iuoff0(3)) correct=.false.
if (ccnt(1) .ne. ieubnd0(1)-ielbnd0(1)+1+iloff0(1)+iuoff0(1)) correct=.false.
if (ccnt(2) .ne. ieubnd0(2)-ielbnd0(2)+1+iloff0(2)+iuoff0(2)) correct=.false.
if (ccnt(3) .ne. ieubnd0(3)-ielbnd0(3)+1+iloff0(3)+iuoff0(3)) correct=.false.
else if (localPet .eq. 1) then
if (elbnd(1) .ne. ielbnd1(1)-iloff1(1)) correct=.false.
if (elbnd(2) .ne. ielbnd1(2)-iloff1(2)) correct=.false.
if (elbnd(3) .ne. ielbnd1(3)-iloff1(3)) correct=.false.
if (eubnd(1) .ne. ieubnd1(1)+iuoff1(1)) correct=.false.
if (eubnd(2) .ne. ieubnd1(2)+iuoff1(2)) correct=.false.
if (eubnd(3) .ne. ieubnd1(3)+iuoff1(3)) correct=.false.
if (ecnt(1) .ne. ieubnd1(1)-ielbnd1(1)+1+iloff1(1)+iuoff1(1)) correct=.false.
if (ecnt(2) .ne. ieubnd1(2)-ielbnd1(2)+1+iloff1(2)+iuoff1(2)) correct=.false.
if (ecnt(3) .ne. ieubnd1(3)-ielbnd1(3)+1+iloff1(3)+iuoff1(3)) correct=.false.
if (clbnd(1) .ne. ielbnd1(1)-iloff1(1)) correct=.false.
if (clbnd(2) .ne. ielbnd1(2)-iloff1(2)) correct=.false.
if (clbnd(3) .ne. ielbnd1(3)-iloff1(3)) correct=.false.
if (cubnd(1) .ne. ieubnd1(1)+iuoff1(1)) correct=.false.
if (cubnd(2) .ne. ieubnd1(2)+iuoff1(2)) correct=.false.
if (cubnd(3) .ne. ieubnd1(3)+iuoff1(3)) correct=.false.
if (ccnt(1) .ne. ieubnd1(1)-ielbnd1(1)+1+iloff1(1)+iuoff1(1)) correct=.false.
if (ccnt(2) .ne. ieubnd1(2)-ielbnd1(2)+1+iloff1(2)+iuoff1(2)) correct=.false.
if (ccnt(3) .ne. ieubnd1(3)-ielbnd1(3)+1+iloff1(3)+iuoff1(3)) correct=.false.
else if (localPet .eq. 2) then
if (elbnd(1) .ne. ielbnd2(1)-iloff2(1)) correct=.false.
if (elbnd(2) .ne. ielbnd2(2)-iloff2(2)) correct=.false.
if (elbnd(3) .ne. ielbnd2(3)-iloff2(3)) correct=.false.
if (eubnd(1) .ne. ieubnd2(1)+iuoff2(1)) correct=.false.
if (eubnd(2) .ne. ieubnd2(2)+iuoff2(2)) correct=.false.
if (eubnd(3) .ne. ieubnd2(3)+iuoff2(3)) correct=.false.
if (ecnt(1) .ne. ieubnd2(1)-ielbnd2(1)+1+iloff2(1)+iuoff2(1)) correct=.false.
if (ecnt(2) .ne. ieubnd2(2)-ielbnd2(2)+1+iloff2(2)+iuoff2(2)) correct=.false.
if (ecnt(3) .ne. ieubnd2(3)-ielbnd2(3)+1+iloff2(3)+iuoff2(3)) correct=.false.
if (clbnd(1) .ne. ielbnd2(1)-iloff2(1)) correct=.false.
if (clbnd(2) .ne. ielbnd2(2)-iloff2(2)) correct=.false.
if (clbnd(3) .ne. ielbnd2(3)-iloff2(3)) correct=.false.
if (cubnd(1) .ne. ieubnd2(1)+iuoff2(1)) correct=.false.
if (cubnd(2) .ne. ieubnd2(2)+iuoff2(2)) correct=.false.
if (cubnd(3) .ne. ieubnd2(3)+iuoff2(3)) correct=.false.
if (ccnt(1) .ne. ieubnd2(1)-ielbnd2(1)+1+iloff2(1)+iuoff2(1)) correct=.false.
if (ccnt(2) .ne. ieubnd2(2)-ielbnd2(2)+1+iloff2(2)+iuoff2(2)) correct=.false.
if (ccnt(3) .ne. ieubnd2(3)-ielbnd2(3)+1+iloff2(3)+iuoff2(3)) correct=.false.
else if (localPet .eq. 3) then
if (elbnd(1) .ne. ielbnd3(1)-iloff3(1)) correct=.false.
if (elbnd(2) .ne. ielbnd3(2)-iloff3(2)) correct=.false.
if (elbnd(3) .ne. ielbnd3(3)-iloff3(3)) correct=.false.
if (eubnd(1) .ne. ieubnd3(1)+iuoff3(1)) correct=.false.
if (eubnd(2) .ne. ieubnd3(2)+iuoff3(2)) correct=.false.
if (eubnd(3) .ne. ieubnd3(3)+iuoff3(3)) correct=.false.
if (ecnt(1) .ne. ieubnd3(1)-ielbnd3(1)+1+iloff3(1)+iuoff3(1)) correct=.false.
if (ecnt(2) .ne. ieubnd3(2)-ielbnd3(2)+1+iloff3(2)+iuoff3(2)) correct=.false.
if (ecnt(3) .ne. ieubnd3(3)-ielbnd3(3)+1+iloff3(3)+iuoff3(3)) correct=.false.
if (clbnd(1) .ne. ielbnd3(1)-iloff3(1)) correct=.false.
if (clbnd(2) .ne. ielbnd3(2)-iloff3(2)) correct=.false.
if (clbnd(3) .ne. ielbnd3(3)-iloff3(3)) correct=.false.
if (cubnd(1) .ne. ieubnd3(1)+iuoff3(1)) correct=.false.
if (cubnd(2) .ne. ieubnd3(2)+iuoff3(2)) correct=.false.
if (cubnd(3) .ne. ieubnd3(3)+iuoff3(3)) correct=.false.
if (ccnt(1) .ne. ieubnd3(1)-ielbnd3(1)+1+iloff3(1)+iuoff3(1)) correct=.false.
if (ccnt(2) .ne. ieubnd3(2)-ielbnd3(2)+1+iloff3(2)+iuoff3(2)) correct=.false.
if (ccnt(3) .ne. ieubnd3(3)-ielbnd3(3)+1+iloff3(3)+iuoff3(3)) correct=.false.
endif
endif
end subroutine check2DP1Bnds2x2UsingSLoc