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) 136 template< class, class >
169 typedef typename Traits::template
Codim<0>::LeafIterator LeafIterator;
175 struct AdaptationState
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 )
244 DUNE_THROW( InvalidStateException, message );
248 template<
class DataHandler >
249 struct AdaptationCallback;
252 static const int MAXL = 64;
261 This &
operator= (
const This & ) =
delete;
275 template<
class Proj,
class Impl >
283 AlbertaGrid (
const std::string ¯oGridFileName );
293 template<
int cd, PartitionIteratorType pitype>
294 typename Traits::template Codim<cd>::template Partition<pitype>::LevelIterator
298 template<
int cd, PartitionIteratorType pitype>
299 typename Traits::template Codim<cd>::template Partition<pitype>::LevelIterator
300 lend (
int level)
const;
303 template<
int codim >
305 lbegin (
int level )
const;
308 template<
int codim >
310 lend (
int level )
const;
313 template<
int codim, PartitionIteratorType pitype >
315 ::template Codim< codim >::template Partition< pitype >::LeafIterator
319 template<
int codim, PartitionIteratorType pitype >
321 ::template Codim< codim >::template Partition< pitype >::LeafIterator
325 template<
int codim >
330 template<
int codim >
338 int size (
int level,
int codim)
const;
344 int size (
int codim)
const;
352 return numBoundarySegments_;
359 typedef typename View::GridViewImp ViewImp;
360 return View( ViewImp( *
this, level ) );
367 typedef typename View::GridViewImp ViewImp;
368 return View( ViewImp( *
this ) );
387 template<
class DataHandle >
394 template<
class DataHandle >
412 std::ostringstream s;
413 s <<
"AlbertaGrid< " << dim <<
", " << dimworld <<
" >";
418 template<
class EntitySeed >
423 return EntityImpl( *
this, seed.
impl().elementInfo(
meshPointer() ), seed.
impl().subEntity() );
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 >
526 template<
int codim >
530 return entity.
impl().template twist< codim >( subEntity );
536 return intersection.
impl().twistInInside();
542 return intersection.
impl().twistInOutside();
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 646 #endif // #ifdef ERROR 651 #endif // #ifdef ERROR_EXIT 656 #endif // #ifdef WARNING 661 #endif // #ifdef TEST 666 #endif // #ifdef TEST_EXIT 671 #endif // #ifdef DEBUG_TEST 674 #ifdef DEBUG_TEST_EXIT 675 #undef DEBUG_TEST_EXIT 676 #endif // #ifdef DEBUG_TEST_EXIT 681 #endif // #ifdef INFO 686 #endif // #ifdef PRINT_INFO 691 #endif // #ifdef PRINT_INT_VEC 694 #ifdef PRINT_REAL_VEC 695 #undef PRINT_REAL_VEC 696 #endif // #ifdef PRINT_REAL_VEC 701 #endif // #ifdef WAIT 706 #endif // #ifdef WAIT_REALLY 711 #endif // #ifdef GET_WORKSPACE 714 #ifdef FREE_WORKSPACE 715 #undef FREE_WORKSPACE 716 #endif // #ifdef FREE_WORKSPACE 721 #endif // #ifdef MAT_ALLOC 726 #endif // #ifdef MAT_FREE 731 #endif // #ifdef NAME 736 #endif // #ifdef GET_STRUCT 741 #endif // #ifdef ADD_PARAMETER 746 #endif // #ifdef GET_PARAMETER 750 #endif // HAVE_ALBERTA || DOXYGEN AlbertaGridIndexSet< dim, dimworld > LeafIndexSetImp
Definition: albertagrid/gridfamily.hh:92
static const int dimensionworld
Definition: agrid.hh:146
Traits::template Codim< cd >::template Partition< pitype >::LevelIterator lend(int level) const
one past the end on this level
Definition: albertagrid.cc:226
Interface class for the Grid's adapt method where the parameter is a AdaptDataHandleInterface.
Definition: adaptcallback.hh:32
Store a reference to an entity with a minimal memory footprint.
Definition: common/entityseed.hh:25
int alberta2generic(int codim, int i) const
Definition: agrid.hh:492
GridFamily::Traits::template Codim< cd >::LevelIterator LevelIterator
A type that is a model of Dune::LevelIterator with partition type All_Partition.
Definition: common/grid.hh:446
Provides size cache classes to implement the grids size method efficiently.
A Traits struct that collects all associated types of one implementation.
Definition: common/grid.hh:410
~AlbertaGrid()
destructor
Definition: albertagrid.cc:196
Index Set Interface base class.
Definition: common/grid.hh:348
int dune2alberta(int codim, int i) const
Definition: agrid.hh:477
const Alberta::GlobalVector & getCoord(const ElementInfo &elementInfo, int vertex) const
Definition: albertagrid.cc:471
static int getTwistInOutside(const typename Traits::LeafIntersection &intersection)
Definition: agrid.hh:540
GridFamily::ctype ctype
Definition: agrid.hh:143
bool writeGrid(const std::string &filename, ctype time) const
write Grid to file in Xdr
Definition: albertagrid.cc:575
int generic2alberta(int codim, int i) const
Definition: agrid.hh:487
Implementation & impl()
access to the underlying implementation
Definition: common/entity.hh:80
bool adapt()
Refine all positive marked leaf entities, coarsen all negative marked entities if possible...
Definition: albertagrid.cc:415
const Traits ::LeafIndexSet & leafIndexSet() const
return leaf index set
Definition: albertagrid.cc:535
GridFamily::Traits::template Codim< cd >::LeafIterator LeafIterator
A type that is a model of Dune::LeafIterator with partition type All_Partition.
Definition: common/grid.hh:450
ALBERTA REAL_D GlobalVector
Definition: misc.hh:50
const Communication & comm() const
return reference to communication, if MPI found this is specialisation for MPI
Definition: agrid.hh:405
int dune2alberta(int codim, int i) const
Definition: misc.hh:390
int maxLevel() const
Definition: albertagrid.cc:483
const MeshPointer & meshPointer() const
Definition: agrid.hh:462
Provide a generic factory class for unstructured grids.
const Traits ::LevelIndexSet & levelIndexSet(int level) const
return level index set for given level
Definition: albertagrid.cc:520
Different resources needed by all grid implementations.
Definition: albertagrid/entity.hh:26
Definition: coordcache.hh:24
void globalRefine(int refCount)
uses the interface, mark on entity and refineLocal
Definition: albertagrid.cc:304
bool readGrid(const std::string &filename, ctype &time)
read Grid from file filename and store time of mesh in time
Definition: albertagrid.cc:585
Traits::Communication Communication
type of communication
Definition: agrid.hh:165
Alberta::Real ctype
Definition: albertagrid/gridfamily.hh:86
ALBERTA MESH * getMesh() const
Definition: agrid.hh:457
Dune::Communication< No_Comm > Communication
Definition: albertagrid/gridfamily.hh:148
ALBERTA REAL Real
Definition: misc.hh:48
provides the GridFamily for AlbertaGrid
static const int dimensionworld
Definition: albertagrid/gridfamily.hh:89
Definition: common.hh:133
void postAdapt()
clean up some markers
Definition: albertagrid.cc:356
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
#define ALBERTA
Definition: albertaheader.hh:29
IndexSet< GridImp, LeafIndexSetImp, int, std::array< GeometryType, 1 > > LeafIndexSet
Definition: albertagrid/gridfamily.hh:143
Grid view abstract base class.
Definition: common/gridview.hh:65
int alberta2dune(int codim, int i) const
Definition: agrid.hh:482
AlbertaGrid()
create an empty grid
Definition: albertagrid.cc:42
int getMark(const typename Traits::template Codim< 0 >::Entity &) const
returns adaptation mark for given entity, i.e. here the default implementation returns 0...
Definition: common/grid.hh:941
const DofNumbering & dofNumbering() const
Definition: agrid.hh:467
This & operator=(const This &)=delete
Definition: albertagrid/gridview.hh:22
Definition: albertagrid/projection.hh:79
Definition: common/geometry.hh:28
int getMark(const typename Traits::template Codim< 0 >::Entity &e) const
returns adaptation mark for given entity
Definition: albertagrid.cc:408
Include standard header files.
Definition: agrid.hh:59
Definition: albertagrid/entity.hh:32
hierarchic index set of AlbertaGrid
Definition: albertagrid/gridfamily.hh:64
int size(int level, int codim) const
Number of grid entities per level and codim because lbegin and lend are none const, and we need this methods counting the entities on each level, you know.
Definition: albertagrid.cc:490
Definition: albertagrid/entity.hh:23
static int getTwist(const typename Traits::template Codim< codim >::Entity &entity)
Definition: agrid.hh:521
bool preAdapt()
returns true, if a least one element is marked for coarsening
Definition: albertagrid.cc:348
const GlobalIdSet & globalIdSet() const
return global IdSet
Definition: agrid.hh:445
static int getTwist(const typename Traits::template Codim< 0 >::Entity &entity, int subEntity)
Definition: agrid.hh:528
Implementation of the IntersectionIterator for AlbertaGrid.
Definition: albertagrid/gridfamily.hh:97
Intersection of a mesh entity of codimension 0 ("element") with a "neighboring" element or with the d...
Definition: albertagrid/dgfparser.hh:28
organizes the caching of sizes for one grid and one GeometryType
Definition: sizecache.hh:32
Traits::template Codim< cd >::template Partition< pitype >::LevelIterator lbegin(int level) const
Iterator to first entity of given codim on level.
Definition: albertagrid.cc:206
Definition: albertagrid/intersection.hh:31
Definition: albertagrid/entity.hh:29
Provide a generic factory class for unstructured grids.
Definition: common/gridfactory.hh:275
static const int dimension
Definition: albertagrid/gridfamily.hh:88
Definition: albertagrid/gridfamily.hh:52
static const int dimension
Definition: agrid.hh:145
Traits ::template Codim< codim >::template Partition< pitype >::LeafIterator leafbegin() const
return LeafIterator which points to first leaf entity
Traits::HierarchicIndexSet HierarchicIndexSet
type of hierarchic index set
Definition: agrid.hh:157
Traits::LevelGridView levelGridView(int level) const
View for a grid level for All_Partition.
Definition: agrid.hh:356
static int getTwistInInside(const typename Traits::LeafIntersection &intersection)
Definition: agrid.hh:534
Definition: common/grid.hh:1120
Implementation & impl()
access to the underlying implementation
Definition: common/intersection.hh:178
Traits ::template Codim< codim >::template Partition< pitype >::LeafIterator leafend() const
return LeafIterator which points behind last leaf entity
[ provides Dune::Grid ]
Definition: agrid.hh:106
const LocalIdSet & localIdSet() const
return local IdSet
Definition: agrid.hh:451
const LevelProvider & levelProvider() const
Definition: agrid.hh:472
Interface class for vertex projection at the boundary.
Definition: boundaryprojection.hh:25
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:132
Traits::LeafGridView leafGridView() const
View for the leaf grid for All_Partition.
Definition: agrid.hh:364
std::size_t numBoundarySegments() const
number of boundary segments within the macro grid
Definition: agrid.hh:350
Implementation & impl()
access to the underlying implementation
Definition: common/entityseed.hh:59
Definition: albertagrid/gridfamily.hh:82
IndexSet< GridImp, LevelIndexSetImp, int, std::array< GeometryType, 1 > > LevelIndexSet
Definition: albertagrid/gridfamily.hh:142
Definition: albertagrid/entity.hh:44
static std::string typeName()
Definition: agrid.hh:410
Definition: albertagrid/datahandle.hh:26
Definition: albertagrid/gridfamily.hh:67
int alberta2dune(int codim, int i) const
Definition: misc.hh:397
const HierarchicIndexSet & hierarchicIndexSet() const
Definition: agrid.hh:436
GridFamily::Traits::template Codim< cd >::Entity Entity
A type that is a model of a Dune::Entity<cd,dim,...>.
Definition: common/grid.hh:419
Traits::template Codim< EntitySeed::codimension >::Entity entity(const EntitySeed &seed) const
obtain Entity from EntitySeed.
Definition: agrid.hh:420
bool mark(int, const typename Traits ::template Codim< 0 >::Entity &)
Marks an entity to be refined/coarsened in a subsequent adapt.
Definition: common/grid.hh:929
marker assigning subentities to one element containing them
Definition: treeiterator.hh:34
Id Set Interface.
Definition: common/grid.hh:349
Contains #undefs for all preprocessor macros defined by alberta.
interfaces and wrappers needed for the callback adaptation provided by AlbertaGrid and dune-ALUGrid ...
Definition: albertagrid/gridview.hh:25