Complex number in Fenics

221 Views Asked by At

I am currently trying to solve a complex-valued PDE with Fenics in a jupyter notebook but I am having trouble when I try to use a complex number in Fenics.

Here is how I've defined the variational problem:

u = TrialFunction(V)
v = TestFunction(V)
a = (inner(grad(u[0]), grad(v[0])) + inner(grad(u[1]), grad(v[1])))*dx + sin(lat)*(u[0]*v[1]-u[1]*v[0])*dx+1j*((-inner(grad(u[0]), grad(v[1])) + inner(grad(u[1]), grad(v[0])))*dx + (sin(lat)*(u[0]*v[0]-u[1]*v[1])*dx))
f = Constant((1.0,1.0))
b = (v[0]*f[0]+f[1]*v[1])*ds+1j*((f[1]*v[0]-f[0]*v[1])*ds)

I got the following error message:

AttributeError  Traceback (most recent call last)
<ipython-input-74-7760afa5a395> in <module>()



    1 u = TrialFunction(V)
       2 v = TestFunction(V)
 ----> 3 a = (inner(grad(u[0]), grad(v[0])) + inner(grad(u[1]), grad(v[1])))*dx + sin(lat)*(u[0]*v[1]-u[1]*v[0])*dx+1j*((-inner(grad(u[0]), grad(v[1])) + inner(grad(u[1]), grad(v[0])))*dx + (sin(lat)*(u[0]*v[0]-u[1]*v[1])*dx)
       4 f = Constant((0.0,0.0))
       5 b = (v[0]*f[0]+f[1]*v[1])*ds+1j*((f[1]*v[0]-f[0]*v[1])*ds)

~/anaconda3_420/lib/python3.5/site-packages/ufl/form.py in __rmul__(self, scalar)
    305         "Multiply all integrals in form with constant scalar value."
    306         # This enables the handy "0*form" or "dt*form" syntax
--> 307         if is_scalar_constant_expression(scalar):
    308             return Form([scalar*itg for itg in self.integrals()])
    309         return NotImplemented

~/anaconda3_420/lib/python3.5/site-packages/ufl/checks.py in is_scalar_constant_expression(expr)
     84     if is_python_scalar(expr):
     85         return True
---> 86     if expr.ufl_shape:
     87         return False
     88     return is_globally_constant(expr)

AttributeError: 'complex' object has no attribute 'ufl_shape'

Could someone please help me? By the way, Fenics might not be the best tool to solve complex-valued PDE and I would like to read your suggestions about such problems.

0

There are 0 best solutions below