← Back to team overview

dolfin team mailing list archive

Re: Simplified solution process

 

> On Tue, 2006-02-21 at 16:09 +0100, Johan Hoffman wrote:
>> This sounds like a good plan. But as we said, maybe we should wait to
>> specify the format of the time dependent PDE's until we know how these
>> will be handled (ODE timestepping or other...).
>>
>
> Sure. I'll start with static linear and nonlinear PDEs.

Great!

/Johan


>
> Garth
>
>> /Johan
>>
>>
>> > On Tue, 2006-02-21 at 08:03 -0600, Anders Logg wrote:
>> >> I suggest one class PDE that tries to be smart by looking at the
>> >> arguments to the constructor and finds out what to do.
>> >>
>> >
>> > Sure. We will still need to explicitly tell the PDE if it is
>> nonlinear,
>> > as for simple nonlinear functions, the constructor is the same (no
>> extra
>> > information is required). The only difference is the solve function.
>> >
>> > I've started PDE implementing as outlined below, modelled on the class
>> > Function.
>> >
>> > Garth
>> >
>> >> Then we have specialized classes as subclasses of GenericPDE and PDE
>> >> has a pointer to GenericPDE:
>> >>
>> >>     class PDE
>> >>     {
>> >>     public:
>> >>
>> >>     private:
>> >>
>> >>       GenericPDE* pde;
>> >>
>> >>     };
>> >>
>> >> Maybe the specialized classes at this point should be
>> >>
>> >>     StaticLinearPDE      (current solver in PDE class)
>> >>     StaticNonlinearPDE   (Garth's new nonlinear solver)
>> >>
>> >> I expect we will add some automation for time-dependent PDEs at some
>> >> point and use the ODE-solvers for adaptive time-stepping. Maybe we
>> >> can then add
>> >>
>> >>     TimeDependentLinearPDE
>> >>     TimeDependentNonlinearPDE
>> >>
>> >> Other options would be Transient (but I don't like it since it
>> >> indicates something short-lived near t = 0) or Dynamic (which I don't
>> >> really like either).
>> >>
>> >> Maybe we should also have a class called VariationalProblem that just
>> >> is a copy of the current PDE class. This can be nice to have to set
>> up
>> >> variational problems for projections that are not really PDEs.
>> Perhaps
>> >> the StaticLinearPDE class can in turn define a VariationalProblem and
>> >> solve it so that we don't have to duplicate the code.
>> >>
>> >> /Anders
>> >>
>> >>
>> >> On Tue, Feb 21, 2006 at 11:27:07AM +0100, Garth N. Wells wrote:
>> >> > Is it preferable to have objects LinearPDE, NonlinearPDE, etc, or
>> just
>> >> > one type, PDE, which knows (will be told) whether it is linear,
>> >> > nonlinear, time-dependent, etc?
>> >> >
>> >> > Garth
>> >> >
>> >> > On Tue, 2006-02-21 at 11:19 +0100, Johan Hoffman wrote:
>> >> > > Ok, sounds good. We had a similar structure in early versions of
>> >> DOLFIN
>> >> > > (StatProblem, TranProblem,...), which I think we removed since we
>> >> wanted a
>> >> > > more flat structure of PDE tools. But now we have the possibility
>> to
>> >> > > automate a lot of features within each class, so I think a
>> >> resurrection is
>> >> > > motivated.
>> >> > >
>> >> > > /Johan
>> >> > >
>> >> > >
>> >> > > > I've added the class NonlinearPDE in src/kernel/nls, which has
>> a
>> >> very
>> >> > > > similar interface to the class PDE, and has similar
>> functionality
>> >> for
>> >> > > > solving.
>> >> > > >
>> >> > > > I think that Anders' suggestion to split-up PDE in the same
>> >> fashion as
>> >> > > > Function is good a good idea. I'm working in it now - at this
>> >> stage for
>> >> > > > linear and nonlinear PDE's.
>> >> > > >
>> >> > > > Garth
>> >> > > >
>> >> > > > On Fri, 2006-02-10 at 14:14 -0600, Anders Logg wrote:
>> >> > > >> The new PDE class is now in place and takes care of some of
>> the
>> >> > > >> standard stuff you need to do to solve a static linear PDE:
>> >> define
>> >> > > >> vectors and matrices, assemble bilinear and linear forms,
>> solve
>> >> linear
>> >> > > >> system and create a Function from the degrees of freedom.
>> >> > > >>
>> >> > > >> Here's the new version of the Poisson demo:
>> >> > > >>
>> >> > > >>   // Set up problem
>> >> > > >>   UnitSquare mesh(16, 16);
>> >> > > >>   Poisson::BilinearForm a;
>> >> > > >>   Poisson::LinearForm L(f);
>> >> > > >>   PDE pde(a, L, mesh, bc);
>> >> > > >>
>> >> > > >>   // Solve
>> >> > > >>   Function u = pde.solve();
>> >> > > >>
>> >> > > >>   // Save function to file
>> >> > > >>   File file("poisson.pvd");
>> >> > > >>   file << u;
>> >> > > >>
>> >> > > >> This works for all linear static PDEs. I imagine that we can
>> use
>> >> the
>> >> > > >> PDE class to automate the solution of static nonlinear PDEs,
>> >> > > >> time-dependent etc. Depending on the arguments to the
>> constructor
>> >> > > >> (among other things), the PDE class would know what to do to
>> >> solve the
>> >> > > >> system. A first step would be to integrate Garth's
>> Newton-solver
>> >> with
>> >> > > >> the PDE class. Perhaps we need to partition it in the same way
>> as
>> >> the
>> >> > > >> Function class (GenericPDE, StaticLinearPDE etc) so it's easy
>> to
>> >> > > >> plugin a new solver.
>> >> > > >>
>> >> > > >> Note that as an alternative to
>> >> > > >>
>> >> > > >>   Function u = pde.solve();
>> >> > > >>
>> >> > > >> one can do
>> >> > > >>
>> >> > > >>   Function u;
>> >> > > >>   pde.solve(u);
>> >> > > >>
>> >> > > >> which is slightly more efficient (avoids one copy of the
>> vector
>> >> of
>> >> > > >> degrees of freedom).
>> >> > > >>
>> >> > > >> The PDE class i parametrized and has one parameter "solver",
>> so
>> >> you
>> >> > > >> can do either
>> >> > > >>
>> >> > > >>   pde.set("solver", "direct"); // default option
>> >> > > >>
>> >> > > >> or
>> >> > > >>
>> >> > > >>   pde.set("solver", "iterative");
>> >> > > >>
>> >> > > >> /Anders
>> >> > > >>
>> >> > > >> _______________________________________________
>> >> > > >> DOLFIN-dev mailing list
>> >> > > >> DOLFIN-dev@xxxxxxxxxx
>> >> > > >> http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
>> >> > > >
>> >> > > >
>> >> > > > _______________________________________________
>> >> > > > DOLFIN-dev mailing list
>> >> > > > DOLFIN-dev@xxxxxxxxxx
>> >> > > > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
>> >> > > >
>> >> > >
>> >> > >
>> >> > >
>> >> > > _______________________________________________
>> >> > > DOLFIN-dev mailing list
>> >> > > DOLFIN-dev@xxxxxxxxxx
>> >> > > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
>> >
>> >
>> >
>> > _______________________________________________
>> > DOLFIN-dev mailing list
>> > DOLFIN-dev@xxxxxxxxxx
>> > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
>> >
>>
>>
>>
>> _______________________________________________
>> DOLFIN-dev mailing list
>> DOLFIN-dev@xxxxxxxxxx
>> http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
> --
> Dr. Garth N. Wells
> Faculty of Civil Engineering and Geosciences
> Delft University of Technology
> Stevinweg 1
> 2628 CN Delft
> The Netherlands
>
> tel.     +31 15 278 7922
> fax.     +31 15 278 6383
> e-mail   g.n.wells@xxxxxxxxxx
> url      http://www.mechanics.citg.tudelft.nl/~garth
>
>





References