Poisson equationΒΆ
We solve the Poisson equation on the unit-square, with homogeneous Dirichlet boundary conditions. You can run the example
either directly within the Python interpreter (Python version 3 is required!):
python3 poisson.py
or you can run it with Netgen providing you also a graphical user interface
netgen poisson.py
# solve the Poisson equation -Delta u = f
# with Dirichlet boundary condition u = 0
from ngsolve import *
from netgen.geom2d import unit_square
ngsglobals.msg_level = 1
# generate a triangular mesh of mesh-size 0.2
mesh = Mesh(unit_square.GenerateMesh(maxh=0.2))
# H1-conforming finite element space
fes = H1(mesh, order=3, dirichlet=[1,2,3,4])
# define trial- and test-functions
u = fes.TrialFunction()
v = fes.TestFunction()
# the right hand side
f = LinearForm(fes)
f += 32 * (y*(1-y)+x*(1-x)) * v * dx
# the bilinear-form
a = BilinearForm(fes, symmetric=True)
a += grad(u)*grad(v)*dx
a.Assemble()
f.Assemble()
# the solution field
gfu = GridFunction(fes)
gfu.vec.data = a.mat.Inverse(fes.FreeDofs(), inverse="sparsecholesky") * f.vec
# print (u.vec)
# plot the solution (netgen-gui only)
Draw (gfu)
Draw (-grad(gfu), mesh, "Flux")
exact = 16*x*(1-x)*y*(1-y)
print ("L2-error:", sqrt (Integrate ( (gfu-exact)*(gfu-exact), mesh)))
The solution visualized in Netgen: