我正在学习,而且我是 Fenics 数值计算的新手。我试图了解 Fenics 实施中某些方面的性质。我尝试为极其简单的函数计算梯度 - P2 函数空间中的基函数与计算梯度
我只显示最重要的代码行:
from dolfin import *
A = Point(0, 1)
B = Point(0, 0)
C = Point(1, 0)
D = Point(1, 1)
square = Polygon([B, C, D, A])
mesh = generate_mesh(square, 4.1)
V2 = FunctionSpace(mesh, "P", 2)
func2 = interpolate(Expression("0.0", degree=1), V2)
#set single particular node in P2 function space
varr2 = func2.vector().get_local()
varr2[30]=1.0
func2.vector().set_local(varr2)
#visualise
问题1 - 我希望只看到 5 个节点的梯度(集基函数的直接邻域)。为什么结果显示其他内容?
QUESTION2 - 如何将所有梯度向量归一化为完全一个。我以这种方式尝试过:计算
func2x = project(func2.dx(0))
func2y = project(func2.dx(1))
然后
module = sqrt(func2x*func2x+func2y*func2y)
unnormedGradient = project(grad(func2))
result = unnormedGradient/module
为什么它没有提供预期的结果,虽然在数学上是正确的。