From 2907db6eda8572cfad0054715a25bd65ca0d87d1 Mon Sep 17 00:00:00 2001 From: Adrian Burri <burriad@dune-project.org> Date: Mon, 31 Oct 2005 13:33:52 +0000 Subject: [PATCH] Made local function work properly again [[Imported from SVN: r3336]] --- fem/discretefunction/adaptivefunction.hh | 21 +++++++++++++-------- fem/discretefunction/adaptiveimp.cc | 3 +-- fem/discretefunction/adaptiveimp.hh | 7 +++---- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/fem/discretefunction/adaptivefunction.hh b/fem/discretefunction/adaptivefunction.hh index cba05fa48..0da5516c2 100644 --- a/fem/discretefunction/adaptivefunction.hh +++ b/fem/discretefunction/adaptivefunction.hh @@ -37,15 +37,16 @@ namespace Dune { DiscreteFunctionSpaceImp> LocalFunctionImp; // local function type - typedef LocalFunctionWrapper< DiscreteFunctionType > LocalFunctionType; + typedef LocalFunctionWrapper< + DiscreteFunctionType> LocalFunctionType; - typedef typename DiscreteFunctionSpaceType::RangeFieldType DofType; - typedef typename DiscreteFunctionSpaceType::RangeFieldType RangeFieldType; - typedef typename DiscreteFunctionSpaceType::RangeType RangeType; - typedef typename DiscreteFunctionSpaceType::DomainType DomainType; - typedef typename DiscreteFunctionSpaceType::JacobianRangeType JacobianRangeType; - typedef typename DiscreteFunctionSpaceType::MapperType MapperType; - typedef typename DiscreteFunctionSpaceType::GridType GridType; + typedef typename DiscreteFunctionSpaceType::Traits::RangeFieldType DofType; + typedef typename DiscreteFunctionSpaceType::Traits::RangeFieldType RangeFieldType; + typedef typename DiscreteFunctionSpaceType::Traits::RangeType RangeType; + typedef typename DiscreteFunctionSpaceType::Traits::DomainType DomainType; + typedef typename DiscreteFunctionSpaceType::Traits::JacobianRangeType JacobianRangeType; + typedef typename DiscreteFunctionSpaceType::Traits::MapperType MapperType; + typedef typename DiscreteFunctionSpaceType::Traits::GridType GridType; typedef DofArray<DofType> DofStorageType; @@ -160,6 +161,8 @@ namespace Dune { using Imp::read_pgm; private: //- Forbidden members + + const MyType& interface() const { return *this; } }; // end class AdaptiveDiscreteFunction // Note: could use Traits class for Barton-Nackman instead @@ -387,6 +390,8 @@ namespace Dune { private: std::vector<SubSpaceType*> subSpaces_; + + const MyType& interface() const { return *this; } }; // end class AdaptiveDiscreteFunction (specialised for CombinedSpace) //- class AdaptiveLocalFunction (specialised) diff --git a/fem/discretefunction/adaptiveimp.cc b/fem/discretefunction/adaptiveimp.cc index 0c1e6f7f1..03cff4913 100644 --- a/fem/discretefunction/adaptiveimp.cc +++ b/fem/discretefunction/adaptiveimp.cc @@ -116,8 +116,7 @@ namespace Dune { AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>:: localFunction(const EntityType& en) const { - typedef AdaptiveDiscreteFunction<DiscreteFunctionSpaceImp> ImplType; - return LocalFunctionType(en, static_cast<ImplType&>(*this)); + return LocalFunctionType(en, this->interface()); } template <class DiscreteFunctionSpaceImp> diff --git a/fem/discretefunction/adaptiveimp.hh b/fem/discretefunction/adaptiveimp.hh index 9a05baa6e..2dc880ae9 100644 --- a/fem/discretefunction/adaptiveimp.hh +++ b/fem/discretefunction/adaptiveimp.hh @@ -45,6 +45,7 @@ namespace Dune { typedef typename Traits::GridType GridType; typedef DofManager<GridType> DofManagerType; + typedef typename Traits::DiscreteFunctionType LeafType; public: std::string name() const; int size() const; @@ -56,8 +57,6 @@ namespace Dune { LocalFunctionType newLocalFunction() DUNE_DEPRECATED; - - //! update local function to given entity template <class EntityType> void localFunction(const EntityType& en, LocalFunctionType& lf) DUNE_DEPRECATED; @@ -96,10 +95,10 @@ namespace Dune { const DiscreteFunctionSpaceType& spc, DofStorageType& dofVec); AdaptiveFunctionImplementation(const ThisType& other); - ~AdaptiveFunctionImplementation(); - + virtual ~AdaptiveFunctionImplementation(); private: + virtual const LeafType& interface() const = 0; const DiscreteFunctionSpaceType& spc_; std::string name_; DofManagerType& dm_; -- GitLab