zoomy_core.model.models.sme_model module

zoomy_core.model.models.sme_model module#

SME — Shallow Moment Equations (hydrostatic).

Derivation:

system = FullINS(state).system()
system.equations["z_momentum"].apply({w: 0, τ_zz: 0, τ_zx: 0})
→ ∂p/∂z/ρ + g = 0  →  p = p_atm + ρg(η - z)
system.apply({p: p_hydro})
del system.equations["z_momentum"]
system.apply(DepthIntegrate)
system.apply(ApplyKinematicBCs)
...
zoomy_core.model.models.sme_model.hydrostatic_scaling(state)#

Dict that drops w and all z-row/z-column stresses (hydrostatic assumption).

Dimension-agnostic: works for 2D (x-z) and 3D (x-y-z).

class zoomy_core.model.models.sme_model.INSModel(level=0, n_layers=1, basis_type=<class 'zoomy_core.model.models.basisfunctions.Legendre_shifted'>, eigenvalue_mode=None, dimension=None, **kwargs)#

Bases: DerivedModel

Root: the full incompressible Navier-Stokes (all equations).

Dimension-agnostic: works for 2D (x-z) and 3D (x-y-z). The ins_dimension parameter controls the INS state space:

  • 2: u, w (standard 2D vertical slice)

  • 3: u, v, w (full 3D)

Uses numerical eigenvalues (np.linalg.eigvals on quasilinear matrix) because the symbolic Cardano formula produces complex intermediates for higher-moment models (casus irreducibilis).

eigenvalue_mode = 'numerical'#
ins_dimension = 2#
derive_model()#

Override to build/refine the equation system.

Root classes: call self._init_system(...) to create equations. Child classes: call super().derive_model() then self.apply(...) to transform.

class zoomy_core.model.models.sme_model.SMEModel(level=0, n_layers=1, basis_type=<class 'zoomy_core.model.models.basisfunctions.Legendre_shifted'>, eigenvalue_mode=None, dimension=None, **kwargs)#

Bases: INSModel

Shallow Moment Equations — hydrostatic, depth-integrated, Newtonian.

projectable = True#
derive_model()#

Override to build/refine the equation system.

Root classes: call self._init_system(...) to create equations. Child classes: call super().derive_model() then self.apply(...) to transform.

source()#

Source.

class zoomy_core.model.models.sme_model.SMEInviscid(level=0, n_layers=1, basis_type=<class 'zoomy_core.model.models.basisfunctions.Legendre_shifted'>, eigenvalue_mode=None, dimension=None, **kwargs)#

Bases: INSModel

SME without viscosity.

projectable = True#
derive_model()#

Override to build/refine the equation system.

Root classes: call self._init_system(...) to create equations. Child classes: call super().derive_model() then self.apply(...) to transform.