← Back to team overview

dolfin team mailing list archive

Re: Redesign almost finished

 

2008/10/31 Anders Logg <logg@xxxxxxxxx>:
> On Fri, Oct 31, 2008 at 11:24:23AM +0100, Martin Sandve Alnæs wrote:
>> 2008/10/31 Johan Hake <hake@xxxxxxxxx>:
>> > On Friday 31 October 2008 11:05:19 Garth N. Wells wrote:
>> >> Johan Hake wrote:
>> >> > On Friday 31 October 2008 09:38:38 Anders Logg wrote:
>> >> >> On Fri, Oct 31, 2008 at 07:57:52AM +0000, Garth N. Wells wrote:
>> >> >>> Martin Sandve Alnæs wrote:
>> >> >>>> 2008/10/30 Johan Hake <hake@xxxxxxxxx>:
>> >> >>>>> On Thursday 30 October 2008 19:20:06 Anders Logg wrote:
>> >> >>>>>> Most things are now in place, finally. At least we can run the
>> >> >>>>>> Poisson demo again... :-)
>> >> >>>>>>
>> >> >>>>>> Anyway, take a look at demo/pde/poisson/main.cpp and see what you
>> >> >>>>>> think. I think it looks pretty good, but please report if you have
>> >> >>>>>> any ideas for further improvements of the interface while we're at
>> >> >>>>>> it.
>> >> >>>>>
>> >> >>>>> It looks nice, but I see some magic which I wish you can shed some
>> >> >>>>> light on.
>> >> >>>>>
>> >> >>>>> The introduction of PoissionFunctionSpace is not clear for me. Why do
>> >> >>>>> we have to instantiate the forms with it?
>> >> >>>>
>> >> >>>> Such that the Forms can use the same FunctionSpaces as are used in the
>> >> >>>> rest of the code, while the user stays in control of their allocation.
>> >> >>>> In particular, DofMaps needs to be shared between different parts of
>> >> >>>> the code.
>> >> >>
>> >> >> In general the function spaces are named
>> >> >>
>> >> >>   PoissonBilinearFormArgumentSpace0
>> >> >>   PoissonBilinearFormArgumentSpace1
>> >> >>
>> >> >>   PoissonBilinearFormCoefficientSpace0
>> >> >>   PoissonBilinearFormCoefficientSpace1
>> >> >>   PoissonBilinearFormCoefficientSpace2
>> >> >>   PoissonBilinearFormCoefficientSpace3
>> >> >>   ...
>> >> >>
>> >> >> Then, if all forms appearing in a form file (both a and L) share the
>> >> >> same test space (which is natural), then an additional space will be
>> >> >> generated:
>> >> >>
>> >> >>   PoissonTestSpace
>> >> >>
>> >> >> Same for the trial space:
>> >> >>
>> >> >>   PoissonTrialSpace
>> >> >>
>> >> >> If all spaces in the form are the same, then a common space will be
>> >> >> generated:
>> >> >>
>> >> >>   PoissonFunctionSpace
>> >> >>
>> >> >> As noted by Martin, this allows a user to control the level of reuse
>> >> >> of function spaces.
>> >> >
>> >> > Ok.
>> >> >
>> >> >>>>> In the form file the two forms L and a are defined. These are then
>> >> >>>>> reflected in the main.cpp file as before. This is intuitive. But
>> >> >>>>> where does the PoissonFunctionSpace come from? I as a user has not
>> >> >>>>> defined it in the form file.
>> >> >>>>>
>> >> >>>>> It might help if we introduce the notion of FunctionSpace in FFC/UFL.
>> >> >>>>> Then some of the magic would disapear I think.
>> >> >>>>
>> >> >>>> This could reinforce the problem with circular dependencies I
>> >> >>>> mentioned earlier. I don't see that anyone has adressed that issue.
>> >> >>>>
>> >> >>>>> The talk about a Function always knowing its Space was clear, you can
>> >> >>>>> always plot it, and so on. But then the introduction of the "magic"
>> >> >>>>> dedication of FunctionSpace broke that, and also made the actuall
>> >> >>>>> function of FunctionSpace more blurry.
>> >> >>>>>
>> >> >>>>> Intuitively I would prefer:
>> >> >>>>>
>> >> >>>>>  ...
>> >> >>>>>  PoissonFunctionSpace V(mesh);
>> >> >>>>>
>> >> >>>>>  Source f(V);
>> >> >>>>>  Flux g(V);
>> >> >>>
>> >> >>> The problem here is that f and g may come from a space other than V.
>> >> >>> The difficulty for a user is that it's hard (and error prone) to create
>> >> >>> the FunctionSpaces and associate them with the right Functions.
>> >> >
>> >> > Won't
>> >> >
>> >> >    PoissonBilinearForm a(V,V);
>> >> >    PoissonLinearForm L(V);
>> >> >
>> >> > be as error prone with different test and trial spaces too?
>> >>
>> >> No, because there are never more that two, we can use the meaningful
>> >> names "Test" and "Trial" and they are always the first arguments to the
>> >> Form constructor.
>> >>
>> >> A possible solution along these lines was discussed last week which
>> >> involved giving PoissonBilinearFormCoefficientSpace1, etc, names which
>> >> involved the name used in the FFC input.
>> >
>> > Ok.
>> >
>> > If we have the same trial and test space, but different functionspaces. Then I
>> > suppose one only would like to create one space for the former. How would
>> > this be done?
>> >
>> >  PoissonTestSpace TestV(mesh);
>> >  PoissonBilinearForm(TestV,TestV);
>> >
>> > or do we have to instantiate both?
>> >
>> >  PoissonTestSpace  TestV(mesh);
>> >  PoissonTrialSpace TrialV(mesh);
>> >  PoissonBilinearForm(TestV,TrialV);
>> >
>> > Johan
>>
>> Good point.
>>
>> The Poisson*Space names should be generated as typedefs
>> to unique classes, that should solve part of this problem.
>
> I don't really understand what you mean, but I don't think it would
> help.
>
> To get reuse, we need to reuse *instances* of classes. It doesn't
> matter if we reuse classes, so typedefs won't help.

You're right, this doesn't help anything.
Checking for equal function spaces cannot depend on the
C++ type of the FunctionSpace anyway, since this always
will be different across separately generated Forms.

--
Martin


References