On Fri, Oct 31, 2008 at 11:24:23AM +0100, Martin Sandve Alnæs wrote: > 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.
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. -- Anders
signature.asc
Description: Digital signature
_______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
