FEniCS:检查函数是否全局大于 0

计算科学 芬尼克斯
2021-11-27 16:58:45

给定网格上的 Dolfin Function u,我想检查它是否在整个网格中大于 0。我注意到这个表达式

u > 0

是类型的对象

GT(Coefficient(FiniteElement('Lagrange', Domain(Cell('triangle', 2), 'triangle_multiverse', 2, 2), 2, None), 0), Zero((), (), {}))

我该如何评价那件事?

2个回答

看起来您正在使用 Python 接口,在这种情况下u,它既是 DOLFIN 函数对象又是 UFL 对象(它继承自两者)。您看到的类型信息与 UFL 有关。

u您可以在任意点评估函数:

f = u((0.5, 0.5, 0.5))

如果 DOLFIN 配置了 CGAL。

我不知道您如何检查解决方案对于任意元素类型在任何地方都是严格肯定的,但是您可以很好地检查集成 UFL 条件,

c = conditional(lt(u, 0), 1, 0)

# This should be zero if u > 0
print assemble(c*dx)   

条件 UFL 语句在http://arxiv.org/abs/1211.4047中提供。

如果函数是分段线性的,一个简单的检查如下:

print u.vector().min()

这也可以作为其他空间的一个很好的近似值。