I'll pin it on Patrick :). It does raise questions around the GenericFoo interface. I don't think these are sustainable; linear algebra data structures and solver backends are too specialised to use effectively via a generic interface.
I would like to see in the linear algebra code that: - GenericVector/Matrix become as simple as possible to allow common assembly code for different backends. - Remove as many of the generic solver classes as possible. - Allow solvers to return matrices (PETSc does this), which a user can then fill. This is a bit like a factory; the solver is 'top of the pile' for linear algebra, so it makes sense that it can provide a suitable matrix for the user to fill. I'm trying to fix https://bitbucket.org/fenics-project/dolfin/issue/530, but our complicated design is making this difficult. For example, PETScKrylovSolver takes a bunch of different operators (GenericLinearOperator, GenericMatrix, PETScBaseMatrix, . . . . ), but only works with PETSc operators, so it would be better if it only accepted PETSc operators. Garth On 18 June 2015 at 10:10, Anders Logg <[email protected]> wrote: > From git blame: > > 61d5036a (Garth N. Wells 2014-02-28 22:11:14 +0000 132) #ifdef > ENABLE_PETSC_SNES > 676f6644 (Patrick Farrell 2012-10-15 20:41:48 +0100 133) else if > (std::string(parameters["nonlinear_solver"]) == "snes") > 676f6644 (Patrick Farrell 2012-10-15 20:41:48 +0100 134) { > 676f6644 (Patrick Farrell 2012-10-15 20:41:48 +0100 135) // Create SNES > solver and set parameters > 543a756a (Garth N. Wells 2014-01-22 15:54:46 +0000 136) if > (!snes_solver) > 676f6644 (Patrick Farrell 2012-10-15 20:41:48 +0100 137) { > 676f6644 (Patrick Farrell 2012-10-15 20:41:48 +0100 138) // Create > Newton solver and set parameters > b50a82eb (Anders Logg 2014-02-10 21:35:33 +0100 139) snes_solver = > std::shared_ptr<PETScSNESSolver>(new PETScSNESSolver()); > 676f6644 (Patrick Farrell 2012-10-15 20:41:48 +0100 140) } > 676f6644 (Patrick Farrell 2012-10-15 20:41:48 +0100 141) > snes_solver->parameters.update(parameters("snes_solver")); > > -- > Anders > > > tors 18 juni 2015 kl 10:51 skrev Garth N. Wells <[email protected]>: >> >> When did PETSc SNES code slip into NonlinearVariationalSolver? It >> obviously shouldn't be in there because NonlinearVariationalSolver is >> not specific to a linear algebra backend. >> >> Garth >> _______________________________________________ >> fenics mailing list >> [email protected] >> http://fenicsproject.org/mailman/listinfo/fenics _______________________________________________ fenics mailing list [email protected] http://fenicsproject.org/mailman/listinfo/fenics
