sqrt of trial function causes invalid expression error

Asked by David Ham

I'm trying to solve a system of ODEs which contains sqrt of a trial function in a couple of places. This is generating errors in FFC. Here is a minimal failing example:

from dolfin import *
mesh = Interval(20, 0, 2.0)

ZetaC_space = FunctionSpace(mesh, 'Lagrange', 1)

z=TrialFunction(ZetaC_space)
zhat=TestFunction(ZetaC_space)

L=zhat*sqrt(z)*dx

X=Function(ZetaC_space)
solve(L==0, X)

The full output is:

No Jacobian form specified for nonlinear variational problem.
Differentiating residual form F to obtain Jacobian J = F'.
Calling FFC just-in-time (JIT) compiler, this may take some time.
Found Argument in sqrt(Argument(FiniteElement('Lagrange', Cell('interval', Space(1)), 1, None), 1)), this is an invalid expression.
Traceback (most recent call last):
  File "minimal_fail.py", line 14, in <module>
    solve(L==0, X)
  File "/usr/lib/python2.7/dist-packages/dolfin/fem/solving.py", line 250, in solve
    _solve_varproblem(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/dolfin/fem/solving.py", line 287, in _solve_varproblem
    form_compiler_parameters=form_compiler_parameters)
  File "/usr/lib/python2.7/dist-packages/dolfin/fem/solving.py", line 116, in __init__
    F = Form(F, form_compiler_parameters=form_compiler_parameters)
  File "/usr/lib/python2.7/dist-packages/dolfin/fem/form.py", line 56, in __init__
    common_cell)
  File "/usr/lib/python2.7/dist-packages/dolfin/compilemodules/jit.py", line 66, in mpi_jit
    return local_jit(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/dolfin/compilemodules/jit.py", line 154, in jit
    return jit_compile(form, parameters=p, common_cell=common_cell)
  File "/usr/lib/python2.7/dist-packages/ffc/jitcompiler.py", line 73, in jit
    return jit_form(ufl_object, parameters, common_cell)
  File "/usr/lib/python2.7/dist-packages/ffc/jitcompiler.py", line 130, in jit_form
    common_cell=common_cell)
  File "/usr/lib/python2.7/dist-packages/ffc/compiler.py", line 150, in compile_form
    analysis = analyze_forms(forms, object_names, parameters, common_cell)
  File "/usr/lib/python2.7/dist-packages/ffc/analysis.py", line 64, in analyze_forms
    common_cell) for form in forms)
  File "/usr/lib/python2.7/dist-packages/ffc/analysis.py", line 64, in <genexpr>
    common_cell) for form in forms)
  File "/usr/lib/python2.7/dist-packages/ffc/analysis.py", line 151, in _analyze_form
    ffc_assert(len(compute_form_arities(preprocessed_form)) == 1,
  File "/usr/lib/python2.7/dist-packages/ufl/algorithms/formtransformations.py", line 338, in compute_form_arities
    parts = compute_form_with_arity(form, arity)
  File "/usr/lib/python2.7/dist-packages/ufl/algorithms/formtransformations.py", line 323, in compute_form_with_arity
    res = transform_integrands(form, _transform)
  File "/usr/lib/python2.7/dist-packages/ufl/algorithms/transformations.py", line 839, in transform_integrands
    integrand = transform(itg.integrand())
  File "/usr/lib/python2.7/dist-packages/ufl/algorithms/formtransformations.py", line 319, in _transform
    e, provides = pe.visit(e)
  File "/usr/lib/python2.7/dist-packages/ufl/algorithms/transformations.py", line 156, in visit
    r = h(o, *map(self.visit, o.operands()))
  File "/usr/lib/python2.7/dist-packages/ufl/algorithms/transformations.py", line 160, in visit
    r = h(o)
  File "/usr/lib/python2.7/dist-packages/ufl/algorithms/formtransformations.py", line 69, in expr
    error("Found Argument in %s, this is an invalid expression." % repr(x))
  File "/usr/lib/python2.7/dist-packages/ufl/log.py", line 148, in error
    raise self._exception_type(self._format_raw(*message))
ufl.log.UFLException: Found Argument in sqrt(Argument(FiniteElement('Lagrange', Cell('interval', Space(1)), 1, None), 1)), this is an invalid expression.

Question information

Language:
English Edit question
Status:
Solved
For:
DOLFIN Edit question
Assignee:
No assignee Edit question
Solved by:
David Ham
Solved:
Last query:
Last reply:
Revision history for this message
Marie Rognes (meg-simula) said :
#1

Replace TrialFunction by Function.
A form cannot be nonlinear in its Arguments; that is, TestFunction, TrialFunction or any other Argument object.

Then, you also want to call solve with this Function as the second argument.

--
Marie

On 2. apr. 2012, at 19:55, David Ham <email address hidden> wrote:

> New question #192433 on DOLFIN:
> https://answers.launchpad.net/dolfin/+question/192433
>
> I'm trying to solve a system of ODEs which contains sqrt of a trial function in a couple of places. This is generating errors in FFC. Here is a minimal failing example:
>
> from dolfin import *
> mesh = Interval(20, 0, 2.0)
>
> ZetaC_space = FunctionSpace(mesh, 'Lagrange', 1)
>
> z=TrialFunction(ZetaC_space)
> zhat=TestFunction(ZetaC_space)
>
> L=zhat*sqrt(z)*dx
>
> X=Function(ZetaC_space)
> solve(L==0, X)
>
>
> The full output is:
>
> No Jacobian form specified for nonlinear variational problem.
> Differentiating residual form F to obtain Jacobian J = F'.
> Calling FFC just-in-time (JIT) compiler, this may take some time.
> Found Argument in sqrt(Argument(FiniteElement('Lagrange', Cell('interval', Space(1)), 1, None), 1)), this is an invalid expression.
> Traceback (most recent call last):
> File "minimal_fail.py", line 14, in <module>
> solve(L==0, X)
> File "/usr/lib/python2.7/dist-packages/dolfin/fem/solving.py", line 250, in solve
> _solve_varproblem(*args, **kwargs)
> File "/usr/lib/python2.7/dist-packages/dolfin/fem/solving.py", line 287, in _solve_varproblem
> form_compiler_parameters=form_compiler_parameters)
> File "/usr/lib/python2.7/dist-packages/dolfin/fem/solving.py", line 116, in __init__
> F = Form(F, form_compiler_parameters=form_compiler_parameters)
> File "/usr/lib/python2.7/dist-packages/dolfin/fem/form.py", line 56, in __init__
> common_cell)
> File "/usr/lib/python2.7/dist-packages/dolfin/compilemodules/jit.py", line 66, in mpi_jit
> return local_jit(*args, **kwargs)
> File "/usr/lib/python2.7/dist-packages/dolfin/compilemodules/jit.py", line 154, in jit
> return jit_compile(form, parameters=p, common_cell=common_cell)
> File "/usr/lib/python2.7/dist-packages/ffc/jitcompiler.py", line 73, in jit
> return jit_form(ufl_object, parameters, common_cell)
> File "/usr/lib/python2.7/dist-packages/ffc/jitcompiler.py", line 130, in jit_form
> common_cell=common_cell)
> File "/usr/lib/python2.7/dist-packages/ffc/compiler.py", line 150, in compile_form
> analysis = analyze_forms(forms, object_names, parameters, common_cell)
> File "/usr/lib/python2.7/dist-packages/ffc/analysis.py", line 64, in analyze_forms
> common_cell) for form in forms)
> File "/usr/lib/python2.7/dist-packages/ffc/analysis.py", line 64, in <genexpr>
> common_cell) for form in forms)
> File "/usr/lib/python2.7/dist-packages/ffc/analysis.py", line 151, in _analyze_form
> ffc_assert(len(compute_form_arities(preprocessed_form)) == 1,
> File "/usr/lib/python2.7/dist-packages/ufl/algorithms/formtransformations.py", line 338, in compute_form_arities
> parts = compute_form_with_arity(form, arity)
> File "/usr/lib/python2.7/dist-packages/ufl/algorithms/formtransformations.py", line 323, in compute_form_with_arity
> res = transform_integrands(form, _transform)
> File "/usr/lib/python2.7/dist-packages/ufl/algorithms/transformations.py", line 839, in transform_integrands
> integrand = transform(itg.integrand())
> File "/usr/lib/python2.7/dist-packages/ufl/algorithms/formtransformations.py", line 319, in _transform
> e, provides = pe.visit(e)
> File "/usr/lib/python2.7/dist-packages/ufl/algorithms/transformations.py", line 156, in visit
> r = h(o, *map(self.visit, o.operands()))
> File "/usr/lib/python2.7/dist-packages/ufl/algorithms/transformations.py", line 160, in visit
> r = h(o)
> File "/usr/lib/python2.7/dist-packages/ufl/algorithms/formtransformations.py", line 69, in expr
> error("Found Argument in %s, this is an invalid expression." % repr(x))
> File "/usr/lib/python2.7/dist-packages/ufl/log.py", line 148, in error
> raise self._exception_type(self._format_raw(*message))
> ufl.log.UFLException: Found Argument in sqrt(Argument(FiniteElement('Lagrange', Cell('interval', Space(1)), 1, None), 1)), this is an invalid expression.
>
> --
> You received this question notification because you are a member of
> DOLFIN Team, which is an answer contact for DOLFIN.

Revision history for this message
David Ham (david-ham) said :
#2

Thanks Marie. My inability to drive Dolfin is at fault as usual!

Now onto the next error :D.