[Dune] [Dune-Commit] dune-localfunctions r718 - in trunk: . dune/localfunctions dune/localfunctions/generic dune/localfunctions/generic/lagrangebasis dune/localfunctions/generic/orthonormalbasis dune/localfunctions/generic/quadrature dune/localfunctions/generic/raviartthomasbasis dune/localfunctions/test dune/localfunctions/utility

Oliver Sander sander at mi.fu-berlin.de
Mon Jan 18 14:50:55 CET 2010


Hi Martin!
I didn't know that code can only be in common/ if _all_ implementations 
use it.
If this is so than several things in common/ have to go.

 > As for documentation: Where is the right place to document such stuff 
anyway?

Doxygen allows you to document directories.  Also we should introduce 
modules
as in the other dune modules (no pun intended).

--
Oliver


Martin Nolte schrieb:
> Hi Oliver,
>
> since you were all unhappy with the generic subdirectory, we started 
> removing it. Please keep in mind that we are not at all happy about 
> this decision.
>
> In our opinion, the stuff in the old generic/common directory does not 
> belong into the common directory, as it is not related to all 
> implementations (and is hence not common). Therefore we thought it 
> best to use a utilities directory (i.e., implementor's utilities). I 
> agree, though, that there might be some files that could be moved to 
> the common directory (or even to dune-common). But we will have to see 
> that in futher cleanup steps.
>
> Yours,
>
> Martin
>
>
>
>
> Oliver Sander wrote:
>> Hi Martin!
>>
>> Could you please document the rules about what goes into common/ and 
>> what goes into utility/?
>> Apology if you already have and I just can't find it.
>>
>> Thnx,
>> Oliver
>>
>> mnolte at dune-project.org schrieb:
>>> Author: mnolte
>>> Date: 2010-01-18 14:25:13 +0100 (Mon, 18 Jan 2010)
>>> New Revision: 718
>>>
>>> Added:
>>>    trunk/dune/localfunctions/utility/
>>>    trunk/dune/localfunctions/utility/field.hh
>>>    trunk/dune/localfunctions/utility/gmpfield.hh
>>>    trunk/dune/localfunctions/utility/matrix.hh
>>> Removed:
>>>    trunk/dune/localfunctions/generic/common/
>>>    trunk/dune/localfunctions/generic/math/
>>> Modified:
>>>    trunk/configure.ac
>>>    trunk/dune/localfunctions/Makefile.am
>>>    trunk/dune/localfunctions/generic/Makefile.am
>>>    trunk/dune/localfunctions/generic/dglagrangefiniteelement.hh
>>>    trunk/dune/localfunctions/generic/lagrangebasis/equidistantpoints.hh
>>>    trunk/dune/localfunctions/generic/lagrangebasis/interpolation.hh
>>>    trunk/dune/localfunctions/generic/lagrangebasis/lagrangebasis.hh
>>>    
>>> trunk/dune/localfunctions/generic/lagrangebasis/lagrangecoefficients.hh
>>>    trunk/dune/localfunctions/generic/lagrangebasis/lobattopoints.hh
>>>    trunk/dune/localfunctions/generic/lagrangebasis/test.cc
>>>    trunk/dune/localfunctions/generic/lagrangefiniteelement.hh
>>>    
>>> trunk/dune/localfunctions/generic/orthonormalbasis/orthonormalbasis.hh
>>>    
>>> trunk/dune/localfunctions/generic/orthonormalbasis/orthonormalcompute.hh 
>>>
>>>    trunk/dune/localfunctions/generic/orthonormalbasis/test.cc
>>>    trunk/dune/localfunctions/generic/orthonormalfiniteelement.hh
>>>    trunk/dune/localfunctions/generic/quadrature/gaussquadrature.hh
>>>    trunk/dune/localfunctions/generic/quadrature/genericquadrature.hh
>>>    trunk/dune/localfunctions/generic/quadrature/lobattoquadrature.hh
>>>    trunk/dune/localfunctions/generic/quadrature/quadrature.hh
>>>    
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/interpolation.hh
>>>    
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/raviartthomasbasis.hh 
>>>
>>>    
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/raviartthomasprebasis.hh 
>>>
>>>    trunk/dune/localfunctions/generic/raviartthomasbasis/test.cc
>>>    trunk/dune/localfunctions/generic/raviartthomasfiniteelement.hh
>>>    trunk/dune/localfunctions/test/testgenericfem.cc
>>>    trunk/dune/localfunctions/utility/Makefile.am
>>>    trunk/dune/localfunctions/utility/basisevaluator.hh
>>>    trunk/dune/localfunctions/utility/basismatrix.hh
>>>    trunk/dune/localfunctions/utility/basisprint.hh
>>>    trunk/dune/localfunctions/utility/coeffmatrix.hh
>>>    trunk/dune/localfunctions/utility/defaultbasisfactory.hh
>>>    trunk/dune/localfunctions/utility/dglocalcoefficients.hh
>>>    trunk/dune/localfunctions/utility/interpolationhelper.hh
>>>    trunk/dune/localfunctions/utility/l2interpolation.hh
>>>    trunk/dune/localfunctions/utility/monomialbasis.hh
>>>    trunk/dune/localfunctions/utility/multiindex.hh
>>>    trunk/dune/localfunctions/utility/polynomialbasis.hh
>>>    trunk/dune/localfunctions/utility/tensor.hh
>>> Log:
>>> move generic/common + generic/math to utility
>>>
>>>
>>> Modified: trunk/configure.ac
>>> ===================================================================
>>> --- trunk/configure.ac    2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/configure.ac    2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -51,8 +51,7 @@
>>>                  
>>> dune/localfunctions/raviartthomas/raviartthomas0q3d/Makefile
>>>                  dune/localfunctions/test/Makefile
>>>                  dune/localfunctions/generic/Makefile
>>> -                dune/localfunctions/generic/common/Makefile         
>>> -                dune/localfunctions/generic/math/Makefile           
>>> +                dune/localfunctions/utility/Makefile
>>>                  dune/localfunctions/generic/quadrature/Makefile
>>>                  dune/localfunctions/generic/orthonormalbasis/Makefile
>>>                  dune/localfunctions/generic/lagrangebasis/Makefile 
>>> Modified: trunk/dune/localfunctions/Makefile.am
>>> ===================================================================
>>> --- trunk/dune/localfunctions/Makefile.am    2010-01-18 10:53:34 UTC 
>>> (rev 717)
>>> +++ trunk/dune/localfunctions/Makefile.am    2010-01-18 13:25:13 UTC 
>>> (rev 718)
>>> @@ -7,7 +7,7 @@
>>>      pk2d.hh q22d.hh q1.hh \
>>>      pq22d.hh refinedp0.hh
>>>  
>>> -SUBDIRS = common generic test \
>>> +SUBDIRS = common generic utility test \
>>>            p0 p1 pk2d pk3d q1 q22d raviartthomas edger02d edges02d \
>>>         edges03d rannacher_turek2d refinedp1 monom mimetic \
>>>            prismp1 prismp2 hierarchicalprismp2 refinedp0
>>>
>>> Modified: trunk/dune/localfunctions/generic/Makefile.am
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/Makefile.am    2010-01-18 
>>> 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/generic/Makefile.am    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -3,7 +3,7 @@
>>>                    dglagrangefiniteelement.hh \
>>>                    orthonormalfiniteelement.hh \
>>>                    raviartthomasfiniteelement.hh
>>> -SUBDIRS = common orthonormalbasis lagrangebasis raviartthomasbasis 
>>> math quadrature
>>> +SUBDIRS = orthonormalbasis lagrangebasis raviartthomasbasis quadrature
>>>  AM_CPPFLAGS = $(DUNE_CPPFLAGS)
>>>  
>>>  include $(top_srcdir)/am/global-rules
>>>
>>> Modified: trunk/dune/localfunctions/generic/dglagrangefiniteelement.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/dglagrangefiniteelement.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/generic/dglagrangefiniteelement.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -1,8 +1,8 @@
>>>  #ifndef DUNE_DGLAGRANGEFINITEELEMENT_HH
>>>  #define DUNE_DGLAGRANGEFINITEELEMENT_HH
>>>  
>>> -#include <dune/localfunctions/generic/common/localfiniteelement.hh>
>>> -#include <dune/localfunctions/generic/common/dglocalcoefficients.hh>
>>> +#include <dune/localfunctions/utility/localfiniteelement.hh>
>>> +#include <dune/localfunctions/utility/dglocalcoefficients.hh>
>>>  #include 
>>> <dune/localfunctions/generic/lagrangebasis/lagrangecoefficients.hh>
>>>  #include <dune/localfunctions/generic/lagrangebasis/interpolation.hh>
>>>  #include <dune/localfunctions/generic/lagrangebasis/lagrangebasis.hh>
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/lagrangebasis/equidistantpoints.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/lagrangebasis/equidistantpoints.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/lagrangebasis/equidistantpoints.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -4,9 +4,9 @@
>>>  #include <vector>
>>>  
>>>  #include <dune/common/fvector.hh>
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  #include <dune/common/forloop.hh>
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>>  #include <dune/grid/genericgeometry/topologytypes.hh>
>>>  #include <dune/grid/genericgeometry/subtopologies.hh>
>>>  
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/lagrangebasis/interpolation.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/lagrangebasis/interpolation.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/lagrangebasis/interpolation.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -2,7 +2,7 @@
>>>  #define DUNE_LAGRANGEBASIS_INTERPOLATION_HH
>>>  
>>>  #include <vector>
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>>  #include 
>>> <dune/localfunctions/generic/lagrangebasis/lagrangecoefficients.hh>
>>>  
>>>  namespace Dune
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/lagrangebasis/lagrangebasis.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/lagrangebasis/lagrangebasis.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/lagrangebasis/lagrangebasis.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -4,9 +4,9 @@
>>>  #include <fstream>
>>>  #include <dune/common/exceptions.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/defaultbasisfactory.hh>
>>> +#include <dune/localfunctions/utility/defaultbasisfactory.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/monomialbasis.hh>
>>> +#include <dune/localfunctions/utility/monomialbasis.hh>
>>>  #include 
>>> <dune/localfunctions/generic/orthonormalbasis/orthonormalbasis.hh>
>>>  #include <dune/localfunctions/generic/lagrangebasis/interpolation.hh>
>>>  
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/lagrangebasis/lagrangecoefficients.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/lagrangebasis/lagrangecoefficients.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/lagrangebasis/lagrangecoefficients.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -4,9 +4,9 @@
>>>  #include <vector>
>>>  
>>>  #include <dune/common/fvector.hh>
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  #include <dune/common/forloop.hh>
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>>  
>>>  #include <dune/grid/genericgeometry/topologytypes.hh>
>>>  #include <dune/grid/genericgeometry/subtopologies.hh>
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/lagrangebasis/lobattopoints.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/lagrangebasis/lobattopoints.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/lagrangebasis/lobattopoints.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -2,10 +2,10 @@
>>>  #define DUNE_LOBATTOBASIS_HH
>>>  
>>>  #include <fstream>
>>> -#include <dune/localfunctions/generic/math/matrix.hh>
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/matrix.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  #include <dune/common/forloop.hh>
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>>  #include <dune/grid/genericgeometry/referenceelements.hh>
>>>  #include <dune/grid/genericgeometry/referencemappings.hh>
>>>  
>>>
>>> Modified: trunk/dune/localfunctions/generic/lagrangebasis/test.cc
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/lagrangebasis/test.cc    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/generic/lagrangebasis/test.cc    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -1,6 +1,6 @@
>>>  #include <config.h>
>>>  
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  
>>>  #include 
>>> <dune/localfunctions/generic/lagrangebasis/equidistantpoints.hh>
>>>  
>>> @@ -8,7 +8,7 @@
>>>  
>>>  #include <dune/localfunctions/generic/lagrangebasis/lagrangebasis.hh>
>>>  #include <dune/localfunctions/generic/quadrature/genericquadrature.hh>
>>> -#include <dune/localfunctions/generic/common/basisprint.hh>
>>> +#include <dune/localfunctions/utility/basisprint.hh>
>>>  
>>>  #if HAVE_ALGLIB
>>>    typedef amp::ampf< 128 > StorageField;
>>>
>>> Modified: trunk/dune/localfunctions/generic/lagrangefiniteelement.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/lagrangefiniteelement.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/generic/lagrangefiniteelement.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -1,7 +1,7 @@
>>>  #ifndef DUNE_LAGRANGEFINITEELEMENT_HH
>>>  #define DUNE_LAGRANGEFINITEELEMENT_HH
>>>  
>>> -#include <dune/localfunctions/generic/common/localfiniteelement.hh>
>>> +#include <dune/localfunctions/utility/localfiniteelement.hh>
>>>  #include 
>>> <dune/localfunctions/generic/lagrangebasis/lagrangecoefficients.hh>
>>>  #include <dune/localfunctions/generic/lagrangebasis/interpolation.hh>
>>>  #include <dune/localfunctions/generic/lagrangebasis/lagrangebasis.hh>
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/orthonormalbasis/orthonormalbasis.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/orthonormalbasis/orthonormalbasis.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/orthonormalbasis/orthonormalbasis.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -3,9 +3,9 @@
>>>  
>>>  #include <sstream>
>>>  
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/polynomialbasis.hh>
>>> +#include <dune/localfunctions/utility/polynomialbasis.hh>
>>>  #include 
>>> <dune/localfunctions/generic/orthonormalbasis/orthonormalcompute.hh>
>>>  
>>>  namespace Dune
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/orthonormalbasis/orthonormalcompute.hh 
>>>
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/orthonormalbasis/orthonormalcompute.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/orthonormalbasis/orthonormalcompute.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -9,13 +9,13 @@
>>>  
>>>  #include <dune/common/fmatrix.hh>
>>>  
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> -#include <dune/localfunctions/generic/math/matrix.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>> +#include <dune/localfunctions/utility/matrix.hh>
>>>  
>>>  #include <dune/grid/genericgeometry/topologytypes.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/monomialbasis.hh>
>>> -#include <dune/localfunctions/generic/common/multiindex.hh>
>>> +#include <dune/localfunctions/utility/monomialbasis.hh>
>>> +#include <dune/localfunctions/utility/multiindex.hh>
>>>  
>>>  namespace ONBCompute
>>>  {
>>>
>>> Modified: trunk/dune/localfunctions/generic/orthonormalbasis/test.cc
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/orthonormalbasis/test.cc    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/generic/orthonormalbasis/test.cc    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -1,6 +1,6 @@
>>>  #include <config.h>
>>>  
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  #include 
>>> <dune/localfunctions/generic/orthonormalbasis/orthonormalbasis.hh>
>>>  #include <dune/localfunctions/generic/quadrature/gaussquadrature.hh>
>>>  
>>>
>>> Modified: trunk/dune/localfunctions/generic/orthonormalfiniteelement.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/orthonormalfiniteelement.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/generic/orthonormalfiniteelement.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -1,9 +1,9 @@
>>>  #ifndef DUNE_ORTHONORMALFINITEELEMENT_HH
>>>  #define DUNE_ORTHONORMALFINITEELEMENT_HH
>>>  
>>> -#include <dune/localfunctions/generic/common/localfiniteelement.hh>
>>> -#include <dune/localfunctions/generic/common/dglocalcoefficients.hh>
>>> -#include <dune/localfunctions/generic/common/l2interpolation.hh>
>>> +#include <dune/localfunctions/utility/localfiniteelement.hh>
>>> +#include <dune/localfunctions/utility/dglocalcoefficients.hh>
>>> +#include <dune/localfunctions/utility/l2interpolation.hh>
>>>  #include 
>>> <dune/localfunctions/generic/orthonormalbasis/orthonormalbasis.hh>
>>>  
>>>  namespace Dune
>>> Modified: 
>>> trunk/dune/localfunctions/generic/quadrature/gaussquadrature.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/quadrature/gaussquadrature.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/quadrature/gaussquadrature.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -5,7 +5,7 @@
>>>  #include <alglib/gqgengauss.h>
>>>  #endif
>>>  
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  
>>>  #include <dune/grid/common/quadraturerules.hh>
>>>  
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/quadrature/genericquadrature.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/quadrature/genericquadrature.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/quadrature/genericquadrature.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -5,7 +5,7 @@
>>>  #include <dune/grid/genericgeometry/topologytypes.hh>
>>>  
>>>  #include <dune/localfunctions/generic/quadrature/quadrature.hh>
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>>  
>>>  namespace Dune
>>>  {
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/quadrature/lobattoquadrature.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/quadrature/lobattoquadrature.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/quadrature/lobattoquadrature.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -9,7 +9,7 @@
>>>  
>>>  #include <dune/common/static_assert.hh>
>>>  
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  
>>>  #include <dune/localfunctions/generic/quadrature/genericquadrature.hh>
>>>  
>>>
>>> Modified: trunk/dune/localfunctions/generic/quadrature/quadrature.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/quadrature/quadrature.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/generic/quadrature/quadrature.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -5,7 +5,7 @@
>>>  
>>>  #include <dune/common/fvector.hh>
>>>  #include <dune/common/geometrytype.hh>
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  
>>>  namespace Dune
>>>  {
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/interpolation.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/interpolation.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/interpolation.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -9,14 +9,14 @@
>>>  #include <dune/grid/genericgeometry/referencemappings.hh>
>>>  #include <dune/grid/genericgeometry/referenceelements.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> -#include <dune/localfunctions/generic/common/interpolationhelper.hh>
>>> -#include <dune/localfunctions/generic/math/matrix.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/interpolationhelper.hh>
>>> +#include <dune/localfunctions/utility/matrix.hh>
>>>  #include <dune/localfunctions/common/localkey.hh>
>>>  
>>>  #include <dune/localfunctions/generic/quadrature/gaussquadrature.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/polynomialbasis.hh>
>>> +#include <dune/localfunctions/utility/polynomialbasis.hh>
>>>  #include 
>>> <dune/localfunctions/generic/orthonormalbasis/orthonormalbasis.hh>
>>>  
>>>  
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/raviartthomasbasis.hh 
>>>
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/raviartthomasbasis.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/raviartthomasbasis.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -4,7 +4,7 @@
>>>  #include <fstream>
>>>  #include <dune/common/exceptions.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/defaultbasisfactory.hh>
>>> +#include <dune/localfunctions/utility/defaultbasisfactory.hh>
>>>  #include 
>>> <dune/localfunctions/generic/raviartthomasbasis/interpolation.hh>
>>>  #include 
>>> <dune/localfunctions/generic/raviartthomasbasis/raviartthomasprebasis.hh> 
>>>
>>>  
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/raviartthomasprebasis.hh 
>>>
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/raviartthomasprebasis.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/raviartthomasbasis/raviartthomasprebasis.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -3,10 +3,10 @@
>>>  #include <fstream>
>>>  #include <utility>
>>>  
>>> -#include <dune/localfunctions/generic/math/matrix.hh>
>>> +#include <dune/localfunctions/utility/matrix.hh>
>>>  #include <dune/grid/genericgeometry/topologytypes.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/polynomialbasis.hh>
>>> +#include <dune/localfunctions/utility/polynomialbasis.hh>
>>>  
>>>  namespace Dune  {
>>>
>>> Modified: trunk/dune/localfunctions/generic/raviartthomasbasis/test.cc
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/raviartthomasbasis/test.cc    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/generic/raviartthomasbasis/test.cc    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -1,7 +1,7 @@
>>>  #include <config.h>
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  #include 
>>> <dune/localfunctions/generic/raviartthomasbasis/raviartthomasbasis.hh>
>>> -#include <dune/localfunctions/generic/common/basisprint.hh>
>>> +#include <dune/localfunctions/utility/basisprint.hh>
>>>  
>>>  #if HAVE_ALGLIB
>>>    typedef amp::ampf< 128 > StorageField;
>>>
>>> Modified: 
>>> trunk/dune/localfunctions/generic/raviartthomasfiniteelement.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/raviartthomasfiniteelement.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ 
>>> trunk/dune/localfunctions/generic/raviartthomasfiniteelement.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -1,7 +1,7 @@
>>>  #ifndef DUNE_RAVIARTTHOMASFINITEELEMENT_HH
>>>  #define DUNE_RAVIARTTHOMASFINITEELEMENT_HH
>>>  
>>> -#include <dune/localfunctions/generic/common/localfiniteelement.hh>
>>> +#include <dune/localfunctions/utility/localfiniteelement.hh>
>>>  #include 
>>> <dune/localfunctions/generic/raviartthomasbasis/raviartthomasbasis.hh>
>>>  
>>>  namespace Dune
>>> Modified: trunk/dune/localfunctions/test/testgenericfem.cc
>>> ===================================================================
>>> --- trunk/dune/localfunctions/test/testgenericfem.cc    2010-01-18 
>>> 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/test/testgenericfem.cc    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -12,7 +12,7 @@
>>>  
>>>  #include <dune/common/function.hh>
>>>  
>>> -#include <dune/localfunctions/generic/math/gmpfield.hh>
>>> +#include <dune/localfunctions/utility/gmpfield.hh>
>>>  
>>>  // Lagrange type elements
>>>  #include <dune/localfunctions/generic/lagrangefiniteelement.hh>
>>>
>>> Copied: trunk/dune/localfunctions/utility (from rev 717, 
>>> trunk/dune/localfunctions/generic/common)
>>>
>>> Modified: trunk/dune/localfunctions/utility/Makefile.am
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/Makefile.am    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/Makefile.am    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -1,11 +1,12 @@
>>> -commondir = $(includedir)/dune/localfunctions/generic/common
>>> +utilitydir = $(includedir)/dune/localfunctions/generic/utility
>>>  
>>> -common_HEADERS = basisevaluator.hh       localfiniteelement.hh  \
>>> -                 basismatrix.hh          monomialbasis.hh       \
>>> -                 basisprint.hh           multiindex.hh          \
>>> -                 coeffmatrix.hh          polynomialbasis.hh     \
>>> -                 defaultbasisfactory.hh  tensor.hh              \
>>> -                 dglocalcoefficients.hh  topologyfactory.hh     \
>>> -                 interpolationhelper.hh  l2interpolation.hh
>>> +utility_HEADERS = basisevaluator.hh       localfiniteelement.hh  \
>>> +                  basismatrix.hh          monomialbasis.hh       \
>>> +                  basisprint.hh           multiindex.hh          \
>>> +                  coeffmatrix.hh          polynomialbasis.hh     \
>>> +                  defaultbasisfactory.hh  tensor.hh              \
>>> +                  dglocalcoefficients.hh  topologyfactory.hh     \
>>> +                  interpolationhelper.hh  l2interpolation.hh     \
>>> +                  field.hh gmpfield.hh matrix.hh
>>>  
>>>  include $(top_srcdir)/am/global-rules
>>>
>>> Modified: trunk/dune/localfunctions/utility/basisevaluator.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/basisevaluator.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/basisevaluator.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -8,11 +8,11 @@
>>>  
>>>  #include <dune/grid/genericgeometry/topologytypes.hh>
>>>  
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/multiindex.hh>
>>> +#include <dune/localfunctions/utility/multiindex.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/tensor.hh>
>>> +#include <dune/localfunctions/utility/tensor.hh>
>>>  
>>>  namespace Dune
>>>  {
>>>
>>> Modified: trunk/dune/localfunctions/utility/basismatrix.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/basismatrix.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/basismatrix.hh    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -4,9 +4,9 @@
>>>  #include <fstream>
>>>  #include <dune/common/exceptions.hh>
>>>  
>>> -#include <dune/localfunctions/generic/math/matrix.hh>
>>> -#include <dune/localfunctions/generic/common/monomialbasis.hh>
>>> -#include <dune/localfunctions/generic/common/polynomialbasis.hh>
>>> +#include <dune/localfunctions/utility/matrix.hh>
>>> +#include <dune/localfunctions/utility/monomialbasis.hh>
>>> +#include <dune/localfunctions/utility/polynomialbasis.hh>
>>>  
>>>  namespace Dune
>>>  {
>>>
>>> Modified: trunk/dune/localfunctions/utility/basisprint.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/basisprint.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/basisprint.hh    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -1,7 +1,7 @@
>>>  #ifndef BASISPRINT
>>>  #define BASISPRINT
>>> -#include <dune/localfunctions/generic/common/multiindex.hh>
>>> -#include <dune/localfunctions/generic/common/polynomialbasis.hh>
>>> +#include <dune/localfunctions/utility/multiindex.hh>
>>> +#include <dune/localfunctions/utility/polynomialbasis.hh>
>>>  namespace Dune {
>>>    /**********************************************
>>>     * Methods for printing a PolynomialBasis.
>>>
>>> Modified: trunk/dune/localfunctions/utility/coeffmatrix.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/coeffmatrix.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/coeffmatrix.hh    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -4,8 +4,8 @@
>>>  #include <iostream>
>>>  #include <vector>
>>>  #include <dune/common/fvector.hh>
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> -#include <dune/localfunctions/generic/common/tensor.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>> +#include <dune/localfunctions/utility/tensor.hh>
>>>  
>>>  namespace Dune  {
>>>
>>> Modified: trunk/dune/localfunctions/utility/defaultbasisfactory.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/common/defaultbasisfactory.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/defaultbasisfactory.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -4,8 +4,8 @@
>>>  #include <fstream>
>>>  #include <dune/common/exceptions.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/basismatrix.hh>
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/basismatrix.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>>  
>>>  namespace Dune
>>>  {
>>>
>>> Modified: trunk/dune/localfunctions/utility/dglocalcoefficients.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/common/dglocalcoefficients.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/dglocalcoefficients.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -4,7 +4,7 @@
>>>  #include <cassert>
>>>  #include <vector>
>>>  
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>>  #include <dune/localfunctions/common/localkey.hh>
>>>  
>>>  namespace Dune
>>>
>>> Copied: trunk/dune/localfunctions/utility/field.hh (from rev 717, 
>>> trunk/dune/localfunctions/generic/math/field.hh)
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/utility/field.hh                            
>>> (rev 0)
>>> +++ trunk/dune/localfunctions/utility/field.hh    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -0,0 +1,395 @@
>>> +#ifndef DUNE_FIELD_HH
>>> +#define DUNE_FIELD_HH
>>> +
>>> +#if HAVE_ALGLIB
>>> +#include <alglib/amp.h>
>>> +#endif
>>> +#if HAVE_GMP
>>> +#include <dune/localfunctions/utility/gmpfield.hh>
>>> +#endif
>>> +
>>> +#include <dune/common/fvector.hh>
>>> +
>>> +namespace Dune
>>> +{
>>> +
>>> +  // Unity
>>> +  // -----
>>> +
>>> +  /** +   * @brief A class representing the unit of a given Field
>>> +   *
>>> +   * This class can be used to assign the unit element to an
>>> +   * instance of a given Field also operators for +/- with
>>> +   * unit element are provided. Also 1/f can be evaluated.
>>> +   * Through specialization this class can be used also in the case 
>>> that the
>>> +   * integer 1 is not automatically converted to the unit
>>> +   * element of the Field - the default implementation
>>> +   **/
>>> +  template< class Field >
>>> +  struct Unity
>>> +  {
>>> +    operator Field () const
>>> +    {
>>> +      return Field( 1 );
>>> +    }
>>> +  };
>>> +
>>> +  template< class Field >
>>> +  Field operator+ ( const Unity< Field > &u, const Field &f )
>>> +  {
>>> +    return (Field)u + f;
>>> +  }
>>> +
>>> +  template< class Field >
>>> +  Field operator- ( const Unity< Field > &u, const Field &f )
>>> +  {
>>> +    return (Field)u - f;
>>> +  }
>>> +
>>> +  template< class Field >
>>> +  Field operator* ( const Unity< Field > &u, const Field &f )
>>> +  {
>>> +    return f;
>>> +  }
>>> +
>>> +  template< class Field >
>>> +  Field operator/ ( const Unity< Field > &u, const Field &f )
>>> +  {
>>> +    return (Field)u / f;
>>> +  }
>>> +
>>> +
>>> +
>>> +  // Zero
>>> +  // ----
>>> +
>>> +  /** +   * @brief A class representing the zero of a given Field
>>> +   *
>>> +   * This class can be used to assign the zero element to an
>>> +   * instance of a given Field. An epsilon is also
>>> +   * provided for the comparison operators.
>>> +   * This class can be used also in the case that the
>>> +   * integer 0 is not automatically converted to the zero
>>> +   * element of the Field and the epsilon can be changed
>>> +   * depending on the accuracy of the Field type.
>>> +   **/
>>> +  template< class Field >
>>> +  struct Zero
>>> +  {
>>> +    operator Field () const
>>> +    {
>>> +      return Field( 0 );
>>> +    }
>>> +    static const Field epsilon()
>>> +    {
>>> +      return Field(1e-12);
>>> +    }
>>> +  };
>>> +#if HAVE_ALGLIB
>>> +  template< unsigned int precision >
>>> +  struct Zero< amp::ampf< precision > >
>>> +  {
>>> +    typedef amp::ampf< precision > Field;
>>> +    operator Field () const
>>> +    {
>>> +      return Field( 0 );
>>> +    }
>>> +    static const Field epsilon()
>>> +    {
>>> +      return Field(1e-20);
>>> +    }
>>> +  };
>>> +#endif
>>> +#if HAVE_GMP
>>> +  template< unsigned int precision >
>>> +  struct Zero< GMPField< precision > >
>>> +  {
>>> +    typedef GMPField< precision > Field;
>>> +    operator Field () const
>>> +    {
>>> +      return Field( 0 );
>>> +    }
>>> +    static const Field epsilon()
>>> +    {
>>> +      return Field(1e-20);
>>> +    }
>>> +  };
>>> +#endif
>>> +
>>> +  template< class Field >
>>> +  inline bool operator == ( const Zero< Field > &, const Field &f )
>>> +  {
>>> +    return ( f < Zero<Field>::epsilon() && f > 
>>> -Zero<Field>::epsilon() );
>>> +  }
>>> +
>>> +  template< class Field >
>>> +  inline bool operator == ( const Field &f, const Zero< Field > &z)
>>> +  {
>>> +    return ( z == f );
>>> +  }
>>> +
>>> +  template< class Field >
>>> +  inline bool operator< ( const Zero< Field > &, const Field &f )
>>> +  {
>>> +    return f > Zero<Field>::epsilon();
>>> +  }
>>> +
>>> +  template< class Field >
>>> +  inline bool operator< ( const Field &f, const Zero< Field > & )
>>> +  {
>>> +    return f < -Zero<Field>::epsilon();
>>> +  }
>>> +
>>> +  template< class Field >
>>> +  inline bool operator> ( const Zero< Field > &z, const Field &f )
>>> +  {
>>> +    return f < z;
>>> +  }
>>> +
>>> +  template< class Field >
>>> +  inline bool operator> ( const Field &f, const Zero< Field > &z )
>>> +  {
>>> +    return z < f;
>>> +  }
>>> +
>>> +
>>> +  // field_cast
>>> +  // ----------
>>> +
>>> +  /**
>>> +   * @brief a helper class to cast from one field
>>> +   *        to another
>>> +   *
>>> +   * This cast can be used for assignement between
>>> +   * different field types, including for example
>>> +   * between FieldVectors with different fields.
>>> +   * Specially the conversion from a special type
>>> +   * e.g. gmp to build in types are provided, the +   * other 
>>> direction can be more easily handled by
>>> +   * the special field type implementation.
>>> +   **/
>>> +  template< class F2, class F1 >
>>> +  inline void field_cast ( const F1 &f1, F2 &f2 )
>>> +  {
>>> +    f2 = f1;
>>> +  }
>>> +
>>> +#if HAVE_ALGLIB
>>> +  template< unsigned int precision >
>>> +  inline void field_cast ( const amp::ampf< precision > &f1, double 
>>> &f2 )
>>> +  {
>>> +    f2 = f1.toDouble();
>>> +  }
>>> +
>>> +  template< unsigned int precision >
>>> +  inline void field_cast ( const amp::ampf< precision > &f1, long 
>>> double &f2 )
>>> +  {
>>> +    f2 = f1.toDouble();
>>> +  }
>>> +#endif
>>> +
>>> +#if HAVE_GMP
>>> +  template< unsigned int precision >
>>> +  inline void field_cast ( const Dune::GMPField< precision > &f1, 
>>> double &f2 )
>>> +  {
>>> +    f2 = f1.get_d();
>>> +  }
>>> +
>>> +  template< unsigned int precision >
>>> +  inline void field_cast ( const Dune::GMPField< precision > &f1, 
>>> long double &f2 )
>>> +  {
>>> +    f2 = f1.get_d();
>>> +  }
>>> +#endif
>>> +
>>> +  template< class F2, class F1, int dim >
>>> +  inline void field_cast ( const Dune::FieldVector< F1, dim > &f1, 
>>> Dune::FieldVector< F2, dim > &f2 )
>>> +  {
>>> +    for( int d = 0; d < dim; ++d )
>>> +      field_cast( f1[ d ], f2[ d ] );
>>> +  }
>>> +  template< class F2, class F1 >
>>> +  inline void field_cast ( const Dune::FieldVector< F1, 1 > &f1, F2 
>>> &f2 )
>>> +  {
>>> +    field_cast( f1[ 0 ], f2 );
>>> +  }
>>> +  template< class F2, class F1 >
>>> +  inline void field_cast ( const F1 &f1, Dune::FieldVector< F2, 1 > 
>>> &f2 )
>>> +  {
>>> +    field_cast( f1, f2[ 0 ] );
>>> +  }
>>> +
>>> +  template< class F2, class F1, int rdim, int cdim >
>>> +  inline void field_cast ( const Dune::FieldMatrix< F1, rdim, cdim 
>>> > &f1, Dune::FieldMatrix< F2, rdim, cdim > &f2 )
>>> +  {
>>> +    for( int r = 0; r < rdim; ++r )
>>> +      field_cast( f1[ r ], f2[ r ] );
>>> +  }
>>> +  template< class F2, class F1 >
>>> +  inline void field_cast ( const Dune::FieldMatrix<F1,1,1> &f1, 
>>> Dune::FieldMatrix< F2, 1,1 > &f2 )
>>> +  {
>>> +    field_cast( f1[ 0 ][ 0 ], f2[ 0 ][ 0 ] );
>>> +  }
>>> +  template< class F2, class F1 >
>>> +  inline void field_cast ( const Dune::FieldMatrix< F1, 1,1 > &f1, 
>>> F2 &f2 )
>>> +  {
>>> +    field_cast( f1[ 0 ][ 0 ], f2 );
>>> +  }
>>> +  template< class F2, class F1 >
>>> +  inline void field_cast ( const F1 &f1, Dune::FieldMatrix< F2, 1,1 
>>> > &f2 )
>>> +  {
>>> +    field_cast( f1, f2[ 0 ][ 0 ] );
>>> +  }
>>> +  template< class F2, class F1 >
>>> +  inline void field_cast ( const Dune::FieldVector<F1,1> &f1, 
>>> Dune::FieldMatrix< F2, 1,1 > &f2 )
>>> +  {
>>> +    field_cast( f1[ 0 ], f2[ 0 ][ 0 ] );
>>> +  }
>>> +  template< class F2, class F1 >
>>> +  inline void field_cast ( const Dune::FieldMatrix<F1,1,1> &f1, 
>>> Dune::FieldVector< F2, 1 > &f2 )
>>> +  {
>>> +    field_cast( f1[ 0 ][ 0 ], f2[ 0 ] );
>>> +  }
>>> +
>>> +  template< class F2, class F1 >
>>> +  inline void field_cast ( const Dune::FieldVector< F1, 1 > &f1, 
>>> Dune::FieldVector<F2, 1> &f2 )
>>> +  {
>>> +    field_cast( f1[ 0 ], f2[ 0 ] );
>>> +  }
>>> +
>>> +
>>> +  template< class F2,class F1 > +  inline F2 field_cast ( const F1 
>>> &f1 )
>>> +  {
>>> +    F2 f2;
>>> +    field_cast( f1, f2 );
>>> +    return f2;
>>> +  }
>>> +
>>> +  template< class F2,class F1,int dim > +  inline 
>>> Dune::FieldVector<F2,dim> field_cast ( const 
>>> Dune::FieldVector<F1,dim> &f1 )
>>> +  {
>>> +    Dune::FieldVector<F2,dim> f2;
>>> +    field_cast( f1, f2 );
>>> +    return f2;
>>> +  }
>>> +
>>> +  template< class F2,class F1,int dim1, int dim2> +  inline 
>>> Dune::FieldMatrix<F2,dim1,dim2> field_cast ( const 
>>> Dune::FieldMatrix<F1,dim1,dim2> &f1 )
>>> +  {
>>> +    Dune::FieldMatrix<F2,dim1,dim2> f2;
>>> +    field_cast( f1, f2 );
>>> +    return f2;
>>> +  }
>>> +
>>> +  // Precision
>>> +  // this is not a perfect solution to obtain the
>>> +  // precision of a field - definition is not clear
>>> +  // to be removed
>>> +  // ---------
>>> +
>>> +  template <class Field>
>>> +  struct Precision;
>>> +
>>> +  template<>
>>> +  struct Precision< double >
>>> +  {
>>> +    static const unsigned int value = 64;
>>> +  };
>>> +
>>> +  template<>
>>> +  struct Precision< long double >
>>> +  {
>>> +    static const unsigned int value = 80;
>>> +  };
>>> +
>>> +  template<>
>>> +  struct Precision< float >
>>> +  {
>>> +    static const unsigned int value = 32;
>>> +  };
>>> +
>>> +#if HAVE_ALGLIB
>>> +  template< unsigned int precision >
>>> +  struct Precision< amp::ampf< precision > >
>>> +  {
>>> +    static const unsigned int value = precision;
>>> +  };
>>> +#endif
>>> +#if HAVE_GMP
>>> +  template< unsigned int precision >
>>> +  struct Precision< GMPField< precision > >
>>> +  {
>>> +    static const unsigned int value = precision;
>>> +  };
>>> +#endif
>>> +
>>> +  // ComputeField
>>> +  // ------------
>>> +
>>> +  template <class Field,unsigned int sum>
>>> +  struct ComputeField +  {
>>> +    typedef Field Type;
>>> +  };
>>> +
>>> +#if HAVE_ALGLIB
>>> +  template< unsigned int precision, unsigned int sum >
>>> +  struct ComputeField< amp::ampf< precision >, sum >
>>> +  {
>>> +    typedef amp::ampf<precision+sum> Type;
>>> +  };
>>> +#endif
>>> +#if HAVE_GMP
>>> +  template< unsigned int precision, unsigned int sum >
>>> +  struct ComputeField< GMPField< precision >, sum >
>>> +  {
>>> +    typedef GMPField<precision+sum> Type;
>>> +  };
>>> +#endif
>>> +}
>>> +
>>> +// to be moved to different location...
>>> +namespace std
>>> +{
>>> +
>>> +#if HAVE_ALGLIB
>>> +  template< unsigned int precision >
>>> +  inline ostream &
>>> +  operator<< ( ostream &out, +               const amp::ampf< 
>>> precision > &value )
>>> +  {
>>> +    return out << value.toDec();
>>> +  }
>>> +
>>> +  template< unsigned int precision >
>>> +  inline amp::ampf< precision > sqrt ( const amp::ampf< precision > 
>>> &a )
>>> +  {
>>> +    return amp::sqrt( a );
>>> +  }
>>> +
>>> +  template< unsigned int precision >
>>> +  inline amp::ampf< precision > abs ( const amp::ampf< precision > 
>>> &a )
>>> +  {
>>> +    return amp::abs( a );
>>> +  }
>>> +#endif
>>> +
>>> +#if HAVE_GMP
>>> +  template< unsigned int precision >
>>> +  inline Dune::GMPField< precision > sqrt ( const Dune::GMPField< 
>>> precision > &a )
>>> +  {
>>> +    return ::sqrt( a );
>>> +  }
>>> +
>>> +  template< unsigned int precision >
>>> +  inline Dune::GMPField< precision > abs ( const Dune::GMPField< 
>>> precision > &a )
>>> +  {
>>> +    return ::abs( a );
>>> +  }
>>> +#endif
>>> +}
>>> +
>>> +#endif // #ifndef DUNE_FIELD_HH
>>>
>>> Copied: trunk/dune/localfunctions/utility/gmpfield.hh (from rev 717, 
>>> trunk/dune/localfunctions/generic/math/gmpfield.hh)
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/utility/gmpfield.hh                            
>>> (rev 0)
>>> +++ trunk/dune/localfunctions/utility/gmpfield.hh    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -0,0 +1,93 @@
>>> +#ifndef DUNE_GMPFIELD_HH
>>> +#define DUNE_GMPFIELD_HH
>>> +
>>> +#if HAVE_GMP
>>> +
>>> +#include <gmpxx.h>
>>> +
>>> +namespace Dune
>>> +{
>>> +
>>> +  template< unsigned int precision >
>>> +  class GMPField
>>> +  : public mpf_class
>>> +  {
>>> +    typedef mpf_class Base;
>>> +
>>> +  public:
>>> +    GMPField ()
>>> +    : Base(0,precision)
>>> +    {}
>>> +
>>> +    template< class T >
>>> +    GMPField ( const T &v )
>>> +    : Base( v,precision )
>>> +    {}
>>> +
>>> +    /*
>>> +    GMPField &operator=(const GMPField &other)
>>> +    {
>>> +      Base(*this) = Base(other);
>>> +      return *this;
>>> +    }
>>> +    */
>>> +  };
>>> +
>>> +
>>> +
>>> +  template< unsigned int precision >
>>> +  inline GMPField< precision >
>>> +  operator+ ( const GMPField< precision > &a, const GMPField< 
>>> precision > &b )
>>> +  {
>>> +    typedef mpf_class F;
>>> +    return ((const F &)a + (const F &)b);
>>> +  }
>>> +
>>> +  template< unsigned int precision >
>>> +  inline GMPField< precision >
>>> +  operator- ( const GMPField< precision > &a, const GMPField< 
>>> precision > &b )
>>> +  {
>>> +    typedef mpf_class F;
>>> +    return ((const F &)a - (const F &)b);
>>> +  }
>>> +
>>> +  template< unsigned int precision >
>>> +  inline GMPField< precision >
>>> +  operator- ( const GMPField< precision > &a )
>>> +  {
>>> +    typedef mpf_class F;
>>> +    return -((const F &)a);
>>> +  }
>>> +
>>> +  template< unsigned int precision >
>>> +  inline GMPField< precision >
>>> +  operator* ( const GMPField< precision > &a, const GMPField< 
>>> precision > &b )
>>> +  {
>>> +    typedef mpf_class F;
>>> +    return ((const F &)a * (const F &)b);
>>> +  }
>>> +
>>> +  template< unsigned int precision >
>>> +  inline GMPField< precision >
>>> +  operator/ ( const GMPField< precision > &a, const GMPField< 
>>> precision > &b )
>>> +  {
>>> +    typedef mpf_class F;
>>> +    return ((const F &)a / (const F &)b);
>>> +  }
>>> +
>>> +
>>> +
>>> +  template< unsigned int precision >
>>> +  inline std::ostream &
>>> +  operator<< ( std::ostream &out, const GMPField< precision > &value )
>>> +  {
>>> +    return out << value.get_d();
>>> +  }
>>> +
>>> +
>>> +}
>>> +
>>> +#endif // HAVE_GMP
>>> +
>>> +
>>> +#endif // #ifndef DUNE_MULTIPRECISION_HH
>>>
>>> Modified: trunk/dune/localfunctions/utility/interpolationhelper.hh
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/generic/common/interpolationhelper.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/interpolationhelper.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -2,7 +2,7 @@
>>>  #define GENERIC_INTERPOLATIONHELPER_HH
>>>  
>>>  #include <dune/common/fvector.hh>
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  
>>>  namespace Dune  {
>>>
>>> Modified: trunk/dune/localfunctions/utility/l2interpolation.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/l2interpolation.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/l2interpolation.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -1,8 +1,8 @@
>>>  #ifndef DUNE_L2INTERPOLATION_HH
>>>  #define DUNE_L2INTERPOLATION_HH
>>>  
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> -#include <dune/localfunctions/generic/math/matrix.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/matrix.hh>
>>>  
>>>  #include <dune/localfunctions/generic/quadrature/gaussquadrature.hh>
>>>  
>>>
>>> Copied: trunk/dune/localfunctions/utility/matrix.hh (from rev 717, 
>>> trunk/dune/localfunctions/generic/math/matrix.hh)
>>> ===================================================================
>>> --- 
>>> trunk/dune/localfunctions/utility/matrix.hh                            
>>> (rev 0)
>>> +++ trunk/dune/localfunctions/utility/matrix.hh    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -0,0 +1,260 @@
>>> +#ifndef DUNE_ALGLIB_MATRIX_HH
>>> +#define DUNE_ALGLIB_MATRIX_HH
>>> +
>>> +#include <cassert>
>>> +#include <vector>
>>> +
>>> +#include <dune/localfunctions/utility/field.hh>
>>> +// #include <dune/localfunctions/utility/vector.hh>
>>> +
>>> +#if HAVE_ALGLIB
>>> +#include <alglib/amp.h>
>>> +#include <alglib/inv.h>
>>> +#endif
>>> +
>>> +namespace Dune
>>> +{
>>> +
>>> +  template< class F, bool aligned = false >
>>> +  class LFEMatrix;
>>> +
>>> +
>>> +  template< class F, bool aligned >
>>> +  class LFEMatrix
>>> +  {
>>> +    typedef LFEMatrix< F, aligned > This;
>>> +    // typedef LFEVector< F > Row;
>>> +    typedef std::vector< F > Row;
>>> +    typedef std::vector<Row> RealMatrix;
>>> +
>>> +  public:
>>> +    typedef F Field;
>>> +
>>> +    operator const RealMatrix & () const
>>> +    {
>>> +      return matrix_;
>>> +    }
>>> +
>>> +    operator RealMatrix & ()
>>> +    {
>>> +      return matrix_;
>>> +    }
>>> +
>>> +    template <class Vector>
>>> +    void row( const unsigned int row, Vector &vec ) const
>>> +    {
>>> +      assert(row<rows());
>>> +      for (int i=0;i<cols();++i)
>>> +        field_cast(matrix_[row][i], vec[i]);
>>> +    }
>>> +
>>> +    const Field &operator() ( const unsigned int row, const 
>>> unsigned int col ) const
>>> +    {
>>> +      assert(row<rows());
>>> +      assert(col<cols());
>>> +      return matrix_[ row ][ col ];
>>> +    }
>>> +
>>> +    Field &operator() ( const unsigned int row, const unsigned int 
>>> col )
>>> +    {
>>> +      assert(row<rows());
>>> +      assert(col<cols());
>>> +      return matrix_[ row ][ col ];
>>> +    }
>>> +
>>> +    unsigned int rows () const
>>> +    {
>>> +      return rows_;
>>> +    }
>>> +
>>> +    unsigned int cols () const
>>> +    {
>>> +      return cols_;
>>> +    }
>>> +
>>> +    const Field *rowPtr ( const unsigned int row ) const
>>> +    {
>>> +      assert(row<rows());
>>> +      return &(matrix_[row][0]);
>>> +    }
>>> +
>>> +    Field *rowPtr ( const unsigned int row )
>>> +    {
>>> +      assert(row<rows());
>>> +      return &(matrix_[row][0]);
>>> +    }
>>> +
>>> +    void resize ( const unsigned int rows, const unsigned int cols )
>>> +    {
>>> +      matrix_.resize(rows);
>>> +      for (unsigned int i=0;i<rows;++i)
>>> +        matrix_[i].resize(cols);
>>> +      rows_ = rows;
>>> +      cols_ = cols;
>>> +    }
>>> +
>>> +    bool invert ()
>>> +    {
>>> +      assert( rows() == cols() );
>>> +      std::vector<unsigned int> p(rows());
>>> +      for (unsigned int j=0;j<rows();++j)
>>> +        p[j] = j;
>>> +      for (unsigned int j=0;j<rows();++j)
>>> +      {
>>> +        // pivot search
>>> +        unsigned int r = j;
>>> +        Field max = std::abs( (*this)(j,j) ); +        for 
>>> (unsigned int i=j+1;i<rows();++i)
>>> +        {
>>> +          if ( std::abs( (*this)(i,j) ) > max )
>>> +          {
>>> +            max = std::abs( (*this)(i,j) ); +            r = i;
>>> +          }
>>> +        }
>>> +        if (max == 0)
>>> +          return false;
>>> +        // row swap
>>> +        if (r > j) +        {
>>> +          for (unsigned int k=0;k<rows();++k)
>>> +            std::swap( (*this)(j,k), (*this)(r,k) );
>>> +          std::swap( p[j], p[r] );
>>> +        }
>>> +        // transformation
>>> +        Field hr = Unity<Field>()/(*this)(j,j);
>>> +        for (unsigned int i=0;i<rows();++i) +          (*this)(i,j) 
>>> *= hr;
>>> +        (*this)(j,j) = hr;
>>> +        for (unsigned int k=0;k<rows();++k) +        {
>>> +          if (k==j) continue;
>>> +          for (unsigned int i=0;i<rows();++i)
>>> +          {
>>> +            if (i==j) continue;
>>> +            (*this)(i,k) -= (*this)(i,j)*(*this)(j,k);
>>> +          }
>>> +          (*this)(j,k) *= -hr;
>>> +        }
>>> +      }
>>> +      // column exchange
>>> +      Row hv(rows());
>>> +      for (unsigned int i=0;i<rows();++i)
>>> +      {
>>> +        for (unsigned int k=0;k<rows();++k)
>>> +          hv[ p[k] ] = (*this)(i,k);
>>> +        for (unsigned int k=0;k<rows();++k)
>>> +          (*this)(i,k) = hv[k];
>>> +      }
>>> +      return true;
>>> +    }
>>> +
>>> +  private:
>>> +    RealMatrix matrix_;
>>> +    unsigned int cols_,rows_;
>>> +  };
>>> +
>>> +#if HAVE_ALGLIB
>>> +  template< unsigned int precision, bool aligned >
>>> +  class LFEMatrix< amp::ampf< precision >, aligned >
>>> +  {
>>> +  public:
>>> +    typedef amp::ampf< precision > Field;
>>> +  private:
>>> +    typedef LFEMatrix< amp::ampf< precision >, aligned > This;
>>> +    typedef ap::template_2d_array< Field, aligned > RealMatrix;
>>> +
>>> +  public:
>>> +    operator const RealMatrix & () const
>>> +    {
>>> +      return matrix_;
>>> +    }
>>> +
>>> +    operator RealMatrix & ()
>>> +    {
>>> +      return matrix_;
>>> +    }
>>> +
>>> +    template <class Vector>
>>> +    void row( const unsigned int row, Vector &vec ) const
>>> +    {
>>> +      assert(row<rows());
>>> +      for (unsigned int i=0;i<cols();++i)
>>> +        field_cast(matrix_(row,i), vec[i]);
>>> +    }
>>> +
>>> +    const Field &operator() ( const unsigned int row, const 
>>> unsigned int col ) const
>>> +    {
>>> +      assert(row<rows());
>>> +      assert(col<cols());
>>> +      return matrix_( row, col );
>>> +    }
>>> +
>>> +    Field &operator() ( const unsigned int row, const unsigned int 
>>> col )
>>> +    {
>>> +      assert(row<rows());
>>> +      assert(col<cols());
>>> +      return matrix_( row, col );
>>> +    }
>>> +
>>> +    unsigned int rows () const
>>> +    {
>>> +      return matrix_.gethighbound( 1 )+1;
>>> +    }
>>> +
>>> +    unsigned int cols () const
>>> +    {
>>> +      return matrix_.gethighbound( 2 )+1;
>>> +    }
>>> +
>>> +    const Field *rowPtr ( const unsigned int row ) const
>>> +    {
>>> +      assert(row<rows());
>>> +      const int lastCol = matrix_.gethighbound( 2 );
>>> +      ap::const_raw_vector< Field > rowVector = matrix_.getrow( 
>>> row, 0, lastCol );
>>> +      assert( (rowVector.GetStep() == 1) && (rowVector.GetLength() 
>>> == lastCol+1) );
>>> +      return rowVector.GetData();
>>> +    }
>>> +
>>> +    Field *rowPtr ( const unsigned int row )
>>> +    {
>>> +      assert(row<rows());
>>> +      const int lastCol = matrix_.gethighbound( 2 );
>>> +      ap::raw_vector< Field > rowVector = matrix_.getrow( row, 0, 
>>> lastCol );
>>> +      assert( (rowVector.GetStep() == 1) && (rowVector.GetLength() 
>>> == lastCol+1) );
>>> +      return rowVector.GetData();
>>> +    }
>>> +
>>> +    void resize ( const unsigned int rows, const unsigned int cols )
>>> +    {
>>> +      matrix_.setbounds( 0, rows-1, 0, cols-1 );
>>> +    }
>>> +
>>> +    bool invert ()
>>> +    {
>>> +      assert( rows() == cols() );
>>> +      return inv::rmatrixinverse< precision >( matrix_, rows() );
>>> +    }
>>> +
>>> +  private:
>>> +    RealMatrix matrix_;
>>> +  };
>>> +#endif
>>> +
>>> +  template< class Field, bool aligned >
>>> +  inline std::ostream &operator<<(std::ostream &out, const 
>>> LFEMatrix<Field,aligned> &mat) +  {
>>> +    for (unsigned int r=0;r<mat.rows();++r)
>>> +    {
>>> +      out << field_cast<double>(mat(r,0));
>>> +      for (unsigned int c=1;c<mat.cols();++c) +      {
>>> +        out << " , " << field_cast<double>(mat(r,c));
>>> +      }
>>> +      out << std::endl;
>>> +    }
>>> +    return out;
>>> +  }
>>> +}
>>> +
>>> +#endif // #ifndef DUNE_ALGLIB_MATRIX_HH
>>>
>>> Modified: trunk/dune/localfunctions/utility/monomialbasis.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/monomialbasis.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/monomialbasis.hh    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -8,11 +8,11 @@
>>>  
>>>  #include <dune/grid/genericgeometry/topologytypes.hh>
>>>  
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/topologyfactory.hh>
>>> -#include <dune/localfunctions/generic/common/multiindex.hh>
>>> -#include <dune/localfunctions/generic/common/tensor.hh>
>>> +#include <dune/localfunctions/utility/topologyfactory.hh>
>>> +#include <dune/localfunctions/utility/multiindex.hh>
>>> +#include <dune/localfunctions/utility/tensor.hh>
>>>  
>>>  namespace Dune
>>>  {
>>>
>>> Modified: trunk/dune/localfunctions/utility/multiindex.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/multiindex.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/multiindex.hh    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -6,7 +6,7 @@
>>>  
>>>  #include <dune/common/fvector.hh>
>>>  
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  
>>>  namespace Dune
>>>  {
>>>
>>> Modified: trunk/dune/localfunctions/utility/polynomialbasis.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/polynomialbasis.hh    
>>> 2010-01-18 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/polynomialbasis.hh    
>>> 2010-01-18 13:25:13 UTC (rev 718)
>>> @@ -7,10 +7,10 @@
>>>  
>>>  #include <dune/localfunctions/common/localbasis.hh>
>>>  
>>> -#include <dune/localfunctions/generic/common/coeffmatrix.hh>
>>> -#include <dune/localfunctions/generic/common/monomialbasis.hh>
>>> -#include <dune/localfunctions/generic/common/multiindex.hh>
>>> -#include <dune/localfunctions/generic/common/basisevaluator.hh>
>>> +#include <dune/localfunctions/utility/coeffmatrix.hh>
>>> +#include <dune/localfunctions/utility/monomialbasis.hh>
>>> +#include <dune/localfunctions/utility/multiindex.hh>
>>> +#include <dune/localfunctions/utility/basisevaluator.hh>
>>>  
>>>  namespace Dune
>>>  {
>>>
>>> Modified: trunk/dune/localfunctions/utility/tensor.hh
>>> ===================================================================
>>> --- trunk/dune/localfunctions/generic/common/tensor.hh    2010-01-18 
>>> 10:53:34 UTC (rev 717)
>>> +++ trunk/dune/localfunctions/utility/tensor.hh    2010-01-18 
>>> 13:25:13 UTC (rev 718)
>>> @@ -4,7 +4,7 @@
>>>  #include <vector>
>>>  #include <ostream>
>>>  
>>> -#include <dune/localfunctions/generic/math/field.hh>
>>> +#include <dune/localfunctions/utility/field.hh>
>>>  #include <dune/common/fvector.hh>
>>>  #include <dune/common/misc.hh>
>>>  
>>>
>>>
>>> _______________________________________________
>>> Dune-Commit mailing list
>>> Dune-Commit at dune-project.org
>>> http://lists.dune-project.org/mailman/listinfo/dune-commit
>>>   
>>
>>
>


-- 
************************************************************************
* Oliver Sander                ** email: sander at mi.fu-berlin.de        *
* Freie Universität Berlin     ** phone: + 49 (30) 838 75348           *
* Institut für Mathematik      ** URL  : page.mi.fu-berlin.de/~sander  *
* Arnimallee 6                 ** -------------------------------------*
* 14195 Berlin, Germany        ** Member of MATHEON (www.matheon.de)   *
************************************************************************





More information about the Dune mailing list