Class SEAMesh#
- class sed.seaplex.SEAMesh(*args, **kwargs)[source]#
This class encapsulates all the functions related to sediment transport and deposition in the marine environment for river delivered sediments.
Note
For an overview of solution to nonlinear ODE and PDE problems, one might find the online book from Langtangen (2016) relevant.
Methods
This function is the main entry point to perform marine river-induced deposition.
Initialise
__init__(*args, **kwargs)Initialisation of the SEAMesh class.
Public Methods
This function is the main entry point to perform marine river-induced deposition.
Private Methods
_globalCoastsTree(coastXYZ[, k_neighbors])This function takes all local coastline points and computes locally the distance of all marine points to the coastline.
_distanceCoasts(data[, k_neighbors])This function computes for every marine vertices the distance to the closest coastline.
This function builds from neighbouring slopes the downstream directions in the marine environment.
_depMarineSystem(sedflux)Setup matrix for the marine sediment deposition.
_distOcean(sedflux)Based on the incoming marine volumes of sediment and maximum clinoforms slope we distribute locally sediments downslope.
_marineFineFraction(hl, sedFlux, fineFlux)Dual-lithology (3c): set the per-node fine fraction of the marine deposit so fine concentrates in deep / distal water and coarse stays proximal (near the coast), conserving the marine fine volume.
_marineProvFraction(sedFlux)In-model provenance (B2b, marine): set the marine deposit's source composition to the domain-wide composition of sediment reaching the sea —
ff_mar[c] = Σ(provFrac[c]·sedFlux) / Σ sedFlux— applied uniformly (no depth bias: provenance is a passive label, unlike the grain-size sorting in_marineFineFraction).
Public functions#
Private functions#
- SEAMesh._globalCoastsTree(coastXYZ, k_neighbors=1)[source]#
This function takes all local coastline points and computes locally the distance of all marine points to the coastline.
- Parameters:
coastXYZ – local coastline coordinates
k_neighbors – number of nodes to use when querying the kd-tree
- SEAMesh._distanceCoasts(data, k_neighbors=1)[source]#
This function computes for every marine vertices the distance to the closest coastline. It calls the private function:
_globalCoastsTree
Important
The calculation takes advantage of the vtkContourFilter function from VTK library which is performed on the global VTK mesh. Once the coastlines have been extracted, the distances are obtained by querying a kd-tree (initialised with the coastal nodes) for marine vertices contained within each partition.
- Parameters:
data – local elevation Numpy Array
k_neighbors – number of nodes to use when querying the kd-tree
- SEAMesh._matOcean()[source]#
This function builds from neighbouring slopes the downstream directions in the marine environment. It calls a Fortran subroutine that locally computes for each vertice:
the indices of receivers (downstream) nodes depending on the desired number of flow directions (SFD to MFD).
the distances to the receivers based on mesh resolution.
the associated weights calculated based on the number of receivers and proportional to the slope.
From these downstream directions, a local ocean downstream matrix is computed.
- SEAMesh._depMarineSystem(sedflux)[source]#
Setup matrix for the marine sediment deposition.
The upstream incoming sediment flux is obtained from the total river sediment flux \(\mathrm{Q_{t_i}}\) where:
\[\mathrm{Q_{t_i}^{t+\Delta t} - \sum_{ups} w_{i,j} Q_{t_u}^{t+\Delta t}}= \mathrm{(\eta_i^{t} - \eta_i^{t+\Delta t}) \frac{\Delta t}{\Omega_i}}\]which gives:
\[\mathrm{Q_{s_i}} = \mathrm{Q_{t_i}} - \mathrm{(\eta_i^{t} - \eta_i^{t+\Delta t}) \frac{\Delta t}{\Omega_i}}\]And the evolution of marine elevation is based on incoming sediment flux:
\[\mathrm{\frac{\eta_i^{t+\Delta t}-\eta_i^t}{\Delta t}} = \mathrm{G{_m} Q_{s_i} / \Omega_i}\]This system of coupled equations is solved implicitly using PETSc by assembling the matrix and vectors using the nested submatrix and subvectors and by using the
fieldsplitpreconditioner combining two separate preconditioners for the collections of variables.- Parameters:
sedflux – incoming marine sediment volumes
- Returns:
volDep (the deposited volume of the distributed sediments)
- SEAMesh._distOcean(sedflux)[source]#
Based on the incoming marine volumes of sediment and maximum clinoforms slope we distribute locally sediments downslope.
- Parameters:
sedflux – incoming marine sediment volumes
- Returns:
vdep (the deposited volume of the distributed sediments)
- SEAMesh._marineFineFraction(hl, sedFlux, fineFlux)[source]#
Dual-lithology (3c): set the per-node fine fraction of the marine deposit so fine concentrates in deep / distal water and coarse stays proximal (near the coast), conserving the marine fine volume.
Composition only — the marine deposit geometry (already in
self.tmpafter_distOcean/_depMarineSystem/_diffuseOcean) is NOT modified, so elevations/flow are untouched. This is the subaqueous analogue ofsedplex._pitFineFraction: the lower-Gmar “fines deposit less readily / travel farther” behaviour is expressed as fine biased toward the deeper deposits rather than re-routed.- Mechanism:
Domain marine fine fraction
ff_mar = Σ(fineFlux) / Σ(sedFlux)— the fine that actually reached the sea after the continental cascade (fineFluxis the post-cascade fine input,sedFluxthe total input, both zero outside the marine sinks). With the fine-enriched overspill in the cascade, this is genuinely enriched relative to the upstream-eroded composition.Water depth
d = max(sealevel − hl, 0)is the distal/deep proxy.Fine fraction biased ∝ d, renormalised to the deposit-weighted mean depth, so
Σ(mdep·larea·ffrac) == ff_mar·Σ(mdep·larea).
- Parameters:
hl – pre-deposition local elevation
sedFlux – marine input sediment volume per node (m^3)
fineFlux – marine input fine sediment volume per node (m^3)
- SEAMesh._marineProvFraction(sedFlux)[source]#
In-model provenance (B2b, marine): set the marine deposit’s source composition to the domain-wide composition of sediment reaching the sea —
ff_mar[c] = Σ(provFrac[c]·sedFlux) / Σ sedFlux— applied uniformly (no depth bias: provenance is a passive label, unlike the grain-size sorting in_marineFineFraction).This is the marine analogue of the through-flux
provFracused on land: it replaces the (often near-zero) through-flux composition at marine-only nodes with the basin-delivered mix, so marine sink deposits carry the right provenance.Σ_c ff_mar == 1(sinceΣ_c provFrac == 1where there is flux), sostratPstill partitionsstratH.Like the dual marine fraction this is domain-uniform — it gets the right total per-class fraction into the marine record, not a per-river- mouth spatial split (the same standard as dual lithology).
- Parameters:
sedFlux – marine input sediment volume per node (m^3).