Hi ! I’m a beginner and I wanted to write a simple code but it doesn’t work… Can anyone help me ?
base = Rectangle(Point(-1.0, -1.0), Point(1.0, 1.0))
hole = Circle(Point(0.25, 0), 0.25)
mesh5 = generate_mesh(base - hole, 15)
plt.figure(1)
plot(mesh5, title="Maillage du rectangle troué")
Hh5 = FunctionSpace(mesh5, 'P', 1)
tol = 1E-14
class inneredge(SubDomain):
def inside(self, x, on_boundary):
return on_boundary and (abs(x[0]-0.25)<0.25+tol) and (abs(x[1])<0.25+tol)
ie = inneredge()
ie = DirichletBC(Hh5, Constant(1.0), ie)
class outeredge(SubDomain):
def inside(self, x, on_boundary):
return on_boundary and (abs(x[0] - 0.25) > 0.25+tol) and (abs(x[1])>0.25+tol)
oe = inneredge()
oe = DirichletBC(Hh5, Constant(0.0), oe)
c=Expression(("(x[0]-0.5)*(x[0]-0.5)+x[1]*x[1]","0.0"),degree = 2)
u = TrialFunction(Hh5)
v = TestFunction(Hh5)
F = inner(grad(u), grad(v))*dx+dot(c,grad(u))*v*dx
u = Function(Hh5)
solve(F == 0, u, [ie,oe],solver_parameters={"newton_solver":
{"relative_tolerance": 1e-6}})
plu=plot(u5)
plt.title('Solution numérique u5')
plt.xlabel('x')
plt.ylabel('y')
plt.colorbar(plu)
Here is my error
*** Error: Unable to define nonlinear variational problem F(u; v) = 0 for all v.
*** Reason: Expecting the residual F to be a linear form (not rank 2).
*** Where: This error was encountered inside NonlinearVariationalProblem.cpp.