Hi Anna, I'm not sure what's wrong, but it's a bit overcomplicated to write abs(grad(phi))**2, better to write inner(grad(phi),grad(phi)) all the best --cjc On 21 December 2015 at 10:51, Anna Kalogirou <A.Kalogirou@leeds.ac.uk> wrote:
Dear all,
I get some UFL errors when trying to assemble the expression
E = 0.5*rho*assemble( (Hb*abs(grad(phi0))**2 + g*eta0**2)*dx )
where phi0, eta0, Hb are functions and the rest are scalars.
At first, I got this: ----------------- E0_w = 0.5*rho*assemble( (Hb*abs(grad(phi0))**2 + g*eta0**2)*dx ) # Energy of the water File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble.py", line 70, in assemble return assemble_expressions.assemble_expression(f) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 592, in assemble_expression evaluate_expression(Assign(result, expr), subset) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 577, in evaluate_expression k = expression_kernel(e, args) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 524, in expression_kernel ast_expr = _ast(expr) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 44, in _ast return expr.ast File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 128, in ast return self._ast(_ast(self.ufl_operands[0]), _ast(self.ufl_operands[1])) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 48, in _ast return f(expr) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 603, in <lambda> ufl.algebra.Product: (lambda e: ast.Par(_to_prod(e.ufl_operands))), File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 597, in <lambda> _to_prod = lambda o: ast.Prod(_ast(o[0]), _to_sum(o[1:])) if len(o) > 1 else _ast(o[0]) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 596, in <lambda> _to_sum = lambda o: ast.Sum(_ast(o[0]), _to_sum(o[1:])) if len(o) > 1 else _ast(o[0]) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 48, in _ast return f(expr) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 602, in <lambda> ufl.algebra.Sum: (lambda e: ast.Par(_to_sum(e.ufl_operands))), File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 596, in <lambda> _to_sum = lambda o: ast.Sum(_ast(o[0]), _to_sum(o[1:])) if len(o) > 1 else _ast(o[0]) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 596, in <lambda> _to_sum = lambda o: ast.Sum(_ast(o[0]), _to_sum(o[1:])) if len(o) > 1 else _ast(o[0]) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 48, in _ast return f(expr) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 603, in <lambda> ufl.algebra.Product: (lambda e: ast.Par(_to_prod(e.ufl_operands))), File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 597, in <lambda> _to_prod = lambda o: ast.Prod(_ast(o[0]), _to_sum(o[1:])) if len(o) > 1 else _ast(o[0]) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 596, in <lambda> _to_sum = lambda o: ast.Sum(_ast(o[0]), _to_sum(o[1:])) if len(o) > 1 else _ast(o[0]) File "/Users/matak/firedrake/lib/python2.7/site-packages/firedrake/assemble_expressions.py", line 49, in _ast raise TypeError("No ast handler for %s" % str(type(expr))) TypeError: No ast handler for <class 'ufl.tensoralgebra.Inner’> -----------------
and then I tried to write instead
E = 0.5*rho*assemble( (Hb*abs(grad(phi0))*abs(grad(phi0)) + g*eta0*eta0)*dx )
and got a different error: ----------------- E0_w = 0.5*rho*assemble( (Hb*abs(grad(phi0))*abs(grad(phi0)) + g*eta0*eta0)*dx ) # Energy of the water File "/Users/matak/firedrake/lib/python2.7/site-packages/ufl/exproperators.py", line 166, in _mul return _mult(self, o) File "/Users/matak/firedrake/lib/python2.7/site-packages/ufl/exproperators.py", line 144, in _mult error("Invalid ranks {0} and {1} in product.".format(r1, r2)) File "/Users/matak/firedrake/lib/python2.7/site-packages/ufl/log.py", line 158, in error raise self._exception_type(self._format_raw(*message)) ufl.log.UFLException: Invalid ranks 1 and 1 in product. -----------------
I don’t understand what’s going wrong. It was working on Friday.
Thank you.
Best, Anna.
-- http://www.imperial.ac.uk/people/colin.cotter www.cambridge.org/9781107663916
participants (1)
- 
                
                Colin Cotter