5#ifndef DUNE_ALBERTAGRID_IMP_HH
6#define DUNE_ALBERTAGRID_IMP_HH
13#if HAVE_ALBERTA || DOXYGEN
25#include <dune/common/fvector.hh>
26#include <dune/common/fmatrix.hh>
27#include <dune/common/stdstreams.hh>
28#include <dune/common/parallel/communication.hh>
65 template<
class Gr
id >
105 template<
int dim,
int dimworld = Alberta::dimWorld >
108 < dim, dimworld, Alberta::Real, AlbertaGridFamily< dim, dimworld > >
128#if (__GNUC__ < 4) && !(defined __ICC)
177 enum Phase { ComputationPhase, PreAdaptationPhase, PostAdaptationPhase };
186 : phase_( ComputationPhase ),
191 void mark (
int count )
196 refineMarked_ += (2 << count);
199 void unmark (
int count )
204 refineMarked_ -= (2 << count);
207 bool coarsen ()
const
209 return (coarsenMarked_ > 0);
212 int refineMarked ()
const
214 return refineMarked_;
219 if( phase_ != ComputationPhase )
220 error(
"preAdapt may only be called in computation phase." );
221 phase_ = PreAdaptationPhase;
226 if( phase_ != PreAdaptationPhase )
227 error(
"adapt may only be called in preadapdation phase." );
228 phase_ = PostAdaptationPhase;
233 if( phase_ != PostAdaptationPhase )
234 error(
"postAdapt may only be called in postadaptation phase." );
235 phase_ = ComputationPhase;
242 void error (
const std::string &
message )
248 template<
class DataHandler >
249 struct AdaptationCallback;
252 static const int MAXL = 64;
275 template<
class Proj,
class Impl >
293 template<
int cd, PartitionIteratorType pitype>
298 template<
int cd, PartitionIteratorType pitype>
303 template<
int codim >
308 template<
int codim >
313 template<
int codim, PartitionIteratorType pitype >
319 template<
int codim, PartitionIteratorType pitype >
325 template<
int codim >
330 template<
int codim >
338 int size (
int level,
int codim)
const;
341 int size (
int level, GeometryType type)
const;
344 int size (
int codim)
const;
347 int size (GeometryType type)
const;
352 return numBoundarySegments_;
359 typedef typename View::GridViewImp
ViewImp;
367 typedef typename View::GridViewImp
ViewImp;
379 int getMark (
const typename Traits::template Codim< 0 >::Entity &e )
const;
382 bool mark (
int refCount,
const typename Traits::template Codim< 0 >::Entity &e );
387 template<
class DataHandle >
394 template<
class DataHandle >
412 std::ostringstream s;
413 s <<
"AlbertaGrid< " << dim <<
", " << dimworld <<
" >";
418 template<
class EntitySeed >
419 typename Traits::template Codim< EntitySeed::codimension >::Entity
423 return EntityImpl( *
this, seed.
impl().elementInfo(
meshPointer() ), seed.
impl().subEntity() );
439 const typename Traits :: LevelIndexSet &
levelIndexSet (
int level)
const;
442 const typename Traits :: LeafIndexSet &
leafIndexSet ()
const;
469 return dofNumbering_;
474 return levelProvider_;
489 return genericNumberingMap_.dune2alberta( codim, i );
494 return genericNumberingMap_.alberta2dune( codim, i );
498 typedef std::vector<int> ArrayType;
519 template<
int codim >
523 return entity.impl().twist();
526 template<
int codim >
536 return intersection.
impl().twistInInside();
542 return intersection.
impl().twistInOutside();
548 getCoord (
const ElementInfo &elementInfo,
int vertex )
const;
561 size_t numBoundarySegments_;
567 DofNumbering dofNumbering_;
569 LevelProvider levelProvider_;
579 mutable std::vector< typename GridFamily::LevelIndexSetImp * > levelIndexVec_;
590 mutable MarkerVector leafMarkerVector_;
593 mutable std::vector< MarkerVector > levelMarkerVector_;
595#if DUNE_ALBERTA_CACHE_COORDINATES
600 AdaptationState adaptationState_;
611#ifdef _ABS_NOT_DEFINED_
615#ifdef _MIN_NOT_DEFINED_
619#ifdef _MAX_NOT_DEFINED_
623#ifdef obstack_chunk_alloc
624#undef obstack_chunk_alloc
626#ifdef obstack_chunk_free
627#undef obstack_chunk_free
674#ifdef DEBUG_TEST_EXIT
675#undef DEBUG_TEST_EXIT
Provides size cache classes to implement the grids size method efficiently.
interfaces and wrappers needed for the callback adaptation provided by AlbertaGrid and dune-ALUGrid
Contains #undefs for all preprocessor macros defined by alberta.
#define ALBERTA
Definition albertaheader.hh:29
Include standard header files.
Definition agrid.hh:60
ALBERTA REAL Real
Definition misc.hh:48
ALBERTA REAL_D GlobalVector
Definition misc.hh:50
Definition dgfgridfactory.hh:38
[ provides Dune::Grid ]
Definition agrid.hh:109
bool readGrid(const std::string &filename, ctype &time)
read Grid from file filename and store time of mesh in time
Definition albertagrid.cc:585
const DofNumbering & dofNumbering() const
Definition agrid.hh:467
int generic2alberta(int codim, int i) const
Definition agrid.hh:487
static std::string typeName()
Definition agrid.hh:410
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator leafbegin() const
return LeafIterator which points to first leaf entity
const HierarchicIndexSet & hierarchicIndexSet() const
Definition agrid.hh:436
Traits::template Codim< cd >::template Partition< pitype >::LevelIterator lend(int level) const
one past the end on this level
static const int dimension
Definition agrid.hh:145
int dune2alberta(int codim, int i) const
Definition agrid.hh:477
Traits::Communication Communication
type of communication
Definition agrid.hh:165
int maxLevel() const
Definition albertagrid.cc:483
AlbertaGrid()
create an empty grid
Definition albertagrid.cc:42
Traits::template Codim< codim >::LevelIterator lbegin(int level) const
Iterator to first entity of given codim on level.
const LevelProvider & levelProvider() const
Definition agrid.hh:472
static int getTwistInOutside(const typename Traits::LeafIntersection &intersection)
Definition agrid.hh:540
const Alberta::GlobalVector & getCoord(const ElementInfo &elementInfo, int vertex) const
Definition albertagrid.cc:471
Traits::template Codim< codim >::LevelIterator lend(int level) const
one past the end on this level
Traits::LeafGridView leafGridView() const
View for the leaf grid for All_Partition.
Definition agrid.hh:364
bool adapt()
Refine all positive marked leaf entities, coarsen all negative marked entities if possible.
Definition albertagrid.cc:415
static const int dimensionworld
Definition agrid.hh:146
static int getTwistInInside(const typename Traits::LeafIntersection &intersection)
Definition agrid.hh:534
void postAdapt()
clean up some markers
Definition albertagrid.cc:356
Traits::template Codim< codim >::LeafIterator leafbegin() const
return LeafIterator which points to first leaf entity
const LocalIdSet & localIdSet() const
return local IdSet
Definition agrid.hh:451
std::size_t numBoundarySegments() const
number of boundary segments within the macro grid
Definition agrid.hh:350
GridFamily::ctype ctype
Definition agrid.hh:143
AlbertaGrid(const This &)=delete
Traits::template Codim< codim >::LeafIterator leafend() const
return LeafIterator which points behind last leaf entity
const Traits::LevelIndexSet & levelIndexSet(int level) const
return level index set for given level
Definition albertagrid.cc:520
int alberta2generic(int codim, int i) const
Definition agrid.hh:492
static int getTwist(const typename Traits::template Codim< codim >::Entity &entity)
Definition agrid.hh:521
const Communication & comm() const
return reference to communication, if MPI found this is specialisation for MPI
Definition agrid.hh:405
ALBERTA MESH * getMesh() const
Definition agrid.hh:457
int size(int level, int codim) const
Number of grid entities per level and codim because lbegin and lend are none const,...
Definition albertagrid.cc:490
Traits::HierarchicIndexSet HierarchicIndexSet
type of hierarchic index set
Definition agrid.hh:157
const Traits::LeafIndexSet & leafIndexSet() const
return leaf index set
Definition albertagrid.cc:535
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator leafend() const
return LeafIterator which points behind last leaf entity
bool writeGrid(const std::string &filename, ctype time) const
write Grid to file in Xdr
Definition albertagrid.cc:575
Traits::LevelGridView levelGridView(int level) const
View for a grid level for All_Partition.
Definition agrid.hh:356
int alberta2dune(int codim, int i) const
Definition agrid.hh:482
This & operator=(const This &)=delete
AlbertaGridFamily< dim, dimworld >::Traits Traits
Definition agrid.hh:149
static int getTwist(const typename Traits::template Codim< 0 >::Entity &entity, int subEntity)
Definition agrid.hh:528
Traits::template Codim< cd >::template Partition< pitype >::LevelIterator lbegin(int level) const
Iterator to first entity of given codim on level.
const GlobalIdSet & globalIdSet() const
return global IdSet
Definition agrid.hh:445
void globalRefine(int refCount)
uses the interface, mark on entity and refineLocal
Definition albertagrid.cc:304
int getMark(const typename Traits::template Codim< 0 >::Entity &e) const
returns adaptation mark for given entity
Definition albertagrid.cc:408
Traits::template Codim< EntitySeed::codimension >::Entity entity(const EntitySeed &seed) const
obtain Entity from EntitySeed.
Definition agrid.hh:420
~AlbertaGrid()
destructor
Definition albertagrid.cc:196
bool preAdapt()
returns true, if a least one element is marked for coarsening
Definition albertagrid.cc:348
bool mark(int refCount, const typename Traits::template Codim< 0 >::Entity &e)
Marks an entity to be refined/coarsened in a subsequent adapt.
Definition albertagrid.cc:385
const MeshPointer & meshPointer() const
Definition agrid.hh:462
Definition coordcache.hh:25
Definition albertagrid/datahandle.hh:27
Intersection of a mesh entity of codimension 0 ("element") with a "neighboring" element or with the d...
Definition common/intersection.hh:164
Implementation & impl()
access to the underlying implementation
Definition common/intersection.hh:178
Definition treeiterator.hh:189
Definition hierarchiciterator.hh:29
Definition albertagrid/intersection.hh:105
Definition albertagrid/intersectioniterator.hh:27
Definition albertagrid/entity.hh:46
Definition albertagrid/indexsets.hh:42
hierarchic index set of AlbertaGrid
Definition albertagrid/indexsets.hh:518
Definition albertagrid/indexsets.hh:329
Definition albertagrid/gridfamily.hh:83
static const int dimension
Definition albertagrid/gridfamily.hh:88
static const int dimensionworld
Definition albertagrid/gridfamily.hh:89
AlbertaGridIndexSet< dim, dimworld > LeafIndexSetImp
Definition albertagrid/gridfamily.hh:92
Alberta::Real ctype
Definition albertagrid/gridfamily.hh:86
Definition albertagrid/gridfamily.hh:98
Dune::Communication< No_Comm > Communication
Definition albertagrid/gridfamily.hh:148
Definition albertagrid/gridfamily.hh:117
Definition albertagrid/gridview.hh:76
Definition albertagrid/gridview.hh:287
Definition albertagrid/intersection.hh:32
int alberta2dune(int codim, int i) const
Definition misc.hh:397
int dune2alberta(int codim, int i) const
Definition misc.hh:390
Definition albertagrid/projection.hh:80
marker assigning subentities to one element containing them
Definition treeiterator.hh:35
Interface class for the Grid's adapt method where the parameter is a AdaptDataHandleInterface.
Definition adaptcallback.hh:33
Store a reference to an entity with a minimal memory footprint.
Definition common/entityseed.hh:26
Implementation & impl()
access to the underlying implementation
Definition common/entityseed.hh:59
Definition common/grid.hh:848
bool mark(int refCount, const typename Traits ::template Codim< 0 >::Entity &e)
Marks an entity to be refined/coarsened in a subsequent adapt.
Definition common/grid.hh:929
int getMark(const typename Traits::template Codim< 0 >::Entity &e) const
returns adaptation mark for given entity, i.e. here the default implementation returns 0.
Definition common/grid.hh:941
A Traits struct that collects all associated types of one implementation.
Definition common/grid.hh:411
Definition common/grid.hh:1121
Provide a generic factory class for unstructured grids.
Definition common/gridfactory.hh:275
Grid view abstract base class.
Definition common/gridview.hh:66
organizes the caching of sizes for one grid and one GeometryType
Definition sizecache.hh:33
Provide a generic factory class for unstructured grids.
provides the GridFamily for AlbertaGrid
Implementation of the IntersectionIterator for AlbertaGrid.
Different resources needed by all grid implementations.