Deformation#
The unstructured mesh framework we use provides the opportunity to include deformation of the mesh. This deformation can be done in two ways – either node coordinate changes are provided, or volumetric changes are provided, and the code attempts to iterate toward a global coordinate change that satisfies these volumetric changes. The latter can be somewhat fragile for large deformation, but it does allow simple deformation such as small, somewhat uniform subsidence. The volumetric deformation PK below does this based on a volumetric change given by loss of bulk ice.
Volumetric Deformation#
src/physics/ats/src/pks/deform/volumetric_deformation.hh
This PK implements vertical subsidence through bulk ice loss and cell volumetric change. It implements going from a cell volumetric change to an updated unstructured mesh, and can be coupled sequentially with flow to solve problems of flow in a subsiding porous media.
Note that this PK is slaved to the flow PK. This PK must be advanced first, and must be weakly coupled to the flow PK (or an MPC that advances the flow PK), and the timestep of this PK must match that of the flow PK (e.g. do not try to subcyle one or the other). This uses a rather hacky, unconventional use of time tags, where we use saturations and porosities at the NEXT time, but ASSUME they are actually the values of the CURRENT time. This saves having to stash a copy of these variables at the CURRENT time, which would otherwise not be used.
Note that all deformation here is vertical, and we assume that the subsurface mesh is columnar and that the “build columns” parameter has been given to the subsurface mesh. See the Mesh spec for more.
The process here is governed through two options, the “deformation mode” and the “deformation strategy.”
The deformation mode describes how the cell volume change is calculated. There are three options here:
“prescribed” uses a function to precribe the volume changes as a function of (t,x,y,z).
“structural” decreases the cell volume if the porosity is above a prescribed “structurally connected matrix” porosity. Think of this as bulk ice “propping up” the soil grains – as that bulk ice melts, it reduces porosity toward the porosity in at which grains start to touch again and can be structurally sound.
“saturation” is a heuristic that considers the liquid saturation directly, and tries to relax the liquid saturation back toward a value that is consistent with what the thawed soil should be.
The deformation strategy describes how the cell volume change is turned into node coordinate changes. Three options are available:
“average” simply takes the average of volume change/surface area and horizontally averages this quantity across all neighbors. While this has the advantage of being simple, it has issues when thaw gradients in the horizontal are not zero, as it may result in the loss of volume in a fully frozen cell, blowing up the pressure and breaking the code. This is great when it works, but it almost never works in real problems, except in column-based models, where it is perfect.
“mstk implementation” MSTK implements an iterated, local optimization method that, one-at-a-time, moves nodes to try and match the volumes. This has fewer issues with overfitting, but doesn’t always do sane things, and can be expensive if iterations don’t work well. This is not particularly robust either, but it seems to be the preferred method for 2D/3D problems.
“global optimization” attempts to directly form and solve the minimization problem to find the nodal changes that result in the target volumetric changes. Note this has issues with overfitting, so penalty methods are used to smooth the solution of the problem. This is currently disabled.
NOTE: all deformation options are treated EXPLICITLY, and depend only upon values from the old time.
“PK type” = “volumetric deformation”
pk-volumetric-deformation-spec
“max timestep [s]”
[double]
inf Sets a maximum timestep size.“deformation mode”
[string]
prescribed See above for descriptions. One of: “prescribed”, “structural”, or “saturation”.“deformation strategy”
[string]
global optimization See above for descriptions. One of “average”, “global optimization”, or “mstk implementation”“domain name”
[string]
domain The mesh to deform.“surface domain name”
[string]
surface The surface mesh.“deformation function”
[function-spec]
optional Only used if “deformation mode” == “prescribed”
EVALUATORS:
“saturation_ice” DOMAIN-saturation_ice
“saturation_liquid” DOMAIN-saturation_liquid
“saturation_gas” DOMAIN-saturation_gas
“porosity” DOMAIN-porosity
“cell volume” DOMAIN-cell_volume
INCLUDES:
[pk-physical-default-spec]