Add an option to be able to update ice concentration (from data assimilation or retrievals/products)#1060
Conversation
…restart_fh") via UFS configuration as for other components Part of ufs-community/ufs-weather-model#2348
|
Hi @sanAkel
|
@lbertino Glad to hear from you and thanks for chiming in.
This is great progress at your end! 🏆 👏 |
|
Checking if anything is pending on this PR: @apcraig ? |
|
The implementation looks pretty clean to me at this point. I appreciate the updates that were done and resuse of existing infrastructure. Thanks for all the earlier comments from others and all the work. The new subroutine, direct_insert_sic, does have a lot of hardwired logic. I'm not the right person to suggest what "science" parameters should become namelist. If there is consensus about what to do, that's great, maybe do it now. It could also come in as a separate PR. My only comment might be that insert_sic as a logical namelist might be limiting. Do we want to have a string instead of a logical, basically supporting multiple options via a single namelist. So false would be "none" or "off" and true would be "adjust_aice" or similar. "sic" isn't really a CICE term, but I'm OK using it if others like it, but maybe aice is the better term for CICE? And maybe the namelist could be "modify_restart" instead of "insert_sic" as well? So modify_restart = "adjust_aice" instead of insert_sic = .true. providing extensibility in the future? With the idea that we might have "adjust_aice_hi" or "adjust_aicev2" or other options later. It's better to implement flexible namelist now to avoid changing namelist later, especially if that namelist needs to be removed. The other thing is that maybe we want a namelist to specify the input file instead of hardwiring it in the code to 'sic.nc'. Maybe that namelist could be called "modify_restart_filename"? This is less critical because we could also add it later without any backwards compatibility issues. |
|
Thanks @apcraig for reviewing and suggestions.
👍
If other reviewers ( @TillRasmussen, @eclare108213 ?) also suggest same/similar, to move this PR along, (1) I can change the logical (still boolean flag, unless someone asks for otherwise):
(2) Instead of hard coded read of Please let me know if should proceed with (1) and (2)? |
|
I would like the logical namelist insert_sic to be changed to a character string. How about restart_modification with two valid options, "none" and "adjust_aice". This should be in the setup.nml. I'm OK if the other namelist options are deferred. We also need some documentation in the doc directory. At the very least, the new namelist needs to be added to the documentation. It would also be helpful to have a brief description of the implementation added somewhere. I could help make some of these changes and PR them to the sanAkel:alan_ssmi branch if that's helpful and others don't have time. |
@apcraig Appreciate the suggestions and offering to take a stab at it. Would you please go ahead and send me a PR? Thanks so much! |
- Rename insert_sic to restart_mod, char string - Add 'none', 'adjust_aice', and 'adjust_aice_test' restart_mod options - Update documentation, add data assimilation section - Add adjust_aice_test testcase
|
OK, I just submitted a PR to the alan_ssmi branch that updates the namelist input, adds a "test" mode, and updates the documentation. I added a section on data assimilation and the Posey reference, but if anyone wants to clarify/contribute to that documentation, that would be great. |
Thank you @apcraig I'll:
|
@apcraig Requesting a trivial update of your branch |
|
Thanks @sanAkel, will push an update today. I was thinking separately that the adjust_aice_test is rounding the aice to the nearest 1/100th. With your algorithm for adjusting aice, my guess is that a lot of the if blocks are not being used because the adjustment is too small? I'm going to test a rounding to the nearest 5/100ths. What's your general sense of 1/100th vs 5/100th vs something else you might recommend? |
@apcraig 5 percent is fine! Suspect 10/100 will be okay too- I did not test! But I guess you will while updating your branch? Overall, I'm working in a cycled data assimilation set up, so kind of hard to tell such subtle differences. |
Update rounding to 5/100th from 1/100th. Tested with the standalone gx3 case. One thing that is not tested with the adjust_aice_test option is adding sea ice where there was none originally.
|
OK, I pushed an update to sanAkel#3 with updated sic.nc filename and 5/100th rounding. adjust_aice_test works in standlone mode with 5/100. If you can confirm adjust_aice (using sic.nc) works, that would be great. Thanks. |
Update insert_sic feature
Thanks @apcraig
Already tested it with |
apcraig
left a comment
There was a problem hiding this comment.
I ran several tests and everything looks good. Thanks!
|
I will merge this week unless I hear some other feedback. |
Thank you @apcraig and @TillRasmussen for your help that improved this feature. Merging it will keep our system move forward once @NickSzapiro-NOAA syncs our fork. |
…ilation or retrievals/products) (CICE-Consortium#1060) Add an option to be able to update ice concentration (from data assimilation or retrievals/products) at restart. - This feature is being ported from CICE4, that is used in RTOFS: - We use the sea ice concentration from data assimilation (DA), performed using RTOFS-DA. - In this (CICE6) version usage is turned ON (default: OFF) via restart_mod="adjust_aice". - See similar/same implementation in the old (CICE4) version of ice_restart.F90, search for insert_ssmi. - @awallcraft ported the code he wrote (and is used in CICE4) to CICE6. - This PR was originally sent to the NOAA-EMC/CICE fork and following @NickSzapiro-NOAA's recommendation, being redirected here; that PR is now closed. - All the comments and conversations (@NickSzapiro-NOAA and @awallcraft) can be read via NOAA-EMC#104, however, for the sake of self-completeness A brief text/description follows: One of the main goals of a data assimilation (DA)/prediction system that strives to provide close to observed sea ice concentrations and ice edge is to be able to reconcile the differences in modeled and observed sea ice concentrations derived from space borne instruments. Posey et al., 2025 implemented such a method with CICE4, it is hereby ported to CICE6. By default this feature is turned OFF. To turn it ON, set restart_mod='adjust_aice' in ice_in (input) namelist file and provide sic.nc to be able to nudge the modeled ice concentration to that from data assimilated (or observed) concentration. By default, restart_mod='none'. There is also a test mode, restart_mod='adjust_aice_test' which modifies aice read on restart to the nearest 5/100ths just to test the algorithm. - With this proposed addition, an ability to insert data assimilated sea ice concentration is provided. Implementation is similar/same as in CICE4; see https://github.com/NOAA-EMC/RTOFS_GLO/blob/develop/sorc/rtofs_hycom.fd/src_2.2.99DHMTi-dist2B_relo_cice_v4.0e/source/ice_restart.F90 ; search for insert_ssmi. @awallcraft ported the code he wrote (and is used in CICE4) to CICE6. - There is an acknowledgement that the coupler and/or MOM6 will need some modifications, but that is beyond the scope of this (CICE) repository. Such work will be taken up in future. Co-authored-by: Nicholas Szapiro <149816583+NickSzapiro-NOAA@users.noreply.github.com> Co-authored-by: Nick Szapiro <Nick.Szapiro@noaa.gov> Co-authored-by: Till Rasmussen <tar@dmi.dk> Co-authored-by: apcraig <anthony.p.craig@gmail.com>
…ilation or retrievals/products) (CICE-Consortium#1060) Add an option to be able to update ice concentration (from data assimilation or retrievals/products) at restart. - This feature is being ported from CICE4, that is used in RTOFS: - We use the sea ice concentration from data assimilation (DA), performed using RTOFS-DA. - In this (CICE6) version usage is turned ON (default: OFF) via restart_mod="adjust_aice". - See similar/same implementation in the old (CICE4) version of ice_restart.F90, search for insert_ssmi. - @awallcraft ported the code he wrote (and is used in CICE4) to CICE6. - This PR was originally sent to the NOAA-EMC/CICE fork and following @NickSzapiro-NOAA's recommendation, being redirected here; that PR is now closed. - All the comments and conversations (@NickSzapiro-NOAA and @awallcraft) can be read via NOAA-EMC#104, however, for the sake of self-completeness A brief text/description follows: One of the main goals of a data assimilation (DA)/prediction system that strives to provide close to observed sea ice concentrations and ice edge is to be able to reconcile the differences in modeled and observed sea ice concentrations derived from space borne instruments. Posey et al., 2025 implemented such a method with CICE4, it is hereby ported to CICE6. By default this feature is turned OFF. To turn it ON, set restart_mod='adjust_aice' in ice_in (input) namelist file and provide sic.nc to be able to nudge the modeled ice concentration to that from data assimilated (or observed) concentration. By default, restart_mod='none'. There is also a test mode, restart_mod='adjust_aice_test' which modifies aice read on restart to the nearest 5/100ths just to test the algorithm. - With this proposed addition, an ability to insert data assimilated sea ice concentration is provided. Implementation is similar/same as in CICE4; see https://github.com/NOAA-EMC/RTOFS_GLO/blob/develop/sorc/rtofs_hycom.fd/src_2.2.99DHMTi-dist2B_relo_cice_v4.0e/source/ice_restart.F90 ; search for insert_ssmi. @awallcraft ported the code he wrote (and is used in CICE4) to CICE6. - There is an acknowledgement that the coupler and/or MOM6 will need some modifications, but that is beyond the scope of this (CICE) repository. Such work will be taken up in future. Co-authored-by: Nicholas Szapiro <149816583+NickSzapiro-NOAA@users.noreply.github.com> Co-authored-by: Nick Szapiro <Nick.Szapiro@noaa.gov> Co-authored-by: Till Rasmussen <tar@dmi.dk> Co-authored-by: apcraig <anthony.p.craig@gmail.com>
…ilation or retrievals/products) (CICE-Consortium#1060) Add an option to be able to update ice concentration (from data assimilation or retrievals/products) at restart. - This feature is being ported from CICE4, that is used in RTOFS: - We use the sea ice concentration from data assimilation (DA), performed using RTOFS-DA. - In this (CICE6) version usage is turned ON (default: OFF) via restart_mod="adjust_aice". - See similar/same implementation in the old (CICE4) version of ice_restart.F90, search for insert_ssmi. - @awallcraft ported the code he wrote (and is used in CICE4) to CICE6. - This PR was originally sent to the NOAA-EMC/CICE fork and following @NickSzapiro-NOAA's recommendation, being redirected here; that PR is now closed. - All the comments and conversations (@NickSzapiro-NOAA and @awallcraft) can be read via NOAA-EMC#104, however, for the sake of self-completeness A brief text/description follows: One of the main goals of a data assimilation (DA)/prediction system that strives to provide close to observed sea ice concentrations and ice edge is to be able to reconcile the differences in modeled and observed sea ice concentrations derived from space borne instruments. Posey et al., 2025 implemented such a method with CICE4, it is hereby ported to CICE6. By default this feature is turned OFF. To turn it ON, set restart_mod='adjust_aice' in ice_in (input) namelist file and provide sic.nc to be able to nudge the modeled ice concentration to that from data assimilated (or observed) concentration. By default, restart_mod='none'. There is also a test mode, restart_mod='adjust_aice_test' which modifies aice read on restart to the nearest 5/100ths just to test the algorithm. - With this proposed addition, an ability to insert data assimilated sea ice concentration is provided. Implementation is similar/same as in CICE4; see https://github.com/NOAA-EMC/RTOFS_GLO/blob/develop/sorc/rtofs_hycom.fd/src_2.2.99DHMTi-dist2B_relo_cice_v4.0e/source/ice_restart.F90 ; search for insert_ssmi. @awallcraft ported the code he wrote (and is used in CICE4) to CICE6. - There is an acknowledgement that the coupler and/or MOM6 will need some modifications, but that is beyond the scope of this (CICE) repository. Such work will be taken up in future. Co-authored-by: Nicholas Szapiro <149816583+NickSzapiro-NOAA@users.noreply.github.com> Co-authored-by: Nick Szapiro <Nick.Szapiro@noaa.gov> Co-authored-by: Till Rasmussen <tar@dmi.dk> Co-authored-by: apcraig <anthony.p.craig@gmail.com>
…ilation or retrievals/products) (CICE-Consortium#1060) Add an option to be able to update ice concentration (from data assimilation or retrievals/products) at restart. - This feature is being ported from CICE4, that is used in RTOFS: - We use the sea ice concentration from data assimilation (DA), performed using RTOFS-DA. - In this (CICE6) version usage is turned ON (default: OFF) via restart_mod="adjust_aice". - See similar/same implementation in the old (CICE4) version of ice_restart.F90, search for insert_ssmi. - @awallcraft ported the code he wrote (and is used in CICE4) to CICE6. - This PR was originally sent to the NOAA-EMC/CICE fork and following @NickSzapiro-NOAA's recommendation, being redirected here; that PR is now closed. - All the comments and conversations (@NickSzapiro-NOAA and @awallcraft) can be read via NOAA-EMC#104, however, for the sake of self-completeness A brief text/description follows: One of the main goals of a data assimilation (DA)/prediction system that strives to provide close to observed sea ice concentrations and ice edge is to be able to reconcile the differences in modeled and observed sea ice concentrations derived from space borne instruments. Posey et al., 2025 implemented such a method with CICE4, it is hereby ported to CICE6. By default this feature is turned OFF. To turn it ON, set restart_mod='adjust_aice' in ice_in (input) namelist file and provide sic.nc to be able to nudge the modeled ice concentration to that from data assimilated (or observed) concentration. By default, restart_mod='none'. There is also a test mode, restart_mod='adjust_aice_test' which modifies aice read on restart to the nearest 5/100ths just to test the algorithm. - With this proposed addition, an ability to insert data assimilated sea ice concentration is provided. Implementation is similar/same as in CICE4; see https://github.com/NOAA-EMC/RTOFS_GLO/blob/develop/sorc/rtofs_hycom.fd/src_2.2.99DHMTi-dist2B_relo_cice_v4.0e/source/ice_restart.F90 ; search for insert_ssmi. @awallcraft ported the code he wrote (and is used in CICE4) to CICE6. - There is an acknowledgement that the coupler and/or MOM6 will need some modifications, but that is beyond the scope of this (CICE) repository. Such work will be taken up in future. Co-authored-by: Nicholas Szapiro <149816583+NickSzapiro-NOAA@users.noreply.github.com> Co-authored-by: Nick Szapiro <Nick.Szapiro@noaa.gov> Co-authored-by: Till Rasmussen <tar@dmi.dk> Co-authored-by: apcraig <anthony.p.craig@gmail.com>
| ! --- remove part of this category | ||
| q = (aicen(i,j,n,iblk) - aice_i) & | ||
| /aicen(i,j,n,iblk) !<1 | ||
| aice_i = c0 | ||
|
|
||
| ! reduce aicen, vicen, vsnon by q | ||
| ! do not alter Tsfc since there is already | ||
| ! ice here. | ||
| aicen(i,j,n,iblk) = q*aicen(i,j,n,iblk) | ||
| vicen(i,j,n,iblk) = q*vicen(i,j,n,iblk) | ||
| vsnon(i,j,n,iblk) = q*vsnon(i,j,n,iblk) | ||
| endif ! aice_i.gt.p001 and aice_i.lt.aicen | ||
| enddo ! n | ||
| endif ! aice_o.lt.p01 |
There was a problem hiding this comment.
Here aicen, vicen, vsnon are rescaled to match the target concentration
Are there (extensive?) CICE thermodynamic and tracer variables that depend on concentration/volume/... that should rescale too? @eclare108213 @apcraig @dabail10 ?
https://cice-consortium-cice.readthedocs.io/en/main/science_guide/sg_fundvars.html
https://cice-consortium-cice.readthedocs.io/en/main/developer_guide/dg_other.html#averages
I don't think they are, if I understand
There was a problem hiding this comment.
Especially as
- This option is intended to be used in RTOFS.v3
- Similar code exists on DA side in GFS.v17 in soca2cice prior_dist_rescale
There was a problem hiding this comment.
RTOFS at this point (as in v3.0- when it gets implemented) has no connection whatsoever to anything from github.com/JCSDA
Please let's leave this conversation at that.
For detailed information about submitting Pull Requests (PRs) to the CICE-Consortium,
please refer to: https://github.com/CICE-Consortium/About-Us/wiki/Resource-Index#information-for-developers
PR checklist
This feature is being ported from CICE4, that is used in RTOFS:
ON(default:OFF) via a logical:insert_sicvariable.insert_ssmi.A brief text/description follows:
One of the main goals of a data assimilation (DA)/prediction system that strives to provide close to observed sea ice concentrations and ice edge is to be able to reconcile the differences in modeled and observed sea ice concentrations derived from space borne instruments. Posey et al., 2025 implemented such a method with CICE4, it is hereby ported to CICE6. By default this feature is turned
OFF. To turn itON, setinsert_sicto.true.inice_in(input) namelist file and providesic.ncto be able to nudge the modeled ice concentration to that from data assimilated (or observed) concentration.Developer(s):
@awallcraft
Suggest PR reviewers from list in the column to the right.
I'm unable to do that. Alerting @apcraig for his help.
Please copy the PR test results link or provide a summary of testing completed below.
Tested against the
developbranch of the NOAA-EMC CICE fork: https://github.com/NOAA-EMC/CICE.gitTest was
datm_cdeps_mx025_gefs. At orion/hercules, paths:developbranch):/work/noaa/stmp/santa/stmp/santa/FV3_RT/rt_3352132/datm_cdeps_mx025_gefs_intel/BASL/sanAkel:alan_ssmibranch, i.e., this PR) withinsert_sic= .false.:/work/noaa/stmp/santa/stmp/santa/FV3_RT/rt_3352132/datm_cdeps_mx025_gefs_intel/CTRLinsert_sic= .true.):/work/noaa/stmp/santa/stmp/santa/FV3_RT/rt_3352132/datm_cdeps_mx025_gefs_intel/EXPResults:
RESTART/iced.2011-10-02-00000.nc.How much do the PR code changes differ from the unmodified code?
Does this PR create or have dependencies on Icepack or any other models?
Does this PR update the Icepack submodule? If so, the Icepack submodule must point to a hash on Icepack's main branch.
Does this PR add any new test cases?
Is the documentation being updated? ("Documentation" includes information on the wiki or in the .rst files from doc/source/, which are used to create the online technical docs at https://readthedocs.org/projects/cice-consortium-cice/. A test build of the technical docs will be performed as part of the PR testing.)
Please document the changes in detail, including why the changes are made. This will become part of the PR commit log.
Further details on results:
1-day.insert_sicRemarks:
insert_ssmi. @awallcraft ported the code he wrote (and is used in CICE4) to CICE6.