test_state_items_complete Subroutine

public subroutine test_state_items_complete(this)

Arguments

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

Calls

proc~~test_state_items_complete~~CallsGraph proc~test_state_items_complete test_state_items_complete assert_that assert_that proc~test_state_items_complete->assert_that esmf_fieldget esmf_fieldget proc~test_state_items_complete->esmf_fieldget esmf_stateget esmf_stateget proc~test_state_items_complete->esmf_stateget interface~get_outer_meta get_outer_meta proc~test_state_items_complete->interface~get_outer_meta none~get_child~27 OuterMetaComponent%get_child proc~test_state_items_complete->none~get_child~27 none~get_states GriddedComponentDriver%get_states proc~test_state_items_complete->none~get_states none~get_state~2 MultiState%get_state proc~test_state_items_complete->none~get_state~2 proc~setup~8 setup proc~test_state_items_complete->proc~setup~8 true true proc~test_state_items_complete->true none~get_state_by_esmf_intent MultiState%get_state_by_esmf_intent none~get_state~2->none~get_state_by_esmf_intent proc~setup~8->assert_that ESMF_ClockCreate ESMF_ClockCreate proc~setup~8->ESMF_ClockCreate ESMF_GridCompInitialize ESMF_GridCompInitialize proc~setup~8->ESMF_GridCompInitialize ESMF_GridCreateNoPeriDim ESMF_GridCreateNoPeriDim proc~setup~8->ESMF_GridCreateNoPeriDim ESMF_HConfigCreate ESMF_HConfigCreate proc~setup~8->ESMF_HConfigCreate ESMF_TimeIntervalSet ESMF_TimeIntervalSet proc~setup~8->ESMF_TimeIntervalSet ESMF_TimeSet ESMF_TimeSet proc~setup~8->ESMF_TimeSet NUOPC_FieldDictionarySetup NUOPC_FieldDictionarySetup proc~setup~8->NUOPC_FieldDictionarySetup anyexceptions anyexceptions proc~setup~8->anyexceptions esmf_gridcompsetservices esmf_gridcompsetservices proc~setup~8->esmf_gridcompsetservices esmf_statecreate esmf_statecreate proc~setup~8->esmf_statecreate generic_init_phase_sequence generic_init_phase_sequence proc~setup~8->generic_init_phase_sequence interface~create_grid_comp create_grid_comp proc~setup~8->interface~create_grid_comp interface~user_setservices user_setservices proc~setup~8->interface~user_setservices mapl_gridcompsetgeom mapl_gridcompsetgeom proc~setup~8->mapl_gridcompsetgeom proc~mapl_gridcompsetverticalgrid MAPL_GridCompSetVerticalGrid proc~setup~8->proc~mapl_gridcompsetverticalgrid sourcelocation sourcelocation proc~setup~8->sourcelocation none~get_state_by_esmf_intent->none~get_state~2 proc~mapl_return MAPL_Return none~get_state_by_esmf_intent->proc~mapl_return proc~mapl_verify MAPL_Verify none~get_state_by_esmf_intent->proc~mapl_verify interface~mapl_gridcompgetoutermeta MAPL_GridCompGetOuterMeta proc~mapl_gridcompsetverticalgrid->interface~mapl_gridcompgetoutermeta none~set_vertical_grid OuterMetaComponent%set_vertical_grid proc~mapl_gridcompsetverticalgrid->none~set_vertical_grid proc~mapl_gridcompsetverticalgrid->proc~mapl_return proc~mapl_gridcompsetverticalgrid->proc~mapl_verify

Source Code

   subroutine test_state_items_complete(this)
      class(MpiTestMethod), intent(inout) :: this

      integer :: status
      type(ESMF_GridComp) :: outer_gc

      type(ESMF_Field) :: f
      type(OuterMetaComponent), pointer :: outer_meta

      type(MultiState) :: states

      call setup(outer_gc, states, status)
      @assert_that(status, is(0))
      outer_meta => get_outer_meta(outer_gc, rc=status)
      @assert_that(status, is(0))

      call check('child_A', 'import', 'I_A1', ESMF_FIELDSTATUS_EMPTY, rc=status)
      @assert_that(status, is(0))
      call check('child_A', 'export', 'E_A1', ESMF_FIELDSTATUS_COMPLETE, rc=status)
      @assert_that(status, is(0))

      call check('child_B', 'import', 'I_B1', ESMF_FIELDSTATUS_COMPLETE, rc=status)
      @assert_that(status, is(0))
      call check('child_B', 'export', 'E_B1', ESMF_FIELDSTATUS_EMPTY, rc=status)
      @assert_that(status, is(0))

      if(.false.) print*,shape(this)
   contains

      subroutine check(child_name, state_intent, item, expected_status, rc)
         character(*), intent(in) :: child_name
         character(*), intent(in) :: state_intent

         character(*), intent(in) :: item
         type(ESMF_FieldStatus_Flag), intent(in) :: expected_status
         integer, optional, intent(out) :: rc

         type(MultiState) :: states
         type(ESMF_State) :: state
         type(GriddedComponentDriver) :: child_comp
         type(ESMF_FieldStatus_Flag) :: field_status

         rc = -1
         child_comp = outer_meta%get_child(child_name, rc=status)
         @assert_that('child <'//child_name//'> not found.', status, is(0))
         states = child_comp%get_states()

         call states%get_state(state, state_intent, rc=status)
         @assert_that(status, is(0))
         
         call ESMF_StateGet(state, item, f, rc=status)
         @assert_that('Item <'//item//'> not found in child <'//child_name//'>.', status, is(0))

         call ESMF_FieldGet(f, status=field_status, rc=status)
         @assert_that('FieldGet failed? ', status, is(0))

         @assert_that(expected_status == field_status, is(true()))

         rc = 0
      end subroutine check
      
   end subroutine test_state_items_complete