Weakly Compressible SPH
Weakly compressible SPH as introduced by Monaghan (1994). This formulation relies on a stiff equation of state that generates large pressure changes for small density variations.
TrixiParticles.WeaklyCompressibleSPHSystem
— TypeWeaklyCompressibleSPHSystem(initial_condition,
density_calculator, state_equation,
smoothing_kernel, smoothing_length;
viscosity=nothing, density_diffusion=nothing,
acceleration=ntuple(_ -> 0.0, NDIMS),
buffer_size=nothing,
correction=nothing, source_terms=nothing,
surface_tension=nothing, surface_normal_method=nothing,
reference_particle_spacing=0.0))
System for particles of a fluid. The weakly compressible SPH (WCSPH) scheme is used, wherein a stiff equation of state generates large pressure changes for small density variations. See Weakly Compressible SPH for more details on the method.
Arguments
initial_condition
:InitialCondition
representing the system's particles.density_calculator
: Density calculator for the system. SeeContinuityDensity
andSummationDensity
.state_equation
: Equation of state for the system. SeeStateEquationCole
.smoothing_kernel
: Smoothing kernel to be used for this system. See Smoothing Kernels.smoothing_length
: Smoothing length to be used for this system. See Smoothing Kernels.
Keyword Arguments
viscosity
: Viscosity model for this system (default: no viscosity). SeeArtificialViscosityMonaghan
orViscosityAdami
.density_diffusion
: Density diffusion terms for this system. SeeDensityDiffusion
.acceleration
: Acceleration vector for the system. (default: zero vector)buffer_size
: Number of buffer particles. This is needed when simulating withOpenBoundarySPHSystem
.correction
: Correction method used for this system. (default: no correction, see Corrections)source_terms
: Additional source terms for this system. Has to be eithernothing
(by default), or a function of(coords, velocity, density, pressure, t)
(which are the quantities of a single particle), returning aTuple
orSVector
that is to be added to the acceleration of that particle. See, for example,SourceTermDamping
. Note that these source terms will not be used in the calculation of the boundary pressure when using a boundary withBoundaryModelDummyParticles
andAdamiPressureExtrapolation
. The keyword argumentacceleration
should be used instead for gravity-like source terms.surface_tension
: Surface tension model used for this SPH system. (default: no surface tension)surface_normal_method
: The surface normal method to be used for this SPH system. (default: no surface normal method or ColorfieldSurfaceNormal() if a surface_tension model is used)reference_particle_spacing
: The reference particle spacing used for weighting values at the boundary, which currently is only needed when using surface tension.
Equation of State
The equation of state is used to relate fluid density to pressure and thus allow an explicit simulation of the WCSPH system. The equation in the following formulation was introduced by Cole (1948) (pp. 39 and 43). The pressure $p$ is calculated as
\[ p = B \left(\left(\frac{\rho}{\rho_0}\right)^\gamma - 1\right) + p_{\text{background}},\]
where $\rho$ denotes the density, $\rho_0$ the reference density, and $p_{\text{background}}$ the background pressure, which is set to zero when applied to free-surface flows (Adami et al., 2012).
The bulk modulus, $B = \frac{\rho_0 c^2}{\gamma}$, is calculated from the artificial speed of sound $c$ and the isentropic exponent $\gamma$.
An ideal gas equation of state with a linear relationship between pressure and density can be obtained by choosing exponent=1
, i.e.
\[ p = B \left( \frac{\rho}{\rho_0} -1 \right) = c^2(\rho - \rho_0).\]
For higher Reynolds numbers, exponent=7
is recommended, whereas at lower Reynolds numbers exponent=1
yields more accurate pressure estimates since pressure and density are proportional (see Morris, 1997).
When using SummationDensity
(or DensityReinitializationCallback
) and free surfaces, initializing particles with equal spacing will cause underestimated density and therefore strong attractive forces between particles at the free surface. Setting clip_negative_pressure=true
can avoid this.
TrixiParticles.StateEquationCole
— TypeStateEquationCole(; sound_speed, reference_density, exponent,
background_pressure=0.0, clip_negative_pressure=false)
Equation of state to describe the relationship between pressure and density of water up to high pressures.
Keywords
sound_speed
: Artificial speed of sound.reference_density
: Reference density of the fluid.exponent
: A value of7
is usually used for most simulations.background_pressure=0.0
: Background pressure.clip_negative_pressure=false
: Negative pressure values are clipped to 0, which prevents spurious surface tension withSummationDensity
but allows unphysical rarefaction of the fluid.
TrixiParticles.StateEquationIdealGas
— TypeStateEquationIdealGas( ;sound_speed, reference_density, gamma, background_pressure=0.0,
clip_negative_pressure=false)
Equation of state to describe the relationship between pressure and density of a gas using the Ideal Gas Law.
Keywords
sound_speed
: Artificial speed of sound.reference_density
: Reference density of the fluid.gamma
: Heat-capacity ratiobackground_pressure=0.0
: Background pressure.clip_negative_pressure=false
: Negative pressure values are clipped to 0, which prevents spurious surface tension withSummationDensity
but allows unphysical rarefaction of the fluid.
Density Diffusion
Density diffusion can be used with ContinuityDensity
to remove the noise in the pressure field. It is highly recommended to use density diffusion when using WCSPH.
Formulation
All density diffusion terms extend the continuity equation (see ContinuityDensity
) by an additional term
\[\frac{\mathrm{d}\rho_a}{\mathrm{d}t} = \sum_{b} m_b v_{ab} \cdot \nabla_{r_a} W(\Vert r_{ab} \Vert, h) + \delta h c \sum_{b} V_b \psi_{ab} \cdot \nabla_{r_a} W(\Vert r_{ab} \Vert, h),\]
where $V_b = m_b / \rho_b$ is the volume of particle $b$ and $\psi_{ab}$ depends on the density diffusion method (see DensityDiffusion
for available terms). Also, $\rho_a$ denotes the density of particle $a$ and $r_{ab} = r_a - r_b$ is the difference of the coordinates, $v_{ab} = v_a - v_b$ of the velocities of particles $a$ and $b$.
Numerical Results
All density diffusion terms remove numerical noise in the pressure field and produce more accurate results than weakly commpressible SPH without density diffusion. This can be demonstrated with dam break examples in 2D and 3D. Here, $δ = 0.1$ has been used for all terms. Note that, due to added stability, the adaptive time integration method that was used here can choose higher time steps in the simulations with density diffusion. For the cheap DensityDiffusionMolteniColagrossi
, this results in reduced runtime.
The simpler terms DensityDiffusionMolteniColagrossi
and DensityDiffusionFerrari
do not solve the hydrostatic problem and lead to incorrect solutions in long-running steady-state hydrostatic simulations with free surfaces (Antuono et al., 2012). This can be seen when running the simple rectangular tank example until $t = 40$ (again using $δ = 0.1$):
DensityDiffusionAntuono
adds a correction term to solve this problem, but this term is very expensive and adds about 40–50% of computational cost.
API
TrixiParticles.DensityDiffusion
— TypeDensityDiffusion
An abstract supertype of all density diffusion formulations.
Currently, the following formulations are available:
Formulation | Suitable for Steady-State Simulations | Low Computational Cost |
---|---|---|
DensityDiffusionMolteniColagrossi | ❌ | ✅ |
DensityDiffusionFerrari | ❌ | ✅ |
DensityDiffusionAntuono | ✅ | ❌ |
See Density Diffusion for a comparison and more details.
TrixiParticles.DensityDiffusionAntuono
— TypeDensityDiffusionAntuono(initial_condition; delta)
The commonly used density diffusion terms by Antuono (2010), also referred to as δ-SPH. The density diffusion term by Molteni (2009) is extended by a second term, which is nicely written down by Antuono (2012).
The term $\psi_{ab}$ in the continuity equation in DensityDiffusion
is defined by
\[\psi_{ab} = 2\left(\rho_a - \rho_b - \frac{1}{2}\big(\nabla\rho^L_a + \nabla\rho^L_b\big) \cdot r_{ab}\right) \frac{r_{ab}}{\Vert r_{ab} \Vert^2},\]
where $\rho_a$ and $\rho_b$ denote the densities of particles $a$ and $b$ respectively and $r_{ab} = r_a - r_b$ is the difference of the coordinates of particles $a$ and $b$. The symbol $\nabla\rho^L_a$ denotes the renormalized density gradient defined as
\[\nabla\rho^L_a = -\sum_b (\rho_a - \rho_b) V_b L_a \nabla_{r_a} W(\Vert r_{ab} \Vert, h)\]
with
\[L_a := \left( -\sum_{b} V_b r_{ab} \otimes \nabla_{r_a} W(\Vert r_{ab} \Vert, h) \right)^{-1} \in \R^{d \times d},\]
where $d$ is the number of dimensions.
See DensityDiffusion
for an overview and comparison of implemented density diffusion terms.
TrixiParticles.DensityDiffusionFerrari
— TypeDensityDiffusionFerrari()
A density diffusion term by Ferrari (2009).
The term $\psi_{ab}$ in the continuity equation in DensityDiffusion
is defined by
\[\psi_{ab} = \frac{\rho_a - \rho_b}{2h} \frac{r_{ab}}{\Vert r_{ab} \Vert},\]
where $\rho_a$ and $\rho_b$ denote the densities of particles $a$ and $b$ respectively, $r_{ab} = r_a - r_b$ is the difference of the coordinates of particles $a$ and $b$ and $h$ is the smoothing length.
See DensityDiffusion
for an overview and comparison of implemented density diffusion terms.
TrixiParticles.DensityDiffusionMolteniColagrossi
— TypeDensityDiffusionMolteniColagrossi(; delta)
The commonly used density diffusion term by Molteni (2009).
The term $\psi_{ab}$ in the continuity equation in DensityDiffusion
is defined by
\[\psi_{ab} = 2(\rho_a - \rho_b) \frac{r_{ab}}{\Vert r_{ab} \Vert^2},\]
where $\rho_a$ and $\rho_b$ denote the densities of particles $a$ and $b$ respectively and $r_{ab} = r_a - r_b$ is the difference of the coordinates of particles $a$ and $b$.
See DensityDiffusion
for an overview and comparison of implemented density diffusion terms.