Проблема компиляции C ++ с Expression () - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в фенике и пытаюсь разрешить уравнение Пуассона с граничным условием, представляющим собой шум Перлина, генерируемый opensimplex библиотекой Python.

Я пытаюсь определить е, граничное условие по Expression().

Я пытался Expression('function(x[0],x[1],x[2])'), где function (x,y,z)=opensimplex.tmp.noise3d(x,y,z)). Однако, поскольку эта функция opensimplex не управляется C ++, я получил ошибку компиляции; Compilation failed!.

Есть ли какое-нибудь решение для преодоления этой ошибки?

1 Ответ

0 голосов
/ 17 апреля 2020

У меня была похожая проблема при начале работы с переходными потоками в 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 

Удачи!

...