0

我是 fenics 的初学者,我正在尝试opensimplex使用 Python 库生成的 Perlin 噪声的边界条件来求解 Poisson 方程。

我试图定义 f,边界条件Expression()

我试过Expression('function(x[0],x[1],x[2])')在哪里function (x,y,z)=opensimplex.tmp.noise3d(x,y,z))。但是,由于这个 opensimplex 函数不是由 C++ 管理的,所以我得到了一个编译错误;Compilation failed!.

有没有办法克服这个错误?

4

1 回答 1

0

在开始使用 FEniCS 中的瞬态流时,我遇到了类似的问题。在定义变体形式之前为 UserExpression 定义子类应该启用编译。

    from dolfin import *
    parameters["reorder_dofs_serial"] = True

### (Here you add your domain generation and FunctionSpace definition)

    class Expression(SubDomain):
      def inside(self,a,on_boundary):
         return (x[0]) and (x[1]) and (x[2]) and on_boundary

    f=MyExpression(2.0)
    print(assemble(f*dx(domain=UnitIntervalMesh(1))))


如果这仍然无法编译,请附上代码的相关部分,我们可以尝试解决它们。

如果您有固定的尺寸顺序(例如 2-D),您可能还必须在重新排序自由度后添加它:

parameters["form_compiler"]["quadrature_degree"]=2 

祝你好运!

于 2020-04-17T07:46:51.357 回答