用表达式(C++)编译C++的问题

2024-09-30 22:12:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我是fenics的初学者,我试图用边界条件来解泊松方程,边界条件是由Python库opensimplex生成的柏林噪声

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

我尝试了Expression('function(x[0],x[1],x[2])')其中function (x,y,z)=opensimplex.tmp.noise3d(x,y,z))。然而,由于OpenStimx函数不是由C++管理的,所以我得到了编译错误;{}

有什么办法可以克服这个错误吗


Tags: 函数定义错误function噪声tmp方程expression
1条回答
网友
1楼 · 发布于 2024-09-30 22:12:17

在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 

祝你好运

相关问题 更多 >