Shallow moment equations#
SME resolves the vertical profile of the horizontal velocity of a shallow free-surface flow as a polynomial: the depth mean plus level moments.
level=0 is shallow water.
Paper: Kowalski and Torrilhon 2019, Moment approximations and model cascades for shallow flow.
Starting point#
The reduced balance laws for velocity \((u, v, w)\), pressure \(p\) and deviatoric stress \(\sigma\), constant density \(\rho\), gravity \(g(e_x, e_y, e_z)\), bed \(h_b\) and free surface \(h_s\):
with the kinematic conditions at the free surface and at the bed
the Newtonian shear stress, the stress-free surface and the slip condition at the bed with slip length \(\lambda\)
and the same for \(v\). In the mapped coordinate \(\zeta \in [0, 1]\) the velocity is the mean plus a polynomial deviation
with \(h = h_s - h_b\) and the scaled Legendre polynomials \(\phi_j\), orthogonal on \([0, 1]\) with \(\phi_j(0) = 1\). The moment equations are the momentum balance tested with \(\phi_i\) and integrated over \(\zeta\).
Assumptions#
Shallow flow: the in-plane deviatoric stresses \(\sigma_{xx}\), \(\sigma_{yy}\), \(\sigma_{xy}\) are neglected.
Hydrostatic pressure (3.4), constant density.
Newtonian shear stress, stress-free surface, Navier slip at the bed, enforced weakly through the integrated stress terms.
Velocity profile: a polynomial of degree \(N\) in \(\zeta\) (4.3).
Generated equations#
SME(level=1, dimension=2, closures=[Newtonian(), NavierSlip(), StressFree()])
State \(Q\): \(b\), \(h\), \(q_{0}\), \(q_{1}\)
Parameters: g = 9.81, rho = 1.0, nu = 0.0, lambda_s = 0.0, e_x = 0.0
bottom
mass_0
momentum_x_0
momentum_x_1
Notation: \(q_0 = h u_m\) and \(q_k = (-1)^k h \alpha_k\) (Zoomy’s basis has \(\phi_k(1) = 1\)), \(\lambda_s = \rho \nu / \lambda\), \(b = h_b\), \(e_z = 1\), level \(= N\).
The row momentum_x_k is \((-1)^k\) times the paper’s equation for \(\alpha_k\).
With a flat bed and \(e_x = 0\), level=0 is the paper’s (4.13) and level=1 its (4.14) with (4.15).
tests/model/test_model_references.py in zoomy_core checks levels 1 to 3 row by row against (4.7) and (4.10).
Options#
setting |
|
|---|---|
|
moments above the mean, |
|
|
|
for example |
|
|
|
a |
|
|
|
Gauss-Legendre order for non-polynomial closures, |
|
|
from zoomy_core.model.models import SME, Newtonian, NavierSlip, StressFree
from zoomy_core.systemmodel import SystemModel
model = SME(level=1, dimension=2, closures=[Newtonian(), NavierSlip(), StressFree()],
parameters={"nu": 0.1, "lambda_s": 0.5})
sm = SystemModel.from_model(model)
In the GUI#
Compose, Model card Shallow Moments: set level in its parameters panel.
Pick a mesh and the Hyperbolic (NumPy) solver and run.
The card writes SME(...) with [Newtonian(), NavierSlip(), StressFree()] into the ## Model section of case.py.