Conversation
…onductive flux limits to CM2
Co-authored-by: Kieran Ricardo <u5824685@anu.edu.au>
|
hey @anton-seaice, can you give this a look over before I make a PR into the CICE-consortium icepack? 👀 |
anton-seaice
left a comment
There was a problem hiding this comment.
I will look properly, but i think split this into two changes, one for hs_min and one for the cap_fluxes stuff
|
@anton-seaice yeah good point, I've remove the hs_min configurable stuff now |
anton-seaice
left a comment
There was a problem hiding this comment.
In general - are these changes due to undiscovered issues with the way the UM -> CICE coupling works? Or are these changes unavoidable ? Well need to have a good justification to get these into the consortium repo
(Oh and some extra notes in the documentation_
columnphysics/icepack_flux.F90
Outdated
| character(len=*),parameter :: subname='(set_sfcflux)' | ||
|
|
||
| raicen = c1 | ||
| raicen = c1 / aicen |
There was a problem hiding this comment.
So this is the same as line 360 now?
The comment says (When in standalone mode, fluxes ! are input as per ice area.) does that mean there is a standalone icepack using this subroutine, or the comment is out of date ?
There was a problem hiding this comment.
I've changed this to use an #idfef(ACCESS3_CICE) (which is now defined in CICE)
|
|
||
| real (kind=dbl_kind) :: fcondtopn_solve | ||
|
|
||
| real (kind=dbl_kind), parameter :: ratio_Wm2_m = 1000.0, cold_temp_flag = c0 - 60.0 |
There was a problem hiding this comment.
I guess we should put these in icepack_parameter.F90 , and add them to icepack_init_parameters
|
|
||
| !======================================================================= | ||
|
|
||
| function cap_conductive_flux(nilyr, nslyr, fcondtopn, hin, zTsn, zTin, hslyr) result(fcondtopn_solve) |
There was a problem hiding this comment.
should this be a subroutine? is there a particular reason to have a function ?
There was a problem hiding this comment.
this just returns a single float, so a function felt cleaner to me here.
|
|
||
| else ! ktherm | ||
| fcondtopn_solve = cap_conductive_flux(nilyr, nslyr, fcondtopn, hin, zTsn, zTin, hslyr) | ||
| fcondtopn_extra = fcondtopn - fcondtopn_solve |
There was a problem hiding this comment.
Does this need an if ( .not. calc_Tsfc ) ?
If CICE is internally calculating the conductive flux then there is hopefully no issue that would mean the flux needs capping ?
There was a problem hiding this comment.
good catch. this shouldn't be doing anything if calc_Tsfc=true bc fcondtop will be calculated in the following routine, but we should be needlessly capping a flux that potentially isn't even defined.
| !======================================================================= | ||
|
|
||
| function cap_conductive_flux(nilyr, nslyr, fcondtopn, hin, zTsn, zTin, hslyr) result(fcondtopn_solve) | ||
|
|
There was a problem hiding this comment.
This will need a description of some form
Co-authored-by: Anton Steketee <79179784+anton-seaice@users.noreply.github.com>
|
@anton-seaice nah these issues have been known for a long time, and CM2 actually had these same changes. If the fluxes are too large, then the ice can keep going above the melting point, and resetting infinitely - never converging! These code changes basically reduce the conductive flux if this happens, and pass the extra energy to the ocean. There's some mention of this in the Icepack documentation, e.g. second paragraph here: https://cice-consortium-icepack.readthedocs.io/en/main/science_guide/sg_boundary_forcing.html And towards of this section here: https://cice-consortium-icepack.readthedocs.io/en/main/science_guide/sg_thermo.html#bitz-and-lipscomb-thermodynamics-ktherm-1 |
|
This looks good Kieran - feel free to submit upstream, where I expect there will be some questions about the details. I can run the Icepack repro tests after a first review. Note that this is already covered in the documentation - and give it a clear description (e.g. something like ("Cap effective conductive when |
| ! Alex West: return this energy to the ocean | ||
|
|
||
| dqmat_sn = (zTsn(k)*cp_ice - Lfresh)*rhos - zqsn(k) | ||
|
|
||
| ! Alex West: If this is the second time in succession that Tsn(1) has been | ||
| ! reset, tell the solver to reduce the forcing at the top, and | ||
| ! pass the difference to the array enum where it will eventually | ||
| ! go into the ocean | ||
| ! This is done to avoid an 'infinite loop' whereby temp continually evolves | ||
| ! to the same point above zero, is reset, ad infinitum |
There was a problem hiding this comment.
This will need a neater comment as well
For detailed information about submitting Pull Requests (PRs) to the CICE-Consortium,
please refer to: https://github.com/CICE-Consortium/About-Us/wiki/Resource-Index#information-for-developers
PR checklist
Short (1 sentence) summary of your PR:
This introduces changes when running icepack in
calc_tsfc=.false.mode for coupling with fluxes supplied from an atmosphere model.Developer(s):
@kieranricardo @blimlim
Suggest PR reviewers from list in the column to the right.
Please copy the PR test results link or provide a summary of testing completed below.
ENTER INFORMATION HERE
How much do the PR code changes differ from the unmodified code?
Does this PR create or have dependencies on CICE or any other models?
Does this PR add any new test cases?
Is the documentation being updated? ("Documentation" includes information on the wiki or in the .rst files from doc/source/, which are used to create the online technical docs at https://readthedocs.org/projects/cice-consortium-cice/.)
Please document the changes in detail, including why the changes are made. This will become part of the PR commit log.
When
calc_tsfc=.false.the conductive flux is now capped, and it is also reduced duringtemperature_changesif the thermo solve is struggling to converge. The excess flux is accounted for in the energy calculations.Also,
hs_minis made configurable. A larger value than the default is needed for numerical stability when run withcalc_tsfc=.false..