Skip to content

Commit

Permalink
Mask out region will ill-defined values in unit test.
Browse files Browse the repository at this point in the history
  • Loading branch information
oehmke committed Sep 29, 2023
1 parent b517fb3 commit 241ec7d
Showing 1 changed file with 48 additions and 2 deletions.
50 changes: 48 additions & 2 deletions src/Infrastructure/Field/tests/ESMF_FieldRegridUTest.F90
Original file line number Diff line number Diff line change
Expand Up @@ -45754,6 +45754,7 @@ subroutine test_sph_vec_blnr_csG_to_llG_p(rc)
type(ESMF_RouteHandle) :: routeHandle
type(ESMF_ArraySpec) :: arrayspec
type(ESMF_VM) :: vm
integer(ESMF_KIND_I4), pointer :: farrayPtrMask(:,:)
real(ESMF_KIND_R8), pointer :: farrayPtrXC(:,:)
real(ESMF_KIND_R8), pointer :: farrayPtrYC(:,:)
real(ESMF_KIND_R8), pointer :: farrayPtr1DXC(:)
Expand Down Expand Up @@ -45966,6 +45967,14 @@ subroutine test_sph_vec_blnr_csG_to_llG_p(rc)
return
endif

! Add Mask
call ESMF_GridAddItem(dstGrid, staggerloc=ESMF_STAGGERLOC_CORNER, &
itemflag=ESMF_GRIDITEM_MASK, rc=localrc)
if (localrc /=ESMF_SUCCESS) then
rc=ESMF_FAILURE
return
endif


! Create Fields
dstField = ESMF_FieldCreate(dstGrid, typekind=ESMF_TYPEKIND_R8, &
Expand Down Expand Up @@ -46080,6 +46089,14 @@ subroutine test_sph_vec_blnr_csG_to_llG_p(rc)
return
endif

call ESMF_GridGetItem(dstGrid, localDE=lDE, staggerLoc=ESMF_STAGGERLOC_CORNER, &
itemflag=ESMF_GRIDITEM_MASK, farrayPtr=farrayPtrMask, rc=localrc)
if (localrc /=ESMF_SUCCESS) then
rc=ESMF_FAILURE
return
endif



call ESMF_FieldGet(dstField, lDE, farrayPtr, &
computationalLBound=fclbnd, computationalUBound=fcubnd, &
Expand Down Expand Up @@ -46125,8 +46142,6 @@ subroutine test_sph_vec_blnr_csG_to_llG_p(rc)

! Get basis vectors at that point
call calc_unit_basis_vecs(lon_rad, lat_rad, e_vec, n_vec)

! TODO: NEED A BETTER TEST CASE THAT'S TANGENT TO SPHERE, BUT IS CONSISTENT OVER POLE

! Dot with 3D vector (x,y,z) to get components to give a consistent direction to test case
call calc_test_field(lon_rad, lat_rad, xfarrayPtr(i1,i2,1), xfarrayPtr(i1,i2,2))
Expand All @@ -46139,6 +46154,15 @@ subroutine test_sph_vec_blnr_csG_to_llG_p(rc)
dst3DVecfarrayPtr(i1,i2,1)=1.0
dst3DVecfarrayPtr(i1,i2,2)=2.0
dst3DVecfarrayPtr(i1,i2,3)=3.0

! Mask out the east and west ends because the test field is ill defined there
if ((lat > -10.0) .and. (lat < 10.0) .and. &
((lon > 80.0) .and. (lon < 100.0)) .or. &
((lon < 260.0) .and. (lon < 280.0))) then
farrayPtrMask(i1,i2)=1
else
farrayPtrMask(i1,i2)=0
endif

enddo
enddo
Expand All @@ -46159,6 +46183,7 @@ subroutine test_sph_vec_blnr_csG_to_llG_p(rc)
call ESMF_FieldRegridStore( &
srcField, &
dstField=dstField, &
dstMaskValues=(/1/), &
vectorRegrid=.true., &
routeHandle=routeHandle, &
regridmethod=ESMF_REGRIDMETHOD_BILINEAR, &
Expand Down Expand Up @@ -46238,10 +46263,31 @@ subroutine test_sph_vec_blnr_csG_to_llG_p(rc)
return
endif

call ESMF_GridGetItem(dstGrid, localDE=lDE, staggerLoc=ESMF_STAGGERLOC_CORNER, &
itemflag=ESMF_GRIDITEM_MASK, farrayPtr=farrayPtrMask, rc=localrc)
if (localrc /=ESMF_SUCCESS) then
rc=ESMF_FAILURE
return
endif



!! Loop looking at error
do i1=fclbnd(1),fcubnd(1)
do i2=fclbnd(2),fcubnd(2)

! Init in case masked
angleFarrayPtr(i1,i2) = 0.0
magDiffFarrayPtr(i1,i2) = 0.0
tmpFarrayPtr(i1,i2) = xfarrayPtr(i1,i2,2)
dst3DVecfarrayPtr(i1,i2,1) = 0.0
dst3DVecfarrayPtr(i1,i2,2) = 0.0
dst3DVecfarrayPtr(i1,i2,3) = 0.0


! Ignore masked points
if (farrayPtrMask(i1,i2) .eq. 1) cycle

! Get X coord from Grid
lon = farrayPtr1DXC(i1)
lon_rad = DEG2RAD*(lon)
Expand Down

0 comments on commit 241ec7d

Please sign in to comment.