test_parent_outer_items_created Subroutine

public subroutine test_parent_outer_items_created(this)

Arguments

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

Calls

proc~~test_parent_outer_items_created~~CallsGraph proc~test_parent_outer_items_created test_parent_outer_items_created assert_that assert_that proc~test_parent_outer_items_created->assert_that esmf_stateget esmf_stateget proc~test_parent_outer_items_created->esmf_stateget none~get_state~2 MultiState%get_state proc~test_parent_outer_items_created->none~get_state~2 proc~setup~8 setup proc~test_parent_outer_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 at at proc~mapl_return->at insert insert proc~mapl_return->insert proc~mapl_throw_exception MAPL_throw_exception proc~mapl_return->proc~mapl_throw_exception proc~mapl_verify->proc~mapl_throw_exception

Source Code

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

      integer :: status
      type(ESMF_GridComp) :: outer_gc

      type(MultiState) :: states
      type(ESMF_Field) :: f

      call setup(outer_gc, states, status)
      @assert_that(status, is(0))

      @assert_that(check(states, 'import', field_name='I_A1(1)'), is(0))
      @assert_that(check(states, 'export', field_name='child_A/E_A1'), is(0))
      @assert_that(check(states, 'export', field_name='child_A/Z_A1'), is(0))
      @assert_that(check(states, 'export', field_name='child_B/E_B1'), is(0))
      @assert_that(check(states, 'export', field_name='child_B/Z_B1'), is(5))


   contains

      integer function check(states, state_intent, field_name) result(status)
         type(MultiState), intent(inout) :: states
         character(*), intent(in) :: state_intent
         character(*), intent(in) :: field_name

         type(ESMF_Field) :: f
         type(ESMF_State) :: state, substate
         type(ESMF_StateItem_Flag) :: itemtype
         integer :: idx

         status = 1

         call states%get_state(state, state_intent, rc=status)
         if (status /= 0) then
            status = 2
            return
         end if

         idx = scan(field_name, '/')
         select case (idx)
         case (1:)

            call ESMF_StateGet(state, field_name(:idx-1), substate, rc=status)
            if (status /= 0) then
               status = 7
               return
            end if
         case (0)
            substate = state
         end select

         call ESMF_StateGet(substate, field_name(idx+1:), itemtype, rc=status)
         if (status /= 0) then
            status = 4
            return
         end if

         if (itemtype == ESMF_STATEITEM_NOTFOUND) then
            status = 5
            return
         end if
         ! This interface allows ESMF to dive down substate, but the checks above do not.
         call ESMF_StateGet(state, field_name, f, rc=status)
         if (status /= 0) then
            status = 3
            return
         end if

         status = 0

      end function check

   end subroutine test_parent_outer_items_created