Skip to content

fix: melt pond ice-lid sign + caller; tune pond parameters#912

Closed
JanStreffing wants to merge 2 commits into
mainfrom
fix/meltponds-signs
Closed

fix: melt pond ice-lid sign + caller; tune pond parameters#912
JanStreffing wants to merge 2 commits into
mainfrom
fix/meltponds-signs

Conversation

@JanStreffing
Copy link
Copy Markdown
Collaborator

@JanStreffing JanStreffing commented May 19, 2026

Fix two sign bugs in the melt-pond parameterization that let ipnd accumulate unbounded (>3 m at LR, >2 m at HR), and re-tune pond parameters into the CICE/CESM range.

  • ice_thermo_cpl.F90: caller clamped meltt/melts ≥ 0 via max(0, -dhgrowth), making the freezing branch in meltpond_area dead code. Pass signed net tendency.
  • ice_meltponds.F90: melting branch had wrong sign (ipnd + meltt*dt grew the lid during melt). Restructured to a 3-way conditional; meltt=0 is now a no-op; freezing branch only thickens lid where a pond exists.
  • ice_meltponds.F90: clamp melt-water input ≥ 0 in dvolpnd so freezing does not remove pond water.

Tuning: rfracmax 1.0→0.5, albpnd 0.20→0.30, albpnd_frz 0.36→0.50.

Direct bug fix impact:

ipnd_compare_NH ipnd_compare_SH

Validation

20-yr AWI-ESM3 TCO95L91-core2 A/B (clim 1910–1919), no-fix vs fix+tune:

variable no-fix fix+tune Δ
NH Mar area [10⁶ km²] 17.19 16.33 −5.0 %
NH Sep area 4.77 4.93 +3.3 %
NH Sep volume [10³ km³] 9.69 10.08 +4.0 %
SH Sep area 15.09 16.75 +11.0 %
SH Sep volume 8.73 10.15 +16.2 %
20yr_trajectory 20yr_annual_cycle 20yr_NH_sep_maps 20yr_SH_sep_maps

Three related bugs caused ipnd (melt pond ice lid thickness) to
accumulate unbounded over the melt season (values >2 m in HR runs,
>3 m in LR_run_test10), and the freezing branch in meltpond_area
to be unreachable.

- ice_thermo_cpl.F90: caller previously clamped meltt_rate/melts_rate
  to >=0 via max(0,-dhgrowth), making the freezing branch in
  meltpond_area dead code. Pass signed net thermodynamic tendency
  so the sign carries the freeze/melt distinction.

- ice_meltponds.F90: melting branch had wrong sign
  (ipnd + meltt*dt grew the lid during melt instead of melting it).
  Also restructured to a clean 3-way conditional so the freezing
  branch only thickens lids where a pond exists, and a meltt=0
  step is a no-op (previously the else branch accidentally
  grew ipnd when meltt<0 and apnd<=puny).

- ice_meltponds.F90: clamp the melt-water input to >=0 in dvolpnd
  so freezing does not remove water from the pond (now that meltt
  can be negative).

fpond (intent(out)) is declared but never consumed by the caller,
so these sign changes have no downstream effect on the freshwater
flux to the ocean.
…SM range

Companion tuning to the sign fixes in the prior commit. With ipnd
now behaving correctly, the existing parameters made the meltpond
scheme too aggressive (LR Sep ice area ~3 Mkm^2 vs ~6 Mkm^2 in the
no-pond reference, Sep volume ~5 vs ~17 x 10^3 km^3).

- rfracmax 1.0 -> 0.5: less surface meltwater retained in ponds on
  thick ice, lowering pond depth and area.
- albpnd 0.20 -> 0.30: open-pond albedo toward the CICE/CESM range
  reported in the literature.
- albpnd_frz 0.36 -> 0.50: frozen-pond albedo also toward CICE range.

Both albedo changes brighten ponded areas, partly compensating
the additional summer SW absorption that the meltpond scheme
introduces relative to a no-pond setup. Needs a multi-year LR
validation run before merge.
@JanStreffing JanStreffing self-assigned this May 19, 2026
@JanStreffing JanStreffing added the bug Something isn't working label May 19, 2026
@JanStreffing JanStreffing marked this pull request as draft May 19, 2026 17:36
@JanStreffing
Copy link
Copy Markdown
Collaborator Author

Peaks are still unrealistic. back to the drawing board.

@JanStreffing JanStreffing force-pushed the fix/meltponds-signs branch 2 times, most recently from 15b89c0 to bcfe6e1 Compare May 19, 2026 21:17
@JanStreffing
Copy link
Copy Markdown
Collaborator Author

Closing in favour of a cleaner approach.

The sign fix here patched the immediate accumulation but left ipnd unbounded — validation runs showed lids growing past 20 m on East-Antarctic coastal nodes (1 cm pond, 22 m lid). That is unphysical and made the CMIP7 simprefrozen diagnostic meaningless.

Superseded by #913, which replaces the home-grown ipnd accumulator with the Stefan ('hlid') branch of Icepack meltpond_lvl: lid grows by thermal conduction from a cold surface, capped by available pond water, and bounded by pond depth which is itself bounded by ice freeboard. Lid stays in the physical 0–3 cm range at LR.

JanStreffing added a commit that referenced this pull request May 22, 2026
refactor: meltpond ipnd via Icepack-style Stefan lid (supersedes #912)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant