MOM5
MOM5 copied to clipboard
Add option to ignore salinity restoring limit
@russfiedler suggested we add an option to ignore max_delta_salinity_restore
in cases where the salinity falls outside some user defined limits.
This would involve changing line 4055 in ocean_sbc.F90 from
tmp_delta_salinity = sign(1.0,tmp_delta_salinity) &
*min(abs(tmp_delta_salinity),max_delta_salinity_restore)
to
if (T_prog(index_salt)%field(i,j,1,taum1) > salt_limit_lower .or . T_prog(index_salt)%field(i,j,1,taum1) < salt_limit_upper ) tmp_delta_salinity = sign(1.0,tmp_delta_salinity) &
*min(abs(tmp_delta_salinity),max_delta_salinity_restore)
salt_limit_lower ans salt_limit_upper would be namelist variable. Defaults would be, say, 0 and 100 in order to have no effect. This would allow strong restoration to kick in automatically when things get very fresh (Amazon, Russian rivers) while allowing weak restoration elsewhere.
Good idea.
Thanks @russfiedler.
Just so it is documented, @StephenGriffies had this to say:
The max salinity option was based on open ocean regions, largely in the Gulf Stream where we are unhappy about advecting too much fresh water into the deep water formation region. But for regions near boundaries and where salinity is going haywire, then we should over-ride the max salinity restore option.
Is it better to set absolute limits on when to limit the salinity restoring? Another option is to check for the absolute value difference between the restoring value and current value. So something like this:
if (tmp_delta_salinity < salt_restore_limit) &
tmp_delta_salinity = sign(1.0,tmp_delta_salinity) &
*min(abs(tmp_delta_salinity),max_delta_salinity_restore)
or would that affect the Gulf Stream too much @StephenGriffies. Can you recall how large the differences were in that region?
@aidanheerdegen I think that should be a check on abs(tmp_delta_salinity) < salt_restore_limit)
. I think I prefer explicit high and low limits as it allows more control and either one can effectively be ignored if required.
Yes you're right. Forgot the abs()
.
I have made the code changes you suggested, and checked they compiled. Can others take a look?
https://github.com/mom-ocean/MOM5/pull/204
Do we want to make a similar change when user_waterflux
is true?
The section we've added to is .NOT. (use_waterflux .and. .not. restore_as_salt_flux )
which is the same as restore_as_salt_flux .or. (.not. use_waterflux .and. .not. restore_as_salt_flux)
The second part of this condition in this form is irrelevant so it's really just restore_as_salt_flux
The other section of code is the odd case of adjusting the waterflux to reflect the salinity delta. You could make the change for completeness but I don't think anybody would choose that combination.
Fine.
So, has anyone got a nice fast 1 degree test case for this with salinity issues? @aekiss @nicjhan @AndyHoggANU
Playing catch-up this year. I believe the max_delta_salinity_restore = 0.5 was inspired by experience of Claus Boening (GEOMAR) to stop too much freshwater from the East Greenland Current flooding/inhibiting the convection in the Labrador Sea, and hence reducing AMOC strength.
That sounds right https://github.com/mom-ocean/MOM5/blob/d7ba13a3f364ce130b6ad0ba813f01832cada7a2/src/mom5/ocean_core/ocean_sbc.F90#L162-L169
Yep, that is correct, though it was Helge Drange who originally proposed the max restoring.