FENaPack
Navier-Stokes equations
solved by GMRES preconditioned from right by
with Schur complement 𝕊 = − div (−νΔ+v⋅∇) − 1∇ would converge in two iterations. Unfortunately 𝕊 is dense. Possible trick is to approximate 𝕊 by swapping the order of the operators
𝕊 ≈ 𝕏BRM1 := ( − Δ)(−νΔ+v⋅∇) − 1
or
𝕊 ≈ 𝕏BRM2 := (−νΔ+v⋅∇) − 1( − Δ).
This gives rise to the action of 11-block of preconditioner ℙ − 1 given by
𝕏BRM1 − 1 := (−νΔ+v⋅∇)( − Δ) − 1.
or
𝕏BRM2 − 1 := ( − Δ) − 1(−νΔ+v⋅∇).
Obviously additional artificial boundary condition for Laplacian solve − Δ − 1 is needed in the action of preconditioner. Modifying the approach from we implement 𝕏BRM1 − 1 as
𝕏BRM1 − 1 := 𝕄p − 1(𝕀 + 𝕂p𝔸p − 1)
where 𝕄p is ν − 1-multiple of mass matrix on pressure, 𝕂p ≈ ν − 1v ⋅ ∇ is a pressure convection matrix, and 𝔸p − 1 ≈ ( − Δ) − 1 is a pressure Laplacian solve with zero boundary condition on inlet. This is implemented by :pyfenapack.preconditioners.PCDPC_BRM1
and demos/navier-stokes-pcd
.
Analogically we prefer to express BRM2 approach as
𝕏BRM2 − 1 := (𝕀 + 𝔸p − 1𝕂p)𝕄p − 1
now with zero boundary condition on outlet for Laplacian solve and additional Robin term in convection matrix 𝕂p roughly as stated in, section 9.2.2. See also demos/navier-stokes-pcd
and :pyfenapack.preconditioners.PCDPC_BRM2
.
Time disretization applied in unsteady problems typically leads to the need to incorporate a reaction term into the preconditioner. Typically, we end up with
or
where τ denotes a fixed time step and the original PCD preconditioner thus becomes PCDR (pressure-convection-diffusion-reaction) preconditioner. A straightforward way of how to implement the above actions is to update the pressure convection matrix 𝕂p by a contribution corresponding to the scaled pressure mass matrix, namely
𝕏BRM1 − 1 := 𝕄p − 1(𝕀+(𝕂p+τ − 1𝕄p)𝔸p − 1),
or
𝕏BRM2 − 1 := (𝕀+𝔸p − 1(𝕂p+τ − 1𝕄p))𝕄p − 1.
However, for unsteady problems we prefer to use the following elaborated implementation of PCDR preconditioners, namely
𝕏BRM1 − 1 := ℝp − 1 + 𝕄p − 1(𝕀 + 𝕂p𝔸p − 1),
or
𝕏BRM2 − 1 := ℝp − 1 + (𝕀 + 𝔸p − 1𝕂p)𝕄p − 1,
where
ℝp := 𝔹(τ − 1𝔻M) − 1𝔹T,
Here, 𝔻M is the diagonal of the velocity mass matrix, 𝔻M = diag (𝕄u), and 𝔹T corresponds to the discrete pressure gradient which is obtained as the 01-block of the original system matrix. Let us emphasize that this submatrix is extracted from the system matrix with velocity Dirichlet boundary conditions being applied on it.
The choice of ℝp as above can be justified especially in the case of τ → 0+, for which
and simultaneously
demos/navier-stokes-pcd demos/unsteady-navier-stokes-pcd
circle
API Reference <api-doc/fenapack>
modindex
genindex
search