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