0

我正在学习,而且我是 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

为什么它没有提供预期的结果,虽然在数学上是正确的。

4

0 回答 0