Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update CICE from Consortium/main #59

Merged
merged 70 commits into from
Mar 29, 2023
Merged
Changes from 1 commit
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
d088bfb
Update some CICE variable names to clarify grid (#729)
apcraig Jul 15, 2022
1585c31
Add unit test for optional arguments, "optargs" (#730)
apcraig Jul 15, 2022
21bd95b
cice.setup: remove 'suite.jobs' at start of 'suite.submit' (#731)
phil-blain Jul 15, 2022
9be1c35
Deprecate CESM ponds (tr_pond_cesm) (#733)
dabail10 Jul 31, 2022
3af3d1b
Deprecate 0-layer thermodynamics in the CICE driver (#732)
eclare108213 Jul 31, 2022
c6470cf
Update icepack to 3cb1746a202615044e (#743)
apcraig Jul 31, 2022
063a7f2
Update cice.t-test.py to use cartopy instead of basemap. (#742)
apcraig Jul 31, 2022
731c61d
change visc_method default to avg_zeta, change alt07 to test avg_stre…
apcraig Aug 2, 2022
26db2c3
cice.setup: allow command line to override suite options (#745)
phil-blain Aug 2, 2022
5a1701c
Update Icepack and version number (#748)
apcraig Aug 4, 2022
08c6b33
ice_grid: do call 'gridbox_verts' for rectangular grids (#749)
phil-blain Aug 12, 2022
d673e44
Clean up code and add several minor features (#750)
apcraig Aug 15, 2022
75ef5d2
Update ECCC machine files (#751)
phil-blain Aug 17, 2022
fea412a
ice_calendar: zero-initialize 'nstreams' (#752)
phil-blain Aug 17, 2022
1f70caf
Merge remote-tracking branch 'Consortium/main' into feature/updcice
DeniseWorthen Aug 20, 2022
c87dcd3
Added dxgrow, dygrow to facilitate variable spaced grid. Modified rec…
daveh150 Aug 22, 2022
2d0b213
Update Pull Request Template, add question about updating Icepack (#754)
apcraig Aug 23, 2022
588a86f
Refactored evp sub cycling loop (#756)
TillRasmussen Aug 24, 2022
007fbff
ice_grid: initialize 'l_readCenter' for all grid types (#758)
phil-blain Aug 24, 2022
6587995
move deformation out of loop for B grid only (#755)
TillRasmussen Sep 22, 2022
6399af7
Update dEdd implementation (#760)
apcraig Sep 29, 2022
036f1f7
Update grid averaging for tmass, aice, uvelT, vvelT (#762)
apcraig Sep 29, 2022
422117f
doc: improve "Quick Start" section (#765)
phil-blain Oct 6, 2022
8c6ba04
Refactor strocnxT, strocnyT implementation (#764)
apcraig Oct 10, 2022
578c111
ice_init: do broadcast 'default_season' (#766)
phil-blain Oct 11, 2022
af8cc84
Correct units in FSD history output (#769)
lettie-roach Oct 11, 2022
6a62a11
Update box test options (#772)
apcraig Oct 14, 2022
0447b9e
Update computation of cdn_ocn for use in dynamics (#771)
apcraig Oct 14, 2022
2435fa7
Change icetmask to logical consistent with iceumask, icenmask, iceema…
apcraig Oct 17, 2022
16b78da
ice_dyn_vp: allow for bit-for-bit reproducibility under `bfbflag` (#774)
phil-blain Oct 20, 2022
db2d7a9
Update Narwhal Port (#776)
apcraig Oct 20, 2022
670d2f2
Add time-varying wave forcing, add warning for FSD without waves, mak…
lettie-roach Nov 1, 2022
3820cde
Port to gust intel and cray (#781)
apcraig Nov 1, 2022
d6d081a
Merge branch 'emc/develop' into feature/updcice
DeniseWorthen Nov 2, 2022
2e68b9e
Merge remote-tracking branch 'Consortium/main' into feature/updcice
DeniseWorthen Nov 2, 2022
b893ee9
add initializationsin ice_state
DeniseWorthen Nov 2, 2022
aa1e066
Update KE diagnostic (#784)
apcraig Nov 7, 2022
251ca48
Add wave-ice coupling to nuopc/cmeps driver (#782)
DeniseWorthen Nov 8, 2022
b11bfb4
Merge remote-tracking branch 'Consortium/main' into feature/updcice
DeniseWorthen Nov 8, 2022
5a32f12
finalize 0-layer thermo and cesm ponds deprecation in CICE (#787)
eclare108213 Nov 16, 2022
9808b51
CESM Updates (#785)
dabail10 Nov 16, 2022
fe16051
Merge remote-tracking branch 'Consortium/main' into feature/updcice
DeniseWorthen Nov 16, 2022
99daf69
allocate c and cd var in evp, reduce number of "if grid_ice". (#778)
TillRasmussen Nov 17, 2022
9104a8c
Rename cicedynB to cicedyn, update test suites (#790)
apcraig Nov 18, 2022
ed4855e
Update Icepack (#794)
apcraig Nov 19, 2022
cb58257
Trap solve_zsal = true at initialization (#795)
apcraig Nov 20, 2022
b16d7fd
Update Icepack to #5999551 including snowbrinebugs (#797)
apcraig Dec 2, 2022
90a8b62
Merge branch 'NOAA-EMC:emc/develop' into feature/updcice
DeniseWorthen Dec 6, 2022
ad8d577
Merge remote-tracking branch 'Consortium/main' into feature/updcice
DeniseWorthen Dec 6, 2022
4befa1e
Saltflux option for CICE (#799)
dabail10 Dec 7, 2022
48cf07a
Update stress12T calculation for C-grid (#802)
apcraig Dec 7, 2022
f813294
Update version to CICE 6.4.1 (#803)
apcraig Dec 7, 2022
eebb350
Adding method to check namelist in any order, tested with NAG Fortran…
daveh150 Dec 16, 2022
0bf0fdc
Fix OMP setup and 'setmask' (#806)
dabail10 Dec 17, 2022
ce2298e
Merge remote-tracking branch 'Consortium/main' into feature/updcice
DeniseWorthen Jan 4, 2023
ed472ab
fix for nudiag_set
DeniseWorthen Jan 9, 2023
506614d
Merge remote-tracking branch 'CICE-Consortium/main' into test
DeniseWorthen Jan 14, 2023
dd25b0f
Merge branch 'test' into feature/updcice
DeniseWorthen Jan 14, 2023
28fdbeb
Fix for rare instability in (probabilistic) seabed stress (#810)
JFLemieux73 Jan 19, 2023
b946a95
Some small CESM updates. (#812)
dabail10 Feb 1, 2023
d73bb8b
Add time_period_freq (#816)
dabail10 Mar 2, 2023
ee68d3f
Merge branch 'emc/develop' into feature/updcice
DeniseWorthen Mar 7, 2023
6671e32
Merge remote-tracking branch 'Consortium/main' into feature/updcice
DeniseWorthen Mar 7, 2023
0fcc140
doc, ice_history: correct units for 'sigP' and improve doc for stress…
phil-blain Mar 8, 2023
9a55ad9
cicecore: correct initial condition metadata (#818)
phil-blain Mar 13, 2023
75b792c
Add haloupdate unit test (#820)
apcraig Mar 13, 2023
03615e8
Update Icepack to #37e215b532 March 3, 2023 (#821)
apcraig Mar 14, 2023
adce222
update documentation (#822)
apcraig Mar 15, 2023
7df80ba
FSD updates for icepack. (#813)
dabail10 Mar 15, 2023
5840cd1
Merge remote-tracking branch 'Consortium/main' into feature/updcice
DeniseWorthen Mar 22, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
cicecore: correct initial condition metadata (CICE-Consortium#818)
* ice_history_write: fix initial condition metadata under 'hist_avg'

When writing averaged history outputs (hist_avg=.true.), this setting
also affects the initial condition. Even if the actual data variables
written to the initial condition are not averaged (they are taken
more or less directly from the restart or the hard-coded defaults,
modulo aggregation over categories), their attributes ('cell_method' and
'time_rep') imply they are averaged, and the 'bound' attribute of the
'time' variable refers to the 'time_bounds' variable.

Make the metadata of the initial condition more correct by:
- not writing the 'time_bounds' variable (and the corresponding 'd2' dimension)
- not writing the 'bounds' attribute of the 'time' variable
- not writing the 'cell_method' attributes of each variable
- writing the 'time_rep' attribute of each variable as 'instantaneous'
instead of 'averaged'.

Do this by checking 'write_ic' at all places where we check for the
value of 'hist_avg' to write the above variables and attributes in each
of the 3 IO backends (binary, netcdf, pio2).

* drivers/{nemo_concepts,standalone}: write initial condition at initial time

In CICE_InitMod::cice_init, we call ice_calendar::advance_timestep
before writing the initial condition, such that the 'time' variable in
the initial condition is not zero; it has a value of 1*dt (the model
time step). The initial condition filename also reflects this, since
'msec' (model seconds) also has a value of 1*dt and is used in
ice_history_shared::construct_filename. This leads to the initial
condition filename not corresponding to the model initialization
date/time but rather 1*dt later.

Since we call 'accum_hist' after initializing the forcing, any forcing
field written to the initial condition has values corresponding to
msec=dt, whereas the ice state corresponds to msec=0, leading to an
inconsistency.

Fix that by calling 'accum_hist' to write the initial condition _before_
calling 'advance_timestep'. Since we now call 'accum_hist' before
initializing the forcing, any forcing field written to the initial
condition have its default, hard-coded value, instead of its value at
time=dt. An improvement would be to read the forcing at time=dt, write
the initial condition, advance the time step, and read the forcing
again, but let's not complicate things too much for now.
phil-blain authored Mar 13, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 9a55ad9b71444e5600c517e687b5f5d641ee6dea
Original file line number Diff line number Diff line change
@@ -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) &
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
Original file line number Diff line number Diff line change
@@ -159,7 +159,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')
@@ -241,7 +241,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')
@@ -251,7 +251,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)
@@ -745,7 +745,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')
@@ -1236,7 +1236,7 @@ end subroutine ice_write_hist
subroutine ice_write_hist_attrs(ncid, varid, hfield, ns)

use ice_kinds_mod
use ice_calendar, only: histfreq, histfreq_n
use ice_calendar, only: histfreq, histfreq_n, write_ic
use ice_history_shared, only: ice_hist_field, history_precision, &
hist_avg
#ifdef USE_NETCDF
@@ -1279,7 +1279,7 @@ subroutine ice_write_hist_attrs(ncid, varid, hfield, ns)
call ice_write_hist_fill(ncid,varid,hfield%vname,history_precision)

! Add cell_methods attribute to variables if averaged
if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
if (TRIM(hfield%vname(1:4))/='sig1' &
.and.TRIM(hfield%vname(1:4))/='sig2' &
.and.TRIM(hfield%vname(1:9))/='sistreave' &
@@ -1293,6 +1293,7 @@ subroutine ice_write_hist_attrs(ncid, varid, hfield, ns)

if ((histfreq(ns) == '1' .and. histfreq_n(ns) == 1) &
.or..not. hist_avg &
.or. write_ic &
.or.TRIM(hfield%vname(1:4))=='divu' &
.or.TRIM(hfield%vname(1:5))=='shear' &
.or.TRIM(hfield%vname(1:4))=='sig1' &
13 changes: 7 additions & 6 deletions cicecore/cicedyn/infrastructure/io/io_pio2/ice_history_write.F90
Original file line number Diff line number Diff line change
@@ -195,7 +195,7 @@ subroutine ice_write_hist (ns)
! define dimensions
!-----------------------------------------------------------------

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

@@ -233,12 +233,12 @@ 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 = pio_put_att(File,varid,'bounds','time_bounds')
endif

! Define attributes for time_bounds if hist_avg is true
if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
dimid2(1) = boundid
dimid2(2) = timid
status = pio_def_var(File,'time_bounds',pio_double,dimid2,varid)
@@ -702,7 +702,7 @@ subroutine ice_write_hist (ns)
! write time_bounds info
!-----------------------------------------------------------------

if (hist_avg) then
if (hist_avg .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/)
@@ -1219,7 +1219,7 @@ end subroutine ice_write_hist
subroutine ice_write_hist_attrs(File, varid, hfield, ns)

use ice_kinds_mod
use ice_calendar, only: histfreq, histfreq_n
use ice_calendar, only: histfreq, histfreq_n, write_ic
use ice_history_shared, only: ice_hist_field, history_precision, &
hist_avg
use ice_pio
@@ -1250,7 +1250,7 @@ subroutine ice_write_hist_attrs(File, varid, hfield, ns)
call ice_write_hist_fill(File,varid,hfield%vname,history_precision)

! Add cell_methods attribute to variables if averaged
if (hist_avg) then
if (hist_avg .and. .not. write_ic) then
if (TRIM(hfield%vname(1:4))/='sig1' &
.and.TRIM(hfield%vname(1:4))/='sig2' &
.and.TRIM(hfield%vname(1:9))/='sistreave' &
@@ -1262,6 +1262,7 @@ subroutine ice_write_hist_attrs(File, varid, hfield, ns)

if ((histfreq(ns) == '1' .and. histfreq_n(ns) == 1) &
.or..not. hist_avg &
.or. write_ic &
.or.TRIM(hfield%vname(1:4))=='divu' &
.or.TRIM(hfield%vname(1:5))=='shear' &
.or.TRIM(hfield%vname(1:4))=='sig1' &
4 changes: 2 additions & 2 deletions cicecore/drivers/direct/nemo_concepts/CICE_InitMod.F90
Original file line number Diff line number Diff line change
@@ -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()

@@ -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

!=======================================================================
4 changes: 2 additions & 2 deletions cicecore/drivers/standalone/cice/CICE_InitMod.F90
Original file line number Diff line number Diff line change
@@ -199,6 +199,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
@@ -243,8 +245,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

if (my_task == master_task) then
call ice_memusage_print(nu_diag,subname//':end')
endif