fix(Rosenbrock): saturation adjustment on max(S_ice, S_liq)#737
Draft
haakon-e wants to merge 3 commits into
Draft
fix(Rosenbrock): saturation adjustment on max(S_ice, S_liq)#737haakon-e wants to merge 3 commits into
haakon-e wants to merge 3 commits into
Conversation
Member
Author
|
This change is part of the following stack:
Change managed by git-spice. |
This was referenced Jun 17, 2026
haakon-e
changed the base branch from
he/diagnostic-nc
to
he/postsolve-diagnostics
June 17, 2026 21:20
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 17, 2026 21:20
3d41feb to
a4aa680
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
June 18, 2026 21:42
224c902 to
328ac11
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 18, 2026 21:42
a4aa680 to
440ddbf
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
June 18, 2026 22:41
328ac11 to
3ab1235
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 18, 2026 22:41
440ddbf to
309724f
Compare
Merged
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
June 22, 2026 21:01
3ab1235 to
2b6587d
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 22, 2026 21:01
309724f to
871b731
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
June 22, 2026 23:43
2b6587d to
4edcf64
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 22, 2026 23:43
871b731 to
205acdc
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
June 22, 2026 23:55
4edcf64 to
d798708
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 22, 2026 23:55
205acdc to
2e70e53
Compare
This was referenced Jun 23, 2026
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
June 23, 2026 00:32
d798708 to
9e374ec
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 23, 2026 00:32
2e70e53 to
b6ab68d
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 26, 2026 00:38
4604d1d to
19fdeab
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
June 26, 2026 01:22
df30b49 to
82ef2c6
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 26, 2026 01:22
19fdeab to
40ca910
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
June 26, 2026 01:31
82ef2c6 to
83d763e
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
June 26, 2026 01:31
40ca910 to
b2dbb8c
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 1, 2026 05:34
83d763e to
5d0be63
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 1, 2026 05:34
b2dbb8c to
98ea608
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 1, 2026 05:46
5d0be63 to
6299f13
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 1, 2026 05:46
98ea608 to
3a09afe
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 1, 2026 06:24
6299f13 to
3e406c0
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 1, 2026 06:24
3a09afe to
33b6a35
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 1, 2026 15:01
3e406c0 to
2b40424
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 1, 2026 15:01
33b6a35 to
090fd49
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 8, 2026 04:34
2b40424 to
9f81040
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 8, 2026 04:34
090fd49 to
043da95
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 10, 2026 02:14
9f81040 to
58e4ca6
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 10, 2026 02:14
043da95 to
c5c4783
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 10, 2026 23:15
58e4ca6 to
132adb1
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 10, 2026 23:15
c5c4783 to
1c96cf0
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 11, 2026 00:58
132adb1 to
e91d34c
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 11, 2026 00:58
1c96cf0 to
f821b88
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 11, 2026 02:14
e91d34c to
db5a1cc
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 11, 2026 02:14
f821b88 to
3805142
Compare
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 11, 2026 02:31
db5a1cc to
6eeffe8
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 11, 2026 02:31
3805142 to
ed1ddb6
Compare
EndStateSaturationAdjustment now keeps the latent-heated end state at or above saturation over its more-supersaturated phase, max(S_ice, S_liq), instead of over ice alone. Below freezing ice carries the larger supersaturation, so the criterion reduces to the previous ice cap and the cold deposition-instability cure is unchanged; above freezing it caps on liquid and removes the warm under-condensation an ice-only cap leaves behind. Add a documentation section deriving the criterion with a 0-D vapor-exchange-only illustration of the Wegener-Bergeron-Findeisen transfer, and a framework test for the warm (liquid) and cold (ice) caps.
Mirror the warm subtest in the cold block, so a regression that disables the ice-side limiter is caught. Drop markdown emphasis from the saturation-adjustment documentation.
The mixed-phase saturation section labelled the coarse-step instability a "deposition instability", but the positive Jacobian diagonal sits in the rime-mass row (riming self-gain); the pure-deposition diagonal is negative there. Rename the reference to "ice-growth instability" to match the section heading and the mechanism.
haakon-e
force-pushed
the
he/postsolve-diagnostics
branch
from
July 11, 2026 03:28
6eeffe8 to
fb70028
Compare
haakon-e
force-pushed
the
he/rosenbrock-modes
branch
from
July 11, 2026 03:28
ed1ddb6 to
10acc85
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
Refines the
EndStateSaturationAdjustmentlimiter so the substep increment is held at saturation over the more-supersaturated phase,max(S_ice, S_liq), instead of over ice alone. Below freezing ice carries the larger supersaturation, so the criterion reduces to the previous ice-only limit and the cold deposition-instability fix is unchanged. Above freezing it limits on liquid, so warm cells condense to liquid saturation; an ice-only limit would instead stop vapor depletion before liquid saturation and hold the cell supersaturated over liquid (too little cloud).Docs & test
Adds a "mixed-phase saturation criterion" section to
docs/src/RosenbrockNumerics.mdwith a simplified 0-D model that exchanges vapor with cloud liquid and ice only, illustrating the Wegener–Bergeron–Findeisen transfer (why the two saturation thresholds matter), and a framework test covering the warm (liquid) and cold (ice) limits.Scope and a known refinement
Limiting on
max(S_ice, S_liq)is a single shared scalar on the whole increment, which is what keeps the limiter stable. It is correct wherever a single phase grows from vapor. When both phases are supersaturated below freezing (a vigorous mixed-phase updraft core), it limits on the ice floor and so condenses the co-present growing liquid past its own saturation in one step rather than transferring it gradually; a fully per-phase floor (limiting only the supersaturation-driven tendencies of each phase) is a documented candidate refinement. The distinction is inactive at fine substeps and does not affect the cold-instability fix.