Skip to content

Commit

Permalink
io_{netcdf,pio2}/ice_history_write: define coordinates attributes in …
Browse files Browse the repository at this point in the history
…a loop

In ice_history_write::ice_write_hist, we initialize the 'var_coord' and
'coord_bounds' arrays by manually incrementing 'ind' and initializing
each elements with the corresponding information for each coordinate
variable. The rest of the code in that subroutine instead uses a loop on
'ncoord', which is a parameter holding the number of coordinates
variable, along with 'select' statements.

The latter approach is more elegant and also more flexible if we change
the number of coordinates variables. Refactor the code to use a loop and
leverage the integers n_{u,t,n,e}{lon,lat} added in the previous commit,
in both io_netcdf and io_pio2, which have identical code in this part of
the subroutine.
  • Loading branch information
phil-blain committed Feb 22, 2024
1 parent 1c932dc commit 2ac3a29
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 66 deletions.
69 changes: 36 additions & 33 deletions cicecore/cicedyn/infrastructure/io/io_netcdf/ice_history_write.F90
Original file line number Diff line number Diff line change
Expand Up @@ -260,39 +260,42 @@ subroutine ice_write_hist (ns)
! define information for required time-invariant variables
!-----------------------------------------------------------------

ind = 0
ind = ind + 1
var_coord(ind) = coord_attributes('TLON', &
'T grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lont_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('TLAT', &
'T grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latt_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('ULON', &
'U grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lonu_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('ULAT', &
'U grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latu_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('NLON', &
'N grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lonn_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('NLAT', &
'N grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latn_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('ELON', &
'E grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lone_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('ELAT', &
'E grid center latitude', 'degrees_north')
coord_bounds(ind) = 'late_bounds'
do ind = 1, ncoord
select case (ind)
case(n_tlon)
var_coord(ind) = coord_attributes('TLON', &
'T grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lont_bounds'
case(n_tlat)
var_coord(ind) = coord_attributes('TLAT', &
'T grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latt_bounds'
case(n_ulon)
var_coord(ind) = coord_attributes('ULON', &
'U grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lonu_bounds'
case(n_ulat)
var_coord(ind) = coord_attributes('ULAT', &
'U grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latu_bounds'
case(n_nlon)
var_coord(ind) = coord_attributes('NLON', &
'N grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lonn_bounds'
case(n_nlat)
var_coord(ind) = coord_attributes('NLAT', &
'N grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latn_bounds'
case(n_elon)
var_coord(ind) = coord_attributes('ELON', &
'E grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lone_bounds'
case(n_elat)
var_coord(ind) = coord_attributes('ELAT', &
'E grid center latitude', 'degrees_north')
coord_bounds(ind) = 'late_bounds'
end select
end do

var_grdz(1) = coord_attributes('NCAT', 'category maximum thickness', 'm')
var_grdz(2) = coord_attributes('VGRDi', 'vertical ice levels', '1')
Expand Down
69 changes: 36 additions & 33 deletions cicecore/cicedyn/infrastructure/io/io_pio2/ice_history_write.F90
Original file line number Diff line number Diff line change
Expand Up @@ -273,39 +273,42 @@ subroutine ice_write_hist (ns)
! define information for required time-invariant variables
!-----------------------------------------------------------------

ind = 0
ind = ind + 1
var_coord(ind) = coord_attributes('TLON', &
'T grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lont_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('TLAT', &
'T grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latt_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('ULON', &
'U grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lonu_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('ULAT', &
'U grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latu_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('NLON', &
'N grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lonn_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('NLAT', &
'N grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latn_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('ELON', &
'E grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lone_bounds'
ind = ind + 1
var_coord(ind) = coord_attributes('ELAT', &
'E grid center latitude', 'degrees_north')
coord_bounds(ind) = 'late_bounds'
do ind = 1, ncoord
select case (ind)
case(n_tlon)
var_coord(ind) = coord_attributes('TLON', &
'T grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lont_bounds'
case(n_tlat)
var_coord(ind) = coord_attributes('TLAT', &
'T grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latt_bounds'
case(n_ulon)
var_coord(ind) = coord_attributes('ULON', &
'U grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lonu_bounds'
case(n_ulat)
var_coord(ind) = coord_attributes('ULAT', &
'U grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latu_bounds'
case(n_nlon)
var_coord(ind) = coord_attributes('NLON', &
'N grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lonn_bounds'
case(n_nlat)
var_coord(ind) = coord_attributes('NLAT', &
'N grid center latitude', 'degrees_north')
coord_bounds(ind) = 'latn_bounds'
case(n_elon)
var_coord(ind) = coord_attributes('ELON', &
'E grid center longitude', 'degrees_east')
coord_bounds(ind) = 'lone_bounds'
case(n_elat)
var_coord(ind) = coord_attributes('ELAT', &
'E grid center latitude', 'degrees_north')
coord_bounds(ind) = 'late_bounds'
end select
end do

var_grdz(1) = coord_attributes('NCAT', 'category maximum thickness', 'm')
var_grdz(2) = coord_attributes('VGRDi', 'vertical ice levels', '1')
Expand Down

0 comments on commit 2ac3a29

Please sign in to comment.