In a totally blind guess, I believe that for a nonlinear problem, the linear form used to require a minus sign (DOLFIN 0.8), but now (DOLFIN 0.9+) the minus sign is built into NewtonSolver. You might want to check that first.
Jake On 5/1/09 3:09 AM, "Patrick Riesen" <[email protected]> wrote: > hello! > > i want to update my powerlaw solver from dolfin 0.8 to dolfin 0.9.2. > the solver class is derived from the NonlinearProblem class and i > followed the CahnHillard-demo to do something similar for updating from > 0.8 to 0.9.2. > > However I have a problem which i do not understand: > > If i hand the created forms to VariationalProblem and let it solve, all > works fine and in the second iteration the newton solver converges (if i > initialize a newtonian problem just for checking). > > if i do > > newtonsolver.solve(*this,uu->vector()); > > the problem gets solved as well, i.e. all bcs and my own void F and void > J get called but it does not converge, it's like the problem gets solved > over and over again and the solution is added, because in the end i get > a solution but it's the number of iterations \times velocity. > > i tried all kinds of things (with/without pointers, no cast/cast, > different classes for problem/solve ...) but i don't get it, i miss > something. > > maybe somebody has a hint or does see my error and can help me turn on > the light? > > many thanks in advance > > patrick > > > below is a code snippet of the main part: > /----------------------------------------------------------------------------- > -- > _uu = new Function(*_V); > Function* __uu = dynamic_cast<Function*>(_uu); > > // create the forms > a_powstokes = new PowerlawStokesBilinearForm(*_V,*_V); > PowerlawStokesBilinearForm* _a_powstokes = > dynamic_cast<PowerlawStokesBilinearForm*>(a_powstokes); > _a_powstokes->w0 = *__uu; > _a_powstokes->eta1 = eta; > _a_powstokes->eta2 = d_eta; > > > L_powstokes = new PowerlawStokesLinearForm(*_V); > PowerlawStokesLinearForm* _L_powstokes = > dynamic_cast<PowerlawStokesLinearForm*>(L_powstokes); > _L_powstokes->w0 = *__uu; > _L_powstokes->eta1 = eta; > _L_powstokes->f = f; > > // VariationalProblem pde(*a_powstokes, *L_powstokes, bcs, true); > // pde.solve(fluid.velocity(),fluid.pressure()); > > newtonsolver.solve(*this,__uu->vector()); > _______________________________________________ > DOLFIN-dev mailing list > [email protected] > http://www.fenics.org/mailman/listinfo/dolfin-dev > _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
