subroutine test_region_mask_3d(this)
class(ESMF_TestMethod), intent(inout) :: this
integer :: status, rc, i
real(ESMF_KIND_R4), pointer :: ptr3d(:,:,:), mask_ptr(:,:)
type(StateMask) :: mask
real(ESMF_KIND_R4), allocatable :: expected_array(:,:)
real(ESMF_KIND_R4) :: rval
character(len=:), allocatable :: expr
call ESMF_FieldGet(mask_field, 0, farrayPtr=mask_ptr, _RC)
call ESMF_FieldGet(field_3d, 0, farrayPtr=ptr3d, _RC)
expr = "regionmask(field_3d,region_mask;2,5)"
rval = 17.0
ptr3d = rval
allocate(expected_array(3,3),_STAT)
expected_array= reshape([0.0, rval, 0.0, rval, rval, 0.0, rval, rval, 0.0],shape=[3,3])
mask_ptr = reshape([1.0, 5.0, 1.0, 5.0, 2.0, 1.0, 2.0, 5.0, 1.0],shape=[3,3])
mask = StateMask(expr, _RC)
call mask%evaluate_mask(state,out_field_3d,_RC)
call ESMF_FieldGet(out_field_3d, 0, farrayPtr=ptr3d, _RC)
do i=1,size(ptr3d,3)
@assertEqual(expected_array, ptr3d(:,:,i))
enddo
_RETURN(_SUCCESS)
end subroutine test_region_mask_3d