dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #12683
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
On Fri, Mar 13, 2009 at 10:11 AM, Garth N. Wells <gnw20@xxxxxxxxx> wrote:
>
>
> Martin Sandve Alnæs wrote:
>>
>> On Thu, Mar 12, 2009 at 11:05 PM, Garth N. Wells <gnw20@xxxxxxxxx> wrote:
>>>
>>> Anders Logg wrote:
>>>> It seems it wouldn't be anymore difficult than what we have now. For
>>>> example, the Poisson demo would be
>>>>
>>>> UnitSquare mesh(32, 32);
>>>> PoissonFunctionSpace V(mesh);
>>>>
>>>> PoissonBilinearForm a(V, V);
>>>> PoissonLinearForm L(V);
>>>> Source f(V);
>>>> L.f = f; // without side effect
>>>>
>>> That's OK, but if you have >5 coefficients with >5 different functions
>>> spaces, it's not nice.
>>
>> This feature will without doubt lead to many users writing code where
>> function spaces are duplicated. If you have a form where more than one
>> coefficient shares same function space, you shouldn't use this feature.
>> Even if it is well documented, people don't generally read documentation
>> until things break.
>>
>> If we strictly require that functions have function spaces, we can instead
>> check that the form coefficient function spaces match the given function
>> in "L.f = f;". Then your problem is reduced to runtime "typechecking".
>>
>
> The problem is the number of lines a user must program, and having
> intelligible names for the spaces.
The Form/FunctionSpace code generation in wrote and placed
in dolfin_utils/ produces names like this from .ufl files:
PoissonBilinearForm::TrialSpace V(mesh);
PoissonLinearForm::CoefficientSpace_f F(mesh);
PoissonLinearForm::CoefficientSpace_g G(mesh);
PoissonBilinearForm a(V, V);
PoissonLinearForm L(V);
And after working a bit with this I wrote the following:
// Suggestions for improvement to naming conventions:
// Poisson::BilinearForm::TrialSpace V(mesh);
// Poisson::BilinearForm::CoefficientSpace_f F(mesh);
// Poisson::CoefficientSpace_f F(mesh);
// Poisson::CoefficientSpace_g G(mesh);
//
// Poisson::BilinearForm a(V, V);
// Poisson::LinearForm L(V);
Here "Poisson" is the prefix taken from "Poisson.ufl",
PoissonBilinearForm is a typedef to PoissonForm_a
such that any number of forms can be defined in each file,
and "g" in PoissonLinearForm::CoefficientSpace_g is
the name of the variable holding the Function in the .ufl file
(g = Function(...)).
I find this acceptable to work with.
Martin
Follow ups
References
-
[HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: DOLFIN, 2009-03-11
-
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: Martin Sandve Alnæs, 2009-03-12
-
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: Anders Logg, 2009-03-12
-
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: Martin Sandve Alnæs, 2009-03-12
-
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: Anders Logg, 2009-03-12
-
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: Martin Sandve Alnæs, 2009-03-12
-
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: Anders Logg, 2009-03-12
-
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: Garth N. Wells, 2009-03-12
-
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: Martin Sandve Alnæs, 2009-03-13
-
Re: [HG DOLFIN] Automatically interpolate user-defined functions on assignment
From: Garth N. Wells, 2009-03-13