MAPL_IOCountLevels Subroutine

public subroutine MAPL_IOCountLevels(cf, nlev, rc)

Arguments

Type IntentOptional Attributes Name
type(FileMetadata), intent(inout), target :: cf
integer, intent(out) :: nlev
integer, intent(out), optional :: rc

Calls

proc~~mapl_iocountlevels~~CallsGraph proc~mapl_iocountlevels MAPL_IOCountLevels at at proc~mapl_iocountlevels->at get_index get_index proc~mapl_iocountlevels->get_index none~first~238 StringVariableMapIterator%first proc~mapl_iocountlevels->none~first~238 none~ftn_begin~35 StringVariableMap%ftn_begin proc~mapl_iocountlevels->none~ftn_begin~35 none~ftn_end~35 StringVariableMap%ftn_end proc~mapl_iocountlevels->none~ftn_end~35 none~get_dimensions~2 FileMetadata%get_dimensions proc~mapl_iocountlevels->none~get_dimensions~2 none~get_dimension~2 FileMetadata%get_dimension proc~mapl_iocountlevels->none~get_dimension~2 none~get_variables~2 FileMetadata%get_variables proc~mapl_iocountlevels->none~get_variables~2 none~next~96 StringVariableMapIterator%next proc~mapl_iocountlevels->none~next~96 proc~mapl_return MAPL_Return proc~mapl_iocountlevels->proc~mapl_return proc~mapl_verify MAPL_Verify proc~mapl_iocountlevels->proc~mapl_verify none~of~182 StringVariableMapIterator%of none~first~238->none~of~182 to_node to_node none~ftn_end~35->to_node none~get_dimension~2->at none~get_dimension~2->proc~mapl_return find find none~get_dimension~2->find none~get_variables~2->proc~mapl_return none~next~96->to_node 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 MAPL_IOCountLevels(cf,nlev,rc)
  type(FileMetadata), target, intent(inout) :: cf
  integer, intent(out) :: nlev
  integer, intent(out), optional :: rc

  integer :: status
  type(StringVariableMap), pointer :: vars
  type(StringVariableMapIterator) :: iter
  type(StringIntegerMap), pointer :: dims
  integer, pointer :: dimsize => null()
  character(len=:), pointer :: name
  type(StringVector), pointer :: vdims
  type(Variable), pointer :: var
  integer :: levsize

  nlev = 0
  dims => cf%get_dimensions()
  vars => cf%get_variables()
  iter = vars%ftn_begin()
  do while(iter/=vars%ftn_end())
     call iter%next()

     name => iter%first()
     var => iter%second()
     dimsize => dims%at(trim(name))
     if (.not.associated(dimsize)) then
        vdims => var%get_dimensions()
        if (vdims%get_index('lev') /=0) then
           levsize = cf%get_dimension('lev',rc=status)
           _VERIFY(status)
           nlev=nlev+levsize
        else if (vdims%get_index('edge') /=0) then
           levsize = cf%get_dimension('edge',rc=status)
           _VERIFY(status)
           nlev=nlev+levsize
        else
           nlev=nlev+1
        end if
     end if
     if (associated(dimsize)) nullify(dimsize)

  end do

  _RETURN(ESMF_SUCCESS)

  end subroutine MAPL_IOCountLevels