This page was generated from unit-11.2-bem-Laplace/Laplace_DtN_indirect.ipynb.
11.2.1 Dirichlet Laplace Indirect MethodΒΆ
keys: homogeneous Dirichlet bvp, single layer potential, ACA
[1]:
from netgen.occ import *
from ngsolve import *
from ngsolve.webgui import Draw
from ngsolve.bem import *
from ngsolve import Projector, Preconditioner
from ngsolve.krylovspace import CG
We consider the Dirichlet boundary value problem
Let us choose the following ansatz for the solution \(u\in H^1(\Omega)\) (indirect ansatz)
and solve for the density \(j\in H^{-\frac12}(\Gamma)\) by the boundary element method, i.e. the numerical solution of the variational formulation
Define the geometry \(\Omega \subset \mathbb R^3\) and create a mesh:
[2]:
sp = Sphere( (0,0,0), 1)
mesh = Mesh( OCCGeometry(sp).GenerateMesh(maxh=0.3)).Curve(4)
Create test and trial function finite element spaces for \(H^{-\frac12}(\Gamma)\) according to the given mesh:
[3]:
fesL2 = SurfaceL2(mesh, order=4, dual_mapping=True)
u,v = fesL2.TnT()
Define Dirichlet data \(u_0\) and compute the right hand side vector:
[4]:
u0 = 1/ sqrt( (x-1)**2 + (y-1)**2 + (z-1)**2 )
rhs = LinearForm (u0*v.Trace()*ds(bonus_intorder=3)).Assemble()
The discretisation of the above variational formulation leads to a system of linear equations, ie
where \(\mathrm{V}\) is the single layer potential operator. \(\mathrm V\) is regular and symmetric.
Demo 1: Assemble the single layer operator \(V\) as dense matrix and solve for unknwon density \(j\):
[5]:
j = GridFunction(fesL2)
pre = BilinearForm(u*v*ds, diagonal=True).Assemble().mat.Inverse()
with TaskManager():
V = SingleLayerPotentialOperator(fesL2, intorder=10)
CG(mat = V.mat, pre=pre, rhs = rhs.vec, sol=j.vec, tol=1e-8, maxsteps=200, initialize=False, printrates=True)
CG iteration 1, residual = 2.185606954606291
CG iteration 2, residual = 0.5510990298605161
CG iteration 3, residual = 0.13112741187311433
CG iteration 4, residual = 0.031078921260809356
CG iteration 5, residual = 0.007372481975124275
CG iteration 6, residual = 0.0017929371359740674
CG iteration 7, residual = 0.0005259800974227643
CG iteration 8, residual = 0.00025807777880772567
CG iteration 9, residual = 0.0002832379466522333
CG iteration 10, residual = 0.00012036640669223518
CG iteration 11, residual = 0.0002350724404031421
CG iteration 12, residual = 4.492369394976159e-05
CG iteration 13, residual = 4.801474720920566e-05
CG iteration 14, residual = 2.782522946272774e-05
CG iteration 15, residual = 1.4627805195033284e-05
CG iteration 16, residual = 1.4781005107128378e-05
CG iteration 17, residual = 9.771555002906895e-06
CG iteration 18, residual = 6.1759550629385604e-06
CG iteration 19, residual = 1.5387402546548494e-05
CG iteration 20, residual = 3.2801502976748138e-06
CG iteration 21, residual = 2.9700673587873194e-06
CG iteration 22, residual = 3.49316950040796e-06
CG iteration 23, residual = 2.5937980739559925e-06
CG iteration 24, residual = 1.2604332720981822e-06
CG iteration 25, residual = 8.372891682514942e-07
CG iteration 26, residual = 1.2440409270365194e-06
CG iteration 27, residual = 5.872586648669664e-07
CG iteration 28, residual = 4.4146186495926986e-07
CG iteration 29, residual = 5.781842113969609e-07
CG iteration 30, residual = 3.5267752632541797e-07
CG iteration 31, residual = 1.7782255324797777e-07
CG iteration 32, residual = 1.544194197467634e-07
CG iteration 33, residual = 2.1911331263486377e-07
CG iteration 34, residual = 1.2550259245567512e-07
CG iteration 35, residual = 8.723802302219464e-08
CG iteration 36, residual = 6.888878488403766e-08
CG iteration 37, residual = 1.0272145565841453e-07
CG iteration 38, residual = 3.437270114746448e-08
CG iteration 39, residual = 4.0239992151148396e-08
CG iteration 40, residual = 5.7328961710345104e-08
CG iteration 41, residual = 1.8547250490893952e-08
[6]:
Draw (j, order=3);
Notes:
For details on the analysis of boundary integral equations derived from elliptic partial differential equations, see for instance Strongly Elliptic Systems and Boundary Integral Equations.
The integration of singular pairings is done as proposed in Randelementmethoden
The adaptive cross approximation is done as proposed in Hierarchical Matrices.
[ ]: