Johan Hake wrote:
> 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);
> 

The above will work.

Is there a nifty name we could use for when the test and trial spaces 
are the same? Could we still use PoissonFunctionSpace in this case, even 
if the there a coefficient functions from other spaces? This way only 
FunctionSpace would need to be declared.

Garth

> or do we have to instantiate both?
> 
>   PoissonTestSpace  TestV(mesh);
>   PoissonTrialSpace TrialV(mesh);
>   PoissonBilinearForm(TestV,TrialV);
>  
> Johan
> 
>> Garth
>>
>>>>> Garth
>>>>>
>>>>>>>  PoissonBilinearForm a();
>>>>>>>  PoissonLinearForm L();
>>>>>>>
>>>>>>>  L.set_f(f); L.set_g(g);
>>>>>>>  ...
>>>>>>>
>>>>>>> If this is not possible or if it is but we do not want it, please
>>>>>>> inform me.
>>>>>> We would still need
>>>>>>
>>>>>>   PoissonBilinearForm a(V,V);
>>>>>>   PoissonLinearForm L(V);
>>>>>>
>>>>>> Which looks, I agree, a bit misleading since you cannot
>>>>>> pass any other function spaces to these forms.
>>>> Yes, it's misleading. We could possibly modify the code generation to
>>>> something like
>>>>
>>>>   PoissonBilinearForm a(mesh);
>>>>   PoissonLinearForm a(mesh);
>>> and then create the test and trial space with the mesh? Won't it be
>>> difficult to share the dofmaps with other parts of the code then?
>>>
>>> I think I thought it was strange because I have taken the dofmaps (or
>>> function space if you like) for the trial and test space for granted.
>>> With the new design this is more explicit and good.
>>>
>>>> and let the forms themselves create the right function space. The
>>>> problem then is that it will complicate reuse of function spaces.
>>>>
>>>> The same thing goes for initialization of Functions with or without V.
>>>> Johan asks above about initialization of Functions with V:
>>>>
>>>>   Source f(V);
>>>>   Flux g(V);
>>>>
>>>> This is indeed possible and will lead to a reuse of V also for f and g.
>>>> What happens when one does
>>>>
>>>>   a.f = f;
>>>>
>>>> is that a check is made whether f has a function space and if not a
>>>> FunctionSpace is created and attached to f. So if one has already done
>>>> f(V), that space will be reused.
>>> Good!
>>>
>>>
>>> Johan
>>> _______________________________________________
>>> DOLFIN-dev mailing list
>>> [email protected]
>>> http://www.fenics.org/mailman/listinfo/dolfin-dev
> 
> 
_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to