Skip to content

Add conductive flux limiting for vertical thermodynamics when calc_Tsfc=.false. - #557

Merged
apcraig merged 45 commits into
CICE-Consortium:mainfrom
ACCESS-NRI:flux-coupling-edits
Jul 28, 2026
Merged

Add conductive flux limiting for vertical thermodynamics when calc_Tsfc=.false.#557
apcraig merged 45 commits into
CICE-Consortium:mainfrom
ACCESS-NRI:flux-coupling-edits

Conversation

@kieranricardo

@kieranricardo kieranricardo commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

PR checklist

When the vertical thermodynamic solver is forced by prescribed surface fluxes (calc_Tsfc = .false.), it can become numerically unstable. This instability appears to arise in the vertical thermodynamic solve when the conductive flux is too large (which depends on ice thickness and time step). Flux limiting is needed to stabilise the solution in this configuration.

An existing implementation of this flux limiting is available in an ACCESS fork of CICE5. This implements a similar approach, enabling stable coupling with the UM.

This conductive flux limiting occurs in 2 places:

  1. Before the thermodynamic solve. If the conductive flux to ice thickness ratio exceeds a certain value (default 1000 w/m^2) the conductive flux is reduced such the ratio matches this value. The excess energy is used for bottom melt.

  2. During the thermodynamic solve. If any of the layer temperatures exceed 0C, the layer temperature is reduced to 0C. The excess energy is deducted from the conductive flux and passed to the ocean.

Test results are bit-for-bit except when calc_tsfc=.false. in CICE alt03 tests.

kieranricardo and others added 30 commits February 3, 2026 14:29
Co-authored-by: Kieran Ricardo <u5824685@anu.edu.au>
Co-authored-by: Anton Steketee <79179784+anton-seaice@users.noreply.github.com>
@kieranricardo

Copy link
Copy Markdown
Contributor Author

@eclare108213 thanks for your review, I've now added description and units for the all the new variables (and some related existing variables as well).

Shall I edit the documentation in this PR? I can add a description of the limiting in 2.7.4.1.

@anton-seaice

anton-seaice commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

It is covered somewhat in the second paragraph in 2.1, so probably update that ?

@kieranricardo

Copy link
Copy Markdown
Contributor Author

@eclare108213 @anton-seaice I've updated the documentation in 2.1 and 2.7.4.1. And I think this is ready for another review

@eclare108213 eclare108213 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to be sure I understand, this change will not be backward compatible for anyone running CICE with a hadgem driver or any other driver with calc_Tsfc = false, correct? Is that okay? Hadley Centre switched over to the European models a while back so I'm not sure whether it matters at this point, but I'd prefer to keep the code backward compatible in case someone might not want this change. It does seem like a good improvement, though, maybe even a "bug fix."

Comment thread columnphysics/icepack_therm_bl99.F90
temperature is treated explicitly, the effective conductivity may need
to be limited to ensure stability. As a result, accuracy may be
significantly reduced, especially for thin ice or snow layers. A more
temperature is treated explicitly, the conductive flux is limited to ensure stability.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To the end of this sentence, please add ", and the excess energy is either applied for bottom melting or fluxed to the ocean."

To the end of the paragraph, add "The GEOS approach is available for either mushy or BL99 thermodynamics, while the conductivity-limiting approaches are only available for BL99."

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good!

I've changed the first sentence slightly to: "Since the ice surface
temperature is treated explicitly, the conductive flux is limited to ensure stability,
with any excess energy either used for bottom melting or transferred to the ocean as a heat flux."

And for the second, I swapped "conductivity-limiting" for "flux-limiting".

Comment thread doc/source/science_guide/sg_thermo.rst Outdated
.. math::
K^* \le {\rho ch \over \Delta t}.

To improve stability, the conductive flux is limited before

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For clarity:
"To improve stability when calc_Tsfc = false, the ..."

@kieranricardo

Copy link
Copy Markdown
Contributor Author

@eclare108213 thanks for your feedback! Yeah, these changes won't be backwards compatible for calc_Tsfc=.false., although like you say I don't think anyone else is using calc_Tsfc=.false.. I did a small bug fix for calc_Tsfc=.false. last year, without this icepack crashed with calc_Tsfc=.false., so we can be sure no one was using this up until that point at least.

@eclare108213 eclare108213 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thank you.

@anton-seaice anton-seaice left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I ran the icepack base suite, and got BFB answers except these five tests:

FAIL gadi_oneapi_smoke_col_1x1_bgcispol_debug compare ad89637 different-data
FAIL gadi_oneapi_smoke_col_1x1_bgcnice_debug compare ad89637 different-data
FAIL gadi_oneapi_restart_col_1x1_pondlvl compare ad89637 different-data
FAIL gadi_oneapi_restart_col_1x1_bgcispol compare ad89637 different-data
FAIL gadi_oneapi_restart_col_1x1_bgcnice compare ad89637 different-data

I guess that is because ACCESS-NRI@9c6aaa9 is not in this branch.

@anton-seaice

Copy link
Copy Markdown
Contributor

All tests BFB now using oneapi after updating from main - see https://github.com/CICE-Consortium/Test-Results/wiki/49b04c6143.gadi.oneapi.26-07-21.030428.1

@anton-seaice

Copy link
Copy Markdown
Contributor

Could you review / finalise @apcraig ?

@apcraig

apcraig commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

I'll run a CICE test suite and report results.

Just want to confirm that we don't need any new namelist?

@anton-seaice

Copy link
Copy Markdown
Contributor

I don't think we have plans to change / test different values of those parameters, so not required from us.

@apcraig

apcraig commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Testing looks good. All the icepack tests are bit-for-bit on derecho with intel and gnu. The CICE tests are also bit-for-bit except the alt03 tests which have calc_tsfc=.false.. I think that is expected. There is one other test, derecho_gnu_smoke_gbox128_14x2_boxrestore_gridc_reprosum_run10day.fc01, which is also not bit-for-bit for reasons I can't quite figure out. I think it might have to do with some another recent Icepack PR, but I'm going to ignore.

https://github.com/CICE-Consortium/Test-Results/wiki/cice_by_hash_forks#5b972c241a5865babf262d5a48aefd24320a08cd

@apcraig

apcraig commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

I added the test results to the PR comments and made a couple other minor updates. Could @anton-seaice, @kieranricardo review the PR comments and make sure they are up to date given any changes since the PR was created. You should be edit the PR comments directly. Once confirmed, I'll merge. Thanks!

@kieranricardo

Copy link
Copy Markdown
Contributor Author

Thanks @apcraig, the PR comment looks good to me.

@anton-seaice

Copy link
Copy Markdown
Contributor

Nothing from me either

@apcraig
apcraig merged commit 0fa79f8 into CICE-Consortium:main Jul 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants