test_child_user_items_created Subroutine

public subroutine test_child_user_items_created(this)

Arguments

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

Calls

proc~~test_child_user_items_created~~CallsGraph proc~test_child_user_items_created test_child_user_items_created assert_that assert_that proc~test_child_user_items_created->assert_that esmf_stateget esmf_stateget proc~test_child_user_items_created->esmf_stateget interface~get_outer_meta get_outer_meta proc~test_child_user_items_created->interface~get_outer_meta none~get_child~27 OuterMetaComponent%get_child proc~test_child_user_items_created->none~get_child~27 none~get_gridcomp~3 GriddedComponentDriver%get_gridcomp proc~test_child_user_items_created->none~get_gridcomp~3 none~get_states GriddedComponentDriver%get_states proc~test_child_user_items_created->none~get_states none~get_state~2 MultiState%get_state proc~test_child_user_items_created->none~get_state~2 none~get_user_gc_driver OuterMetaComponent%get_user_gc_driver proc~test_child_user_items_created->none~get_user_gc_driver proc~setup~8 setup proc~test_child_user_items_created->proc~setup~8 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_child_user_items_created(this)
      class(MpiTestMethod), intent(inout) :: this

      integer :: status
      type(ESMF_GridComp) :: outer_gc

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

      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))

      @assert_that('import', check('child_A', 'import', ['I_A1']), is(0))
      @assert_that('export', check('child_A', 'export', ['E_A1', 'Z_A1']), is(0))
      @assert_that('internal', check('child_A', 'internal', ['Z_A1']), is(0))

      @assert_that('import', check('child_B', 'import', ['I_B1']), is(0))
      @assert_that('export', check('child_B', 'export', ['E_B1']), is(0))
      @assert_that('internal', check('child_B', 'internal', ['Z_B1']), is(0))

   contains

      integer function check(child_name, state_intent, expected_items) result(status)
         character(*), intent(in) :: child_name
         character(*), intent(in) :: state_intent
         character(*), intent(in) :: expected_items(:)

         type(ESMF_Field) :: f
         type(ESMF_State) :: state
         type(MultiState) :: states
         integer :: i
         type(OuterMetaComponent), pointer :: child_meta
         type(ESMF_GridComp) :: child_gc
         type(GriddedComponentDriver) :: child_comp
         type(GriddedComponentDriver), pointer :: user_component

         status = 1

          child_comp = outer_meta%get_child(child_name, rc=status)
         if (status /= 0) then
            status = 2
            return
         end if
         
          child_gc = child_comp%get_gridcomp()
         child_meta => get_outer_meta(child_gc)
         user_component => child_meta%get_user_gc_driver()
         states = user_component%get_states()
         call states%get_state(state, state_intent, rc=status)
         if (status /= 0) then
            status = 3
            return
         end if

         do i = 1, size(expected_items)
            call ESMF_StateGet(state, trim(expected_items(i)), f, rc=status)
            if (status /= 0) then
               status = 10 + i
               return
            end if
         end do

         status = 0

      end function check

   end subroutine test_child_user_items_created