NOAA-GFDL / SIS2

NOAA-GFDL's Sea Ice Simulator version 2
Other
16 stars 43 forks source link

SIS2: +(*)Add sea ice initialization options #119

Closed Hallberg-NOAA closed 4 years ago

Hallberg-NOAA commented 4 years ago

This group of commits adds several new options for initializing the state of the sea ice, refactors related parts of the code for simplicity or cleanliness, and makes a public interface more consistent with other SIS2 code. There are some atypical configurations in which answers could change at roundoff due to changing order of arithmetic. All answers in the MOM6-examples test cases are bitwise identical, and there are new entries in the SIS_parameter_doc files. The commits in this PR include:

kshedstrom commented 4 years ago

I approve this PR - heck, I asked for it!

kshedstrom commented 4 years ago

I should add that although this appears to work when providing an ice thickness and concentration, an hour into the run I have very little ice and it is growing hour by hour, as if I started with none. I could see non-zero ice during initialization in the debugger.

kshedstrom commented 4 years ago

Never mind, wrong units in my file. Just off by a factor of 900.

Hallberg-NOAA commented 4 years ago

This PR currently offers a rescaling factor for salinity (e.g., so that ocean salinity can be easily used to roughly convert to sea ice salinity by rescaling by a factor of order 1/7). @kshedstrom, would you like to see runtime rescaling factors for the other variables that are read from files? (Although if we did this, I would not suggest setting the default to be a factor of 900!) Probably the best approach if this is desired would be by following this PR up with another PR.

kshedstrom commented 4 years ago

You should probably change ARCTIC to ANTARCTIC here:

call get_param(PF, mdl, "ARCTIC_ICE_EDGE_IC", Antarctic_ice_edge, & "The northern latitude of Antarctic ice in an initial condition.", & default=-91.0, units="degrees of latitude", do_not_log=just_read)

I'm not out of the woods on the initialization attempts, but will explore more next.

kshedstrom commented 4 years ago

OK, the initialization works. Then in SIS2_thermodynamics in a loop ending at SIS_slow_thermo.F90L#1016, all the ice is eaten.

Hallberg-NOAA commented 4 years ago

How did you initialize the sea-ice temperature?

As currently written, the default is to use a uniform temperature of 0 C, which is above freezing so it all melts. I could change the default to -4 C or something else that is sure to be below the freezing point, at which point the ice would stick around and might make more physical sense, but this would violation one of @adcroft's guidelines discouraging the use of arbitrary dimensional default values. It also preserves a pre-existing default value that could come into play when the ice initial conditions are being set via data_override. 0 C is not very physical, but at least it is not arbitrary! @adcroft and @kshedstrom, do you have a strong feeling about this default ice temperature?

kshedstrom commented 4 years ago

Thanks, yes, but you need this too:

diff --git a/src/SIS_state_initialization.F90 b/src/SIS_state_initialization.F90
index 2217716..264d4b1 100644
--- a/src/SIS_state_initialization.F90
+++ b/src/SIS_state_initialization.F90
@@ -284,7 +284,7 @@ subroutine ice_state_thermo_init(IST, Ice, G, IG, US, PF, init_Time, just_read_p
             " \t\t specified depression below the bulk ice freezing point \n"//&
             " \t file - Read sea ice temperatures or enthalpies from a specified file \n"//&
             " \t data_override - use the data_override capability or freezing enthalpy everywhere.", &
-            default='uniform', do_not_log=just_read)
+            default='uniform_temp', do_not_log=just_read)

   call get_param(PF, mdl, "SNOW_ENTHALPY_INIT_CONFIG", enth_snow_config, &
             "A string that determines how the snow enthalpy is initialized for a new run: \n"//&
@@ -293,7 +293,7 @@ subroutine ice_state_thermo_init(IST, Ice, G, IG, US, PF, init_Time, just_read_p
             " \t\t specified depression below the bulk ice freezing point \n"//&
             " \t file - Read sea ice temperatures or enthalpies from a specified file \n"//&
             " \t data_override - use the data_override capability or freezing enthalpy everywhere.", &
-            default='uniform', do_not_log=just_read)
+            default='uniform_temp', do_not_log=just_read)

   call get_param(PF, mdl, "ICE_BULK_SALINITY", ice_bulk_salin, &
                  "The fixed bulk salinity of sea ice.", units = "g/kg", &

or else it doesn't even look for temperature. As for 0 C, it seems arbitrary from a Kelvin perspective...

Then Alistair's makefile doesn't rebuild on changes to SIS2.

Hallberg-NOAA commented 4 years ago

Thanks for the suggested corrections, @kshedstrom, the recent update to this PR should have implemented them.