Thank you Dokken. You are right, I changed it. But now, I have no terms in L(v) and it still gives me an errror. Here is the modified code:
Er = FiniteElement('P', triangle, 2)
Ei = FiniteElement('P', triangle, 2)
Ec = Er * Ei
V = FunctionSpace(mesh,Ec)
k = 10
boundaries = MeshFunction('size_t',mesh,mesh.topology().dim()-1)
class In(SubDomain):
def inside(self, x, on_boundary):
return on_boundary and pow(x[0],2)+pow(x[1],2)<=pow(1,2)+.01
class Out(SubDomain):
def inside(self, x, on_boundary):
return on_boundary and pow(x[0],2)+pow(x[1],2)>=pow(2,2)-.01
inc = In()
out = Out()
boundaries.set_all(0)
inc.mark(boundaries, 1)
out.mark(boundaries, 2)
ds = Measure('ds', domain=mesh, subdomain_data=boundaries)
(u_r, u_i) = TrialFunction(V)
(v_r, v_i) = TestFunction(V)
n = FacetNormal(mesh)
a_r = \
+ inner(nabla_grad(u_r), nabla_grad(v_r))*dx\
- inner(nabla_grad(u_i), nabla_grad(v_i))*dx\
- pow(k,2)*( inner(u_r,v_r) - inner(u_i,v_i))*dx\
+ k*(inner(u_r,v_i) + inner(u_i,v_r))*ds(2)\
+ dot(n, v_r*nabla_grad(u_r))*ds(1)\
- dot(n, v_i*nabla_grad(u_i))*ds(1)
a_i = \
+ inner(nabla_grad(u_r), nabla_grad(v_i))*dx\
+ inner(nabla_grad(u_i), nabla_grad(v_r))*dx\
- pow(k,2)*( inner(u_r,v_i) + inner(u_i,v_r))*dx\
- k*(inner(u_r,v_r) - inner(u_i,v_i))*ds(2)\
+ dot(n, v_r*nabla_grad(u_i))*ds(1)\
+ dot(n, v_i*nabla_grad(u_r))*ds(1)
a = a_r + a_i
L_r = Constant(0)
L_i = Constant(0)
L = L_r + L_i
u = Function(V)
solve(a == L, u )
The error is still the same: Unable to define nonlinear variational problem F(u; v) = 0 for all v.