Hello everyone. I am trying to add the radiation heat transfer to Robin bc
When i add
q_r
part it crashes at A = assemble_matrix(bilinear_form, bcs)
u_next = dolfinx.fem.Function(self.V)
u_n = dolfinx.fem.Function(self.V)
u_n.x.array[:] = 26
Heat = dolfinx.fem.Function(self.V)
u = ufl.TrialFunction(self.V)
# u = dolfinx.fem.Function(self.V)
v = ufl.TestFunction(self.V)
a = u * v * ufl.dx + dt * ufl.dot(ufl.grad(u), ufl.grad(v)) * ufl.dx
L = ( u_n + dt * Heat) * v * ufl.dx
class BoundaryCondition():
def __init__(self, type, marker, values):
self._type = type
if type == "Dirichlet":
facets = facet_tag.find(marker)
dofs = dolfinx.fem.locate_dofs_topological(V, fdim, facets)
self._bc = dolfinx.fem.dirichletbc(values, dofs, V)
elif type == "Neumann":
self._bc = ufl.inner(values, v) * ds(marker)
elif type == "Robin":
self._bc = [(values[1] * \
ufl.inner(u , v) + values[2]*values[3]*ufl.inner(u**4,v)) * ds(marker),(values[1] * \
ufl.inner(values[0], v) + values[2]*values[3]*ufl.inner(values[0]**4,v)) * ds(marker)]
else:
raise TypeError(
"Unknown boundary condition: {0:s}".format(type))
@property
def bc(self):
return self._bc
@property
def type(self):
return self._type
# Define the Dirichlet condition
r = dolfinx.fem.Constant(self.domain, dolfinx.default_scalar_type(15 * 10**-2))
s = dolfinx.fem.Constant(self.domain, dolfinx.default_scalar_type(20))
H_c = dolfinx.fem.Constant(self.domain, dolfinx.default_scalar_type(0.8))
SB_coeff = dolfinx.fem.Constant(self.domain, dolfinx.default_scalar_type(5.670374419*10**-1))
bcs = []
boundary_conditions = [ BoundaryCondition("Robin" , 1, (s, r,SB_coeff,H_c)),
BoundaryCondition("Robin", 2, (s,r*3,SB_coeff,H_c)) ]
for condition in boundary_conditions:
if condition.type == "Dirichlet":
bcs.append(condition.bc)
else:
a += condition.bc[0]
L += condition.bc[1]
bilinear_form = fem.form(a)
linear_form = fem.form(L)
A = assemble_matrix(bilinear_form, bcs)
Here is the error message
Traceback (most recent call last):
File "/home/arshidin/Documents/Fenicsx/fenicsx/math_model/matmodel_example.py", line 115, in <module>
Model.solve_trajectory_load_meshtags(np.array(points),False)
File "/home/arshidin/Documents/Fenicsx/fenicsx/math_model/matmodel.py", line 550, in solve_trajectory_load_meshtags
bilinear_form = fem.form(a)
^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/dolfinx/fem/forms.py", line 337, in form
return _create_form(form)
^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/dolfinx/fem/forms.py", line 331, in _create_form
return _form(form)
^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/dolfinx/fem/forms.py", line 254, in _form
ufcx_form, module, code = jit.ffcx_jit(
^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/dolfinx/jit.py", line 62, in mpi_jit
return local_jit(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/dolfinx/jit.py", line 212, in ffcx_jit
r = ffcx.codegeneration.jit.compile_forms([ufl_object], options=p_ffcx, **p_jit)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ffcx/codegeneration/jit.py", line 205, in compile_forms
impl = _compile_objects(
^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ffcx/codegeneration/jit.py", line 330, in _compile_objects
_, code_body = ffcx.compiler.compile_ufl_objects(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ffcx/compiler.py", line 108, in compile_ufl_objects
analysis = analyze_ufl_objects(ufl_objects, options["scalar_type"]) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ffcx/analysis.py", line 94, in analyze_ufl_objects
form_data = tuple(_analyze_form(form, scalar_type) for form in forms)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ffcx/analysis.py", line 94, in <genexpr>
form_data = tuple(_analyze_form(form, scalar_type) for form in forms)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ffcx/analysis.py", line 180, in _analyze_form
form_data = ufl.algorithms.compute_form_data(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ufl/algorithms/compute_form_data.py", line 427, in compute_form_data
check_form_arity(preprocessed_form, self.original_form.arguments(), complex_mode)
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ufl/algorithms/check_arities.py", line 213, in check_form_arity
check_integrand_arity(itg.integrand(), arguments, complex_mode)
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ufl/algorithms/check_arities.py", line 194, in check_integrand_arity
arg_tuples = map_expr_dag(rules, expr, compress=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ufl/corealg/map_dag.py", line 35, in map_expr_dag
(result,) = map_expr_dags(
^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ufl/corealg/map_dag.py", line 101, in map_expr_dags
r = handlers[v._ufl_typecode_](v)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/arshidin/miniconda3/envs/dolfinx-env/lib/python3.11/site-packages/ufl/algorithms/check_arities.py", line 48, in nonlinear_operator
raise ArityMismatch(
ufl.algorithms.check_arities.ArityMismatch: Applying nonlinear operator Power to expression depending on form argument v_1.
i have tried using function u = dolfinx.fem.Function(self.V)
but i get this error
A = _cpp.fem.petsc.create_matrix(a._cpp_object)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Cannot create sparsity pattern. Form is not a bilinear.
This code and solution similar to diffusion_code.py
time dependent problem
Have someone faced similar issues?