Sounds good, as long as there is also a default option that allows the
solver not to be passed if the user does not care or knows enough to choose
the solver.

--
Anders


mån 27 juli 2015 kl 20:15 skrev Garth N. Wells <gn...@cam.ac.uk>:

> On 27 July 2015 at 17:36, Jan Blechta <blec...@karlin.mff.cuni.cz> wrote:
>
>> I'd like to see this sorted out too. Here is an idea:
>>
>> 1. introduce class GenericNonlinearSolver
>> 2. NewtonSolver, PETScSNESSolver, PETScTAOSolver will subclass 1.
>> 3. introduce GenericLinearAlgebraFactory::create_nonlinear_solver()
>> 4. introduce constructor
>>      NonlinearVariationalSolver::NonlinearVariationalSolver(
>>        std::shared_ptr<NonlinearVariationalProblem>,
>>        std::shared_ptr<GenericNonlinearSolver>)
>> 5. introduce solver accessor
>>      NonlinearVariationalSolver::nonlinear_solver()
>>
>> It may sound too complicated and not in concert with Garth's goals.
>
>
> I floated the same idea recently (can't recall if it was on Bitbucket or
> the mailing list), so I'm all for it. The solver should be passed to the
> 'solve§§§§' interface,
>
>     solve (F==0, nonlinear_solver)
>
> Garth
>
>
>> But
>> it is a logical step which allows user to bring his own nonlinear
>> solver to NonlinearVariationalSolver, and accessing it back using a
>> method. At the same time it will also solve Garth's original complaint.
>>
>> Any comments?
>>
>> Jan
>>
>>
>> On Thu, 18 Jun 2015 10:43:50 +0100
>> "Garth N. Wells" <gn...@cam.ac.uk> wrote:
>>
>> > 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 <anders.l...@gmail.com> 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 <gn...@cam.ac.uk>:
>> > >>
>> > >> 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
>> > >> fenics@fenicsproject.org
>> > >> http://fenicsproject.org/mailman/listinfo/fenics
>> > _______________________________________________
>> > fenics mailing list
>> > fenics@fenicsproject.org
>> > http://fenicsproject.org/mailman/listinfo/fenics
>>
>>
_______________________________________________
fenics mailing list
fenics@fenicsproject.org
http://fenicsproject.org/mailman/listinfo/fenics

Reply via email to