Hi,I’m a newhand in fenics. Now I want to do some dynamic simulation using fenics, but I met some problems in nonelinear problem solver. Here I’ve several PDE to describe a physical model. Some of them are Nonlinear problems and some of them are time-dependent. Anyway, I simplify the code and list it behind.
from fenics import *
mesh=BoxMesh(Point(0, 0, 0), Point(1e-6, 1e-6, 5*1e-7), 5,5,5)
T_element=FiniteElement("CG", tetrahedron, 1)
v_element=VectorElement("CG", tetrahedron, 1)
Mix=MixedElement([T_element,v_element])
W = FunctionSpace(mesh, Mix)
(T, v) = TrialFunctions(W)
(v_T, v_v) = TestFunctions(W)
w = Function(W)
def boundary(x, on_boundary):
return on_boundary
bc_T = DirichletBC(W.sub(0), Constant(300), boundary)
bc_v = DirichletBC(W.sub(1), Constant((0,0,0)), boundary)
bcs = [bc_T, bc_v]
w_n = interpolate(Expression((
"300",
"0", "0", "0",
), degree=1),W)
T_n, v_n = w_n.split()
t=0
dt=1e-15
T_final = 1e-12
while t < T_final:
t += float(dt)
F_T=((T - T_n) / dt * v_T * dx
+ inner(grad(T), grad(v_T)) * dx +inner(v, v)*dx)
F_v=(inner((v - v_n) / dt , v_v) * dx+ (1 / 2) * inner(grad(2 / 3 * T), v_v) * dx)
F=F_T + F_v
J = derivative(F, w)
problem = NonlinearVariationalProblem(F, w, bcs=bcs, J=J)
solver = NonlinearVariationalSolver(problem)
newton_solver_params = solver.parameters["newton_solver"]
newton_solver_params["linear_solver"] = "mumps"
newton_solver_params["relative_tolerance"] = 1e-6
newton_solver_params["absolute_tolerance"] = 1e-8
newton_solver_params["maximum_iterations"] = 50
solver.solve()
w_n.assign(w)
The feedback from python is:
Traceback (most recent call last):
File "/mnt/d/pypro/THz/newton problem rest.py", line 30, in <module>
problem = NonlinearVariationalProblem(F, w, bcs=bcs, J=J)
File "/usr/lib/petsc/lib/python3/dist-packages/dolfin/fem/problem.py", line 157, in __init__
F = Form(F, form_compiler_parameters=form_compiler_parameters)
File "/usr/lib/petsc/lib/python3/dist-packages/dolfin/fem/form.py", line 43, in __init__
ufc_form = ffc_jit(form, form_compiler_parameters=form_compiler_parameters,
File "/usr/lib/petsc/lib/python3/dist-packages/dolfin/jit/jit.py", line 51, in mpi_jit
return local_jit(*args, **kwargs)
File "/usr/lib/petsc/lib/python3/dist-packages/dolfin/jit/jit.py", line 101, in ffc_jit
return ffc.jit(ufl_form, parameters=p)
File "/usr/lib/python3/dist-packages/ffc/jitcompiler.py", line 217, in jit
module = jit_build(ufl_object, module_name, parameters)
File "/usr/lib/python3/dist-packages/ffc/jitcompiler.py", line 130, in jit_build
module, signature = dijitso.jit(jitable=ufl_object,
File "/usr/lib/python3/dist-packages/dijitso/jit.py", line 165, in jit
header, source, dependencies = generate(jitable, name, signature, params["generator"])
File "/usr/lib/python3/dist-packages/ffc/jitcompiler.py", line 65, in jit_generate
code_h, code_c, dependent_ufl_objects = compile_object(ufl_object,
File "/usr/lib/python3/dist-packages/ffc/compiler.py", line 142, in compile_form
return compile_ufl_objects(forms, "form", object_names,
File "/usr/lib/python3/dist-packages/ffc/compiler.py", line 185, in compile_ufl_objects
analysis = analyze_ufl_objects(ufl_objects, kind, parameters)
File "/usr/lib/python3/dist-packages/ffc/analysis.py", line 89, in analyze_ufl_objects
form_datas = tuple(_analyze_form(form, parameters)
File "/usr/lib/python3/dist-packages/ffc/analysis.py", line 89, in <genexpr>
form_datas = tuple(_analyze_form(form, parameters)
File "/usr/lib/python3/dist-packages/ffc/analysis.py", line 169, in _analyze_form
form_data = compute_form_data(form,
File "/usr/lib/python3/dist-packages/ufl_legacy/algorithms/compute_form_data.py", line 407, in compute_form_data
check_form_arity(preprocessed_form, self.original_form.arguments(), complex_mode) # Currently testing how fast this is
File "/usr/lib/python3/dist-packages/ufl_legacy/algorithms/check_arities.py", line 177, in check_form_arity
check_integrand_arity(itg.integrand(), arguments, complex_mode)
File "/usr/lib/python3/dist-packages/ufl_legacy/algorithms/check_arities.py", line 159, in check_integrand_arity
arg_tuples = map_expr_dag(rules, expr, compress=False)
File "/usr/lib/python3/dist-packages/ufl_legacy/corealg/map_dag.py", line 36, in map_expr_dag
result, = map_expr_dags(function, [expression], compress=compress,
File "/usr/lib/python3/dist-packages/ufl_legacy/corealg/map_dag.py", line 99, in map_expr_dags
r = handlers[v._ufl_typecode_](v, *[vcache[u] for u in v.ufl_operands])
File "/usr/lib/python3/dist-packages/ufl_legacy/algorithms/check_arities.py", line 48, in sum
raise ArityMismatch("Adding expressions with non-matching form arguments {0} vs {1}.".format(_afmt(a), _afmt(b)))
ufl_legacy.algorithms.check_arities.ArityMismatch: Adding expressions with non-matching form arguments ('v_1',) vs ().
I checked my code and tried to read something, but I still don’t know where the problem is.