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