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)
V = LaplaceSL(u*ds)*v*ds
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.03107892126080936
CG iteration 5, residual = 0.0073724819751242775
CG iteration 6, residual = 0.0017929371359740687
CG iteration 7, residual = 0.000525980097422821
CG iteration 8, residual = 0.0002580777788205333
CG iteration 9, residual = 0.00028323795041268083
CG iteration 10, residual = 0.00012036649430035571
CG iteration 11, residual = 0.00023507215137388415
CG iteration 12, residual = 4.492369141107434e-05
CG iteration 13, residual = 4.801474719245096e-05
CG iteration 14, residual = 2.7825229462717502e-05
CG iteration 15, residual = 1.462780519486028e-05
CG iteration 16, residual = 1.4781005107988705e-05
CG iteration 17, residual = 9.771555024023159e-06
CG iteration 18, residual = 6.175957069295993e-06
CG iteration 19, residual = 1.5387389216537987e-05
CG iteration 20, residual = 3.280150125491334e-06
CG iteration 21, residual = 2.9700673586451394e-06
CG iteration 22, residual = 3.4931695005148895e-06
CG iteration 23, residual = 2.5937980737789647e-06
CG iteration 24, residual = 1.2604332726983787e-06
CG iteration 25, residual = 8.3729004531136e-07
CG iteration 26, residual = 1.2440380710988644e-06
CG iteration 27, residual = 5.872586627108319e-07
CG iteration 28, residual = 4.414618681720835e-07
CG iteration 29, residual = 5.781842266088994e-07
CG iteration 30, residual = 3.5267752228583997e-07
CG iteration 31, residual = 1.7782255316190228e-07
CG iteration 32, residual = 1.5441947725511495e-07
CG iteration 33, residual = 2.191132597431071e-07
CG iteration 34, residual = 1.255025715348682e-07
CG iteration 35, residual = 8.723802301978985e-08
CG iteration 36, residual = 6.888878542251044e-08
CG iteration 37, residual = 1.02721454189523e-07
CG iteration 38, residual = 3.437270116491323e-08
CG iteration 39, residual = 4.0240018161075287e-08
CG iteration 40, residual = 5.732889136538077e-08
CG iteration 41, residual = 1.8547250321865923e-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.
[ ]: