-
Notifications
You must be signed in to change notification settings - Fork 278
reset first-guess ice/snow surface temperature to celsius2k #490
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
of previous value of TICES for solve4temp.
|
@ifenty great! There are a few things to think about:
|
- move computation of precip as snow or rain over ice to after calling seaice_solve4temp - replace TICES by ticeMultOut, add storing ticeMultOut, remove storing TICES - still update TICES, because it may be needed down the stretch (e.g. in s/r cost_ice_test)
|
I added the label "work in progress" which has similar meaning as "draft" as far as I know. |
|
Miraculously, resetting |
ifenty
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if ticeMultIn is set to celsius2k as first-guess and is updated to the EBM temperature after solve4temp, do we even need both ticeMultIn and ticeMultOut? maybe just a single ticeMult that is updated in solve4temp?
Also, can you @mjlosch explain what is the difference between kind=isbyte and byte =isbyte ?
I guess the larger question is do we need to carry around the ice/snow surface temperature outside of seaice_growth_adx? it doesn't play any role in seaice_reg_ridge (e.g., sea-ice viscosity is not a function of surface temperature) or anywhere else besides being a diagnostic variable. |
it's the same, but "byte" is deprecated.
I agree, but that's even independent of TICES.
There's still "seaice_growth.F" which requires (so far) that this field is available, and in "cost_test_ice.F", we also need this as a global field. That's why I suggested a CPP flag: if we use this new method, TICES doesn't need to be in the pickup. The it's only needed in the pickup, as a diagnostics (which could be done locally in seaice_growth_adx, although this implies a staggering in time with respect to HEFF, etc.) and in "cost_ice_test.F" |
@mjlosch Oh, yes. another reason to carry TICES is so that ice/snow surface temperature can be used as a cost term. We should just set TICES equal to ticeMultOut after solve4temp. |
|
@ifenty I turned this into a draft to make it clear that we are still working on this. There are few things to sort out, some of the points are repeated from a previous post.
I propose this:
The intended outcome is that we break the dependency of TICES across the time loop cycles, with minimal impact on the results; this will help move PR #468 forward. TICES is still there as a global diagnostics to be used in any cost function that we want to have. We keep it in the pickups for now (although not necessary, alternatively we could have a CPP flag SEAICE_TICES_IN_PICKUPS or so). @jm-c what do you think about this plan? |
|
@ifenty I just realised in a different context that MITgcm/pkg/seaice/seaice_solve4temp.F Line 247 in a887215
MITgcm/pkg/seaice/seaice_solve4temp.F Lines 295 to 301 in a887215
This means that setting |
|
@mjlosch I looked at the code and see the issue that you are raising. What if we allowed the albedo (and thereby the absorbedSW) to change within the iterations? We could start the iterations with the surface temperature set to 0 Celsius (melting condition) with its corresponding melting condition albedo. Then if the surface temperature in a later iteration changed to be <0 C, the albedo would change to its freezing condition value. from that iteration on, we would be in the same situation as if we had inherited the 'melting or freezing' condition information from the last iteration of TICES. Perhaps another way of doing solving this problem is to have a single, trial iteration starting from T=0. If the new T is < 0 then we can say that the surface albedo has to be from a freezing condition and then proceed with the iterations without allowing albedos to change. Doing that would only make sense if the iterative temperature updates never switched directions (i.e., never went from 0, to <0, then back up to >=0). What do you think? |
|
@ifenty I also thought about including the albedos in the iterative loop. I foresee that this may jeopardise convergence as it adds (non-smooth) nonlinearity. Are you willing to test this? This second option appears to much of a hack to me, but again, one can give it a try. |
|
@mjlosch Sure, I can test it out. My intuition is that if we always start from a melting condition (Tsurf = 0C) then we'll be OK. |
|
@ifenty should we pursue this PR any further, especially in the light of the dependence of the albedos on TICES? |
|
@ifenty This is just a measure of the effect of incorrect albedo computations in this branch. I compared a pair of 3-year runs using this branch and the master branch. This branch has a slightly larger sea-ice concentration cost (by 4%) than the master branch. |
if SEAICE_USE_GROWTH_ADX is defined
|
@owang01 thanks for checking. I added the albedo computation into the iteration loop. If @ifenty is right, this should bring down your cost again and the differences between this branch and the default will be minimal. But I think we also need to check the differences in long forward integrations (O(100y)). |
|
@mjlosch Thank you for implementing this. As I mentioned in Monday's meeting, @ifenty and I are also implementing something to solve the albedo computation. See https://github.com/owang01/MITgcm/tree/tices_reset_in_seaice_growth_adx. A three-year forward run with our implementation has almost the same sea-ice concentration cost (increase by 0.04%) as the master branch. The way how it is implemented is as follows. We start using dry albedo for the iterations. During the iterations, if the sea ice surface temperature (tsurfLoc) is ever warmer than melting temperature, we set a switch (tsurfabovemelt as a function of i,j) to TRUE. After the iterations, if the switch tsurfabovemelt == FALSE, we will continue using dry albedo. Otherwise, we use wet albedo and compute absorbedSW, IcePenetSW, and F_ia based on wet albedo. So the fluxes would be consistent with the albedo we are using. We are also doing a pair of 28-year forward runs again the master branch to see how large sea-ice would differ. |
|
For 28-year runs, the sea-ice concentration cost difference between this branch and master is < 1% . (As pointed out by Martin, sea-ice concentration cost may not be a good matrix for testing the implementation). @mjlosch https://github.com/owang01/MITgcm/tree/tices_reset_in_seaice_growth_adx has the latest modification to seaice_solve4temp.F we implemented. |
current behavior is for seaice solve4temp to start its iterative search with the last value of TICES. In this version the model starts with celsius2k instead. The reason for the change is to simplify the adjoint. @mjlosch suggested that we try this edit.