make_ungridded_dims_info Subroutine

public subroutine make_ungridded_dims_info(info, num_ungridded, names, units_array, coordinates, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_Info), intent(inout) :: info
integer, intent(in) :: num_ungridded
character(len=*), intent(in), optional :: names(:)
character(len=*), intent(in), optional :: units_array(:)
real, intent(in), optional :: coordinates(:,:)
integer, intent(out), optional :: rc

Calls

proc~~make_ungridded_dims_info~~CallsGraph proc~make_ungridded_dims_info make_ungridded_dims_info ESMF_InfoSet ESMF_InfoSet proc~make_ungridded_dims_info->ESMF_InfoSet anyexceptions anyexceptions proc~make_ungridded_dims_info->anyexceptions assert_that assert_that proc~make_ungridded_dims_info->assert_that proc~make_dim_key make_dim_key proc~make_ungridded_dims_info->proc~make_dim_key sourcelocation sourcelocation proc~make_ungridded_dims_info->sourcelocation interface~mapl_assert MAPL_Assert proc~make_dim_key->interface~mapl_assert proc~mapl_return MAPL_Return proc~make_dim_key->proc~mapl_return 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

Called by

proc~~make_ungridded_dims_info~~CalledByGraph proc~make_ungridded_dims_info make_ungridded_dims_info proc~make_esmf_info make_esmf_info proc~make_esmf_info->proc~make_ungridded_dims_info proc~test_get_num_levels test_get_num_levels proc~test_get_num_levels->proc~make_esmf_info proc~test_get_ungridded_dims test_get_ungridded_dims proc~test_get_ungridded_dims->proc~make_esmf_info proc~test_get_vertical_dim_spec_names test_get_vertical_dim_spec_names proc~test_get_vertical_dim_spec_names->proc~make_esmf_info

Source Code

   subroutine make_ungridded_dims_info(info, num_ungridded, names, units_array, coordinates, rc)
      type(ESMF_Info), intent(inout) :: info
      integer, intent(in) :: num_ungridded
      character(len=*), optional, intent(in) :: names(:)
      character(len=*), optional, intent(in) :: units_array(:)
      real, optional, intent(in) :: coordinates(:, :)
      integer, optional, intent(out) :: rc
      integer :: status, i
      character(len=:), allocatable :: names_(:), units_(:)
      real, allocatable :: coordinates_(:, :)
      character(len=:), allocatable :: key
      character(len=:), allocatable :: name, units
      real, allocatable :: coord(:)

      if(present(rc)) rc = -1

      allocate(character(len=len(NAME_DEFAULT)) :: names_(num_ungridded))
      names_ = NAME_DEFAULT
      if(present(names)) then
         if(size(names) /= num_ungridded) return
         names_ = names
      end if

      allocate(character(len=len(UNITS_DEFAULT)) :: units_(num_ungridded))
      units_ = UNITS_DEFAULT
      if(present(units_array)) then
         if(size(units_array) /= num_ungridded) return
         units_ = units_array
      end if

      allocate(coordinates_(num_ungridded, size(COORDINATES_DEFAULT)))
      do i=1, num_ungridded
         coordinates_(i, :) = COORDINATES_DEFAULT
      end do

      if(present(rc)) rc = -1
      if(present(coordinates)) then
         if(size(coordinates, 1) /= num_ungridded) return
         if(allocated(coordinates_)) deallocate(coordinates_)
         coordinates_ = coordinates
      end if

      call ESMF_InfoSet(info, KEY_NUM_UNGRID_DIMS, num_ungridded, _RC)

      do i=1, num_ungridded
         key = make_dim_key(i, _RC)
         name = names_(i)
         units = units_(i)
         coord = coordinates_(i, :)
         call ESMF_InfoSet(info, key // '/' // KEY_UNGRIDDED_NAME, name, _RC)
         call ESMF_InfoSet(info, key // '/' // KEY_UNGRIDDED_UNITS, units, _RC)
         call ESMF_InfoSet(info, key // '/' // KEY_UNGRIDDED_COORD, coord, _RC)
      end do

      SET_RC(status)

   end subroutine make_ungridded_dims_info