Today, I want to explain a bit about how to solve one of the simplest and fundamental equations in PDE.
Poisson Equation
− ∇ ⋅ ( q ( u ) ∇ u ) = f -\nabla \cdot (q(u)\nabla u) = f − ∇ ⋅ ( q ( u ) ∇ u ) = f
Here, the coefficient q ( u ) q(u) q ( u ) makes the equation nonlinear.
Applying the identity ∇ ⋅ ( u v ) = ( ∇ u ) v + u ⋅ ∇ v \nabla \cdot (uv) = (\nabla u)v + u\cdot \nabla v ∇ ⋅ ( uv ) = ( ∇ u ) v + u ⋅ ∇ v
− ∫ Ω ( ∇ ⋅ ( q ( u ) ∇ u ) ) v d x = ∫ Ω ( q ( u ) ∇ u ) ⋅ ∇ v d x − ∫ Ω ∇ ⋅ ( q ( u ) ∇ u ) v d x -\int_{\Omega} (\nabla \cdot (q(u)\nabla u)) v\,\mathrm{d}x = \int_{\Omega} (q(u)\nabla u) \cdot \nabla v \, \mathrm{d} x - \int_{\Omega} \nabla\cdot (q(u)\nabla u) v \,\mathrm{d}x − ∫ Ω ( ∇ ⋅ ( q ( u ) ∇ u )) v d x = ∫ Ω ( q ( u ) ∇ u ) ⋅ ∇ v d x − ∫ Ω ∇ ⋅ ( q ( u ) ∇ u ) v d x
= ∫ Ω f v d x Divergence theorem: = \int_{\Omega} f v\,\mathrm{d}x\\
\text{Divergence theorem:} = ∫ Ω f v d x Divergence theorem:
= ∫ Ω ( q ( u ) ∇ u ) ⋅ ∇ v d x − ∫ ∂ Ω n ⋅ ( q ( u ) ∇ u ) v d s = \int_{\Omega} (q(u)\nabla u) \cdot \nabla v \, \mathrm{d} x - \int_{\partial \Omega} \mathrm{n}\cdot (q(u)\nabla u) v \,\mathrm{d}s = ∫ Ω ( q ( u ) ∇ u ) ⋅ ∇ v d x − ∫ ∂ Ω n ⋅ ( q ( u ) ∇ u ) v d s
Applying weak form transformation: ∀ v ∈ ∂ Ω : v = 0 \forall v \in \partial\Omega: v = 0 ∀ v ∈ ∂ Ω : v = 0
∫ Ω ( q ( u ) ∇ u ) ⋅ ∇ v d x = ∫ Ω f v d x \int_{\Omega} (q(u)\nabla u) \cdot \nabla v \,\mathrm{d}x = \int_{\Omega} f v\,\mathrm{d}x\\ ∫ Ω ( q ( u ) ∇ u ) ⋅ ∇ v d x = ∫ Ω f v d x
F ( u , v ) = ∫ Ω ( q ( u ) ∇ u ⋅ ∇ v − f v ) d x F(u, v) = \int_{\Omega} (q(u)\nabla u \cdot \nabla v - fv)\,\mathrm{d}x F ( u , v ) = ∫ Ω ( q ( u ) ∇ u ⋅ ∇ v − f v ) d x
Now, for the variational form:
a ( u , v ) = L ( v ) a(u,v) = L(v)\\ a ( u , v ) = L ( v )
= ∫ Ω ( q ( u ) ∇ u ) ⋅ ∇ v d x = \int_{\Omega} (q(u)\nabla u) \cdot \nabla v \,\mathrm{d}x = ∫ Ω ( q ( u ) ∇ u ) ⋅ ∇ v d x
and L ( u , v ) = ∫ Ω f v d x L(u,v) = \int_{\Omega} f v\,\mathrm{d}x L ( u , v ) = ∫ Ω f v d x
V = FunctionSpace(mesh, 'P' , 1 )
u_D = Expression(u_ccode, degree=2 )
bc = DirichletBC(V, u_D, boundary)
u = Function(V)
v = TestFunction(V)
f = Expression(f_ccode, degree=1 )
F = q(u)*dot(grad(u), grad(v))*dx - f*v*dx
solve(F == 0 , u, bc)
Membrane Poisson Equation
We want to compute the deflection D ( x , y ) D(x,y) D ( x , y ) of a two-dimensional, circular membrane of radius R R R , subject to a load p p p over the membrane. The appropriate PDE model is:
− T ∇ 2 D = p in Ω = { ( x , y ) ∣ x 2 + y 2 ≤ R } -T\nabla^{2}D = p \quad \text{in}\; \Omega = \lbrace (x,y) \big\vert x^{2}+y^{2} \leq R \rbrace − T ∇ 2 D = p in Ω = {( x , y ) x 2 + y 2 ≤ R }
Here, T T T is the tension in the membrane (constant), and p p p is the external pressure load. The bounday of the membrane has no deflection, implying D = 0 D = 0 D = 0 as a boundary condition. A localized load can be modeled as a Gaussian function:
p ( x , y ) = A 2 π σ exp ( − 1 2 ( x − x 0 σ ) 2 − 1 2 ( y − y 0 σ ) 2 ) p(x,y) = \frac{A}{2\pi\sigma} \exp\bigg( -\frac{1}{2}\Big(\frac{x-x_{0}}{\sigma}\Big)^{2} - \frac{1}{2} \Big(\frac{y-y_{0}}{\sigma}\Big)^{2} \bigg) p ( x , y ) = 2 πσ A exp ( − 2 1 ( σ x − x 0 ) 2 − 2 1 ( σ y − y 0 ) 2 )
The parameter A A A is the amplitude of the pressure, ( x 0 , y 0 ) (x_{0}, y_{0}) ( x 0 , y 0 ) the localization of the maximum point of the load, and σ \sigma σ the "width" of p p p . We will take the center ( x 0 , y 0 ) (x_{0}, y_{0}) ( x 0 , y 0 ) of the pressure to be ( 0 , R 0 ) (0, R_{0}) ( 0 , R 0 ) for some 0 < R 0 < R 0<R_{0}<R 0 < R 0 < R .
∇ 2 w = 4 exp ( − β 2 ( x 2 + ( y − R 0 ) 2 ) ) , ( x , y ) ∈ Ω \nabla^{2} w = 4 \exp \big( -\beta^{2}(x^{2} + (y-R_{0})^{2}) \big), \quad (x,y) \in \Omega ∇ 2 w = 4 exp ( − β 2 ( x 2 + ( y − R 0 ) 2 ) ) , ( x , y ) ∈ Ω
Applying the identity ∇ ⋅ ( u v ) = ( ∇ u ) v + u ⋅ ∇ v \nabla \cdot (uv) = (\nabla u)v + u \cdot \nabla v ∇ ⋅ ( uv ) = ( ∇ u ) v + u ⋅ ∇ v :
− ∫ Ω ( ∇ 2 w ) v d x = ∫ Ω ∇ w ⋅ ∇ v d x − ∫ Ω ∇ ⋅ ( ∇ w ) v d x -\int_{\Omega} (\nabla^{2} w) v\,\mathrm{d}x = \int_{\Omega} \nabla w \cdot \nabla v \, \mathrm{d} x - \int_{\Omega} \nabla\cdot (\nabla w) v \,\mathrm{d}x\\ − ∫ Ω ( ∇ 2 w ) v d x = ∫ Ω ∇ w ⋅ ∇ v d x − ∫ Ω ∇ ⋅ ( ∇ w ) v d x
= ∫ Ω 4 exp ( − β 2 ( x 2 + ( y − R 0 ) 2 ) ) v d x Divergence theorem: = \int_{\Omega} 4\exp(-\beta^{2}(x^{2}+(y-R_{0})^{2})) v\,\mathrm{d}x\\
\text{Divergence theorem:} = ∫ Ω 4 exp ( − β 2 ( x 2 + ( y − R 0 ) 2 )) v d x Divergence theorem:
= ∫ Ω ∇ w ⋅ ∇ v d x − ∫ ∂ Ω n ⋅ ( ∇ w ) v d s = \int_{\Omega} \nabla w \cdot \nabla v \, \mathrm{d} x - \int_{\partial \Omega} \mathrm{n}\cdot (\nabla w) v \,\mathrm{d}s = ∫ Ω ∇ w ⋅ ∇ v d x − ∫ ∂ Ω n ⋅ ( ∇ w ) v d s
Applying weak form transformation ∀ v ∈ ∂ Ω , v = 0 \forall v \in \partial\Omega, v = 0 ∀ v ∈ ∂ Ω , v = 0 :
∫ Ω ∇ w ⋅ ∇ v d x = ∫ Ω 4 exp ( − β 2 ( x 2 + ( y − R 0 ) 2 ) ) v d x \int_{\Omega} \nabla w \cdot \nabla v \,\mathrm{d}x = \int_{\Omega} 4\exp(-\beta^{2}(x^{2}+(y-R_{0})^{2})) v\,\mathrm{d}x ∫ Ω ∇ w ⋅ ∇ v d x = ∫ Ω 4 exp ( − β 2 ( x 2 + ( y − R 0 ) 2 )) v d x
Now, for the variational form:
a ( u , v ) = L ( v ) a(u,v) = L(v) a ( u , v ) = L ( v )
= ∫ Ω ∇ w ⋅ ∇ v d x = \int_{\Omega} \nabla w \cdot \nabla v \,\mathrm{d}x = ∫ Ω ∇ w ⋅ ∇ v d x
L ( u , v ) = ∫ Ω 4 exp ( − β 2 ( x 2 + ( y − R 0 ) 2 ) ) v d x L(u,v) = \int_{\Omega} 4\exp(-\beta^{2}(x^{2}+(y-R_{0})^{2})) v\,\mathrm{d}x L ( u , v ) = ∫ Ω 4 exp ( − β 2 ( x 2 + ( y − R 0 ) 2 )) v d x
w_D = Constant(0 )
def boundary (x, on_boundary ):
return on_boundary
bc = DirichletBC(V, w_D, boundary)
beta = 8
R0 = 0.6
p = Expression('4*exp(-pow(beta, 2)*(pow(x[0], 2) + pow(x[1] - R0, 2)))' , degree=1 , beta=beta, R0=R0)
w = TrialFunction(V)
v = TestFunction(V)
a = dot(grad(w), grad(v))*dx
L = p*v*dx
w = Function(V)
solve(a == L, w, bc)