Channel flow from tutorial produces error in v0.6.0

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.

See: `ufl.Function().geometric_dimension()` is deprecated by cganuza · Pull Request #109 · jorgensd/dolfinx-tutorial · GitHub

1 Like