Skip to content

Commit

Permalink
Merge pull request #66 from samsrabin/standardize-time-metadata
Browse files Browse the repository at this point in the history
Standardize time metadata
  • Loading branch information
slevis-lmwg authored Jan 15, 2025
2 parents 330574f + c023afe commit 00a87c9
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 11 deletions.
20 changes: 20 additions & 0 deletions docs/ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
<hr>
# Tag name: mosart1.1.08
### Originator(s): samrabin
### Date: Jan 14, 2025
### One-line Summary: Standardize time metadata

Standardizes a dimension name of output variable time_bounds, as well as attributes for that plus mcdate, mcsec, mdcur, and mscur.

Contributors: Adam Phillips, Erik Kluzek

Fixes ESCOMP/MOSART#53
Contributes to https://github.com/ESCOMP/CTSM/issues/1693

Testing: standard testing (ekluzek)
izumi ---- OK
derecho -- OK

See https://github.com/ESCOMP/MOSART/pull/66 for more details
Contributes to https://github.com/ESCOMP/CTSM/pull/2052

<hr>
# Tag name: mosart1.1.07
### Originator(s): erik
Expand Down
6 changes: 2 additions & 4 deletions src/cpl/nuopc/rof_import_export.F90
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,8 @@ subroutine advertise_fields(gcomp, flds_scalar_name, rc)
call fldlist_add(fldsToRof_num, fldsToRof, 'Flrl_rofsub')
call fldlist_add(fldsToRof_num, fldsToRof, 'Flrl_rofi')
call fldlist_add(fldsToRof_num, fldsToRof, 'Flrl_irrig')
if ( ctl%rof_from_glc ) then
call fldlist_add(fldsToRof_num, fldsToRof, 'Fgrg_rofl') ! liq runoff from glc
call fldlist_add(fldsToRof_num, fldsToRof, 'Fgrg_rofi') ! ice runoff from glc
end if
call fldlist_add(fldsToRof_num, fldsToRof, 'Fgrg_rofl') ! liq runoff from glc
call fldlist_add(fldsToRof_num, fldsToRof, 'Fgrg_rofi') ! ice runoff from glc

do n = 1,fldsToRof_num
call NUOPC_Advertise(importState, standardName=fldsToRof(n)%stdname, &
Expand Down
20 changes: 13 additions & 7 deletions src/riverroute/mosart_histfile.F90
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ module mosart_histfile
type(file_desc_t), target :: nfid(max_tapes) ! file ids
type(file_desc_t), target :: ncid_hist(max_tapes) ! file ids for history restart files
integer :: time_dimid ! time dimension id
integer :: hist_interval_dimid ! time bounds dimension id
integer :: nbnd_dimid ! time bounds dimension id
integer :: strlen_dimid ! string dimension id
!-----------------------------------------------------------------------

Expand Down Expand Up @@ -697,7 +697,7 @@ subroutine htape_create (t, histrest)
call ncd_defdim(lnfid, 'string_length', 8, strlen_dimid)

if ( .not. lhistrest )then
call ncd_defdim(lnfid, 'hist_interval', 2, hist_interval_dimid)
call ncd_defdim(lnfid, 'nbnd', 2, nbnd_dimid)
call ncd_defdim(lnfid, 'time', ncd_unlimited, time_dimid)
if (mainproc)then
write(iulog,*) trim(subname),' : Successfully defined netcdf history file ',t
Expand Down Expand Up @@ -766,7 +766,7 @@ subroutine htape_timeconst(t, mode)

dim1id(1) = time_dimid
str = 'days since ' // basedate // " " // basesec
if (tape(t)%hlist(1)%avgflag /= 'I') then ! NOT instantaneous fields tape
if (avgflag_pertape(t) /= 'I') then ! NOT instantaneous fields tape
step_or_bounds = 'time_bounds'
long_name = 'time at exact middle of ' // step_or_bounds
call ncd_defvar(nfid(t), 'time', tape(t)%ncprec, 1, dim1id, varid, &
Expand All @@ -790,22 +790,28 @@ subroutine htape_timeconst(t, mode)
long_name = 'current date (YYYYMMDD) at end of ' // step_or_bounds
call ncd_defvar(nfid(t) , 'mcdate', ncd_int, 1, dim1id , varid, &
long_name = long_name)
call ncd_putatt(nfid(t), varid, 'calendar', caldesc)
long_name = 'current seconds of current date at end of ' // step_or_bounds
call ncd_defvar(nfid(t) , 'mcsec' , ncd_int, 1, dim1id , varid, &
long_name = long_name, units='s')
call ncd_putatt(nfid(t), varid, 'calendar', caldesc)
long_name = 'current day (from base day) at end of ' // step_or_bounds
call ncd_defvar(nfid(t) , 'mdcur' , ncd_int, 1, dim1id , varid, &
long_name = long_name)
call ncd_putatt(nfid(t), varid, 'calendar', caldesc)
long_name = 'current seconds of current day at end of ' // step_or_bounds
call ncd_defvar(nfid(t) , 'mscur' , ncd_int, 1, dim1id , varid, &
long_name = long_name)
call ncd_putatt(nfid(t), varid, 'calendar', caldesc)
call ncd_defvar(nfid(t) , 'nstep' , ncd_int, 1, dim1id , varid, &
long_name = 'time step')

dim2id(1) = hist_interval_dimid; dim2id(2) = time_dimid
if (tape(t)%hlist(1)%avgflag /= 'I') then ! NOT instantaneous fields tape
dim2id(1) = nbnd_dimid; dim2id(2) = time_dimid
if (avgflag_pertape(t) /= 'I') then ! NOT instantaneous fields tape
call ncd_defvar(nfid(t), 'time_bounds', ncd_double, 2, dim2id, varid, &
long_name = 'history time interval endpoints')
long_name = 'time interval endpoints', &
units=str)
call ncd_putatt(nfid(t), varid, 'calendar', caldesc)
end if

dim2id(1) = strlen_dimid; dim2id(2) = time_dimid
Expand Down Expand Up @@ -840,7 +846,7 @@ subroutine htape_timeconst(t, mode)

timedata(1) = tape(t)%begtime ! beginning time
timedata(2) = mdcur + mscur / secspday ! end time
if (tape(t)%hlist(1)%avgflag /= 'I') then ! NOT instantaneous fields tape
if (avgflag_pertape(t) /= 'I') then ! NOT instantaneous fields tape
time = (timedata(1) + timedata(2)) * 0.5_r8
call ncd_io('time_bounds', timedata, 'write', nfid(t), nt=tape(t)%ntimes)
else
Expand Down

0 comments on commit 00a87c9

Please sign in to comment.