diff --git a/src/amdis/gridfunctions/ConstantGridFunction.hpp b/src/amdis/gridfunctions/ConstantGridFunction.hpp index ed1ed7973ad895b4535084d81bb3e275ed86c1f7..1cfe69d7638b6fdaad068f446e231f4c2293e20a 100644 --- a/src/amdis/gridfunctions/ConstantGridFunction.hpp +++ b/src/amdis/gridfunctions/ConstantGridFunction.hpp @@ -78,13 +78,6 @@ namespace AMDiS return lf.derivative(); } - /// \relates ConstantLocalFunction - template <class R, class D, class LC, class T> - int order(ConstantLocalFunction<R(D), LC, T> const& lf) - { - return 0; - } - /// \brief Gridfunction returning a constant value. /** diff --git a/src/amdis/gridfunctions/DiscreteFunction.inc.hpp b/src/amdis/gridfunctions/DiscreteFunction.inc.hpp index bc81d3c50fbcb63415731b9aaa533e8eed0f5f60..6bceeaa81c3f401d888c2f1621719e161695fd9d 100644 --- a/src/amdis/gridfunctions/DiscreteFunction.inc.hpp +++ b/src/amdis/gridfunctions/DiscreteFunction.inc.hpp @@ -59,10 +59,10 @@ public: } /// \brief The \ref polynomialDegree() of the LocalFunctions - friend int order(LocalFunction const& self) + int order() const { - assert( self.bound_ ); - return polynomialDegree(*self.subTree_); + assert( bound_ ); + return polynomialDegree(*subTree_); } /// \brief Return the bound element @@ -129,10 +129,10 @@ public: /// Evaluate Gradient at bound element in local coordinates Range operator()(Domain const& x) const; - friend int order(GradientLocalFunction const& self) + int order() const { - assert( self.bound_ ); - return std::max(0, polynomialDegree(*self.subTree_)-1); + assert( bound_ ); + return std::max(0, polynomialDegree(*subTree_)-1); } /// Return the bound element diff --git a/src/amdis/gridfunctions/GridFunctionConcepts.hpp b/src/amdis/gridfunctions/GridFunctionConcepts.hpp index 772716f8d5bba1f6cfd722ab490bcbca5c319ace..14c62890a08987947c357a3834666df5a7d42cb7 100644 --- a/src/amdis/gridfunctions/GridFunctionConcepts.hpp +++ b/src/amdis/gridfunctions/GridFunctionConcepts.hpp @@ -136,6 +136,15 @@ namespace AMDiS } + // polynomial order of local functions + template <class LocalFunction, + class = void_t<decltype(std::declval<LocalFunction>().order())> > + int order(LocalFunction const& lf) + { + return lf.order(); + } + + #ifndef DOXYGEN template <class PreGridFct, class = void> struct GridFunctionCreator diff --git a/src/amdis/utility/QuadratureFactory.hpp b/src/amdis/utility/QuadratureFactory.hpp index a243367f4825ba67b7ce78b04b488240f3d5c10b..a4a20524c28c88d6aa8025d25c628e81a4907851 100644 --- a/src/amdis/utility/QuadratureFactory.hpp +++ b/src/amdis/utility/QuadratureFactory.hpp @@ -40,7 +40,7 @@ namespace AMDiS template <class LF> - using HasLocalFunctionOrder = decltype( order(std::declval<LF>()) ); + using HasLocalFunctionOrder = decltype( AMDiS::order(std::declval<LF>()) ); /// \brief Factory for quadrature rule, that calculates the coefficient order from