Skip to content

Conversation

@mshiv
Copy link

@mshiv mshiv commented Feb 7, 2024

This PR replaces an existing ice shelf basal melt parameterization method and adds a basal melt variability input field, both in support of test cases where MALI is forced directly from the basal melt variable.

  1. Draft-dependent basal melt parameterization method:
  • The draft_dependence method is introduced to calculate basal melt as a function of ice shelf draft.
  • It replaces the previously define seroussi method. A key difference is that these coefficients are now expected as user-defined input fields, allowing for spatially varying coefficient values.
  • In its current form, this is a linear function with two coefficients, draftDepenBasalMeltAlpha0 (intercept parameter) and draftDepenBasalMeltAlpha1 (slope parameter). The function is invoked based on a draftDepenBasalMelt_minDraft parameter field, such that the linear dependence is calculated only if draft at a point is greater than minDraft. At shallower depths, the melt rate is currently the draft dependent melt calculated at the minDraft value.
  • These coefficients are presently time-independent, and defined via offline pre-processing (regressing basal melt with draft)
  • Currently, this method is used when MALI is forced directly using the ice shelf basal melt (floatingBasalMassBal) variable.
  1. Input field for basal melt adjustment:
  • A new variable floatingBasalMassBalAdjustment is defined, also as a user-defined input field.
  • When MALI is forced directly by floatingBasalMassBal, this adjustment field can be used to add basal melt forcing components that are not draft dependent. For example: linear trend, seasonality, internal climate variability components.
  • This can be a spatially and temporally varying 3-dimensional field.

@mshiv mshiv added the in progress Still being worked on, don't merge yet! label Feb 7, 2024
@matthewhoffman matthewhoffman force-pushed the mshiv/mali/basal_melt_draft_dependence branch from 76bb23d to cfe4264 Compare February 7, 2024 22:58
@mshiv mshiv force-pushed the mshiv/mali/basal_melt_draft_dependence branch from 98a86c9 to bb469c4 Compare February 16, 2024 22:24
@matthewhoffman matthewhoffman added enhancement New feature or request and removed in progress Still being worked on, don't merge yet! labels Feb 17, 2024
@matthewhoffman matthewhoffman self-assigned this Feb 20, 2024
@matthewhoffman matthewhoffman changed the title Add basal melt variability emulator Update depth-dependent ice-shelf basal melt parameterization and add variability input field Feb 20, 2024
Copy link

@matthewhoffman matthewhoffman left a comment

Choose a reason for hiding this comment

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

@mshiv , thanks for putting this PR together. After looking over it again, I have a few more requests. Also, please update the description of the PR (on the main PR page below the PR title) with a few details:

  • describe how/why the slope and intercept are fields rather than namelist options
  • describe the new floatingBasalMassBalAdjustment field, which is not directly related to the depth-dependent melt param.
  • explain that this new method is replacing the 'seroussi' option

@trhille trhille self-requested a review March 1, 2024 21:12
@trhille
Copy link

trhille commented Mar 15, 2024

Is there a configuration that makes this equivalent to config_basal_mass_bal_float = 'seroussi'? We will need to update several COMPASS tests in full_integration that currently use seroussi:

00:11 FAIL landice_thwaites_fo_decomposition_test
00:13 FAIL landice_thwaites_fo_restart_test
00:08 FAIL landice_thwaites_fo-depthInt_decomposition_test
00:07 FAIL landice_thwaites_fo-depthInt_restart_test

All other tests passed validation and baseline comparison.

<var name="floatingBasalMassBal" type="real" dimensions="nCells Time" units="kg m^{-2} s^{-1}"
description="Potential basal mass balance on floating regions"
/>
<var name="floatingBasalMassBalAdjustment" type="real" dimensions="nCells Time" units="kg m^{-2} s^{-1}" default_value="0.0"
Copy link

Choose a reason for hiding this comment

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

It's not clear what the difference is between floatingBasalMassBalAdjustment and draftDepenBasalMeltAlpha0. The descriptions need more detail. For which cases is floatingBasalMassBalAdjustment used?

Copy link
Author

Choose a reason for hiding this comment

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

Technically, they are similar in that they are both added to the product of draft and draftDepenBasalMeltAlpha1. Main difference is that draftDepenBasalMeltAlpha0 (and draftDepenBasalMeltAlpha1) is time independent while floatingBasalMassBalAdjustment can be time dependent, with the latter being read in via a forcing file input stream.

draftDepenBasalMeltAlpha0 and draftDepenBasalMeltAlpha1 are maps derived via a regression of basal melt with draft.

floatingBasalMassBalAdjustment is treated as an optional additional basal melt forcing value - in the context of the AISLENS experiments, it includes time varying basal melt forcing that can have secular/seasonal trends and variability, or a combination of them. Will update the main description above as well.

! Shut off melt at an arbitrary shallow depth to discourage ice from disappearing.
if ( (li_mask_is_floating_ice(cellMask(iCell))) .and. (lowerSurface(iCell) < -10.0_RKIND) ) then
if ( li_mask_is_floating_ice(cellMask(iCell))) then
Copy link

Choose a reason for hiding this comment

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

To be completely accurate, this should probably treat dynamic and non-dynamic cells differently. Melt rates for non-dynamic cells should probably be calculated using the draft values from neighboring dynamic cells. @matthewhoffman, what do you think?

Choose a reason for hiding this comment

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

I think we should probably be doing that, but if we include that, it should probably be done for all melt options. Looks like we sort of say we are doing that at line 586 but it's not actually doing it. Or maybe it should happen where BMB is actually applied, using the dynamic mask that exists at that point. I think that should be a separate PR, given it would change the application of all melt rate methods.

@mshiv
Copy link
Author

mshiv commented Jul 16, 2024

Is there a configuration that makes this equivalent to config_basal_mass_bal_float = 'seroussi'? We will need to update several COMPASS tests in full_integration that currently use seroussi:

00:11 FAIL landice_thwaites_fo_decomposition_test
00:13 FAIL landice_thwaites_fo_restart_test
00:08 FAIL landice_thwaites_fo-depthInt_decomposition_test
00:07 FAIL landice_thwaites_fo-depthInt_restart_test

All other tests passed validation and baseline comparison.

That might require a rewrite of draft_dependence to include the sillDepth and maxMeltSer parameters defined in seroussi. Would it be worth doing that, @matthewhoffman?

Shivaprakash Muruganandham and others added 14 commits July 29, 2025 18:15
Add Registry and ice shelf melt driver changes to support new
calculate_aislens_melt_variability_adjustment subroutine call
Add linear draft-dependent (spatial dependence) basal melt adjustment
for AISLENS generator.
Add slopeGen and interceptGen coefficients for the draft dependence
…melt generator

Define draft dependence function variables for calculating
floatingBasalMassBalAdjustment in aislens basalMassBal adjustment
subroutine
Define slopeGen, interceptGen, zDraft variables as part of aislens package
Rename interceptGen to draftDepenBasalMeltAlpha0
Rename slopeGen to draftDepenBasalMeltAlpha1
This will allow for easier changes to the functional form used in the draft
dependence melt parameterization
Update variables for the basal_melt_draft_dependence subroutine:
rename: interceptGen -> draftDepenBasalMeltAlpha0 and slopeGen -> draftDepenBasalMeltAlpha1
Update definitions
Add the above variables and floatingBasalMassBalAdjustment to input and restart streams.
mshiv and others added 8 commits July 29, 2025 18:57
Delete stray comments from previously defined seroussi method

Co-authored-by: Trevor Hillebrand <[email protected]>
Update components/mpas-albany-landice/src/mode_forward/mpas_li_iceshelf_melt.F

Co-authored-by: Trevor Hillebrand <[email protected]>
- Introduce new parameter: draftDepenBasalMelt_minDraft
- Linear draft dependence (alpha0 + alpha1 * zDraft) is now only applied when zDraft >= minDraft
- For zDraft < minDraft, basal melt is set to alpha0 only (no dependence on draft)
@mshiv mshiv force-pushed the mshiv/mali/basal_melt_draft_dependence branch from 2f1b945 to 8f0a51d Compare July 31, 2025 22:43
mshiv added 4 commits August 2, 2025 21:03
…lue fields)

This scheme allows each floating cell to use a different functional form for mean basal melt as a function of draft:
- Linear: paramType=0 uses Alpha0 + Alpha1 * max(zDraft, minDraft).
- Constant: paramType=1 uses value from the constantValue field. For zero melt, set constantValue=0.0.

- Assign parameterization type and corresponding coefficients/value for each shelf/cell.
- The physical units are currently NOT converted from m/yr to kg/m²/s in the subroutine, the input fields are to be in SI Units.
- Time-dependent variability should be applied via `floatingBasalMassBalAdjustment` after this mean is computed.
This update accounts for applying constant melt rates in specific ice
shelves, and for shallow depths where a piecewise linear dependence on
draft is calculated.
With this fix, it does not matter if minDraft field convention is
positive or negative.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants