Flux related to the shallow water model. More...
Flux related to the shallow water model.
Files | |
file | exactriemann.hh |
Function to compute the Riemann flux at the interface. | |
file | fluxlimiterlet.hh |
Function to limit the fluxes. | |
file | riemannproblem.hh |
This file includes a function to construct the Riemann problem. | |
Functions | |
template<class Scalar > | |
RiemannSolution< Scalar > | Dumux::ShallowWater::exactRiemann (const Scalar dl, const Scalar dr, const Scalar ul, const Scalar ur, const Scalar vl, const Scalar vr, const Scalar grav, const Scalar s=0.0) |
Exact Riemann solver for the shallow water equations. More... | |
template<class Scalar > | |
static Scalar | Dumux::ShallowWater::fluxLimiterLET (const Scalar valueLeft, const Scalar valueRight, const Scalar upperH, const Scalar lowerH) |
Flux limiter function to scale fluxes for small water depths. More... | |
template<class Scalar , class GlobalPosition > | |
std::array< Scalar, 3 > | Dumux::ShallowWater::riemannProblem (const Scalar waterDepthLeft, const Scalar waterDepthRight, Scalar velocityXLeft, Scalar velocityXRight, Scalar velocityYLeft, Scalar velocityYRight, const Scalar bedSurfaceLeft, const Scalar bedSurfaceRight, const Scalar gravity, const GlobalPosition &nxy) |
Construct a Riemann problem and solve it. More... | |
RiemannSolution< Scalar > Dumux::ShallowWater::exactRiemann | ( | const Scalar | dl, |
const Scalar | dr, | ||
const Scalar | ul, | ||
const Scalar | ur, | ||
const Scalar | vl, | ||
const Scalar | vr, | ||
const Scalar | grav, | ||
const Scalar | s = 0.0 |
||
) |
Exact Riemann solver for the shallow water equations.
The flux of the 2D shallow water equations must be rotated to a 1D problem before the Riemann solver can be applied. The computed water flux is given in m^2/s, the momentum fluxes are given in m^3/s^2.
This Riemann solver is described in the book "Shock-capturing methods for free-surface shallow flows" from Toro, 2001. We keep the notation for the variables after Toro.
dl | water depth on the left side |
dr | water depth on the right side |
ul | veloctiyX on the left side |
ur | velocityX on the right side |
vl | velocityY on the left side |
vr | velocityY on the right side |
grav | gravity constant |
s | sample point (default = 0 since x = 0 for flux computation) |
|
static |
Flux limiter function to scale fluxes for small water depths.
This function acts like a kind of mobility, it limits the water flux for small water depths. The mobility depends on the left and right side state of a variable. The LET-Type function is described at https://en.wikipedia.org/wiki/Relative_permeability The LET-Parameters are fixed. The current parameters are set to a values to get a nice curve. They have no physical meaning.
Scalar | the scalar type for scalar physical quantities |
valueLeft | The value on the left side |
valueRight | The value on the right side |
upperH | Where to start the limit the function (mobility < 1) |
lowerH | Where the limit should reach zero (mobility < 0) |
std::array< Scalar, 3 > Dumux::ShallowWater::riemannProblem | ( | const Scalar | waterDepthLeft, |
const Scalar | waterDepthRight, | ||
Scalar | velocityXLeft, | ||
Scalar | velocityXRight, | ||
Scalar | velocityYLeft, | ||
Scalar | velocityYRight, | ||
const Scalar | bedSurfaceLeft, | ||
const Scalar | bedSurfaceRight, | ||
const Scalar | gravity, | ||
const GlobalPosition & | nxy | ||
) |
Construct a Riemann problem and solve it.
Riemann problem applies the hydrostatic reconstruction, uses the Riemann invariants to transform the two-dimensional problem to a one-dimensional problem, solves this new problem, and rotates the problem back. Further it applies a flux limiter for the water flux to handle drying elements. The correction of the bed slope source term leads to a non-symmetric flux term at the interface for the momentum equations. Since DuMuX computes the fluxes twice from each side this does not matter.
So far this implements the exact Riemann solver (with reconstruction after Audusse).
The computed water flux (localFlux[0]) is given in m^2/s, the momentum fluxes (localFlux[1], localFlux[2]) are given in m^3/s^2. Later this flux will be multiplied by the scvf.area() (given in m for a 2D problem) to get the flux over a face.
waterDepthLeft | water depth on the left side |
waterDepthRight | water depth on the right side |
velocityXLeft | veloctiyX on the left side |
velocityXRight | velocityX on the right side |
velocityYLeft | velocityY on the left side |
velocityYRight | velocityY on the right side |
bedSurfaceLeft | surface of the bed on the left side |
bedSurfaceRight | surface of the bed on the right side |
gravity | gravity constant |
nxy | the normal vector |