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