Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update depth-dependent ice-shelf basal melt parameterization and add variability input field #103

Open
wants to merge 19 commits into
base: develop
Choose a base branch
from

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).
  • 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
Shivaprakash Muruganandham and others added 2 commits February 7, 2024 14:56
Add Registry and ice shelf melt driver changes to support new
calculate_aislens_melt_variability_adjustment subroutine call
@matthewhoffman matthewhoffman force-pushed the mshiv/mali/basal_melt_draft_dependence branch from 76bb23d to cfe4264 Compare February 7, 2024 22:58
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
@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

components/mpas-albany-landice/src/Registry.xml Outdated Show resolved Hide resolved
components/mpas-albany-landice/src/Registry.xml Outdated Show resolved Hide resolved
components/mpas-albany-landice/src/Registry.xml Outdated Show resolved Hide resolved
components/mpas-albany-landice/src/Registry.xml Outdated Show resolved Hide resolved
components/mpas-albany-landice/src/Registry.xml Outdated Show resolved Hide resolved
components/mpas-albany-landice/src/Registry.xml Outdated Show resolved Hide resolved
components/mpas-albany-landice/src/Registry.xml Outdated Show resolved Hide resolved
@trhille trhille self-requested a review March 1, 2024 21:12
mshiv added 4 commits March 8, 2024 07:44
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.
@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.

@@ -1224,6 +1220,15 @@ is the value of that variable from the *previous* time level!
<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 and others added 3 commits March 18, 2024 11:49
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]>
@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?

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.

3 participants