2008/10/31 Johan Hake <[EMAIL PROTECTED]>: > 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 <[EMAIL PROTECTED]>: >> >>>>> 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. -- Martin _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
