If you want to preserve the symbolic structure of maximum and its dependence on u, then you need neither interpolate nor assign.
        
            
Hi David,
What I would like to do is to define a residual that includes some nonlinear function depending on the unknown, similar to the example with the maximum below (ultimately, I need to use functions abs, exp, tan). I do want to dependence of maximum on u to appear in the definition of the residual somehow; how can I do that then?
Thanks,
Anna.
On 15 May 2017, at 09:44, David Ham <David.Ham@imperial.ac.uk> wrote:
On Sun, 14 May 2017 at 21:31 Anna Kalogirou <A.Kalogirou@leeds.ac.uk> wrote:
Following up on my previous email, I have found a workaround to those issues, but now I have a problem with the solvers:
Traceback (most recent call last):File "/Users/matak/Downloads/Inequality-constraint-Rockafellar/solvers.py", line 32, in solver_FF_problem = NonlinearVariationalProblem(F_solve, w)#, aP=Ap)File "/Users/matak/firedrake/src/firedrake/firedrake/variational_solver.py", line 47, in __init__raise ValueError("Provided residual is not a linear form")ValueError: Provided residual is not a linear form
There two issues here:1. I cannot give a preconditioning matrix aP -- is this not possible for nonlinear problems?
As the documentation for NonlinearVariationalProblem suggests, you can provide Jp, a UFL form for the preconditioning Jacobian. This is the equivalent of aP.2. I suspect the error above is because I have functions that depend on the solution, and I don’t know if that is acceptable in firedrake. I have something like the following:
u = Function(V)v = TestFunction(V)maximum = interpolate(0.5*(u + abs(u)), V)F = v*(u + maximum)*dx
Actually, as Colin sort of says, as far as Firedrake is concerned, maximum does not depend on u. This is because doing the interpolation breaks the symbolic link between u and maximum. In the code you have written, maximum does not get updated inside the variational solver as the guess for u gets updated. Whether that is what you wanted to do or not depends on the maths of your problem.
The error you are seeing, however, is caused by the Form having two arguments. This almost certainly means you have a TrialFunction in your nonlinear problem, which makes no sense.
Regards,
David
Best wishes,
Anna.--
_______________________________________________Dr David HamDepartment of MathematicsImperial College London
firedrake mailing list
firedrake@imperial.ac.uk
https://mailman.ic.ac.uk/mailman/listinfo/firedrake
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake