Fix/excess ice cold start
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).
Also #2444 might be related
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.
- [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 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...
- [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 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.
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.