Geilo Winter School 2012
Lecture 9: Navier–Stokes in FEniCS
Anders Logg
1 / 13
Course outline
Sunday
L1 Introduction to FEM
Monday
L2 Fundamentals of continuum mechanics (I)
L3 Fundamentals of continuum mechanics (II)
L4 Introduction to FEniCS
Tuesday
L5 Solid mechanics
L6 Static hyperelasticity in FEniCS
L7 Dynamic hyperelasticity in FEniCS
Wednesday
L8 Fluid mechanics
L9 Navier–Stokes in FEniCS
2 / 13
The incompressible Navier–Stokes equations
ρ(u̇ + u · ∇u) − ∇ · σ(u, p) = f in Ω × (0, T ]
∇·u=0 in Ω × (0, T ]
u = gD on ΓD × (0, T ]
σ · n = gN on ΓN × (0, T ]
u(·, 0) = u0 in Ω
• u is the fluid velocity and p is the pressure
• ρ is the fluid density
• σ(u, p) = 2µ(u) − pI is the Cauchy stress tensor
• (u) = 21 (∇u + (∇u)> ) is the symmetric gradient
• f is a given body force per unit volume
• gD is a given boundary displacement
• gN is a given boundary traction
• u0 is a given initial velocity
3 / 13
Variational problem
Multiply the momentum equation by a test function v and
integrate by parts:
Z Z Z Z
ρ(u̇+u·∇u)·v dx+ σ(u, p) : (u) dx = f ·v dx+ gN ·v ds
Ω Ω Ω ΓN
Short-hand notation:
hρu̇, vi + hρu · ∇u, vi + hσ(u, p), (v)i = hf, vi + hgN , viΓN
Multiply the continuity equation by a test function q and sum
up: find (u, p) ∈ V such that
hρu̇, vi + hρu · ∇u, vi + hσ(u, p), (v)i + h∇ · u, qi = hf, vi + hgN , viΓN
for all (v, q) ∈ V̂
4 / 13
Discrete variational problem
Time-discretization leads to a saddle-point problem on each
time step:
M + ∆tA + ∆tN (U ) ∆tB U b
=
∆tB > 0 P 0
• Efficient solution of the saddle-point problem relies on the
efficiency of special-purpose preconditioners (Uzawa
iteration, Schur complement preconditioners, . . . )
• We will use another approach (simpler and often more
efficient)
5 / 13
A splitting method
cG(1) / Crank-Nicolson approximation with explicit convection:
ρDt un + ρun−1 · ∇un−1 − ∇ · σ(un−1/2 , pn−1/2 ) = f n−1/2
Compute the tentative velocity uF using the approximation
ρDt uF + ρun−1 · ∇un−1 − ∇ · σ(un−1/2 , pn−3/2 ) = f n−1/2
Subtract:
ρ(Dt un − Dt uF ) − ∇ · σ(un−1/2 , pn−1/2 − pn−3/2 ) = 0
Expand and rearrange:
ρ(un − uF ) + kn ∇(pn−1/2 − pn−3/2 ) = 0
Dt u = (un − un−1 )/kn and kn = tn − tn−1
6 / 13
A splitting method (contd.)
We have found that:
ρ(un − uF ) + kn ∇(pn−1/2 − pn−3/2 ) = 0
It follows that
ρun = ρuF − kn ∇(pn−1/2 − pn−3/2 ) (1)
Take the divergence and set ∇ · un = 0:
− kn ∆pn−1/2 = −kn ∆pn−3/2 − ρ∇ · uF (2)
• Compute pn−1/2 by solving the Poisson problem (2)
• Compute un by solving the projection problem (1)
• To consider: What about the boundary conditions for the
Poisson problem (2)?
7 / 13
Boundary conditions
• For outflow boundary conditions, corresponding to
so-called “do-nothing” boundary conditions for the
Laplacian formulation, we take ∂n u = 0:
σ(u, p) · n = (2µ(u) − pI) · n = µ∇u · n + µ(∇)> · n − pn
= µ(∇u)> · n − pn ≈ µ(∇un−1/2 )> · n − pn−3/2 n
• Boundary conditions for the pressure Poisson problem:
∂n ṗ = 0
on the pressure Neumann boundary
8 / 13
Incremental pressure correction scheme (IPCS)
1 Compute the tentative velocity uF by
1
hρDtn uF , vi + hρun−1 · ∇un−1 , vi + hσ(un− 2 , pn−3/2 ), (v)i
1
− hµn · (∇un− 2 )> , vi∂Ω + hpn−3/2 n, vi∂Ω = hf n−1/2 , vi
2 Compute the corrected pressure pn−1/2 by
kn h∇pn−1/2 , ∇qi = kn h∇pn−3/2 , ∇qi − hρ∇ · uF , qi
3 Compute the corrected velocity un by
hρun , vi = hρuF , vi − kn h∇(pn−1/2 − pn−3/2 ), vi
9 / 13
Useful FEniCS tools (I)
Note grad vs. ∇:
dot ( grad ( u ) , u )
dot (u , nabla_grad ( u ) )
Defining operators:
def sigma (u , p ) :
return 2 . 0 * mu * sym ( grad ( u ) ) - p * Identity ( 2 )
The facet normal n:
n = FacetNormal ( mesh )
10 / 13
Useful FEniCS tools (II)
Assembling matrices and vectors:
A = assemble ( a )
b = assemble ( L )
Solving linear systems:
solve (A , x , b )
solve (A , x , b , " gmres " , " ilu " )
solve (A , x , b , " cg " , " amg " )
11 / 13
The FEniCS challenge!
Solve the incompressible Navier–Stokes equations for the flow of
water around a dolphin. The water is initially at rest and the
flow is driven by a pressure gradient.
12 / 13
The FEniCS challenge!
• Compute the solution on the time interval [0, 0.1] with time
steps of size k = 0.0005
• Set p = 1 kPa at the inflow and p = 0 at the outflow
• The density of water is ρ = 1000 kg/m3 and the viscosity is
µ = 0.001002 kg/(m · s)
• To check your answer, compute the average velocity in the
x-direction.
The student(s) who first produce the right anwswer will be
rewarded with an exclusive FEniCS coffee mug!
13 / 13