add_vertical_dimensions Subroutine

public subroutine add_vertical_dimensions(bundle, metadata, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_FieldBundle), intent(in) :: bundle
type(FileMetadata), intent(inout) :: metadata
integer, intent(out), optional :: rc

Calls

proc~~add_vertical_dimensions~~CallsGraph proc~add_vertical_dimensions add_vertical_dimensions interface~mapl_assert MAPL_Assert proc~add_vertical_dimensions->interface~mapl_assert interface~mapl_fieldbundleget~2 MAPL_FieldBundleGet proc~add_vertical_dimensions->interface~mapl_fieldbundleget~2 interface~mapl_fieldget MAPL_FieldGet proc~add_vertical_dimensions->interface~mapl_fieldget none~add_dimension FileMetadata%add_dimension proc~add_vertical_dimensions->none~add_dimension none~get_dimension_name VerticalStaggerLoc%get_dimension_name proc~add_vertical_dimensions->none~get_dimension_name proc~mapl_return MAPL_Return proc~add_vertical_dimensions->proc~mapl_return proc~mapl_verify MAPL_Verify proc~add_vertical_dimensions->proc~mapl_verify none~add_dimension->interface~mapl_assert none~add_dimension->proc~mapl_return insert insert none~add_dimension->insert none~get_dimension FileMetadata%get_dimension none~add_dimension->none~get_dimension none~has_dimension FileMetadata%has_dimension none~add_dimension->none~has_dimension at at proc~mapl_return->at 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 none~get_dimension->proc~mapl_return none~get_dimension->at find find none~get_dimension->find none~has_dimension->proc~mapl_return none~has_dimension->find

Called by

proc~~add_vertical_dimensions~~CalledByGraph proc~add_vertical_dimensions add_vertical_dimensions proc~bundle_to_metadata bundle_to_metadata proc~bundle_to_metadata->proc~add_vertical_dimensions

Source Code

   subroutine add_vertical_dimensions(bundle, metadata, rc)
      type(ESMF_FieldBundle), intent(in) :: bundle
      type(FileMetaData), intent(inout) :: metadata
      integer, optional, intent(out) :: rc

      integer :: status
      integer :: num_levels
      type(StringVectorIterator) :: iter
      character(len=:), allocatable :: dim_name
      type(VerticalStaggerLoc) :: vert_staggerloc
      integer :: i, num_vgrid_levels, field_vgrid_levels
      type(ESMF_Field), allocatable :: fieldList(:)


      call MAPL_FieldBundleGet(bundle, fieldList=fieldList, _RC)
      num_vgrid_levels = 0
      
      do i = 1, size(fieldList)
         call MAPL_FieldGet(fieldList(i), vert_staggerloc=vert_staggerloc, _RC)
         if (vert_staggerloc == VERTICAL_STAGGER_NONE) cycle

         ! Ensure consistent vertical grid
         call MAPL_FieldGet(fieldList(i), num_vgrid_levels=field_vgrid_levels, _RC)
         if (num_vgrid_levels > 0) then
            _ASSERT(field_vgrid_levels == num_vgrid_levels, "Inconsistent vertical grid in bundle.")
         else
            num_vgrid_levels = field_vgrid_levels
         end if

         dim_name = vert_staggerloc%get_dimension_name()
         call metadata%add_dimension(dim_name, num_levels)

      end do

      _RETURN(_SUCCESS)
   end subroutine add_vertical_dimensions