3 #ifndef DUNE_ALBERTA_LEVEL_HH
4 #define DUNE_ALBERTA_LEVEL_HH
26 typedef unsigned char Level;
33 static const Level isNewFlag = (1 << 7);
34 static const Level levelMask = (1 << 7) - 1;
39 template< Level flags >
51 const Level *array = (Level *)level_;
52 return array[ dofAccess_( element, 0 ) ] & levelMask;
57 return (*
this)( elementInfo.
el() );
62 const Level *array = (Level *)level_;
63 return ((array[ dofAccess_( element, 0 ) ] & isNewFlag) != 0);
68 return isNew( elementInfo.
el() );
73 CalcMaxLevel calcFromCache;
74 level_.
forEach( calcFromCache );
76 CalcMaxLevel calcFromGrid;
78 assert( calcFromCache.maxLevel() == calcFromGrid.maxLevel() );
80 return calcFromCache.maxLevel();;
90 ClearFlags< isNewFlag > clearIsNew;
99 level_.
create( dofSpace,
"Element level" );
101 level_.template setupInterpolation< Interpolation >();
103 SetLocal setLocal( level_ );
114 DofVectorPointer level_;
115 DofAccess dofAccess_;
132 dofAccess_( level.dofSpace() )
137 Level *
const array = (Level *)level_;
138 array[ dofAccess_( elementInfo, 0 ) ] = elementInfo.
level();
159 maxLevel_ =
std::max( maxLevel_, Level( dof & levelMask ) );
164 maxLevel_ =
std::max( maxLevel_, Level( elementInfo.
level() ) );
179 template< typename AlbertaGridLevelProvider< dim >::Level flags >
196 static const int dimension = dim;
204 Level *array = (Level *)dofVector;
206 for(
int i = 0; i < patch.
count(); ++i )
209 assert( (array[ dofAccess( father, 0 ) ] & levelMask) < levelMask );
210 const Level childLevel = (array[ dofAccess( father, 0 ) ] + 1) | isNewFlag;
211 for(
int i = 0; i < 2; ++i )
214 array[ dofAccess( child, 0 ) ] = childLevel;
222 #endif // #if HAVE_ALBERTA
Definition: elementinfo.hh:39
bool isNew(const ElementInfo &elementInfo) const
Definition: level.hh:66
int max(const DofVectorPointer< int > &dofVector)
Definition: dofvector.hh:341
provides a wrapper for ALBERTA's mesh structure
Level maxLevel() const
Definition: level.hh:167
void forEach(Functor &functor) const
Definition: dofvector.hh:262
int level() const
Definition: elementinfo.hh:517
static void interpolateVector(const DofVectorPointer &dofVector, const Patch &patch)
Definition: level.hh:200
ALBERTA FE_SPACE DofSpace
Definition: misc.hh:76
CalcMaxLevel()
Definition: level.hh:153
Alberta::Patch< dimension > Patch
Definition: level.hh:198
void release()
Definition: dofvector.hh:252
const DofSpace * dofSpace(int codim) const
Definition: dofadmin.hh:139
static const Flags nothing
Definition: misc.hh:245
Alberta::HierarchyDofNumbering< dim > DofNumbering
Definition: level.hh:47
void create(const DofSpace *dofSpace, const std::string &name="")
Definition: dofvector.hh:234
Alberta::ElementInfo< dim > ElementInfo
Definition: level.hh:42
void hierarchicTraverse(Functor &functor, typename FillFlags::Flags fillFlags=FillFlags::standard) const
Definition: meshpointer.hh:368
ALBERTA EL Element
Definition: misc.hh:61
Alberta::MeshPointer< dim > MeshPointer
Definition: level.hh:46
Definition: dofadmin.hh:21
void create(const DofNumbering &dofNumbering)
Definition: level.hh:94
int count() const
Definition: albertagrid/refinement.hh:65
void markAllOld()
Definition: level.hh:88
MeshPointer mesh() const
Definition: level.hh:83
bool isNew(const Alberta::Element *element) const
Definition: level.hh:60
SetLocal(const DofVectorPointer &level)
Definition: level.hh:130
void leafTraverse(Functor &functor, typename FillFlags::Flags fillFlags=FillFlags::standard) const
Definition: meshpointer.hh:383
Definition: dofadmin.hh:86
void release()
Definition: level.hh:107
Level maxLevel() const
Definition: level.hh:71
const DofSpace * dofSpace() const
Definition: dofvector.hh:221
Definition: albertagrid/refinement.hh:37
Level operator()(const Alberta::Element *element) const
Definition: level.hh:49
Element * el() const
Definition: elementinfo.hh:797