19.06.2015 Views

FEniCS Course - FEniCS Project

FEniCS Course - FEniCS Project

FEniCS Course - FEniCS Project

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>FEniCS</strong> <strong>Course</strong><br />

Lecture 10: Discontinuous Galerkin<br />

methods for elliptic equations<br />

Contributors<br />

André Massing<br />

1 / 10


The discontinuous Galerkin (DG) method uses<br />

discontinuous basis functions<br />

u<br />

u h<br />

t<br />

V h = P k (T h ) = {v h ∈ L 2 (Ω) : v h | T ∈ P k (T ) ∀ T ∈ T h }<br />

2 / 10


The discontinuous Galerkin (DG) method uses<br />

discontinuous basis functions<br />

u<br />

u h<br />

t<br />

V h = P k (T h ) = {v h ∈ L 2 (Ω) : v h | T ∈ P k (T ) ∀ T ∈ T h }<br />

2 / 10


The discontinuous Galerkin (DG) method uses<br />

discontinuous basis functions<br />

u<br />

u h<br />

t<br />

V h = P k (T h ) = {v h ∈ L 2 (Ω) : v h | T ∈ P k (T ) ∀ T ∈ T h }<br />

2 / 10


The DG method eases mesh adaptivity<br />

u<br />

u h<br />

t<br />

3 / 10


The DG method eases mesh adaptivity<br />

u<br />

u h<br />

t<br />

3 / 10


The DG method eases mesh adaptivity<br />

u<br />

u h<br />

t<br />

3 / 10


The DG method eases space adaptivity<br />

u<br />

u h<br />

t<br />

4 / 10


The DG method eases space adaptivity<br />

u<br />

u h<br />

t<br />

4 / 10


The DG method eases space adaptivity<br />

u<br />

u h<br />

t<br />

4 / 10


DG-FEM Notation<br />

Interface facets<br />

Boundary facet<br />

Average 〈v〉 = 1 2 (v+ + v − )<br />

〈v〉 = [v] = v<br />

Jump [v] = (v + − v − )<br />

Jump identity<br />

[(∇ h v)w h ] = [∇ h v]〈w h 〉 + 〈∇ h v〉[w h ]<br />

5 / 10


The symmetric interior penalty method (SIP)<br />

a h (u h , v h ) = ∑ ∫<br />

∇u h · ∇v h dx − ∑ ∫<br />

〈∇u h 〉 · n[v h ] dS<br />

T ∈T<br />

T<br />

F ∈F<br />

F<br />

} {{ }<br />

Consistency<br />

− ∑ ∫<br />

〈∇v h 〉 · n[u h ] dS + ∑ γ<br />

[u h ][v h ] dS<br />

F ∈F<br />

F<br />

h F<br />

F ∈F<br />

∫F<br />

} {{ } } {{ }<br />

Symmetry<br />

Penalty<br />

6 / 10


The symmetric interior penalty method (SIP)<br />

a h (u h , v h ) = ∑ ∫<br />

∇u h · ∇v h dx − ∑ ∫<br />

〈∇u h 〉 · n[v h ] dS<br />

T ∈T<br />

T<br />

F ∈F<br />

F<br />

} {{ }<br />

Consistency<br />

− ∑ ∫<br />

〈∇v h 〉 · n[u h ] dS + ∑ γ<br />

[u h ][v h ] dS<br />

F ∈F<br />

F<br />

h F<br />

F ∈F<br />

∫F<br />

} {{ } } {{ }<br />

Symmetry<br />

Penalty<br />

6 / 10


The symmetric interior penalty method (SIP)<br />

a h (u h , v h ) = ∑ ∫<br />

∇u h · ∇v h dx − ∑ ∫<br />

〈∇u h 〉 · n[v h ] dS<br />

T ∈T<br />

T<br />

F ∈F<br />

F<br />

} {{ }<br />

Consistency<br />

− ∑ ∫<br />

〈∇v h 〉 · n[u h ] dS + ∑ γ<br />

[u h ][v h ] dS<br />

F ∈F<br />

F<br />

h F<br />

F ∈F<br />

∫F<br />

} {{ } } {{ }<br />

Symmetry<br />

Penalty<br />

6 / 10


The symmetric interior penalty method (SIP)<br />

a h (u h , v h ) = ∑ ∫<br />

∇u h · ∇v h dx − ∑ ∫<br />

〈∇u h 〉 · n[v h ] dS<br />

T ∈T<br />

T<br />

F ∈F<br />

F<br />

} {{ }<br />

Consistency<br />

− ∑ ∫<br />

〈∇v h 〉 · n[u h ] dS + ∑ γ<br />

[u h ][v h ] dS<br />

F ∈F<br />

F<br />

h F<br />

F ∈F<br />

∫F<br />

} {{ } } {{ }<br />

Symmetry<br />

Penalty<br />

∫<br />

l h (v h ) = fv h dx − ∑<br />

〈∇v h 〉 · ng dS + ∑ γ<br />

gv h dS<br />

Ω<br />

F ∈F b ∫F<br />

h F<br />

∫F<br />

F ∈F b<br />

6 / 10


The symmetric interior penalty method (SIP)<br />

a h (u h , v h ) = ∑ ∫<br />

∇u h · ∇v h dx − ∑ ∫<br />

〈∇u h 〉 · n[v h ] dS<br />

T ∈T<br />

T<br />

F ∈F<br />

F<br />

} {{ }<br />

Consistency<br />

− ∑ ∫<br />

〈∇v h 〉 · n[u h ] dS + ∑ γ<br />

[u h ][v h ] dS<br />

F ∈F<br />

F<br />

h F<br />

F ∈F<br />

∫F<br />

} {{ } } {{ }<br />

Symmetry<br />

Penalty<br />

∫<br />

l h (v h ) = fv h dx − ∑<br />

〈∇v h 〉 · ng dS + ∑ γ<br />

gv h dS<br />

Ω<br />

F ∈F b ∫F<br />

h F<br />

∫F<br />

F ∈F b<br />

6 / 10


Split of SIP form into interior and boundary<br />

contribution<br />

a h (u h , v h ) = ∑ T ∈T<br />

∫<br />

− ∑<br />

T<br />

F ∈F i ∫F<br />

∇u h · ∇v h dx − ∑<br />

F ∈F i ∫F<br />

〈∇u h 〉 · n[v h ] dS<br />

} {{ }<br />

Consistency<br />

〈∇v h 〉 · n[u h ] dS + ∑ γ<br />

[u h ][v h ] dS<br />

} {{ }<br />

Symmetry<br />

− ∑<br />

∇u h · nv h ds<br />

F ∈F b ∫F<br />

} {{ }<br />

Consistency<br />

+ ∑ γ<br />

u h v h ds<br />

h F<br />

∫F<br />

F ∈F b<br />

− ∑<br />

h F<br />

∫F<br />

F ∈F i<br />

} {{ }<br />

Penalty<br />

F ∈F b ∫F<br />

∇v h · nu h ds<br />

} {{ }<br />

Symmetry<br />

} {{ }<br />

Penalty 7 / 10


Useful <strong>FEniCS</strong> tools (I)<br />

Access facet normals and local mesh size:<br />

n = FacetNormal ( mesh )<br />

h = CellSize ( mesh )<br />

Restriction:<br />

f = Function (V)<br />

f(’+’)<br />

grad (f)(’+’)<br />

8 / 10


Useful <strong>FEniCS</strong> tools (II)<br />

Average and jump:<br />

# define it yourself<br />

h_avg = (h(’+’) + h(’-’))/2<br />

# or use built -in expression<br />

avg (h)<br />

jump (v)<br />

jump (v, n)<br />

Integration on interior facets:<br />

... *dS<br />

alpha / h_avg * dot ( jump (v, n), jump (u, n))*dS<br />

9 / 10


Exercise<br />

Solve our favorite Poisson problem given<br />

• Domain:<br />

Ω = [0, 1] × [0, 1],<br />

∂Ω D = ∂Ω<br />

• Source and boundary values:<br />

f(x, y) = 200 cos(10πx) cos(10πy)<br />

g D (x, y) = cos(10πx) cos(10πy)<br />

Mission: Solve this PDE numerically by using the SIP method.<br />

Print the errornorm for both the L 2 and the H 1 norm for various<br />

mesh sizes. For a UnitSquareMesh(128,128) the error should be<br />

0.0009166 and 0.1962, respectively.<br />

Extra mission: Implement the NIP variant, solve the same<br />

problem and compare the H 1 and L 2 error for a range of<br />

meshes UnitSquareMesh(N,N), N = 2 j , j = 2, · · · , 7. Can you<br />

determine the order of convergence?<br />

10 / 10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!