Skip to content

Add regularized coulomb & debris friction tests for MISMIP+#938

Open
matthewhoffman wants to merge 9 commits intoMPAS-Dev:mainfrom
matthewhoffman:landice/mismipplus-debrisfriction
Open

Add regularized coulomb & debris friction tests for MISMIP+#938
matthewhoffman wants to merge 9 commits intoMPAS-Dev:mainfrom
matthewhoffman:landice/mismipplus-debrisfriction

Conversation

@matthewhoffman
Copy link
Member

@matthewhoffman matthewhoffman commented Feb 28, 2026

This PR adds new MALI tests for the new debris friction law capability and the existing regularized coulomb capability. It adds variants to the MISMIP+ smoke test for these friction laws and the existing weertman friction law. Each of three variants have separate yaml files appropriate for that friction law. The standard input file consisting of a spunup 2km state is modified for the regularized coulomb and debris friction variants to use appropriate parameters values as input fields. These are not meant to be consistent with the spunup glacier state in the file, but allow the smoke test to test each of the 3 friction laws for a reasonable glacier state. The PR also adds the RC and DF variants to the full_integration suite so that we have test coverage for those friction laws.

Checklist

  • User's Guide has been updated
  • Developer's Guide has been updated
  • API documentation in the Developer's Guide (api.rst) has any new or modified class, method and/or functions listed
  • Documentation has been built locally and changes look as expected
  • The MALI-Dev submodule has been updated with relevant MALI changes
  • Document (in a comment titled Testing in this PR) any testing that was used to verify the changes
  • New tests have been added to a test suite

Also add it to the full integration suite
* shorten smoke test length
* add fallback for core_per_node
Refactor smoke_test and run_model for MISMIP+ case to support 3 variants:
weertman, regularized coulomb, debris friction
Each has a different yaml file, which is selected based on the variant.
@matthewhoffman matthewhoffman changed the title Add debris friction test with MISMIP+ Add regularized coulomb & debris friction tests for MISMIP+ Mar 3, 2026
@matthewhoffman matthewhoffman force-pushed the landice/mismipplus-debrisfriction branch from 8e98237 to 2d041e8 Compare March 3, 2026 04:26
# Side Set Discretizations:
# basalside:
# Exodus Output File Name: albany_output_basal.exo

Copy link
Contributor

Choose a reason for hiding this comment

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

Do we need to set a uniform Flow Rate, or the default one based on the temperature is correct?

Choose a reason for hiding this comment

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

The spinup uses this uniform flow rate, it's one of the parameters set as a constant for the intercomparison project

Copy link

@jeremy-brooks-1 jeremy-brooks-1 Mar 3, 2026

Choose a reason for hiding this comment

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

Are the flow rate lines supposed to be in their own section LandIce Viscosity , or is it okay to set them there under Basal Friction Coefficient?

Copy link
Contributor

Choose a reason for hiding this comment

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

Are the flow rate lines supposed to be in their own section LandIce Viscosity , or is it okay to set them there under Basal Friction Coefficient?

The flow-rate lines in the Basal Friction Coefficient section are only used for the boundary condition. If they are not specified in the Basal Friction Coefficient section, they are inferred from the ones in the LandIce Viscosity.

Copy link
Contributor

@mperego mperego left a comment

Choose a reason for hiding this comment

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

Looks good to me.

Mu Type: Field
Power Exponent: 0.3333333333
Effective Pressure Type: Hydrostatic Computed at Nodes
Zero Beta On Floating Ice: true
Copy link
Contributor

Choose a reason for hiding this comment

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

Zero Beta On Floating Ice: true
This is no longer needed. It's on if glp is enabled. It goes to zero anyway on nodes on floating ice.


with xr.open_dataset(mesh_filename) as ds_mesh:
ds_mesh['muFriction'].loc[:] = 0.4
ds_mesh['bedRoughnessBC'] = xr.full_like(ds_mesh['muFriction'],

Choose a reason for hiding this comment

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

I think this should be bedRoughnessRC.
I also think the value here for bedRoughnessRC should be multiplied by 1000. If I recall correctly, when the value is set in the mesh, we use MPAS units (m^-1). But if it's set in the albany_input.yaml file, we use Albany units (km^-1). Is that correct? I checked LandIce_BasalFrictionCoefficient_Def.hpp and Interface.cpp but didn't see any scaling applied...

Copy link
Contributor

@mperego mperego Mar 3, 2026

Choose a reason for hiding this comment

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

bed roughness in is [m] in MPAS / netcdf grid, and in [km] in Albany / exodus grid.
The conversion happens in the Interface_velocity_solver.cpp file


with xr.open_dataset(mesh_filename) as ds_mesh:
ds_mesh['muFriction'].loc[:] = 0.4
ds_mesh['bedRoughnessBC'] = xr.full_like(ds_mesh['muFriction'],

Choose a reason for hiding this comment

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

I think this should be bedRoughnessRC.

Copy link
Member Author

Choose a reason for hiding this comment

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

Good catch!

ds_mesh['bedRoughnessBC'] = xr.full_like(ds_mesh['muFriction'],
6000.0)
ds_mesh['basalDebrisFactor'] = xr.where(
ds_mesh['xCell'] < 200000.0, 3.2e-2, 0.0)
Copy link

@jeremy-brooks-1 jeremy-brooks-1 Mar 3, 2026

Choose a reason for hiding this comment

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

We may as well add bulkFriction coefficient for testing too?

ds_mesh['bulkFriction'] = xr.where(
                ds_mesh['xCell'] < 400000.0, 0.005, 0.0)

Copy link
Member Author

Choose a reason for hiding this comment

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

@jeremy-brooks-1 , is the x value where this changes meant to be different than that for basaDebrisFactor?

@matthewhoffman
Copy link
Member Author

matthewhoffman commented Mar 4, 2026

Testing

I ran the 3 variants of the smoke test and got reasonable results for the velocity solution at the initial time for all 3. This was run on the Docker container on my Mac m1 (but compiled for amd64) and run with 10 tasks.

Weertman

  test execution:      SUCCESS
  test validation:     PASS
  test runtime:        01:50
velo-Weertman

Regularized Coulomb

  test execution:      SUCCESS
  test validation:     PASS
  test runtime:        00:48
velo-RC

Debris Friction

  test execution:      SUCCESS
  test validation:     PASS
  test runtime:        00:53
velo-DF

@matthewhoffman
Copy link
Member Author

Update: this appears ready to merge, barring any further adjustments from @mperego and @jeremy-brooks-1 . But we will wait to merge until the MALI-Dev/E3SM PR is merged and the submodule can be updated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

in progress This PR is not ready for review or merging land ice

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants