Skip to content
Snippets Groups Projects
Commit e7cd25af authored by Adrian Burri's avatar Adrian Burri
Browse files

Removed DofManager as template parameter

[[Imported from SVN: r2745]]
parent 0379f402
No related branches found
No related tags found
No related merge requests found
...@@ -8,10 +8,9 @@ namespace Dune { ...@@ -8,10 +8,9 @@ namespace Dune {
//- AdaptiveDiscreteFunction (specialisation) //- AdaptiveDiscreteFunction (specialisation)
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
AdaptiveDiscreteFunction< AdaptiveDiscreteFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
~AdaptiveDiscreteFunction() ~AdaptiveDiscreteFunction()
{ {
for (int i = 0; i < subSpaces_.size(); ++i) { for (int i = 0; i < subSpaces_.size(); ++i) {
...@@ -20,13 +19,12 @@ namespace Dune { ...@@ -20,13 +19,12 @@ namespace Dune {
} }
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
AdaptiveDiscreteFunction< AdaptiveDiscreteFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
SubDiscreteFunctionType SubDiscreteFunctionType
AdaptiveDiscreteFunction< AdaptiveDiscreteFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
subFunction(int component) subFunction(int component)
{ {
SubSpaceType* subSpace = new SubSpaceType(this->space(), component); SubSpaceType* subSpace = new SubSpaceType(this->space(), component);
...@@ -39,8 +37,8 @@ namespace Dune { ...@@ -39,8 +37,8 @@ namespace Dune {
} }
//- AdaptiveLocalFunction //- AdaptiveLocalFunction
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
AdaptiveLocalFunction(const DiscreteFunctionSpaceType& spc, AdaptiveLocalFunction(const DiscreteFunctionSpaceType& spc,
DofStorageType& dofVec) : DofStorageType& dofVec) :
spc_(spc), spc_(spc),
...@@ -50,8 +48,8 @@ namespace Dune { ...@@ -50,8 +48,8 @@ namespace Dune {
tmpGrad_(0.0) tmpGrad_(0.0)
{} {}
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
AdaptiveLocalFunction(const ThisType& other) : AdaptiveLocalFunction(const ThisType& other) :
spc_(other.spc_), spc_(other.spc_),
dofVec_(other.dofVec_), dofVec_(other.dofVec_),
...@@ -60,39 +58,39 @@ namespace Dune { ...@@ -60,39 +58,39 @@ namespace Dune {
tmpGrad_(0.0) tmpGrad_(0.0)
{} {}
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
~AdaptiveLocalFunction() {} ~AdaptiveLocalFunction() {}
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>::DofType& AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::DofType&
AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
operator[] (int num) operator[] (int num)
{ {
assert(num >= 0 && num < numberOfDofs()); assert(num >= 0 && num < numberOfDofs());
return (* (values_[num])); return (* (values_[num]));
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
const AdaptiveLocalFunction< const AdaptiveLocalFunction<
DiscreteFunctionSpaceImp, DofManagerImp>::DofType& DiscreteFunctionSpaceImp >::DofType&
AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
operator[] (int num) const operator[] (int num) const
{ {
assert(num >= 0 && num < numberOfDofs()); assert(num >= 0 && num < numberOfDofs());
return (* (values_[num])); return (* (values_[num]));
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
int AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: int AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
numberOfDofs() const numberOfDofs() const
{ {
return values_.size(); return values_.size();
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
template <class EntityType> template <class EntityType>
void AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: void AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
evaluateLocal(EntityType& en, const DomainType& x, RangeType& ret) const evaluateLocal(EntityType& en, const DomainType& x, RangeType& ret) const
{ {
ret *= 0.0; ret *= 0.0;
...@@ -106,9 +104,9 @@ namespace Dune { ...@@ -106,9 +104,9 @@ namespace Dune {
} }
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
template <class EntityType, class QuadratureType> template <class EntityType, class QuadratureType>
void AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: void AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
evaluate(EntityType& en, evaluate(EntityType& en,
QuadratureType& quad, QuadratureType& quad,
int quadPoint, int quadPoint,
...@@ -117,9 +115,9 @@ namespace Dune { ...@@ -117,9 +115,9 @@ namespace Dune {
evaluateLocal(en, quad.point(quadPoint), ret); evaluateLocal(en, quad.point(quadPoint), ret);
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
template <class EntityType> template <class EntityType>
void AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: void AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
jacobianLocal(EntityType& en, jacobianLocal(EntityType& en,
const DomainType& x, const DomainType& x,
JacobianRangeType& ret) const JacobianRangeType& ret) const
...@@ -140,9 +138,9 @@ namespace Dune { ...@@ -140,9 +138,9 @@ namespace Dune {
} }
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
template <class EntityType, class QuadratureType> template <class EntityType, class QuadratureType>
void AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: void AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
jacobian(EntityType& en, jacobian(EntityType& en,
QuadratureType& quad, QuadratureType& quad,
int quadPoint, int quadPoint,
...@@ -151,9 +149,9 @@ namespace Dune { ...@@ -151,9 +149,9 @@ namespace Dune {
jacobianLocal(en, quad.point(quadPoint), ret); jacobianLocal(en, quad.point(quadPoint), ret);
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
template <class EntityType> template <class EntityType>
void AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp>:: void AdaptiveLocalFunction<DiscreteFunctionSpaceImp >::
init(EntityType& en) init(EntityType& en)
{ {
int numOfDof = int numOfDof =
...@@ -167,10 +165,9 @@ namespace Dune { ...@@ -167,10 +165,9 @@ namespace Dune {
//- AdaptiveLocalFunction (Specialisation for CombinedSpace) //- AdaptiveLocalFunction (Specialisation for CombinedSpace)
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
AdaptiveLocalFunction< AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
AdaptiveLocalFunction(const DiscreteFunctionSpaceType& spc, AdaptiveLocalFunction(const DiscreteFunctionSpaceType& spc,
DofStorageType& dofVec) : DofStorageType& dofVec) :
spc_(spc), spc_(spc),
...@@ -182,10 +179,9 @@ namespace Dune { ...@@ -182,10 +179,9 @@ namespace Dune {
tmpGrad_(0.0) tmpGrad_(0.0)
{} {}
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
AdaptiveLocalFunction< AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
AdaptiveLocalFunction(const ThisType& other) : AdaptiveLocalFunction(const ThisType& other) :
spc_(other.spc_), spc_(other.spc_),
dofVec_(other.dofVec_), dofVec_(other.dofVec_),
...@@ -196,48 +192,43 @@ namespace Dune { ...@@ -196,48 +192,43 @@ namespace Dune {
tmpGrad_(0.0) tmpGrad_(0.0)
{} {}
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
AdaptiveLocalFunction< AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
~AdaptiveLocalFunction() {} ~AdaptiveLocalFunction() {}
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
AdaptiveLocalFunction< AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>::DofType& CombinedSpace<ContainedFunctionSpaceImp, N, p> >::DofType&
AdaptiveLocalFunction< AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
operator[] (int num) operator[] (int num)
{ {
return *values_[num/N][num%N]; return *values_[num/N][num%N];
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
const AdaptiveLocalFunction< const AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>::DofType& CombinedSpace<ContainedFunctionSpaceImp, N, p> >::DofType&
AdaptiveLocalFunction< AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
operator[] (int num) const operator[] (int num) const
{ {
return *values_[num/N][num%N]; return *values_[num/N][num%N];
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
int AdaptiveLocalFunction< int AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
numberOfDofs() const numberOfDofs() const
{ {
return values_.size()*N; return values_.size()*N;
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
template <class EntityType> template <class EntityType>
void AdaptiveLocalFunction< void AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
evaluateLocal(EntityType& en, evaluateLocal(EntityType& en,
const DomainType& x, const DomainType& x,
RangeType& result) const RangeType& result) const
...@@ -255,11 +246,10 @@ namespace Dune { ...@@ -255,11 +246,10 @@ namespace Dune {
} }
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
template <class EntityType, class QuadratureType> template <class EntityType, class QuadratureType>
void AdaptiveLocalFunction< void AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
evaluate(EntityType& en, evaluate(EntityType& en,
QuadratureType& quad, QuadratureType& quad,
int quadPoint, int quadPoint,
...@@ -268,11 +258,10 @@ namespace Dune { ...@@ -268,11 +258,10 @@ namespace Dune {
evaluateLocal(en, quad.point(quadPoint), ret); evaluateLocal(en, quad.point(quadPoint), ret);
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
template <class EntityType> template <class EntityType>
void AdaptiveLocalFunction< void AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
jacobianLocal(EntityType& en, jacobianLocal(EntityType& en,
const DomainType& x, const DomainType& x,
JacobianRangeType& result) const JacobianRangeType& result) const
...@@ -295,11 +284,10 @@ namespace Dune { ...@@ -295,11 +284,10 @@ namespace Dune {
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
template<class EntityType, class QuadratureType> template<class EntityType, class QuadratureType>
void AdaptiveLocalFunction< void AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
jacobian(EntityType& en, jacobian(EntityType& en,
QuadratureType& quad, QuadratureType& quad,
int quadPoint, int quadPoint,
...@@ -308,10 +296,9 @@ namespace Dune { ...@@ -308,10 +296,9 @@ namespace Dune {
jacobianLocal(en, quad.point(quadPoint), ret); jacobianLocal(en, quad.point(quadPoint), ret);
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
void AdaptiveLocalFunction< void AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
assign(int dofNum, const DofVectorType& dofs) { assign(int dofNum, const DofVectorType& dofs) {
for (int i = 0; i < N; ++i) { for (int i = 0; i < N; ++i) {
// Assumption: the local ordering is point based // Assumption: the local ordering is point based
...@@ -319,19 +306,17 @@ namespace Dune { ...@@ -319,19 +306,17 @@ namespace Dune {
} }
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
int AdaptiveLocalFunction< int AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
numberOfBaseFunctions() const { numberOfBaseFunctions() const {
return values_.size(); return values_.size();
} }
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
template <class EntityType> template <class EntityType>
void AdaptiveLocalFunction< void AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>:: CombinedSpace<ContainedFunctionSpaceImp, N, p> >::
init(EntityType& en) { init(EntityType& en) {
int numOfDof = int numOfDof =
spc_.getBaseFunctionSet(en).numContainedFunctions(); spc_.getBaseFunctionSet(en).numContainedFunctions();
......
...@@ -19,22 +19,21 @@ ...@@ -19,22 +19,21 @@
namespace Dune { namespace Dune {
//- Forward declarations //- Forward declarations
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
class AdaptiveDiscreteFunction; class AdaptiveDiscreteFunction;
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
class AdaptiveLocalFunction; class AdaptiveLocalFunction;
//- Class definitions //- Class definitions
//! Traits class for AdaptiveDiscreteFunction and AdaptiveLocalFunction //! Traits class for AdaptiveDiscreteFunction and AdaptiveLocalFunction
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
struct AdaptiveDiscreteFunctionTraits { struct AdaptiveDiscreteFunctionTraits {
typedef DiscreteFunctionSpaceImp DiscreteFunctionSpaceType; typedef DiscreteFunctionSpaceImp DiscreteFunctionSpaceType;
typedef DofManagerImp DofManagerType;
typedef AdaptiveDiscreteFunction<DiscreteFunctionSpaceImp, DofManagerImp> typedef AdaptiveDiscreteFunction<
DiscreteFunctionType; DiscreteFunctionSpaceImp> DiscreteFunctionType;
typedef AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp> typedef AdaptiveLocalFunction<
LocalFunctionType; DiscreteFunctionSpaceImp> LocalFunctionType;
typedef typename DiscreteFunctionSpaceType::RangeFieldType DofType; typedef typename DiscreteFunctionSpaceType::RangeFieldType DofType;
typedef typename DiscreteFunctionSpaceType::RangeFieldType RangeFieldType; typedef typename DiscreteFunctionSpaceType::RangeFieldType RangeFieldType;
...@@ -42,13 +41,15 @@ namespace Dune { ...@@ -42,13 +41,15 @@ namespace Dune {
typedef typename DiscreteFunctionSpaceType::DomainType DomainType; typedef typename DiscreteFunctionSpaceType::DomainType DomainType;
typedef typename DiscreteFunctionSpaceType::JacobianRangeType JacobianRangeType; typedef typename DiscreteFunctionSpaceType::JacobianRangeType JacobianRangeType;
typedef typename DiscreteFunctionSpaceType::MapperType MapperType; typedef typename DiscreteFunctionSpaceType::MapperType MapperType;
typedef typename DiscreteFunctionSpaceType::GridType GridType;
typedef DofArray<DofType> DofStorageType; typedef DofArray<DofType> DofStorageType;
typedef typename DofManagerType::template Traits<MapperType, DofStorageType>::MemObjectType MemObjectType;
typedef typename DofStorageType::DofIteratorType DofIteratorType; typedef typename DofStorageType::DofIteratorType DofIteratorType;
typedef typename DofStorageType::ConstDofIteratorType ConstDofIteratorType; typedef typename DofStorageType::ConstDofIteratorType ConstDofIteratorType;
typedef DofManager<GridType> DofManagerType;
}; // end class AdaptiveDiscreteFunctionTraits }; // end class AdaptiveDiscreteFunctionTraits
...@@ -56,23 +57,23 @@ namespace Dune { ...@@ -56,23 +57,23 @@ namespace Dune {
//! This class is comparable to DFAdapt, except that it provides a //! This class is comparable to DFAdapt, except that it provides a
//! specialisation for CombinedSpace objects which provides enriched //! specialisation for CombinedSpace objects which provides enriched
//! functionality (access to subfunctions) and runtime optimisations //! functionality (access to subfunctions) and runtime optimisations
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
class AdaptiveDiscreteFunction : class AdaptiveDiscreteFunction :
public DiscreteFunctionDefault< public DiscreteFunctionDefault<
AdaptiveDiscreteFunctionTraits<DiscreteFunctionSpaceImp, DofManagerImp> >, AdaptiveDiscreteFunctionTraits<DiscreteFunctionSpaceImp > >,
private AdaptiveFunctionImplementation< private AdaptiveFunctionImplementation<
DiscreteFunctionSpaceImp, DofManagerImp> DiscreteFunctionSpaceImp >
{ {
public: public:
//- friends //- friends
private: private:
typedef AdaptiveDiscreteFunction< typedef AdaptiveDiscreteFunction<
DiscreteFunctionSpaceImp, DofManagerImp> MyType; DiscreteFunctionSpaceImp > MyType;
typedef AdaptiveFunctionImplementation< typedef AdaptiveFunctionImplementation<
DiscreteFunctionSpaceImp, DofManagerImp> Imp; DiscreteFunctionSpaceImp > Imp;
typedef AdaptiveDiscreteFunctionTraits< typedef AdaptiveDiscreteFunctionTraits<
DiscreteFunctionSpaceImp, DofManagerImp> MyTraits; DiscreteFunctionSpaceImp > MyTraits;
typedef DiscreteFunctionDefault<MyTraits> BaseType; typedef DiscreteFunctionDefault<MyTraits> BaseType;
public: public:
...@@ -103,8 +104,6 @@ namespace Dune { ...@@ -103,8 +104,6 @@ namespace Dune {
//! Container class type for the dofs (managed by the DofManager) //! Container class type for the dofs (managed by the DofManager)
typedef typename Traits::DofStorageType DofStorageType; typedef typename Traits::DofStorageType DofStorageType;
//! Memory management class for DofStorageType (manager by the DofManager)
typedef typename Traits::MemObjectType MemObjectType;
//! Iterator over dof container //! Iterator over dof container
typedef typename Traits::DofIteratorType DofIteratorType; typedef typename Traits::DofIteratorType DofIteratorType;
...@@ -153,30 +152,30 @@ namespace Dune { ...@@ -153,30 +152,30 @@ namespace Dune {
// Note: could use Traits class for Barton-Nackman instead // Note: could use Traits class for Barton-Nackman instead
//! Local function belonging to AdaptiveDiscreteFunction //! Local function belonging to AdaptiveDiscreteFunction
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
class AdaptiveLocalFunction : class AdaptiveLocalFunction :
public LocalFunctionDefault< public LocalFunctionDefault<
DiscreteFunctionSpaceImp, DiscreteFunctionSpaceImp,
AdaptiveLocalFunction<DiscreteFunctionSpaceImp, DofManagerImp> > AdaptiveLocalFunction<DiscreteFunctionSpaceImp > >
{ {
public: public:
friend class AdaptiveFunctionImplementation< friend class AdaptiveFunctionImplementation<
DiscreteFunctionSpaceImp, DofManagerImp>; DiscreteFunctionSpaceImp >;
private: private:
typedef AdaptiveLocalFunction< typedef AdaptiveLocalFunction<
DiscreteFunctionSpaceImp, DofManagerImp> ThisType; DiscreteFunctionSpaceImp > ThisType;
public: public:
//- Public typedefs and enums //- Public typedefs and enums
//! The discrete function space this local function belongs to //! The discrete function space this local function belongs to
typedef DiscreteFunctionSpaceImp DiscreteFunctionSpaceType; typedef DiscreteFunctionSpaceImp DiscreteFunctionSpaceType;
//! The discrete function this local function belongs to //! The discrete function this local function belongs to
typedef AdaptiveDiscreteFunction< typedef AdaptiveDiscreteFunction<
DiscreteFunctionSpaceImp, DofManagerImp> DiscreteFunctionType; DiscreteFunctionSpaceImp > DiscreteFunctionType;
//! Traits class with type definitions for AdaptiveDiscreteFunction and //! Traits class with type definitions for AdaptiveDiscreteFunction and
//! AdaptiveLocalFunction //! AdaptiveLocalFunction
typedef AdaptiveDiscreteFunctionTraits< typedef AdaptiveDiscreteFunctionTraits<
DiscreteFunctionSpaceType, DofManagerImp> Traits; DiscreteFunctionSpaceType > Traits;
//! Traits class of DiscreteFunctionSpaceType //! Traits class of DiscreteFunctionSpaceType
typedef typename DiscreteFunctionSpaceType::Traits SpaceTraits; typedef typename DiscreteFunctionSpaceType::Traits SpaceTraits;
...@@ -273,22 +272,18 @@ namespace Dune { ...@@ -273,22 +272,18 @@ namespace Dune {
//- Specialisations //- Specialisations
//! Specialised version of AdaptiveDiscreteFunction for CombinedSpace //! Specialised version of AdaptiveDiscreteFunction for CombinedSpace
template <class ContainedFunctionSpaceImp, int N, template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
DofStoragePolicy p, class DofManagerImp>
class AdaptiveDiscreteFunction< class AdaptiveDiscreteFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp> : CombinedSpace<ContainedFunctionSpaceImp, N, p> > :
public DiscreteFunctionDefault<AdaptiveDiscreteFunctionTraits<CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp > >, public DiscreteFunctionDefault<AdaptiveDiscreteFunctionTraits<CombinedSpace<ContainedFunctionSpaceImp, N, p> > >,
private AdaptiveFunctionImplementation<CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp> private AdaptiveFunctionImplementation<CombinedSpace<ContainedFunctionSpaceImp, N, p> >
{ {
private: private:
typedef CombinedSpace< typedef CombinedSpace<
ContainedFunctionSpaceImp, N, p> DiscreteFunctionSpaceImp; ContainedFunctionSpaceImp, N, p> DiscreteFunctionSpaceImp;
typedef AdaptiveDiscreteFunction< typedef AdaptiveDiscreteFunction<DiscreteFunctionSpaceImp> MyType;
DiscreteFunctionSpaceImp, DofManagerImp> MyType; typedef AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp> Imp;
typedef AdaptiveFunctionImplementation< typedef AdaptiveDiscreteFunctionTraits<DiscreteFunctionSpaceImp> MyTraits;
DiscreteFunctionSpaceImp, DofManagerImp> Imp;
typedef AdaptiveDiscreteFunctionTraits<
DiscreteFunctionSpaceImp, DofManagerImp> MyTraits;
typedef DiscreteFunctionDefault<MyTraits> BaseType; typedef DiscreteFunctionDefault<MyTraits> BaseType;
public: public:
...@@ -307,7 +302,6 @@ namespace Dune { ...@@ -307,7 +302,6 @@ namespace Dune {
typedef typename Traits::MapperType MapperType; typedef typename Traits::MapperType MapperType;
typedef typename Traits::DofStorageType DofStorageType; typedef typename Traits::DofStorageType DofStorageType;
typedef typename Traits::MemObjectType MemObjectType;
typedef typename Traits::DofIteratorType DofIteratorType; typedef typename Traits::DofIteratorType DofIteratorType;
typedef typename Traits::ConstDofIteratorType ConstDofIteratorType; typedef typename Traits::ConstDofIteratorType ConstDofIteratorType;
...@@ -315,7 +309,7 @@ namespace Dune { ...@@ -315,7 +309,7 @@ namespace Dune {
//- Additional typedefs //- Additional typedefs
typedef SubSpace<DiscreteFunctionSpaceType> SubSpaceType; typedef SubSpace<DiscreteFunctionSpaceType> SubSpaceType;
typedef AdaptiveDiscreteFunction< typedef AdaptiveDiscreteFunction<
SubSpaceType, DofManagerImp> SubDiscreteFunctionType; SubSpaceType > SubDiscreteFunctionType;
public: public:
//- Public methods //- Public methods
...@@ -369,33 +363,28 @@ namespace Dune { ...@@ -369,33 +363,28 @@ namespace Dune {
//- class AdaptiveLocalFunction (specialised) //- class AdaptiveLocalFunction (specialised)
//! Specialised version of AdaptiveLocalFunction for CombinedSpace //! Specialised version of AdaptiveLocalFunction for CombinedSpace
template < template <class ContainedFunctionSpaceImp, int N, DofStoragePolicy p>
class ContainedFunctionSpaceImp, int N,
DofStoragePolicy p, class DofManagerImp
>
class AdaptiveLocalFunction< class AdaptiveLocalFunction<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp> CombinedSpace<ContainedFunctionSpaceImp, N, p> >
: public LocalFunctionDefault< : public LocalFunctionDefault<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, CombinedSpace<ContainedFunctionSpaceImp, N, p>,
AdaptiveLocalFunction<CombinedSpace<ContainedFunctionSpaceImp, N, p>, AdaptiveLocalFunction<CombinedSpace<ContainedFunctionSpaceImp, N, p> >
DofManagerImp>
>
{ {
public: public:
//- Friends //- Friends
friend class AdaptiveFunctionImplementation< friend class AdaptiveFunctionImplementation<
CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>; CombinedSpace<ContainedFunctionSpaceImp, N, p> >;
//friend class AdaptiveDiscreteFunction< //friend class AdaptiveDiscreteFunction<
// CombinedSpace<ContainedFunctionSpaceImp, N, p>, DofManagerImp>; // CombinedSpace<ContainedFunctionSpaceImp, N, p> >;
public: public:
//- Public typedefs and enums //- Public typedefs and enums
typedef CombinedSpace< typedef CombinedSpace<
ContainedFunctionSpaceImp, N, p> DiscreteFunctionSpaceType; ContainedFunctionSpaceImp, N, p> DiscreteFunctionSpaceType;
typedef AdaptiveLocalFunction< typedef AdaptiveLocalFunction<
DiscreteFunctionSpaceType, DofManagerImp> ThisType; DiscreteFunctionSpaceType > ThisType;
typedef AdaptiveDiscreteFunctionTraits< typedef AdaptiveDiscreteFunctionTraits<
DiscreteFunctionSpaceType, DofManagerImp> Traits; DiscreteFunctionSpaceType > Traits;
typedef typename DiscreteFunctionSpaceType::Traits SpaceTraits; typedef typename DiscreteFunctionSpaceType::Traits SpaceTraits;
enum { dimRange = DiscreteFunctionSpaceType::DimRange }; enum { dimRange = DiscreteFunctionSpaceType::DimRange };
......
...@@ -3,123 +3,123 @@ ...@@ -3,123 +3,123 @@
namespace Dune { namespace Dune {
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
AdaptiveFunctionImplementation(std::string name, AdaptiveFunctionImplementation(std::string name,
const DiscreteFunctionSpaceType& spc) : const DiscreteFunctionSpaceType& spc) :
spc_(spc), spc_(spc),
name_(name), name_(name),
dm_(DofManagerFactory<DofManagerType>::getDofManager(spc.grid())), dm_(DofManagerFactory<DofManagerType>::getDofManager(spc.grid())),
memObj_(&dm_.addDofSet(&dofVec_, spc.mapper(), name_)), memPair_(dm_.addDofSet(&dofVec_, spc.mapper(), name_)),
dofVec_(memObj_->getArray()) dofVec_(*memPair_.second)
{} {}
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
AdaptiveFunctionImplementation(std::string name, AdaptiveFunctionImplementation(std::string name,
const DiscreteFunctionSpaceType& spc, const DiscreteFunctionSpaceType& spc,
DofStorageType& dofVec) : DofStorageType& dofVec) :
spc_(spc), spc_(spc),
name_(name), name_(name),
dm_(DofManagerFactory<DofManagerType>::getDofManager(spc.grid())), dm_(DofManagerFactory<DofManagerType>::getDofManager(spc.grid())),
memObj_(0), memObj_(std::pair<MemObjectInterface*, DofStorageType*>(0, 0)),
dofVec_(dofVec) dofVec_(dofVec)
{} {}
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
AdaptiveFunctionImplementation(const ThisType& other) : AdaptiveFunctionImplementation(const ThisType& other) :
spc_(other.spc_), spc_(other.spc_),
name_(std::string("copy of")+other.name_), name_(std::string("copy of")+other.name_),
dm_(other.dm_), dm_(other.dm_),
memObj_(&dm_.addDofSet(&dofVec_, other.spc_.mapper(), name_)), memPair_(dm_.addDofSet(&dofVec_, other.spc_.mapper(), name_)),
dofVec_(memObj_->getArray()) dofVec_(*memPair_.second)
{ {
// copy values // copy values
dofVec_ = other.dofVec_; dofVec_ = other.dofVec_;
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
~AdaptiveFunctionImplementation() ~AdaptiveFunctionImplementation()
{ {
if (memObj_) { if (memPair_.first) {
bool removed = dm_.removeDofSet(*memObj_); bool removed = dm_.removeDofSet(*memPair_.first);
assert(removed); assert(removed);
} }
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
std::string std::string
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
name() const name() const
{ {
return name_; return name_;
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
int AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: int AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
size() const size() const
{ {
return dofVec_.size(); return dofVec_.size();
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
DofIteratorType DofIteratorType
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
dbegin() dbegin()
{ {
return dofVec_.begin(); return dofVec_.begin();
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
DofIteratorType DofIteratorType
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
dend() dend()
{ {
return dofVec_.end(); return dofVec_.end();
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
ConstDofIteratorType ConstDofIteratorType
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
dbegin() const dbegin() const
{ {
return dofVec_.begin(); return dofVec_.begin();
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
ConstDofIteratorType ConstDofIteratorType
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
dend() const dend() const
{ {
return dofVec_.end(); return dofVec_.end();
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
LocalFunctionType LocalFunctionType
AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp, DofManagerImp>:: AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
newLocalFunction() newLocalFunction()
{ {
return LocalFunctionType(spc_, dofVec_); return LocalFunctionType(spc_, dofVec_);
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
template <class EntityType> template <class EntityType>
void AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp,DofManagerImp>:: void AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
localFunction(const EntityType& en, LocalFunctionType& lf) localFunction(const EntityType& en, LocalFunctionType& lf)
{ {
lf.init(en); lf.init(en);
} }
//- Read/write methods //- Read/write methods
template<class DiscreteFunctionSpaceImp, class DofManagerImp> template<class DiscreteFunctionSpaceImp>
bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp,DofManagerImp>:: bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
write_xdr(std::string fn) write_xdr(std::string fn)
{ {
FILE *file; FILE *file;
...@@ -141,8 +141,8 @@ namespace Dune { ...@@ -141,8 +141,8 @@ namespace Dune {
return true; return true;
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp,DofManagerImp>:: bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
read_xdr(std::string fn) read_xdr(std::string fn)
{ {
FILE *file; FILE *file;
...@@ -165,8 +165,8 @@ namespace Dune { ...@@ -165,8 +165,8 @@ namespace Dune {
return true; return true;
} }
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp,DofManagerImp>:: bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
write_ascii(std::string fn) write_ascii(std::string fn)
{ {
std::fstream outfile( fn.c_str() , std::ios::out ); std::fstream outfile( fn.c_str() , std::ios::out );
...@@ -193,8 +193,8 @@ namespace Dune { ...@@ -193,8 +193,8 @@ namespace Dune {
} }
template<class DiscreteFunctionSpaceImp, class DofManagerImp> template<class DiscreteFunctionSpaceImp>
bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp,DofManagerImp>:: bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
read_ascii(std::string fn) read_ascii(std::string fn)
{ {
FILE *infile=0; FILE *infile=0;
...@@ -215,8 +215,8 @@ namespace Dune { ...@@ -215,8 +215,8 @@ namespace Dune {
return true; return true;
} }
template<class DiscreteFunctionSpaceImp, class DofManagerImp> template<class DiscreteFunctionSpaceImp>
bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp,DofManagerImp>:: bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
write_pgm(std::string fn) write_pgm(std::string fn)
{ {
std::ofstream out( fn.c_str() ); std::ofstream out( fn.c_str() );
...@@ -239,8 +239,8 @@ namespace Dune { ...@@ -239,8 +239,8 @@ namespace Dune {
return true; return true;
} }
template<class DiscreteFunctionSpaceImp, class DofManagerImp> template<class DiscreteFunctionSpaceImp>
bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp,DofManagerImp>:: bool AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp>::
read_pgm(std::string fn) read_pgm(std::string fn)
{ {
FILE *in; FILE *in;
......
...@@ -11,26 +11,23 @@ ...@@ -11,26 +11,23 @@
namespace Dune { namespace Dune {
//- Forward declarations //- Forward declarations
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
class AdaptiveDiscreteFunction; class AdaptiveDiscreteFunction;
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
class AdaptiveLocalFunction; class AdaptiveLocalFunction;
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
class AdaptiveDiscreteFunctionTraits; class AdaptiveDiscreteFunctionTraits;
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
class AdaptiveLocalFunctionTraits; class AdaptiveLocalFunctionTraits;
template <class DiscreteFunctionSpaceImp, class DofManagerImp> template <class DiscreteFunctionSpaceImp>
class AdaptiveFunctionImplementation { class AdaptiveFunctionImplementation {
private: private:
typedef DiscreteFunctionSpaceImp DiscreteFunctionSpaceType; typedef DiscreteFunctionSpaceImp DiscreteFunctionSpaceType;
typedef DofManagerImp DofManagerType;
typedef AdaptiveFunctionImplementation< typedef AdaptiveFunctionImplementation<DiscreteFunctionSpaceImp> ThisType;
DiscreteFunctionSpaceImp, DofManagerImp> ThisType; typedef AdaptiveDiscreteFunctionTraits<DiscreteFunctionSpaceImp> Traits;
typedef AdaptiveDiscreteFunctionTraits<
DiscreteFunctionSpaceImp, DofManagerImp> Traits;
typedef typename Traits::DofIteratorType DofIteratorType; typedef typename Traits::DofIteratorType DofIteratorType;
typedef typename Traits::ConstDofIteratorType ConstDofIteratorType; typedef typename Traits::ConstDofIteratorType ConstDofIteratorType;
...@@ -41,7 +38,8 @@ namespace Dune { ...@@ -41,7 +38,8 @@ namespace Dune {
typedef typename SpaceTraits::RangeFieldType RangeFieldType; typedef typename SpaceTraits::RangeFieldType RangeFieldType;
typedef typename Traits::DofStorageType DofStorageType; typedef typename Traits::DofStorageType DofStorageType;
typedef typename Traits::MemObjectType MemObjectType; typedef typename Traits::GridType GridType;
typedef DofManager<GridType> DofManagerType;
public: public:
std::string name() const; std::string name() const;
...@@ -92,7 +90,7 @@ namespace Dune { ...@@ -92,7 +90,7 @@ namespace Dune {
const DiscreteFunctionSpaceType& spc_; const DiscreteFunctionSpaceType& spc_;
std::string name_; std::string name_;
DofManagerType& dm_; DofManagerType& dm_;
MemObjectType* memObj_; // might be NULL (for SubSpaces) std::pair<MemObjectInterface*, DofStorageType*> memPair_;
DofStorageType& dofVec_; DofStorageType& dofVec_;
}; // end class AdaptiveFunctionImplementation }; // end class AdaptiveFunctionImplementation
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment