3#ifndef DUNE_ALBERTAGRID_IMP_HH
4#define DUNE_ALBERTAGRID_IMP_HH
11#if HAVE_ALBERTA || DOXYGEN
23#include <dune/common/fvector.hh>
24#include <dune/common/fmatrix.hh>
25#include <dune/common/stdstreams.hh>
26#include <dune/common/parallel/communication.hh>
63 template<
class Gr
id >
103 template<
int dim,
int dimworld = Alberta::dimWorld >
106 < dim, dimworld, Alberta::Real, AlbertaGridFamily< dim, dimworld > >
126#if (__GNUC__ < 4) && !(defined __ICC)
134 template< class, class >
167 typedef typename Traits::template
Codim<0>::LeafIterator LeafIterator;
173 struct AdaptationState
175 enum Phase { ComputationPhase, PreAdaptationPhase, PostAdaptationPhase };
184 : phase_( ComputationPhase ),
189 void mark (
int count )
194 refineMarked_ += (2 << count);
197 void unmark (
int count )
202 refineMarked_ -= (2 << count);
205 bool coarsen ()
const
207 return (coarsenMarked_ > 0);
210 int refineMarked ()
const
212 return refineMarked_;
217 if( phase_ != ComputationPhase )
218 error(
"preAdapt may only be called in computation phase." );
219 phase_ = PreAdaptationPhase;
224 if( phase_ != PreAdaptationPhase )
225 error(
"adapt may only be called in preadapdation phase." );
226 phase_ = PostAdaptationPhase;
231 if( phase_ != PostAdaptationPhase )
232 error(
"postAdapt may only be called in postadaptation phase." );
233 phase_ = ComputationPhase;
240 void error (
const std::string &message )
242 DUNE_THROW( InvalidStateException, message );
246 template<
class DataHandler >
247 struct AdaptationCallback;
250 static const int MAXL = 64;
273 template<
class Proj,
class Impl >
281 AlbertaGrid (
const std::string ¯oGridFileName );
291 template<
int cd, PartitionIteratorType pitype>
296 template<
int cd, PartitionIteratorType pitype>
301 template<
int codim >
306 template<
int codim >
311 template<
int codim, PartitionIteratorType pitype >
317 template<
int codim, PartitionIteratorType pitype >
323 template<
int codim >
328 template<
int codim >
336 int size (
int level,
int codim)
const;
339 int size (
int level, GeometryType type)
const;
342 int size (
int codim)
const;
345 int size (GeometryType type)
const;
350 return numBoundarySegments_;
357 typedef typename View::GridViewImp ViewImp;
358 return View( ViewImp( *
this, level ) );
365 typedef typename View::GridViewImp ViewImp;
366 return View( ViewImp( *
this ) );
377 int getMark (
const typename Traits::template Codim< 0 >::Entity &e )
const;
380 bool mark (
int refCount,
const typename Traits::template Codim< 0 >::Entity &e );
385 template<
class DataHandle >
392 template<
class DataHandle >
410 std::ostringstream s;
411 s <<
"AlbertaGrid< " << dim <<
", " << dimworld <<
" >";
416 template<
class EntitySeed >
417 typename Traits::template Codim< EntitySeed::codimension >::Entity
421 return EntityImpl( *
this, seed.
impl().elementInfo(
meshPointer() ), seed.
impl().subEntity() );
437 const typename Traits :: LevelIndexSet &
levelIndexSet (
int level)
const;
440 const typename Traits :: LeafIndexSet &
leafIndexSet ()
const;
467 return dofNumbering_;
472 return levelProvider_;
487 return genericNumberingMap_.dune2alberta( codim, i );
492 return genericNumberingMap_.alberta2dune( codim, i );
496 typedef std::vector<int> ArrayType;
517 template<
int codim >
524 template<
int codim >
528 return entity.
impl().template twist< codim >( subEntity );
534 return intersection.
impl().twistInInside();
540 return intersection.
impl().twistInOutside();
546 getCoord (
const ElementInfo &elementInfo,
int vertex )
const;
559 size_t numBoundarySegments_;
565 DofNumbering dofNumbering_;
567 LevelProvider levelProvider_;
577 mutable std::vector< typename GridFamily::LevelIndexSetImp * > levelIndexVec_;
588 mutable MarkerVector leafMarkerVector_;
591 mutable std::vector< MarkerVector > levelMarkerVector_;
593#if DUNE_ALBERTA_CACHE_COORDINATES
598 AdaptationState adaptationState_;
609#ifdef _ABS_NOT_DEFINED_
613#ifdef _MIN_NOT_DEFINED_
617#ifdef _MAX_NOT_DEFINED_
621#ifdef obstack_chunk_alloc
622#undef obstack_chunk_alloc
624#ifdef obstack_chunk_free
625#undef obstack_chunk_free
672#ifdef DEBUG_TEST_EXIT
673#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:27
Include standard header files.
Definition: agrid.hh:58
ALBERTA REAL Real
Definition: misc.hh:46
ALBERTA REAL_D GlobalVector
Definition: misc.hh:48
Definition: dgfgridfactory.hh:36
[ provides Dune::Grid ]
Definition: agrid.hh:107
bool readGrid(const std::string &filename, ctype &time)
read Grid from file filename and store time of mesh in time
Definition: albertagrid.cc:583
const DofNumbering & dofNumbering() const
Definition: agrid.hh:465
const CollectiveCommunication & comm() const
return reference to collective communication, if MPI found this is specialisation for MPI
Definition: agrid.hh:403
int generic2alberta(int codim, int i) const
Definition: agrid.hh:485
static std::string typeName()
Definition: agrid.hh:408
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:434
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:143
int dune2alberta(int codim, int i) const
Definition: agrid.hh:475
int maxLevel() const
Definition: albertagrid.cc:481
AlbertaGrid()
create an empty grid
Definition: albertagrid.cc:40
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:470
static int getTwistInOutside(const typename Traits::LeafIntersection &intersection)
Definition: agrid.hh:538
const Alberta::GlobalVector & getCoord(const ElementInfo &elementInfo, int vertex) const
Definition: albertagrid.cc:469
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:362
bool adapt()
Refine all positive marked leaf entities, coarsen all negative marked entities if possible.
Definition: albertagrid.cc:413
static const int dimensionworld
Definition: agrid.hh:144
static int getTwistInInside(const typename Traits::LeafIntersection &intersection)
Definition: agrid.hh:532
void postAdapt()
clean up some markers
Definition: albertagrid.cc:354
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:449
std::size_t numBoundarySegments() const
number of boundary segments within the macro grid
Definition: agrid.hh:348
GridFamily::ctype ctype
Definition: agrid.hh:141
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:518
int alberta2generic(int codim, int i) const
Definition: agrid.hh:490
static int getTwist(const typename Traits::template Codim< codim >::Entity &entity)
Definition: agrid.hh:519
ALBERTA MESH * getMesh() const
Definition: agrid.hh:455
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:488
Traits::HierarchicIndexSet HierarchicIndexSet
type of hierarchic index set
Definition: agrid.hh:155
const Traits::LeafIndexSet & leafIndexSet() const
return leaf index set
Definition: albertagrid.cc:533
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:573
Traits::LevelGridView levelGridView(int level) const
View for a grid level for All_Partition.
Definition: agrid.hh:354
int alberta2dune(int codim, int i) const
Definition: agrid.hh:480
This & operator=(const This &)=delete
AlbertaGridFamily< dim, dimworld >::Traits Traits
Definition: agrid.hh:147
static int getTwist(const typename Traits::template Codim< 0 >::Entity &entity, int subEntity)
Definition: agrid.hh:526
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:443
void globalRefine(int refCount)
uses the interface, mark on entity and refineLocal
Definition: albertagrid.cc:302
int getMark(const typename Traits::template Codim< 0 >::Entity &e) const
returns adaptation mark for given entity
Definition: albertagrid.cc:406
Traits::template Codim< EntitySeed::codimension >::Entity entity(const EntitySeed &seed) const
obtain Entity from EntitySeed.
Definition: agrid.hh:418
~AlbertaGrid()
desctructor
Definition: albertagrid.cc:194
bool preAdapt()
returns true, if a least one element is marked for coarsening
Definition: albertagrid.cc:346
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:383
Traits::CollectiveCommunication CollectiveCommunication
type of collective communication
Definition: agrid.hh:163
const MeshPointer & meshPointer() const
Definition: agrid.hh:460
Definition: coordcache.hh:23
Definition: albertagrid/datahandle.hh:25
Intersection of a mesh entity of codimension 0 ("element") with a "neighboring" element or with the d...
Definition: common/intersection.hh:162
Implementation & impl()
access to the underlying implementation
Definition: common/intersection.hh:176
Definition: treeiterator.hh:187
Definition: hierarchiciterator.hh:27
Definition: albertagrid/intersection.hh:103
Definition: albertagrid/intersectioniterator.hh:25
Definition: albertagrid/entity.hh:44
Definition: albertagrid/indexsets.hh:40
hierarchic index set of AlbertaGrid
Definition: albertagrid/indexsets.hh:532
Definition: albertagrid/indexsets.hh:333
Definition: albertagrid/gridfamily.hh:81
static const int dimension
Definition: albertagrid/gridfamily.hh:86
static const int dimensionworld
Definition: albertagrid/gridfamily.hh:87
AlbertaGridIndexSet< dim, dimworld > LeafIndexSetImp
Definition: albertagrid/gridfamily.hh:90
Alberta::Real ctype
Definition: albertagrid/gridfamily.hh:84
Definition: albertagrid/gridfamily.hh:96
Dune::CollectiveCommunication< No_Comm > CollectiveCommunication
Definition: albertagrid/gridfamily.hh:146
Definition: albertagrid/gridview.hh:74
Definition: albertagrid/gridview.hh:282
Definition: albertagrid/intersection.hh:30
int alberta2dune(int codim, int i) const
Definition: misc.hh:395
int dune2alberta(int codim, int i) const
Definition: misc.hh:388
Definition: albertagrid/projection.hh:78
marker assigning subentities to one element containing them
Definition: treeiterator.hh:33
Interface class for the Grid's adapt method where the parameter is a AdaptDataHandleInterface.
Definition: adaptcallback.hh:31
Interface class for vertex projection at the boundary.
Definition: boundaryprojection.hh:31
Implementation & impl()
access to the underlying implementation
Definition: common/entity.hh:78
Store a reference to an entity with a minimal memory footprint.
Definition: common/entityseed.hh:24
Implementation & impl()
access to the underlying implementation
Definition: common/entityseed.hh:57
Definition: common/grid.hh:851
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:904
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:916
Index Set Interface base class.
Definition: indexidset.hh:76
Id Set Interface.
Definition: indexidset.hh:450
A Traits struct that collects all associated types of one implementation.
Definition: common/grid.hh:414
Definition: common/grid.hh:1092
Provide a generic factory class for unstructured grids.
Definition: common/gridfactory.hh:312
Grid view abstract base class.
Definition: common/gridview.hh:63
organizes the caching of sizes for one grid and one GeometryType
Definition: sizecache.hh:31
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.