Skip to content
Snippets Groups Projects
Commit 85d729ec authored by Robert Klöfkorn's avatar Robert Klöfkorn
Browse files

Implemented method entity of class ALU3dGridEntity.

[[Imported from SVN: r1763]]
parent 3d623370
No related branches found
No related tags found
No related merge requests found
......@@ -941,6 +941,9 @@ namespace Dune
//! Constructor for father
ALU3dGridEntityPointer(const GridImp & grid, const ALU3DSPACE HElementType & item);
ALU3dGridEntityPointer(const GridImp & grid, const ALU3DSPACE HFaceType & item);
ALU3dGridEntityPointer(const GridImp & grid, const ALU3DSPACE HEdgeType & item);
ALU3dGridEntityPointer(const GridImp & grid, const ALU3DSPACE VertexType & item);
//! make empty entity pointer (to be revised)
ALU3dGridEntityPointer(const GridImp & grid);
......@@ -1220,7 +1223,11 @@ namespace Dune
typedef ALU3dGridMakeableEntity<0,dim,const MyType> EntityImp;
typedef ALU3DSPACE MemoryProvider< EntityImp > EntityProvider;
typedef ALU3dGridMakeableEntity<3,dim,const MyType> VertexImp;
typedef ALU3DSPACE MemoryProvider< VertexImp > VertexProvider;
mutable EntityProvider entityProvider_;
mutable VertexProvider vertexProvider_;
}; // end Class ALU3dGridGrid
......
......@@ -661,29 +661,72 @@ namespace Dune {
// --EnPointer
//
//*******************************************************************
template<int codim, PartitionIteratorType pitype, class GridImp >
inline ALU3dGridEntityPointer<codim,pitype,GridImp> ::
ALU3dGridEntityPointer(const GridImp & grid, const ALU3DSPACE HElementType &item)
: grid_(grid) , entity_ ( grid_.entityProvider_.getNewObjectEntity( grid_, item.level()))
template<>
inline ALU3dGridEntityPointer<0, All_Partition, const ALU3dGrid<3,3> > ::
ALU3dGridEntityPointer(const ALU3dGrid<3,3> & grid, const ALU3DSPACE HElementType &item)
: grid_(grid)
, entity_ ( grid_.entityProvider_.getNewObjectEntity( grid_, item.level() ))
{
(*entity_).setElement( const_cast<ALU3DSPACE HElementType &> (item) );
}
template<>
inline ALU3dGridEntityPointer<1, All_Partition, const ALU3dGrid<3,3> > ::
ALU3dGridEntityPointer(const ALU3dGrid<3,3> & grid, const ALU3DSPACE HFaceType &item)
: grid_(grid)
{
entity_ = new EntityImp ( grid_ , item.level() );
(*entity_).setElement( const_cast<ALU3DSPACE HFaceType &> (item) );
}
template<>
inline ALU3dGridEntityPointer<2, All_Partition, const ALU3dGrid<3,3> > ::
ALU3dGridEntityPointer(const ALU3dGrid<3,3> & grid, const ALU3DSPACE HEdgeType &item)
: grid_(grid)
{
entity_ = new EntityImp ( grid_ , item.level() );
(*entity_).setElement( const_cast<ALU3DSPACE HEdgeType &> (item) );
}
template<>
inline ALU3dGridEntityPointer<3, All_Partition, const ALU3dGrid<3,3> > ::
ALU3dGridEntityPointer(const ALU3dGrid<3,3> & grid, const ALU3DSPACE VertexType &item)
: grid_(grid)
, entity_ ( grid_.vertexProvider_.getNewObjectEntity( grid_, item.level() ))
{
(*entity_).setElement( const_cast<ALU3DSPACE VertexType &> (item) );
}
template<int codim, PartitionIteratorType pitype, class GridImp >
inline ALU3dGridEntityPointer<codim,pitype,GridImp> ::
ALU3dGridEntityPointer(const GridImp & grid)
: grid_(grid) , entity_ ( grid_.entityProvider_.getNewObjectEntity( grid_, 0 ))
: grid_(grid) , entity_ (0)
{
entity_ = new EntityImp ( grid_, 0 );
assert(false);
}
template<int codim, PartitionIteratorType pitype, class GridImp >
inline ALU3dGridEntityPointer<codim,pitype,GridImp> ::
~ALU3dGridEntityPointer()
{
if(entity_) delete entity_;
}
template<>
inline ALU3dGridEntityPointer<0,All_Partition, const ALU3dGrid<3,3> > ::
~ALU3dGridEntityPointer()
{
grid_.entityProvider_.freeObjectEntity ( entity_ );
}
template<>
inline ALU3dGridEntityPointer<3,All_Partition, const ALU3dGrid<3,3> > ::
~ALU3dGridEntityPointer()
{
grid_.vertexProvider_.freeObjectEntity ( entity_ );
}
template<int codim, PartitionIteratorType pitype, class GridImp >
inline void ALU3dGridEntityPointer<codim,pitype,GridImp> :: increment ()
{
......@@ -1384,6 +1427,35 @@ namespace Dune {
inline typename ALU3dGridEntity<0,dim,GridImp> :: template codim<cc>:: EntityPointer
ALU3dGridEntity<0,dim,GridImp> :: entity (int i) const
{
switch (cc)
{
case 1 :
{
ALU3dGridEntityPointer<cc,All_Partition,GridImp> ep (grid_, (*(*item_).myhface3(i)) );
return ep;
}
case 2 :
{
if(i<3)
{
ALU3dGridEntityPointer<cc,All_Partition,GridImp> ep (grid_, (*(*item_).myhface3(0)->myhedge1(i)) );
return ep;
}
else
{
std::cout << "method not tested yet. !\n " << __FILE__ << " " << __LINE__ << "\n";
ALU3dGridEntityPointer<cc,All_Partition,GridImp> ep (grid_, (*(*item_).myhface3(i-2)->myhedge1(i-3)) );
return ep;
}
}
case 3 :
{
ALU3dGridEntityPointer<cc,All_Partition,GridImp> ep (grid_, (*(*item_).myvertex(i)) );
return ep;
}
default :
DUNE_THROW(ALU3dGridError,"wrong codim in method entity \n");
}
ALU3dGridEntityPointer<cc,All_Partition,GridImp> ep (grid_);
return ep;
}
......
......@@ -58,12 +58,14 @@ MemoryProvider<Object>::getNewObjectEntity
template <class Object>
inline MemoryProvider<Object>::~MemoryProvider()
{
while ( !objStack_.empty() )
{
ObjectType * obj = objStack_.top();
objStack_.pop();
if( obj ) delete obj;
}
/*
while ( !objStack_.empty() )
{
ObjectType * obj = objStack_.top();
objStack_.pop();
if( obj ) delete obj;
}
*/
}
template <class Object>
......
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