CTSM icon indicating copy to clipboard operation
CTSM copied to clipboard

Fix/excess ice cold start

Open mvdebolskiy opened this issue 1 year ago • 1 comments

Description of changes

Changed the way soil temperature is initialized when excess ice is on and the model starts from cold.

Specific notes

Added 2 parameters: excess_ice_coldstart_depth and excess_ice_coldstart_temp which control top depth and soil temperature for soil layers in columns where excess ice is present. Other columns get their default soil temperature.

excessicestream_type has been taken out of waterstate_type and its routines are called directly in clm_inst%Init. Checks for UseExcessIceStreams() are still in place in WaterStateType.F90 for double-checking.

Contributors other than yourself, if any:

CTSM Issues Fixed (include github issue #):

#2384 #2373

Are answers expected to change (and if so in what way)?

Yes. Anything that depends on deep soil temperature will be different.

Any User Interface Changes (namelist or namelist defaults changes)?

Two namelist variables are added to clm_inparm group: excess_ice_coldstart_depth and excess_ice_coldstart_temp . Their default values are 0.5m and -2.15 deg C.

Testing performed, if any: (List what testing you did to show your changes worked as expected) (This can be manual testing or running of the different test suites) (Documentation on system testing is here: https://github.com/ESCOMP/ctsm/wiki/System-Testing-Guide) (aux_clm on cheyenne for intel/gnu and izumi for intel/gnu/nag/pgi is the standard for tags on master)

Manually tested with coldstart and restart runs with I2000Clm51BgcCrop on derecho and betzy.

NOTE: Be sure to check your coding style against the standard (https://github.com/ESCOMP/ctsm/wiki/CTSM-coding-guidelines) and review the list of common problems to watch out for (https://github.com/ESCOMP/CTSM/wiki/List-of-common-problems).

mvdebolskiy avatar Apr 11 '24 13:04 mvdebolskiy

Also #2444 might be related

mvdebolskiy avatar Apr 11 '24 17:04 mvdebolskiy

Here are results from I2000Clm60BgcCrop simulations from coldstart: Given that the forcing gets stuck at 2015 for the rest of the run, it seems reasonable, though the initial temperatures can be lowered a little.

exice2000 tsoi2000 exice2100 tsoi2100

mvdebolskiy avatar Jul 15 '24 15:07 mvdebolskiy

  • [x] add readNamelist subroutine into TemperatureMod and get rid of global clm_varctl declarations.
  • [x] Add endrun to WaterState, so the model stops if there is excess ice on the restart file but the use_excess_ice is set to false.

mvdebolskiy avatar Jul 16 '24 16:07 mvdebolskiy

@mvdebolskiy and I talked about the procedure to bring this in. He's not up to making tags himself at this point. So I'll work with him on it. Right now he's going to run some excess ice tests on Derecho to make sure it's working correctly. Then I'll run aux_clm tests for Derecho and Izumi and point him to issues to fix.

This does change answers. But, we actually could make it bit-for-bit by setting the new namelist values appropriately. So that should be something we think about.

I do want to teach him to run aux_clm and create baselines on Derecho. But, we'll take that one step at a time...

ekluzek avatar Jul 16 '24 17:07 ekluzek

  • [x] Figure out a name for the new namelist that will be in TemperatureType

Added clm_temperature_inparm group (for future handling of other coldstart temperature vars)

  • [x] Add a ReadNML subroutine to TemperatureType, with the new namelist variables in it.

Added. Made NLFilename to be optional for unittests to be happy.

  • [x] Make sure PF unit tests work (do what the README file in the "src" directory says on Derecho

Ran ../cime/scripts/fortran_unit_testing/run_tests.py --build-dir unit_tests.temp : 100% tests passed, 0 tests failed out of 52

  • [x] Check the values of the new namelist items to make sure they are valid

Checked both in CLMBuildNamelist.pm and in TemperatureType%InitCold

  • [x] Think about changing the name of exice_init_stream_col

Changed to excie_init_conc_col

Added a warning (instead of endrun) when starting with use_excess_ice=.false. from initial conditions that have it. Note, simple flag=read would not work, since there is a call with write and define before (for init_interp) purposes, though the RestartExcessIceIssue helped.

New baseline on izumi: /home/mvdebolskiy/bl/fix-excess-ice/ERS_D.f10_f10_mg37.I1850Clm60Sp.izumi_nag.clm-ExcessIceStreams

mvdebolskiy avatar Jul 23 '24 18:07 mvdebolskiy

@mvdebolskiy I'm planning on doing the following things to finish out the tag. Just FYI, unless you want to comment or contribute:

  • [x] Add some build-namelist unit tests for the new excess ice error conditions
  • [x] Make sure the build-namelist changes are solid, if not and easy go ahead and fix, otherwise file an issue
  • [x] Make sure we have the needed tests on Derecho for excess ice, if not add one
  • [x] Update to ctsm5.2.017
  • [x] Close all the conversations
  • [x] Take a stab at creating the ChangeLog for ctsm5.2.018 (have @mvdebolskiy review and vet)
  • [x] Run baselines for Derecho and Izumi for ctsm5.2.018
  • [x] Finalize the tag as normal

If any problems crop up, I'll consult with you and get a fix in and/or file an issue to fix later.

ekluzek avatar Jul 30 '24 17:07 ekluzek

Baselines look as expected on Derecho and Izumi. Izumi shows differences for ERS_D.f10_f10_mg37.I1850Clm60Sp.izumi_nag.clm-ExcessIceStreams that are significant, and this is without a cold-start. Which we think shouldn't show differences. So we are investigating.

I'll also run SMS_Lm12.f09_f09_mg17.I1850Clm60Sp.derecho_intel.clm-ExcessIceStartup_output_sp_exice on Derecho, creating a baseline for ctsm5.2.017 to check what happens there.

ekluzek avatar Aug 01 '24 17:08 ekluzek