Skip to content

Commit

Permalink
Merge branch 'concepts/write-ic-at-init-date' into 'concepts/main' (!15)
Browse files Browse the repository at this point in the history
cicecore: correct initial condition metadata (CICE-Consortium#818)

Closes #19
  • Loading branch information
phil-blain committed Mar 16, 2023
2 parents 9ffccf4 + 427dcca commit 47155b6
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 46 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ subroutine ice_write_hist(ns)
trim(avail_hist_fields(n)%vcomment)

if (histfreq(ns) == '1' .or. .not. hist_avg &
.or. write_ic &
.or. n==n_divu(ns) .or. n==n_shear(ns) & ! snapshots
.or. n==n_sig1(ns) .or. n==n_sig2(ns) &
.or. n==n_sigP(ns) .or. n==n_trsig(ns) &
Expand Down Expand Up @@ -186,7 +187,7 @@ subroutine ice_write_hist(ns)
write (nu_hdr, 994) nrec,trim(avail_hist_fields(n)%vname), &
trim(avail_hist_fields(n)%vdesc),trim(avail_hist_fields(n)%vunit),nn

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
write (nu_hdr, 996) nrec,trim(avail_hist_fields(n)%vname), &
'time_rep','instantaneous'
else
Expand All @@ -210,7 +211,7 @@ subroutine ice_write_hist(ns)
write (nu_hdr, 993) nrec,trim(avail_hist_fields(n)%vname), &
trim(avail_hist_fields(n)%vdesc),trim(avail_hist_fields(n)%vunit),k

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
write (nu_hdr, 996) nrec,trim(avail_hist_fields(n)%vname), &
'time_rep','instantaneous'
else
Expand All @@ -234,7 +235,7 @@ subroutine ice_write_hist(ns)
write (nu_hdr, 993) nrec,trim(avail_hist_fields(n)%vname), &
trim(avail_hist_fields(n)%vdesc),trim(avail_hist_fields(n)%vunit),nn,k

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
write (nu_hdr, 996) nrec,trim(avail_hist_fields(n)%vname), &
'time_rep','instantaneous'
else
Expand All @@ -258,7 +259,7 @@ subroutine ice_write_hist(ns)
write (nu_hdr, 993) nrec,trim(avail_hist_fields(n)%vname), &
trim(avail_hist_fields(n)%vdesc),trim(avail_hist_fields(n)%vunit),nn,k

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
write (nu_hdr, 996) nrec,trim(avail_hist_fields(n)%vname), &
'time_rep','instantaneous'
else
Expand All @@ -282,7 +283,7 @@ subroutine ice_write_hist(ns)
write (nu_hdr, 993) nrec,trim(avail_hist_fields(n)%vname), &
trim(avail_hist_fields(n)%vdesc),trim(avail_hist_fields(n)%vunit),nn,k

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
write (nu_hdr, 996) nrec,trim(avail_hist_fields(n)%vname), &
'time_rep','instantaneous'
else
Expand All @@ -307,7 +308,7 @@ subroutine ice_write_hist(ns)
write (nu_hdr, 993) nrec,trim(avail_hist_fields(n)%vname), &
trim(avail_hist_fields(n)%vdesc),trim(avail_hist_fields(n)%vunit),nn,k

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
write (nu_hdr, 996) nrec,trim(avail_hist_fields(n)%vname), &
'time_rep','instantaneous'
else
Expand All @@ -333,7 +334,7 @@ subroutine ice_write_hist(ns)
write (nu_hdr, 993) nrec,trim(avail_hist_fields(n)%vname), &
trim(avail_hist_fields(n)%vdesc),trim(avail_hist_fields(n)%vunit),nn,k

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
write (nu_hdr, 996) nrec,trim(avail_hist_fields(n)%vname), &
'time_rep','instantaneous'
else
Expand All @@ -359,7 +360,7 @@ subroutine ice_write_hist(ns)
write (nu_hdr, 993) nrec,trim(avail_hist_fields(n)%vname), &
trim(avail_hist_fields(n)%vdesc),trim(avail_hist_fields(n)%vunit),nn,k

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
write (nu_hdr, 996) nrec,trim(avail_hist_fields(n)%vname), &
'time_rep','instantaneous'
else
Expand Down
27 changes: 14 additions & 13 deletions cicecore/cicedynB/infrastructure/io/io_netcdf/ice_history_write.F90
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ subroutine ice_write_hist (ns)
! define dimensions
!-----------------------------------------------------------------

if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
status = nf90_def_dim(ncid,'d2',2,boundid)
if (status /= nf90_noerr) call abort_ice(subname// &
'ERROR: defining dim d2')
Expand Down Expand Up @@ -237,7 +237,7 @@ subroutine ice_write_hist (ns)
call abort_ice(subname//'ERROR: invalid calendar settings')
endif

if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
status = nf90_put_att(ncid,varid,'bounds','time_bounds')
if (status /= nf90_noerr) call abort_ice(subname// &
'ERROR: time bounds')
Expand All @@ -247,7 +247,7 @@ subroutine ice_write_hist (ns)
! Define attributes for time bounds if hist_avg is true
!-----------------------------------------------------------------

if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
dimid(1) = boundid
dimid(2) = timid
status = nf90_def_var(ncid,'time_bounds',lprecision,dimid(1:2),varid)
Expand Down Expand Up @@ -563,7 +563,7 @@ subroutine ice_write_hist (ns)
!-----------------------------------------------------------------
! Add cell_methods attribute to variables if averaged
!-----------------------------------------------------------------
if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
if (TRIM(avail_hist_fields(n)%vname)/='sig1' &
.or.TRIM(avail_hist_fields(n)%vname)/='sig2' &
.or.TRIM(avail_hist_fields(n)%vname)/='sistreave' &
Expand All @@ -576,6 +576,7 @@ subroutine ice_write_hist (ns)
endif

if (histfreq(ns) == '1' .or. .not. hist_avg &
.or. write_ic &
.or. n==n_divu(ns) .or. n==n_shear(ns) & ! snapshots
.or. n==n_sig1(ns) .or. n==n_sig2(ns) &
.or. n==n_sigP(ns) .or. n==n_trsig(ns) &
Expand Down Expand Up @@ -634,13 +635,13 @@ subroutine ice_write_hist (ns)
!-----------------------------------------------------------------
! Add cell_methods attribute to variables if averaged
!-----------------------------------------------------------------
if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
status = nf90_put_att(ncid,varid,'cell_methods','time: mean')
if (status /= nf90_noerr) call abort_ice(subname// &
'ERROR: defining cell methods for '//avail_hist_fields(n)%vname)
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = nf90_put_att(ncid,varid,'time_rep','instantaneous')
else
status = nf90_put_att(ncid,varid,'time_rep','averaged')
Expand Down Expand Up @@ -875,13 +876,13 @@ subroutine ice_write_hist (ns)
!-----------------------------------------------------------------
! Add cell_methods attribute to variables if averaged
!-----------------------------------------------------------------
if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
status = nf90_put_att(ncid,varid,'cell_methods','time: mean')
if (status /= nf90_noerr) call abort_ice(subname// &
'ERROR: defining cell methods for '//avail_hist_fields(n)%vname)
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = nf90_put_att(ncid,varid,'time_rep','instantaneous')
else
status = nf90_put_att(ncid,varid,'time_rep','averaged')
Expand Down Expand Up @@ -936,13 +937,13 @@ subroutine ice_write_hist (ns)
!-----------------------------------------------------------------
! Add cell_methods attribute to variables if averaged
!-----------------------------------------------------------------
if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
status = nf90_put_att(ncid,varid,'cell_methods','time: mean')
if (status /= nf90_noerr) call abort_ice(subname// &
'ERROR: defining cell methods for '//avail_hist_fields(n)%vname)
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = nf90_put_att(ncid,varid,'time_rep','instantaneous')
else
status = nf90_put_att(ncid,varid,'time_rep','averaged')
Expand Down Expand Up @@ -997,13 +998,13 @@ subroutine ice_write_hist (ns)
!-----------------------------------------------------------------
! Add cell_methods attribute to variables if averaged
!-----------------------------------------------------------------
if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
status = nf90_put_att(ncid,varid,'cell_methods','time: mean')
if (status /= nf90_noerr) call abort_ice(subname// &
'ERROR: defining cell methods for '//avail_hist_fields(n)%vname)
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = nf90_put_att(ncid,varid,'time_rep','instantaneous')
else
status = nf90_put_att(ncid,varid,'time_rep','averaged')
Expand Down Expand Up @@ -1098,7 +1099,7 @@ subroutine ice_write_hist (ns)
! write time_bounds info
!-----------------------------------------------------------------

if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
status = nf90_inq_varid(ncid,'time_bounds',varid)
if (status /= nf90_noerr) call abort_ice(subname// &
'ERROR: getting time_bounds id')
Expand Down
43 changes: 22 additions & 21 deletions cicecore/cicedynB/infrastructure/io/io_pio2/ice_history_write.F90
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ subroutine ice_write_hist (ns)
! define dimensions
!-----------------------------------------------------------------

if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_def_dim(File,'d2',2,boundid)
endif

Expand Down Expand Up @@ -224,12 +224,12 @@ subroutine ice_write_hist (ns)
call abort_ice(subname//'ERROR: invalid calendar settings')
endif

if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_put_att(File,varid,'bounds','time_bounds')
endif

! Define attributes for time_bounds if hist_avg is true
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
dimid2(1) = boundid
dimid2(2) = timid
!sgl status = pio_def_var(File,'time_bounds',pio_real,dimid2,varid)
Expand Down Expand Up @@ -473,7 +473,7 @@ subroutine ice_write_hist (ns)
endif

! Add cell_methods attribute to variables if averaged
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
if (TRIM(avail_hist_fields(n)%vname)/='sig1' &
.or.TRIM(avail_hist_fields(n)%vname)/='sig2' &
.or.TRIM(avail_hist_fields(n)%vname)/='sistreave' &
Expand All @@ -484,6 +484,7 @@ subroutine ice_write_hist (ns)
endif

if (histfreq(ns) == '1' .or. .not. hist_avg &
.or. write_ic &
.or. n==n_divu(ns) .or. n==n_shear(ns) & ! snapshots
.or. n==n_sig1(ns) .or. n==n_sig2(ns) &
.or. n==n_sigP(ns) .or. n==n_trsig(ns) &
Expand Down Expand Up @@ -527,11 +528,11 @@ subroutine ice_write_hist (ns)
endif

! Add cell_methods attribute to variables if averaged
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_put_att(File,varid,'cell_methods','time: mean')
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = pio_put_att(File,varid,'time_rep','instantaneous')
else
status = pio_put_att(File,varid,'time_rep','averaged')
Expand Down Expand Up @@ -569,11 +570,11 @@ subroutine ice_write_hist (ns)
endif

! Add cell_methods attribute to variables if averaged
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_put_att(File,varid,'cell_methods','time: mean')
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = pio_put_att(File,varid,'time_rep','instantaneous')
else
status = pio_put_att(File,varid,'time_rep','averaged')
Expand Down Expand Up @@ -611,11 +612,11 @@ subroutine ice_write_hist (ns)
endif

! Add cell_methods attribute to variables if averaged
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_put_att(File,varid,'cell_methods','time: mean')
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = pio_put_att(File,varid,'time_rep','instantaneous')
else
status = pio_put_att(File,varid,'time_rep','averaged')
Expand Down Expand Up @@ -653,11 +654,11 @@ subroutine ice_write_hist (ns)
endif

! Add cell_methods attribute to variables if averaged
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_put_att(File,varid,'cell_methods','time: mean')
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = pio_put_att(File,varid,'time_rep','instantaneous')
else
status = pio_put_att(File,varid,'time_rep','averaged')
Expand Down Expand Up @@ -695,11 +696,11 @@ subroutine ice_write_hist (ns)
endif

! Add cell_methods attribute to variables if averaged
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_put_att(File,varid,'cell_methods','time: mean')
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = pio_put_att(File,varid,'time_rep','instantaneous')
else
status = pio_put_att(File,varid,'time_rep','averaged')
Expand Down Expand Up @@ -743,11 +744,11 @@ subroutine ice_write_hist (ns)
endif

! Add cell_methods attribute to variables if averaged
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_put_att(File,varid,'cell_methods','time: mean')
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = pio_put_att(File,varid,'time_rep','instantaneous')
else
status = pio_put_att(File,varid,'time_rep','averaged')
Expand Down Expand Up @@ -786,11 +787,11 @@ subroutine ice_write_hist (ns)
endif

! Add cell_methods attribute to variables if averaged
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_put_att(File,varid,'cell_methods','time: mean')
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = pio_put_att(File,varid,'time_rep','instantaneous')
else
status = pio_put_att(File,varid,'time_rep','averaged')
Expand Down Expand Up @@ -830,11 +831,11 @@ subroutine ice_write_hist (ns)
endif

! Add cell_methods attribute to variables if averaged
if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_put_att(File,varid,'cell_methods','time: mean')
endif

if (histfreq(ns) == '1' .or. .not. hist_avg) then
if (histfreq(ns) == '1' .or. .not. hist_avg .or. write_ic) then
status = pio_put_att(File,varid,'time_rep','instantaneous')
else
status = pio_put_att(File,varid,'time_rep','averaged')
Expand Down Expand Up @@ -908,7 +909,7 @@ subroutine ice_write_hist (ns)
! write time_bounds info
!-----------------------------------------------------------------

if (hist_avg .and. histfreq(ns) /= '1') then
if (hist_avg .and. histfreq(ns) /= '1' .and. .not. write_ic) then
status = pio_inq_varid(File,'time_bounds',varid)
time_bounds=(/time_beg(ns),time_end(ns)/)
bnd_start = (/1,1/)
Expand Down
4 changes: 2 additions & 2 deletions cicecore/drivers/direct/nemo_concepts/CICE_InitMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,8 @@ subroutine cice_init
if (trim(runtype) == 'continue' .or. restart) &
call init_shortwave ! initialize radiative transfer

if (write_ic) call accum_hist(dt) ! write initial conditions

! determine the time and date at the end of the first timestep
call advance_timestep()

Expand Down Expand Up @@ -215,8 +217,6 @@ subroutine cice_init
call init_flux_atm ! initialize atmosphere fluxes sent to coupler
call init_flux_ocn ! initialize ocean fluxes sent to coupler

if (write_ic) call accum_hist(dt) ! write initial conditions

end subroutine cice_init

!=======================================================================
Expand Down
4 changes: 2 additions & 2 deletions cicecore/drivers/standalone/cice/CICE_InitMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,8 @@ subroutine cice_init
if (trim(runtype) == 'continue' .or. restart) &
call init_shortwave ! initialize radiative transfer

if (write_ic) call accum_hist(dt) ! write initial conditions

! tcraig, use advance_timestep here
! istep = istep + 1 ! update time step counters
! istep1 = istep1 + 1
Expand Down Expand Up @@ -222,8 +224,6 @@ subroutine cice_init
call init_flux_atm ! initialize atmosphere fluxes sent to coupler
call init_flux_ocn ! initialize ocean fluxes sent to coupler

if (write_ic) call accum_hist(dt) ! write initial conditions

end subroutine cice_init

!=======================================================================
Expand Down

0 comments on commit 47155b6

Please sign in to comment.