test_child_outer_items_created Subroutine

public subroutine test_child_outer_items_created(this)

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

Arguments

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

Calls

proc~~test_child_outer_items_created~~CallsGraph proc~test_child_outer_items_created test_child_outer_items_created assert_that assert_that proc~test_child_outer_items_created->assert_that interface~get_outer_meta get_outer_meta proc~test_child_outer_items_created->interface~get_outer_meta proc~get_child_user_states get_child_user_states proc~test_child_outer_items_created->proc~get_child_user_states proc~get_field get_field proc~test_child_outer_items_created->proc~get_field proc~setup~8 setup proc~test_child_outer_items_created->proc~setup~8 proc~get_child_user_states->interface~get_outer_meta none~get_child~27 OuterMetaComponent%get_child proc~get_child_user_states->none~get_child~27 none~get_gridcomp~3 GriddedComponentDriver%get_gridcomp proc~get_child_user_states->none~get_gridcomp~3 none~get_states GriddedComponentDriver%get_states proc~get_child_user_states->none~get_states none~get_user_gc_driver OuterMetaComponent%get_user_gc_driver proc~get_child_user_states->none~get_user_gc_driver esmf_stateget esmf_stateget proc~get_field->esmf_stateget none~get_state~2 MultiState%get_state proc~get_field->none~get_state~2 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

Source Code

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

      call get_child_user_states(states, outer_meta, 'child_A', rc=status)
      @assert_that(status, is(0))

      call get_field(f, states, state_intent='import', field_name='I_A1', rc=status)
      @assert_that(status, is(0))
      call get_field(f, states, state_intent='export', field_name='E_A1', rc=status)
      @assert_that(status, is(0))
      call get_field(f, states, state_intent='internal', field_name='Z_A1', rc=status)
     @assert_that(status, is(0))
      
      call get_child_user_states(states, outer_meta, 'child_B', rc=status)
      @assert_that(status, is(0))

      call get_field(f, states, state_intent='import', field_name='I_B1', rc=status)
      @assert_that(status, is(0))
      call get_field(f, states, state_intent='export', field_name='E_B1', rc=status)
      @assert_that(status, is(0))
      call get_field(f, states, state_intent='internal', field_name='Z_B1', rc=status)
      @assert_that(status, 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_outer_items_created