subroutine test_field_update_from_field_ignore_geom(this)
class(ESMF_TestMethod), intent(inout) :: this
type(ESMF_Field) :: f, f_ref
type(ESMF_Grid) :: grid, grid_ref
type(ESMF_Geom) :: geom, geom_ref, new_geom
character(:), allocatable :: new_units
integer :: status
type(ESMF_FieldStatus_Flag) :: field_status
real(ESMF_KIND_R8), pointer :: x8(:,:,:,:)
type(ESMF_TypeKind_Flag) :: typekind
type(FieldDelta) :: delta
grid = ESMF_GridCreateNoPeriDim(maxIndex=[4,4], name='I_AM_GROOT', _RC)
geom = ESMF_GeomCreate(grid, _RC)
grid_ref = ESMF_GridCreateNoPeriDim(maxIndex=[7,7], name='I_AM_GROOT', _RC)
geom_ref = ESMF_GeomCreate(grid_ref, _RC)
f = ESMF_FieldCreate(geom, typekind=ESMF_TYPEKIND_R4, name='in', &
ungriddedLbound=[1,1], ungriddedUbound=[ORIG_VGRID_LEVELS,3], _RC)
f_ref = ESMF_FieldCreate(geom_ref, typekind=ESMF_TYPEKIND_R8, name='in', &
ungriddedLbound=[1,1], ungriddedUbound=[ORIG_VGRID_LEVELS-1,3], _RC)
call MAPL_FieldSet(f, num_levels=ORIG_VGRID_LEVELS, vert_staggerloc=VERTICAL_STAGGER_CENTER, &
units=ORIGINAL_UNITS, _RC)
call MAPL_FieldSet(f_ref, num_levels=ORIG_VGRID_LEVELS, vert_staggerloc=VERTICAL_STAGGER_CENTER, &
units=REFERENCE_UNITS, _RC)
call delta%initialize(f, f_ref, _RC)
call delta%update_field(f, ignore='geom', _RC)
call ESMF_FieldGet(f, status=field_status, typekind=typekind, geom=new_geom, _RC)
@assert_that(field_status == ESMF_FIELDSTATUS_COMPLETE, is(true()))
@assert_that(typekind == ESMF_TYPEKIND_R8, is(true()))
@assert_that(new_geom == geom, is(true()))
call MAPL_FieldGet(f, units=new_units, _RC)
@assertEqual(REFERENCE_UNITS, new_units)
! check that field shape is changed due to new num levels
call ESMF_FieldGet(f, fArrayPtr=x8, _RC)
@assert_that(shape(x8),is(equal_to([4,4,ORIG_VGRID_LEVELS,3])))
call ESMF_FieldDestroy(f, _RC)
call ESMF_GridDestroy(grid, _RC)
call ESMF_GeomDestroy(geom, _RC)
_UNUSED_DUMMY(this)
end subroutine test_field_update_from_field_ignore_geom