diff --git a/io/module_write_netcdf.F90 b/io/module_write_netcdf.F90 index c11e45b4b..787894ebc 100644 --- a/io/module_write_netcdf.F90 +++ b/io/module_write_netcdf.F90 @@ -236,6 +236,7 @@ subroutine write_netcdf(wrtfb, filename, & ncerr = nf90_def_var(ncid, "time_iso", NF90_CHAR, [ch_dimid,time_dimid], timeiso_varid); NC_ERR_STOP(ncerr) ncerr = nf90_put_att(ncid, timeiso_varid, "long_name", "valid time"); NC_ERR_STOP(ncerr) ncerr = nf90_put_att(ncid, timeiso_varid, "description", "ISO 8601 datetime string"); NC_ERR_STOP(ncerr) + ncerr = nf90_put_att(ncid, timeiso_varid, "_Encoding", "UTF-8"); NC_ERR_STOP(ncerr) ! coordinate variable attributes based on output_grid type if (trim(output_grid(grid_id)) == 'gaussian_grid' .or. & diff --git a/io/module_wrt_grid_comp.F90 b/io/module_wrt_grid_comp.F90 index 0e37d230c..850e0ca29 100644 --- a/io/module_wrt_grid_comp.F90 +++ b/io/module_wrt_grid_comp.F90 @@ -3130,6 +3130,8 @@ subroutine ioCompRun(comp, importState, exportState, clock, rc) real(ESMF_KIND_R4) :: valueR4 real(ESMF_KIND_R8) :: valueR8 logical :: thereAreVerticals + integer :: ch_dimid, timeiso_varid + character(len=ESMF_MAXSTR) :: time_iso rc = ESMF_SUCCESS @@ -3271,6 +3273,10 @@ subroutine ioCompRun(comp, importState, exportState, clock, rc) name="time", value=time, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + call ESMF_AttributeGet(grid, convention="NetCDF", purpose="FV3", & + name="time_iso", value=time_iso, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + ncerr = nf90_redef(ncid=ncid) if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return @@ -3285,6 +3291,17 @@ subroutine ioCompRun(comp, importState, exportState, clock, rc) dimids=(/dimid/), varid=varid) if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return + ncerr = nf90_def_dim(ncid, "nchars", 20, ch_dimid) + if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return + ncerr = nf90_def_var(ncid, "time_iso", NF90_CHAR, [ch_dimid,dimid], timeiso_varid) + if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return + ncerr = nf90_put_att(ncid, timeiso_varid, "long_name", "valid time") + if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return + ncerr = nf90_put_att(ncid, timeiso_varid, "description", "ISO 8601 datetime string") + if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return + ncerr = nf90_put_att(ncid, timeiso_varid, "_Encoding", "UTF-8") + if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return + ncerr = nf90_enddef(ncid=ncid) if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return @@ -3293,6 +3310,10 @@ subroutine ioCompRun(comp, importState, exportState, clock, rc) if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return + ncerr = nf90_put_var(ncid, timeiso_varid, values=[trim(time_iso)]) + + if (ESMF_LogFoundNetCDFError(ncerr, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return + ! loop over all the grid attributes that start with "time:", and ! put them on the "time" variable in the NetCDF file