test_regrid_3d Subroutine

public subroutine test_regrid_3d(this)

Arguments

Type IntentOptional Attributes Name
class(ESMF_TestMethod), intent(inout) :: this

Calls

proc~~test_regrid_3d~~CallsGraph proc~test_regrid_3d test_regrid_3d ESMF_HConfigCreate ESMF_HConfigCreate proc~test_regrid_3d->ESMF_HConfigCreate anyexceptions anyexceptions proc~test_regrid_3d->anyexceptions assert_that assert_that proc~test_regrid_3d->assert_that equal_to equal_to proc~test_regrid_3d->equal_to esmf_fieldget esmf_fieldget proc~test_regrid_3d->esmf_fieldget esmfregridderparam esmfregridderparam proc~test_regrid_3d->esmfregridderparam every_item every_item proc~test_regrid_3d->every_item geommanager geommanager proc~test_regrid_3d->geommanager near near proc~test_regrid_3d->near none~get_regridder RegridderManager%get_regridder proc~test_regrid_3d->none~get_regridder proc~make_field~2 make_field proc~test_regrid_3d->proc~make_field~2 proc~make_geom~2 make_geom proc~test_regrid_3d->proc~make_geom~2 regrid regrid proc~test_regrid_3d->regrid sourcelocation sourcelocation proc~test_regrid_3d->sourcelocation find find none~get_regridder->find none~add_regridder RegridderManager%add_regridder none~get_regridder->none~add_regridder none~back~69 RegridderVector%back none~get_regridder->none~back~69 none~begin~207 RegridderSpecVector%begin none~get_regridder->none~begin~207 none~make_regridder RegridderManager%make_regridder none~get_regridder->none~make_regridder none~of~257 RegridderVector%of none~get_regridder->none~of~257 proc~mapl_return MAPL_Return none~get_regridder->proc~mapl_return proc~mapl_verify MAPL_Verify none~get_regridder->proc~mapl_verify proc~make_field~2->esmf_fieldget esmf_fieldemptycomplete esmf_fieldemptycomplete proc~make_field~2->esmf_fieldemptycomplete esmf_fieldemptycreate esmf_fieldemptycreate proc~make_field~2->esmf_fieldemptycreate esmf_fieldemptyset esmf_fieldemptyset proc~make_field~2->esmf_fieldemptyset proc~make_geom~2->ESMF_HConfigCreate get_geom get_geom proc~make_geom~2->get_geom get_mapl_geom get_mapl_geom proc~make_geom~2->get_mapl_geom

Source Code

   subroutine test_regrid_3d(this)
      class(ESMF_TestMethod), intent(inout) :: this
      type(GeomManager) :: geom_mgr
      type(RegridderManager), target :: regridder_mgr
      type(RegridderSpec) :: spec
      integer :: status
      class(Regridder), pointer :: my_regridder
      type(ESMF_Geom) :: geom_1, geom_2
      type(ESMF_HConfig) :: hconfig
      type(ESMF_Field) :: f1, f2
      real(kind=ESMF_KIND_R4), pointer :: x1(:,:,:)
      real(kind=ESMF_KIND_R4), pointer :: x2(:,:,:)

      type(DynamicMask) :: dyn_mask
      
      geom_mgr = GeomManager()
      regridder_mgr = RegridderManager()

      hconfig = ESMF_HConfigCreate(content="{class: latlon, im_world: 12, jm_world: 11, pole: PC, dateline: DE, nx: 1, ny: 1}", _RC)
      geom_1 = make_geom(geom_mgr, hconfig, _RC)

      hconfig = ESMF_HConfigCreate(content="{class: latlon, im_world: 6, jm_world: 5, pole: PC, dateline: DE, nx: 1, ny: 1}", _RC)
      geom_2 = make_geom(geom_mgr, hconfig, _RC) ! variant of geom_1

      dyn_mask = DynamicMask(mask_type='missing_value', src_mask_value=real(MAPL_UNDEF,kind=ESMF_KIND_R8), handleAllElements=.true.,_RC)
      
      spec = RegridderSpec(EsmfRegridderParam(regridmethod=ESMF_REGRIDMETHOD_CONSERVE, dyn_mask=dyn_mask), geom_1, geom_2)
      my_regridder => regridder_mgr%get_regridder(spec, _RC)

      f1 = make_field(geom_1, 'f1', value=2._ESMF_KIND_R4, lm=2, _RC)
      call ESMF_FieldGet(f1, farrayptr=x1)
      x1(::4,6,1) = MAPL_UNDEF ! missing bits in level 1
      x1(1::2,:,2) = 0 ! checkerboard on level 2
      
      f2 = make_field(geom_2, 'f2', value=0._ESMF_KIND_R4, lm=2, _RC)

      call my_regridder%regrid(f1, f2, _RC)

      call ESMF_FieldGet(f2, farrayptr=x2, _RC)


      ! Missing elements case
      @assert_that(x2(1:2,:,1), every_item(is(equal_to(2._ESMF_KIND_R4))))
      ! Non missing elements case

      ! Weirdly this introduces roundoff that was not present in the
      ! previous test.  This has been reported to the ESMF core team.
      @assert_that(x2(:,:,2), every_item(is(near(1._ESMF_KIND_R4, 1.e-6))))

   end subroutine test_regrid_3d