From 8ec77ece57f535945d722a04e20d28be46d06bc9 Mon Sep 17 00:00:00 2001 From: Dusan Jovic Date: Thu, 17 Feb 2022 14:10:36 +0000 Subject: [PATCH 01/10] Add valid_time (ISO 8601 datetime string) to history outputs --- io/module_write_netcdf.F90 | 19 ++++++++++++++++--- io/module_wrt_grid_comp.F90 | 19 +++++++++++-------- module_fcst_grid_comp.F90 | 21 ++++++++++++++++++++- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/io/module_write_netcdf.F90 b/io/module_write_netcdf.F90 index 1445d5e04..c19f1c1fd 100644 --- a/io/module_write_netcdf.F90 +++ b/io/module_write_netcdf.F90 @@ -80,8 +80,8 @@ subroutine write_netcdf(wrtfb, filename, & integer :: ncerr,ierr integer :: ncid integer :: oldMode - integer :: im_dimid, jm_dimid, tile_dimid, pfull_dimid, phalf_dimid, time_dimid - integer :: im_varid, jm_varid, tile_varid, lon_varid, lat_varid + integer :: im_dimid, jm_dimid, tile_dimid, pfull_dimid, phalf_dimid, time_dimid, ch_dimid + integer :: im_varid, jm_varid, tile_varid, lon_varid, lat_varid, validtime_varid integer, dimension(:), allocatable :: dimids_2d, dimids_3d integer, dimension(:), allocatable :: varids logical shuffle @@ -213,6 +213,7 @@ subroutine write_netcdf(wrtfb, filename, & ! define dimensions [grid_xt, grid_yta ,(pfull/phalf), (tile), time] ncerr = nf90_def_dim(ncid, "grid_xt", im, im_dimid); NC_ERR_STOP(ncerr) ncerr = nf90_def_dim(ncid, "grid_yt", jm, jm_dimid); NC_ERR_STOP(ncerr) + ncerr = nf90_def_dim(ncid, "nchars", 20, ch_dimid); NC_ERR_STOP(ncerr) if (lm > 1) then call add_dim(ncid, "pfull", pfull_dimid, wrtgrid, rc) call add_dim(ncid, "phalf", phalf_dimid, wrtgrid, rc) @@ -229,9 +230,13 @@ subroutine write_netcdf(wrtfb, filename, & ncerr = nf90_put_att(ncid, jm_varid, "cartesian_axis", "Y"); NC_ERR_STOP(ncerr) if (is_cubed_sphere) then ncerr = nf90_def_var(ncid, "tile", NF90_INT, tile_dimid, tile_varid); NC_ERR_STOP(ncerr) - ncerr = nf90_put_att(ncid, tile_varid, "long_name", "cubed-spehere face"); NC_ERR_STOP(ncerr) + ncerr = nf90_put_att(ncid, tile_varid, "long_name", "cubed-sphere face"); NC_ERR_STOP(ncerr) end if + ncerr = nf90_def_var(ncid, "valid_time", NF90_CHAR, [ch_dimid,time_dimid], validtime_varid); NC_ERR_STOP(ncerr) + ncerr = nf90_put_att(ncid, validtime_varid, "long_name", "valid time"); NC_ERR_STOP(ncerr) + ncerr = nf90_put_att(ncid, validtime_varid, "units", "ISO 8601 datetime string"); NC_ERR_STOP(ncerr) + ! coordinate variable attributes based on output_grid type if (trim(output_grid(grid_id)) == 'gaussian_grid' .or. & trim(output_grid(grid_id)) == 'global_latlon' .or. & @@ -275,6 +280,7 @@ subroutine write_netcdf(wrtfb, filename, & ncerr = nf90_var_par_access(ncid, lon_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) ncerr = nf90_var_par_access(ncid, jm_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) ncerr = nf90_var_par_access(ncid, lat_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) + ncerr = nf90_var_par_access(ncid, validtime_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) if (is_cubed_sphere) then ncerr = nf90_var_par_access(ncid, tile_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) end if @@ -560,6 +566,13 @@ subroutine write_netcdf(wrtfb, filename, & ncerr = nf90_put_var(ncid, tile_varid, values=[1,2,3,4,5,6]); NC_ERR_STOP(ncerr) end if + ! write valid_time (validtime_varid) + if (do_io) then + call ESMF_AttributeGet(wrtgrid, convention="NetCDF", purpose="FV3", & + name="valid_time", value=varcval, rc=rc); ESMF_ERR_RETURN(rc) + ncerr = nf90_put_var(ncid, validtime_varid, values=[trim(varcval)]); NC_ERR_STOP(ncerr) + end if + ! write variables (fields) do i=1, fieldCount diff --git a/io/module_wrt_grid_comp.F90 b/io/module_wrt_grid_comp.F90 index 0bbf2a221..a53dd46f2 100644 --- a/io/module_wrt_grid_comp.F90 +++ b/io/module_wrt_grid_comp.F90 @@ -1431,6 +1431,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) ! character(esmf_maxstr) :: filename,compname character(40) :: cfhour, cform + character(20) :: valid_time_iso real(ESMF_KIND_R8) :: time ! real(kind=8) :: MPI_Wtime @@ -1475,25 +1476,22 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) !*** get current time and elapsed forecast time call ESMF_ClockGet(clock=CLOCK, currTime=CURRTIME, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_TimeGet(time=currTime,yy=date(1),mm=date(2),dd=date(3),h=date(4), & m=date(5),s=date(6),rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + wrt_int_state%fdate(7) = 1 wrt_int_state%fdate(1:6) = date(1:6) + write(valid_time_iso,'(I4,"-",I2.2,"-",I2.2,"T",I2.2,":",I2.2,":",I2.2,"Z")') date(1:6) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return -! if(mype == lead_write_task) print *,'in wrt run, curr time=',date -! call ESMF_TimeGet(time=wrt_int_state%IO_BASETIME,yy=date(1),mm=date(2),dd=date(3),h=date(4), & m=date(5),s=date(6),rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return -! print *,'in wrt run, io_baseline time=',date -! wrt_int_state%IO_CURRTIMEDIFF = CURRTIME-wrt_int_state%IO_BASETIME -! + call ESMF_TimeIntervalGet(timeinterval=wrt_int_state%IO_CURRTIMEDIFF & ,h =nf_hours & !<-- Hours of elapsed time ,m =nf_minutes & !<-- Minutes of elapsed time @@ -1653,6 +1651,11 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + call ESMF_AttributeSet(fbgrid, convention="NetCDF", purpose="FV3", & + name="valid_time", value=trim(valid_time_iso), rc=rc) + + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + !*** write out grid bundle: ! Provide log message indicating which wrtComp is active call ESMF_LogWrite("before Write component before gridFB ", ESMF_LOGMSG_INFO, rc=rc) diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index 7fe309d3f..0ff98b3f6 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -832,7 +832,26 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) call ESMF_AttributeSet(exportState, convention="NetCDF", purpose="FV3", & name="time:calendar", value=uppercase(trim(calendar)), rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return -! + +! Add valid_time Attribute to the exportState + call ESMF_AttributeAdd(exportState, convention="NetCDF", purpose="FV3", & + attrList=(/ "valid_time ", & + "valid_time:long_name ", & + "valid_time:units " /), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_AttributeSet(exportState, convention="NetCDF", purpose="FV3", & + name="valid_time", value="yyyy-mm-ddThh:mm:ssZ", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_AttributeSet(exportState, convention="NetCDF", purpose="FV3", & + name="valid_time:units", value="ISO 8601 Date String", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_AttributeSet(exportState, convention="NetCDF", purpose="FV3", & + name="valid_time:long_name", value="valid time", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + ! Create FieldBundle for Fields that need to be regridded bilinear if( quilting ) then From abc79def2ee1040d6afc420a938ff73870c79b8b Mon Sep 17 00:00:00 2001 From: Dusan Jovic Date: Thu, 17 Feb 2022 16:21:57 +0000 Subject: [PATCH 02/10] Rename 'valid_time' to 'time_iso' --- io/module_write_netcdf.F90 | 16 ++++++++-------- io/module_wrt_grid_comp.F90 | 6 +++--- module_fcst_grid_comp.F90 | 14 +++++++------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/io/module_write_netcdf.F90 b/io/module_write_netcdf.F90 index c19f1c1fd..954531446 100644 --- a/io/module_write_netcdf.F90 +++ b/io/module_write_netcdf.F90 @@ -81,7 +81,7 @@ subroutine write_netcdf(wrtfb, filename, & integer :: ncid integer :: oldMode integer :: im_dimid, jm_dimid, tile_dimid, pfull_dimid, phalf_dimid, time_dimid, ch_dimid - integer :: im_varid, jm_varid, tile_varid, lon_varid, lat_varid, validtime_varid + integer :: im_varid, jm_varid, tile_varid, lon_varid, lat_varid, timeiso_varid integer, dimension(:), allocatable :: dimids_2d, dimids_3d integer, dimension(:), allocatable :: varids logical shuffle @@ -233,9 +233,9 @@ subroutine write_netcdf(wrtfb, filename, & ncerr = nf90_put_att(ncid, tile_varid, "long_name", "cubed-sphere face"); NC_ERR_STOP(ncerr) end if - ncerr = nf90_def_var(ncid, "valid_time", NF90_CHAR, [ch_dimid,time_dimid], validtime_varid); NC_ERR_STOP(ncerr) - ncerr = nf90_put_att(ncid, validtime_varid, "long_name", "valid time"); NC_ERR_STOP(ncerr) - ncerr = nf90_put_att(ncid, validtime_varid, "units", "ISO 8601 datetime string"); NC_ERR_STOP(ncerr) + 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) ! coordinate variable attributes based on output_grid type if (trim(output_grid(grid_id)) == 'gaussian_grid' .or. & @@ -280,7 +280,7 @@ subroutine write_netcdf(wrtfb, filename, & ncerr = nf90_var_par_access(ncid, lon_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) ncerr = nf90_var_par_access(ncid, jm_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) ncerr = nf90_var_par_access(ncid, lat_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) - ncerr = nf90_var_par_access(ncid, validtime_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) + ncerr = nf90_var_par_access(ncid, timeiso_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) if (is_cubed_sphere) then ncerr = nf90_var_par_access(ncid, tile_varid, NF90_INDEPENDENT); NC_ERR_STOP(ncerr) end if @@ -566,11 +566,11 @@ subroutine write_netcdf(wrtfb, filename, & ncerr = nf90_put_var(ncid, tile_varid, values=[1,2,3,4,5,6]); NC_ERR_STOP(ncerr) end if - ! write valid_time (validtime_varid) + ! write time_iso (timeiso_varid) if (do_io) then call ESMF_AttributeGet(wrtgrid, convention="NetCDF", purpose="FV3", & - name="valid_time", value=varcval, rc=rc); ESMF_ERR_RETURN(rc) - ncerr = nf90_put_var(ncid, validtime_varid, values=[trim(varcval)]); NC_ERR_STOP(ncerr) + name="time_iso", value=varcval, rc=rc); ESMF_ERR_RETURN(rc) + ncerr = nf90_put_var(ncid, timeiso_varid, values=[trim(varcval)]); NC_ERR_STOP(ncerr) end if ! write variables (fields) diff --git a/io/module_wrt_grid_comp.F90 b/io/module_wrt_grid_comp.F90 index a53dd46f2..ca813152e 100644 --- a/io/module_wrt_grid_comp.F90 +++ b/io/module_wrt_grid_comp.F90 @@ -1431,7 +1431,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) ! character(esmf_maxstr) :: filename,compname character(40) :: cfhour, cform - character(20) :: valid_time_iso + character(20) :: time_iso real(ESMF_KIND_R8) :: time ! real(kind=8) :: MPI_Wtime @@ -1484,7 +1484,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) wrt_int_state%fdate(7) = 1 wrt_int_state%fdate(1:6) = date(1:6) - write(valid_time_iso,'(I4,"-",I2.2,"-",I2.2,"T",I2.2,":",I2.2,":",I2.2,"Z")') date(1:6) + write(time_iso,'(I4,"-",I2.2,"-",I2.2,"T",I2.2,":",I2.2,":",I2.2,"Z")') date(1:6) call ESMF_TimeGet(time=wrt_int_state%IO_BASETIME,yy=date(1),mm=date(2),dd=date(3),h=date(4), & m=date(5),s=date(6),rc=rc) @@ -1652,7 +1652,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_AttributeSet(fbgrid, convention="NetCDF", purpose="FV3", & - name="valid_time", value=trim(valid_time_iso), rc=rc) + name="time_iso", value=trim(time_iso), rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index 0ff98b3f6..412bef0aa 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -833,23 +833,23 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) name="time:calendar", value=uppercase(trim(calendar)), rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return -! Add valid_time Attribute to the exportState +! Add time_iso Attribute to the exportState call ESMF_AttributeAdd(exportState, convention="NetCDF", purpose="FV3", & - attrList=(/ "valid_time ", & - "valid_time:long_name ", & - "valid_time:units " /), rc=rc) + attrList=(/ "time_iso ", & + "time_iso:long_name ", & + "time_iso:description " /), rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_AttributeSet(exportState, convention="NetCDF", purpose="FV3", & - name="valid_time", value="yyyy-mm-ddThh:mm:ssZ", rc=rc) + name="time_iso", value="yyyy-mm-ddThh:mm:ssZ", rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_AttributeSet(exportState, convention="NetCDF", purpose="FV3", & - name="valid_time:units", value="ISO 8601 Date String", rc=rc) + name="time_iso:description", value="ISO 8601 Date String", rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_AttributeSet(exportState, convention="NetCDF", purpose="FV3", & - name="valid_time:long_name", value="valid time", rc=rc) + name="time_iso:long_name", value="valid time", rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return ! Create FieldBundle for Fields that need to be regridded bilinear From 48425088137c342c0cf93e91f613a3276d414e96 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Thu, 17 Feb 2022 21:53:40 +0000 Subject: [PATCH 03/10] Update subroutine interfaces to match inline_post.F90 --- io/inline_post_stub.F90 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/io/inline_post_stub.F90 b/io/inline_post_stub.F90 index f33c78d6e..40ad2a203 100644 --- a/io/inline_post_stub.F90 +++ b/io/inline_post_stub.F90 @@ -13,7 +13,7 @@ module inline_post contains - subroutine inline_post_run(wrt_int_state,mypei,mpicomp,lead_write, & + subroutine inline_post_run(wrt_int_state,grid_id,mypei,mpicomp,lead_write, & mynfhr,mynfmin,mynfsec) ! ! revision history: @@ -28,6 +28,7 @@ subroutine inline_post_run(wrt_int_state,mypei,mpicomp,lead_write, & ! type(wrt_internal_state),intent(in) :: wrt_int_state integer,intent(in) :: mypei + integer,intent(in) :: grid_id integer,intent(in) :: mpicomp integer,intent(in) :: lead_write integer,intent(in) :: mynfhr @@ -40,11 +41,12 @@ end subroutine inline_post_run ! !----------------------------------------------------------------------- ! - subroutine inline_post_getattr(wrt_int_state) + subroutine inline_post_getattr(wrt_int_state,grid_id) ! implicit none ! type(wrt_internal_state),intent(inout) :: wrt_int_state + integer,intent(in) :: grid_id ! ! print *,'in stub inline_post_getattr - not supported on this machine, return' From e07c5f9c68231d5b1b9270b1c563c6ed90afe426 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 11 Mar 2022 16:21:24 -0700 Subject: [PATCH 04/10] update ccpp/physics submodule pointer and .gitmodules for testing --- .gitmodules | 6 ++++-- ccpp/physics | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6bb663df1..ecf2fb0b9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,8 +8,10 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/NCAR/ccpp-physics - branch = main + url = https://github.com/grantfirl/ccpp-physics + branch = sfc_flux_spec_update + #url = https://github.com/NCAR/ccpp-physics + #branch = main [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP diff --git a/ccpp/physics b/ccpp/physics index ff6395ca4..44ca4f043 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit ff6395ca4d18e41118dba721d43202937dfa951e +Subproject commit 44ca4f04365f20e58205a6966213af76ba6d0907 From 0a2d3571a25f98a87bbacc3d4d7d94b04123113a Mon Sep 17 00:00:00 2001 From: Dusan Jovic Date: Mon, 14 Mar 2022 13:58:26 +0000 Subject: [PATCH 05/10] Use double precision variable to set value of 'time' attribute in wrt comp import state --- io/module_write_internal_state.F90 | 3 -- io/module_wrt_grid_comp.F90 | 53 +++++++++--------------------- 2 files changed, 15 insertions(+), 41 deletions(-) diff --git a/io/module_write_internal_state.F90 b/io/module_write_internal_state.F90 index 9c9ebbe26..8b9bb0b1d 100644 --- a/io/module_write_internal_state.F90 +++ b/io/module_write_internal_state.F90 @@ -79,8 +79,6 @@ module write_internal_state !------------------------------------- ! type(ESMF_Time) :: io_basetime - type(ESMF_TimeInterval) :: io_currtimediff - real :: nfhour integer :: idate(7) integer :: fdate(7) ! @@ -89,7 +87,6 @@ module write_internal_state !----------------------------------------- ! logical :: output_history - logical :: write_netcdfflag ! !----------------------------------------- !*** POST flags and required variables diff --git a/io/module_wrt_grid_comp.F90 b/io/module_wrt_grid_comp.F90 index ca813152e..54c0ccb78 100644 --- a/io/module_wrt_grid_comp.F90 +++ b/io/module_wrt_grid_comp.F90 @@ -1368,12 +1368,6 @@ subroutine wrt_initialize(wrt_comp, imp_state_write, exp_state_write, clock, rc) deallocate(attNameList, attNameList2, typekindList) ! !----------------------------------------------------------------------- -!*** SET THE FIRST HISTORY FILE'S TIME INDEX. -!----------------------------------------------------------------------- -! - wrt_int_state%NFHOUR = 0 -! -!----------------------------------------------------------------------- !*** Initialize for POST !----------------------------------------------------------------------- ! @@ -1410,6 +1404,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) TYPE(ESMF_VM) :: VM type(ESMF_FieldBundle) :: file_bundle type(ESMF_Time) :: currtime + type(ESMF_TimeInterval) :: io_currtimediff type(ESMF_Grid) :: fbgrid, wrtGrid type(ESMF_State),save :: stateGridFB type(optimizeT), save :: optimize(4) @@ -1420,8 +1415,8 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) ! integer :: i,j,n,mype,nolog, grid_id ! - integer :: nf_hours,nf_seconds, nf_minutes, & - nseconds,nseconds_num,nseconds_den + integer :: nf_hours,nf_seconds,nf_minutes + real(ESMF_KIND_R8) :: nfhour ! integer :: nbdl, date(6), ndig, nnnn integer :: step=1 @@ -1490,44 +1485,26 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) m=date(5),s=date(6),rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - wrt_int_state%IO_CURRTIMEDIFF = CURRTIME-wrt_int_state%IO_BASETIME - - call ESMF_TimeIntervalGet(timeinterval=wrt_int_state%IO_CURRTIMEDIFF & - ,h =nf_hours & !<-- Hours of elapsed time - ,m =nf_minutes & !<-- Minutes of elapsed time - ,s =nseconds & !<-- Seconds of elapsed time - ,sN =nseconds_num & !<-- Numerator of fractional elapsed seconds - ,sD =nseconds_den & !<-- denominator of fractional elapsed seconds - ,rc =RC) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return -! if (lprnt) print *,'in wrt run, nf_hours=',nf_hours,nf_minutes,nseconds, & -! 'nseconds_num=',nseconds_num,nseconds_den,'mype=',mype -! - nf_seconds = nf_hours*3600+nf_minuteS*60+nseconds+real(nseconds_num)/real(nseconds_den) - wrt_int_state%nfhour = nf_seconds/3600. - nf_hours = int(nf_seconds/3600.) - if(lprnt) print *,'in write grid comp, nf_hours=',nf_hours - ! if iau_offset > nf_hours, don't write out anything + io_currtimediff = currtime - wrt_int_state%IO_BASETIME + + call ESMF_TimeIntervalGet(timeinterval=io_currtimediff & + ,h_r8=nfhour,h=nf_hours,m=nf_minutes,s=nf_seconds,rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + if (nf_hours < 0) return - nf_minutes = int((nf_seconds-nf_hours*3600.)/60.) - nseconds = int(nf_seconds-nf_hours*3600.-nf_minutes*60.) if (nsout > 0 .or. lflname_fulltime) then ndig = max(log10(nf_hours+0.5)+1., 3.) write(cform, '("(I",I1,".",I1,",A1,I2.2,A1,I2.2)")') ndig, ndig - write(cfhour, cform) nf_hours,'-',nf_minutes,'-',nseconds + write(cfhour, cform) nf_hours,'-',nf_minutes,'-',nf_seconds else ndig = max(log10(nf_hours+0.5)+1., 3.) write(cform, '("(I",I1,".",I1,")")') ndig, ndig write(cfhour, cform) nf_hours endif ! - if(lprnt) print *,'in wrt run, nf_hours=',nf_hours,nf_minutes,nseconds, & - 'nseconds_num=',nseconds_num,nseconds_den,' FBCount=',FBCount,' cfhour=',trim(cfhour) - -! if(lprnt) print *,'in wrt run, cfhour=',cfhour, & -! print *,'in wrt run, cfhour=',cfhour, & -! ' nf_seconds=',nf_seconds,wrt_int_state%nfhour + if(lprnt) print *,'in wrt run, nf_hours=',nf_hours,nf_minutes,nf_seconds, & + ' FBCount=',FBCount,' cfhour=',trim(cfhour) ! access the time Attribute which is updated by the driver each time call ESMF_AttributeGet(imp_state_write, convention="NetCDF", purpose="FV3", & @@ -1568,7 +1545,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) endif call inline_post_run(wrt_int_state, 1, mype, wrt_mpi_comm, lead_write_task, & - nf_hours, nf_minutes,nseconds) + nf_hours, nf_minutes, nf_seconds) wend = MPI_Wtime() if (lprnt) then write(*,'(A,F10.5,A,I4.2,A,I2.2)')' actual inline post Time is ',wend-wbeg & @@ -1647,7 +1624,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_AttributeSet(fbgrid, convention="NetCDF", purpose="FV3", & - name="time", value=real(wrt_int_state%nfhour,ESMF_KIND_R8), rc=rc) + name="time", value=nfhour, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return @@ -1768,7 +1745,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) enddo ! open(nolog,file='logf'//trim(cfhour),form='FORMATTED') - write(nolog,100)wrt_int_state%nfhour,idate(1:6) + write(nolog,100)nfhour,idate(1:6) 100 format(' completed fv3gfs fhour=',f10.3,2x,6(i4,2x)) close(nolog) endif From c5ad4ebbfa914e3ebe01b13c2182bc3478cd5f94 Mon Sep 17 00:00:00 2001 From: Dusan Jovic Date: Mon, 14 Mar 2022 14:09:34 +0000 Subject: [PATCH 06/10] Remove unused code --- io/module_wrt_grid_comp.F90 | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/io/module_wrt_grid_comp.F90 b/io/module_wrt_grid_comp.F90 index 54c0ccb78..23d3a4047 100644 --- a/io/module_wrt_grid_comp.F90 +++ b/io/module_wrt_grid_comp.F90 @@ -1427,7 +1427,6 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) character(esmf_maxstr) :: filename,compname character(40) :: cfhour, cform character(20) :: time_iso - real(ESMF_KIND_R8) :: time ! real(kind=8) :: MPI_Wtime real(kind=8) :: tbeg @@ -1503,14 +1502,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) write(cfhour, cform) nf_hours endif ! - if(lprnt) print *,'in wrt run, nf_hours=',nf_hours,nf_minutes,nf_seconds, & - ' FBCount=',FBCount,' cfhour=',trim(cfhour) - -! access the time Attribute which is updated by the driver each time - call ESMF_AttributeGet(imp_state_write, convention="NetCDF", purpose="FV3", & - name="time", value=time, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - + if(lprnt) print *,'in wrt run, nfhour=',nfhour,' cfhour=',trim(cfhour) ! !----------------------------------------------------------------------- !*** loop on the files that need to write out From 9859403d736a0614ff3f0a391b799a3a5ea32066 Mon Sep 17 00:00:00 2001 From: Dusan Jovic Date: Tue, 15 Mar 2022 14:26:41 +0000 Subject: [PATCH 07/10] Removed code that creates 'time_stamp.out' file --- module_fcst_grid_comp.F90 | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index cac6c9059..110aed93d 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -328,7 +328,6 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) integer,dimension(6) :: date, date_end ! - character(len=9) :: month integer :: initClock, unit, total_inttime integer :: mype character(4) dateSY @@ -590,17 +589,7 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) ! if there is restart writing during integration intrm_rst = 0 if (frestart(1)>0) intrm_rst = 1 -! -!----- write time stamps (for start time and end time) ------ - call mpp_open( unit, 'time_stamp.out', nohdrs=.TRUE. ) - month = month_name(date(2)) - if ( mpp_pe() == mpp_root_pe() ) write (unit,20) date, month(1:3) - month = month_name(date_end(2)) - if ( mpp_pe() == mpp_root_pe() ) write (unit,20) date_end, month(1:3) - call mpp_close (unit) - 20 format (6i4,2x,a3) -! !------ initialize component models ------ call atmos_model_init (Atmos, Time_init, Time, Time_step) From 3dafe2586c9fc16e6484b77d94189f6237e5b8e4 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Tue, 15 Mar 2022 08:49:34 -0600 Subject: [PATCH 08/10] update submodule pointer for ccpp/physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 44ca4f043..979324a89 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 44ca4f04365f20e58205a6966213af76ba6d0907 +Subproject commit 979324a89894133473c4663fc490d04cdce57ac0 From b099e89a4b3c919cf9874a41e01babb3e2db1030 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Tue, 15 Mar 2022 10:37:32 -0600 Subject: [PATCH 09/10] update ccpp/physics submodule pointer --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 979324a89..44ca4f043 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 979324a89894133473c4663fc490d04cdce57ac0 +Subproject commit 44ca4f04365f20e58205a6966213af76ba6d0907 From 45ce8e8784a57c640eab296ad2bfdf8a95de57ab Mon Sep 17 00:00:00 2001 From: Dusan Jovic Date: Thu, 17 Mar 2022 13:01:59 +0000 Subject: [PATCH 10/10] revert .gitmodules, update ccpp/physics --- .gitmodules | 6 ++---- ccpp/physics | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index ecf2fb0b9..6bb663df1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,10 +8,8 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/grantfirl/ccpp-physics - branch = sfc_flux_spec_update - #url = https://github.com/NCAR/ccpp-physics - #branch = main + url = https://github.com/NCAR/ccpp-physics + branch = main [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP diff --git a/ccpp/physics b/ccpp/physics index 44ca4f043..eede491d9 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 44ca4f04365f20e58205a6966213af76ba6d0907 +Subproject commit eede491d91b58c68fce15572704e4898d2fa2e38