Skip to content

Commit

Permalink
Merge pull request #35 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 6899b55 + 49b4e38 commit ddcf859
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 7 deletions.
17 changes: 17 additions & 0 deletions docs/ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
<hr>

# Tag name: rtm1_0_85
### 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

Resolves ESCOMP/RTM#31
Contributes to https://github.com/ESCOMP/CTSM/issues/1693

PR ESCOMP/RTM#35
Contributes to https://github.com/ESCOMP/CTSM/pull/2052

<hr>

# Tag name: rtm1_0_84
### Originator(s): ekluzek
### Date: Jan 03, 2025
Expand Down
20 changes: 13 additions & 7 deletions src/riverroute/RtmHistFile.F90
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ module RtmHistFile
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 @@ -790,7 +790,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 (masterproc)then
write(iulog,*) trim(subname), &
Expand Down Expand Up @@ -868,7 +868,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 (rtmhist_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 @@ -892,22 +892,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 (rtmhist_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 @@ -939,7 +945,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 (rtmhist_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 ddcf859

Please sign in to comment.