由狄利克雷边界条件引起的梯度奇异性

计算科学 有限元 椭圆pde
2021-12-14 06:20:22

我正在寻找由部分施加在边界上的狄利克雷边界条件引起的奇点的数学解释。

例如

2u=0 in Ω
在哪里Ω是一个 10 x 4 的矩形。Dirichlet 边界条件u=0施加于 y=0 and y=4 and x<2 并且在边界处施加通量x=10

绘制通量,可以看到 Dirichlet 边界条件结束的奇点

在此处输入图像描述

我用下面的 FEniCS 代码绘制了这个

from fenics import *

mesh = RectangleMesh(Point(0, 0), Point(10, 4), 400, 160, diagonal='crossed')

V = FunctionSpace(mesh, 'CG', 1)
u, v = TrialFunction(V), TestFunction(V)

a = inner(grad(u), grad(v))*dx


def MyDirichlet(x, on_boundary):
    return on_boundary and (x[0] < 2.0) and (x[0] > 0.0)

class MyNeumann(SubDomain):
    def inside(self, x, on_boundary):
        return on_boundary and near(x[0], 10.0)

subdomain = MeshFunction("size_t", mesh, mesh.topology().dim() - 1)
subdomain.set_all(0)
myneumann = MyNeumann()
myneumann.mark(subdomain, 1)
ds = Measure('ds', domain=mesh, subdomain_data=subdomain)

bc = DirichletBC(V, Constant(0.0), MyDirichlet)

L = Constant(1.0)*v*ds(1)

u_sol = Function(V)

solve(a==L, u_sol, bcs=bc)
File("sing_example.pvd") << u_sol
Vflux = VectorFunctionSpace(mesh, 'CG', 1)
File("sing_flux.pvd") << project(grad(u_sol), Vflux)

2个回答

在我看来,你没有一个很好的问题,所以谁知道 fenics 是如何处理这个问题的。我知道当求解器不发散,而是返回垃圾时,对于不适定泊松问题,您可能会得到一些奇怪的结果。这似乎是在那些情况下。相关地,您可以进行某些定点迭代来求解奇异矩阵的线性系统而不会发散,但是奇异矩阵的任何逆显然都是没有意义的。

正如其他人所提到的,边界条件尚不清楚。但是梯度中的这种奇点确实发生在边界条件的不连续性附近。这是一个数学解释。采用以下原型边界条件:u=0为了y=0, x>0u=π为了y=0, x<0. 那么拉普拉斯方程的解y0,它服从边界条件并以无穷大为界,很简单u=ϕ, 在哪里ϕ是从正面的角度x轴。那么梯度是u=1ρ1ϕ, 在哪里ρ是到原点的距离和1ϕ是一个单位向量ϕ方向,在原点附近是奇异的。在这个例子中,通量是正常的x轴边界,因此 Dirichlet 条件中的任何一个(但不是两者)都可以很容易地被 Neumann 条件替换而不会改变结果。

用更直观的术语来说,潜在的y=0+必须在两个不同的值之间不连续地跳跃,因此在跳跃附近梯度必须是无限的。