I am using FEniCSx v0.6.0 on conda. The tutorial example of Channel flow (Poiseuille flow) is producing an error after I updated to this newer version.
The code segment is:
# Define strain-rate tensor
def epsilon(u):
return sym(nabla_grad(u))
# Define stress tensor
def sigma(u, p):
return 2*mu*epsilon(u) - p*Identity(u.geometric_dimension())
# Define the variational problem for the first step
p_n = Function(Q)
p_n.name = "p_n"
F1 = rho*dot((u - u_n) / k, v)*dx
F1 += rho*dot(dot(u_n, nabla_grad(u_n)), v)*dx
F1 += inner(sigma(U, p_n), epsilon(v))*dx
F1 += dot(p_n*n, v)*ds - dot(mu*nabla_grad(U)*n, v)*ds
F1 -= dot(f, v)*dx
a1 = form(lhs(F1))
L1 = form(rhs(F1))
The error is:
F1 += inner(sigma(U, p_n), epsilon(v))*dx
File "/Users/varunkumar/Downloads/FEniCSx v0.6/channel.py", line 63, in sigma
return 2*mu*epsilon(u) - p*Identity(u.geometric_dimension())
AttributeError: 'ComponentTensor' object has no attribute 'geometric_dimension'
There is some error in the stress tensor definition. Any help is very much appreciated.