Re: [firedrake] Solving adjoint equation
I see; the syntax should be solve(frm_tilde, w_sol, rhs, solver_parameters=...) i.e. "solve(A, x, b)" rather than "solve(A, b, x)". On 29 March 2016 at 16:09, George Ovchinnikov <lives9@gmail.com> wrote:
Dear All,
I have trilinear form a(w,u,v) and usually solve a(w,u,v) = l(v), for u with fixed w.
Here I have:
a = w dot(grad(u), grad(v)) * dx, and l(v) = f * v * dx.
Now, given u_tilde I want to solve for w, i.e. find w_tilde such, that a(w_tilde, u_tilde, v) = l(v), for any v in suitable subspace.
I'm trying the following:
mesh = UnitSquareMesh(size, size) V = FunctionSpace(mesh, "CG", 1)
f = Function(V) f.interpolate(Expression("1"))
u_tilde = Function(V) u_tilde.interpolate(Expression("1/(1+exp(-1*x[0])) * 1/(1+exp(-1*(1-x[0]))) *1/(1+exp(-1*x[1])) * 1/(1+exp(-1*(1-x[1])))" ))
w_tilde = TrialFunction(V) v = TestFunction(V)
a_tilde = (w_tilde * dot(grad(u_tilde), grad(v))) * dx frm_tilde = assemble( a_tilde )
L = f * v * dx rhs = assemble(L)
w_sol = Function(V) solve(frm_tilde, rhs, w_sol, solver_parameters={"ksp_type": "preonly", "pc_type": "lu"}) File("w_sol.pvd") << w_sol
It fails to converge: 140 r = self.ksp.getConvergedReason() 141 if r < 0: --> 142 raise RuntimeError("LinearSolver failed to converge after %d iterations with reason: %s", self.ksp.getIterationNumber(), solving_utils.KSPReasons[r])
KeyError: -11
I'm using direct method, not the iterative one, so what is happening here?
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
participants (1)
- 
                
                Andrew McRae