3#ifndef DUNE_ALBERTAGRID_IMP_HH
4#define DUNE_ALBERTAGRID_IMP_HH
11#if HAVE_ALBERTA || DOXYGEN
33#include "albertaheader.hh"
36#include <dune/grid/utility/grapedataioformattypes.hh>
38#include <dune/grid/albertagrid/misc.hh>
39#include <dune/grid/albertagrid/capabilities.hh>
40#include <dune/grid/albertagrid/backuprestore.hh>
42#include <dune/grid/albertagrid/coordcache.hh>
44#include <dune/grid/albertagrid/level.hh>
45#include <dune/grid/albertagrid/intersection.hh>
47#include <dune/grid/albertagrid/datahandle.hh>
48#include <dune/grid/albertagrid/entityseed.hh>
50#include "indexsets.hh"
53#include "entitypointer.hh"
54#include "hierarchiciterator.hh"
55#include "treeiterator.hh"
56#include "leveliterator.hh"
57#include "leafiterator.hh"
65 template<
class Gr
id >
66 struct DGFGridFactory;
136 template<
int dim,
int dimworld = Alberta::dimWorld >
139 < dim, dimworld, Alberta::Real, AlbertaGridFamily< dim, dimworld > >
143 < dim, dimworld, Alberta::Real, AlbertaGridFamily< dim, dimworld > >
148 template<
class, PartitionIteratorType >
friend class AlbertaLevelGridView;
149 template<
class, PartitionIteratorType >
friend class AlbertaLeafGridView;
152 friend struct DGFGridFactory<
This >;
156 friend class AlbertaGridIntersectionBase< const
This >;
157 friend class AlbertaGridLeafIntersection< const
This >;
160#if (__GNUC__ < 4) && !(defined __ICC)
165 friend class AlbertaGridIndexSet< dim, dimworld >;
166 friend class AlbertaGridHierarchicIndexSet< dim, dimworld >;
168 template< class, class >
169 friend class Alberta::AdaptRestrictProlongHandler;
175 typedef typename GridFamily::ctype ctype;
177 static const int dimension = GridFamily::dimension;
178 static const int dimensionworld = GridFamily::dimensionworld;
181 typedef typename AlbertaGridFamily< dim, dimworld >::Traits Traits;
201 typedef typename Traits::template Codim<0>::LeafIterator LeafIterator;
207 struct AdaptationState
209 enum Phase { ComputationPhase, PreAdaptationPhase, PostAdaptationPhase };
218 : phase_( ComputationPhase ),
223 void mark (
int count )
228 refineMarked_ += (2 << count);
231 void unmark (
int count )
236 refineMarked_ -= (2 << count);
239 bool coarsen ()
const
241 return (coarsenMarked_ > 0);
244 int refineMarked ()
const
246 return refineMarked_;
251 if( phase_ != ComputationPhase )
252 error(
"preAdapt may only be called in computation phase." );
253 phase_ = PreAdaptationPhase;
258 if( phase_ != PreAdaptationPhase )
259 error(
"adapt may only be called in preadapdation phase." );
260 phase_ = PostAdaptationPhase;
265 if( phase_ != PostAdaptationPhase )
266 error(
"postAdapt may only be called in postadaptation phase." );
267 phase_ = ComputationPhase;
274 void error (
const std::string &message )
280 template<
class DataHandler >
281 struct AdaptationCallback;
284 static const int MAXL = 64;
286 typedef Alberta::ElementInfo< dimension > ElementInfo;
287 typedef Alberta::MeshPointer< dimension > MeshPointer;
288 typedef Alberta::HierarchyDofNumbering< dimension > DofNumbering;
289 typedef AlbertaGridLevelProvider< dimension > LevelProvider;
293 This &operator= (
const This & );
304 AlbertaGrid (
const Alberta::MacroData< dimension > ¯oData,
308 template<
class Proj,
class Impl >
309 AlbertaGrid (
const Alberta::MacroData< dimension > ¯oData,
310 const Alberta::ProjectionFactoryInterface< Proj, Impl > &projectionFactory );
316 AlbertaGrid (
const std::string ¯oGridFileName );
326 template<
int cd, PartitionIteratorType pitype>
327 typename Traits::template Codim<cd>::template Partition<pitype>::LevelIterator
331 template<
int cd, PartitionIteratorType pitype>
332 typename Traits::template Codim<cd>::template Partition<pitype>::LevelIterator
336 template<
int codim >
337 typename Traits::template Codim< codim >::LevelIterator
341 template<
int codim >
342 typename Traits::template Codim< codim >::LevelIterator
346 template<
int codim, PartitionIteratorType pitype >
348 ::template Codim< codim >::template Partition< pitype >::LeafIterator
352 template<
int codim, PartitionIteratorType pitype >
354 ::template Codim< codim >::template Partition< pitype >::LeafIterator
358 template<
int codim >
359 typename Traits::template Codim< codim >::LeafIterator
363 template<
int codim >
364 typename Traits::template Codim< codim >::LeafIterator
371 int size (
int level,
int codim)
const;
377 int size (
int codim)
const;
385 return numBoundarySegments_;
389 template< PartitionIteratorType pitype >
390 typename Traits::template Partition< pitype >::LevelGridView
393 typedef typename Traits::template Partition< pitype >::LevelGridView View;
394 typedef typename View::GridViewImp ViewImp;
395 return View( ViewImp( *
this, level ) );
399 template< PartitionIteratorType pitype >
400 typename Traits::template Partition< pitype >::LeafGridView
leafView ()
const
402 typedef typename Traits::template Partition< pitype >::LeafGridView View;
403 typedef typename View::GridViewImp ViewImp;
404 return View( ViewImp( *
this ) );
408 typename Traits::template Partition< All_Partition >::LevelGridView
411 typedef typename Traits::template Partition< All_Partition >::LevelGridView View;
412 typedef typename View::GridViewImp ViewImp;
413 return View( ViewImp( *
this, level ) );
417 typename Traits::template Partition< All_Partition >::LeafGridView
leafView ()
const
419 typedef typename Traits::template Partition< All_Partition >::LeafGridView View;
420 typedef typename View::GridViewImp ViewImp;
421 return View( ViewImp( *
this ) );
432 int getMark (
const typename Traits::template Codim< 0 >::Entity &e )
const;
435 bool mark (
int refCount,
const typename Traits::template Codim< 0 >::Entity &e );
440 template<
class DataHandle >
441 void globalRefine (
int refCount, AdaptDataHandleInterface< This, DataHandle > &handle );
447 template<
class DataHandle >
448 bool adapt ( AdaptDataHandleInterface< This, DataHandle > &handle );
463 static std::string typeName ()
465 std::ostringstream s;
466 s <<
"AlbertaGrid< " << dim <<
", " << dimworld <<
" >";
471 template<
class EntitySeed >
472 typename Traits::template Codim< EntitySeed::codimension >::EntityPointer
475 typedef typename Traits::template Codim< EntitySeed::codimension >::EntityPointerImpl EntityPointerImpl;
483 template< GrapeIOFileFormatType ftype >
484 bool writeGrid(
const std::string &filename, ctype time )
const;
487 template< GrapeIOFileFormatType ftype >
488 bool readGrid(
const std::string &filename, ctype &time );
494 const typename Traits :: LevelIndexSet &
levelIndexSet (
int level)
const;
497 const typename Traits :: LeafIndexSet &
leafIndexSet ()
const;
512 ALBERTA MESH* getMesh ()
const
517 const MeshPointer &meshPointer ()
const
522 const DofNumbering &dofNumbering ()
const
524 return dofNumbering_;
527 const LevelProvider &levelProvider ()
const
529 return levelProvider_;
532 int dune2alberta (
int codim,
int i )
const
534 return numberingMap_.dune2alberta( codim, i );
537 int alberta2dune (
int codim,
int i )
const
539 return numberingMap_.alberta2dune( codim, i );
542 int generic2alberta (
int codim,
int i )
const
544 return genericNumberingMap_.dune2alberta( codim, i );
547 int alberta2generic (
int codim,
int i )
const
549 return genericNumberingMap_.alberta2dune( codim, i );
553 bool writeGridXdr (
const std::string &filename, ctype time )
const;
556 bool readGridXdr (
const std::string &filename, ctype &time );
561 typedef std::vector<int> ArrayType;
576 typedef MakeableInterfaceObject< typename Traits::template Codim< 0 >::Entity >
580 friend class AlbertaGridLeafIntersectionIterator< const This >;
582 template<
int codim >
584 getTwist (
const typename Traits::template Codim< codim >::Entity &entity )
589 template<
int codim >
591 getTwist (
const typename Traits::template Codim< 0 >::Entity &entity,
int subEntity )
597 getTwistInInside (
const typename Traits::LeafIntersection &intersection )
603 getTwistInOutside (
const typename Traits::LeafIntersection &intersection )
608 const AlbertaGridLeafIntersection< const This > &
609 getRealIntersection (
const typename Traits::LeafIntersection &intersection )
const
616 const Alberta::GlobalVector &
617 getCoord (
const ElementInfo &elementInfo,
int vertex )
const;
630 size_t numBoundarySegments_;
633 Alberta::NumberingMap< dimension, Alberta::Dune2AlbertaNumbering > numberingMap_;
634 Alberta::NumberingMap< dimension, Alberta::Generic2AlbertaNumbering > genericNumberingMap_;
636 DofNumbering dofNumbering_;
638 LevelProvider levelProvider_;
648 mutable std::vector< typename GridFamily::LevelIndexSetImp * > levelIndexVec_;
652 mutable typename GridFamily::LeafIndexSetImp* leafIndexSet_;
654 SizeCache< This > sizeCache_;
656 typedef AlbertaMarkerVector< dim, dimworld > MarkerVector;
659 mutable MarkerVector leafMarkerVector_;
662 mutable std::vector< MarkerVector > levelMarkerVector_;
664#if DUNE_ALBERTA_CACHE_COORDINATES
665 Alberta::CoordCache< dimension > coordCache_;
669 AdaptationState adaptationState_;
674#include "albertagrid.cc"
680#ifdef _ABS_NOT_DEFINED_
684#ifdef _MIN_NOT_DEFINED_
688#ifdef _MAX_NOT_DEFINED_
692#if DUNE_ALBERTA_VERSION >= 0x300
693#ifdef obstack_chunk_alloc
694#undef obstack_chunk_alloc
696#ifdef obstack_chunk_free
697#undef obstack_chunk_free
747#ifdef DEBUG_TEST_EXIT
748#undef DEBUG_TEST_EXIT
interfaces and wrappers needed for the callback adaptation provided by AlbertaGrid and ALUGrid
provides the GridFamily for AlbertaGrid
Implementation of the IntersectionIterator for AlbertaGrid.
EntityPointer implementation for AlbertaGrid.
Definition: entitypointer.hh:29
Definition: hierarchiciterator.hh:29
hierarchic index set of AlbertaGrid
Definition: indexsets.hh:515
[ provides Dune::Grid ]
Definition: agrid.hh:140
const CollectiveCommunication & comm() const
return reference to collective communication, if MPI found this is specialisation for MPI
Definition: agrid.hh:458
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator leafbegin() const
return LeafIterator which points to first leaf entity
Traits::template Codim< cd >::template Partition< pitype >::LevelIterator lend(int level) const
one past the end on this level
Traits::template Partition< pitype >::LevelGridView levelView(int level) const
View for a grid level.
Definition: agrid.hh:391
bool writeGrid(const std::string &filename, ctype time) const
write Grid to file in specified GrapeIOFileFormatType
Definition: albertagrid.cc:580
Traits::template Codim< EntitySeed::codimension >::EntityPointer entityPointer(const EntitySeed &seed) const
obtain EntityPointer from EntitySeed.
Definition: agrid.hh:473
int maxLevel() const
Definition: albertagrid.cc:487
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.
bool readGrid(const std::string &filename, ctype &time)
read Grid from file filename and store time of mesh in time
Definition: albertagrid.cc:604
Traits::template Partition< All_Partition >::LevelGridView levelView(int level) const
View for a grid level for All_Partition.
Definition: agrid.hh:409
Traits::template Codim< codim >::LevelIterator lend(int level) const
one past the end on this level
bool adapt()
Refine all positive marked leaf entities, coarsen all negative marked entities if possible.
Definition: albertagrid.cc:413
bool readGridXdr(const std::string &filename, ctype &time)
reads ALBERTA mesh file
Definition: albertagrid.cc:635
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:506
AlbertaGridFamily< dim, dimworld > GridFamily
the grid family of AlbertaGrid
Definition: agrid.hh:173
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:524
size_t numBoundarySegments() const
number of boundary segments within the macro grid
Definition: agrid.hh:383
Traits::template Partition< pitype >::LeafGridView leafView() const
View for the leaf grid.
Definition: agrid.hh:400
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:494
Traits::HierarchicIndexSet HierarchicIndexSet
type of hierarchic index set
Definition: agrid.hh:189
const Traits::LeafIndexSet & leafIndexSet() const
return leaf index set
Definition: albertagrid.cc:539
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator leafend() const
return LeafIterator which points behind last leaf entity
Traits::template Codim< cd >::template Partition< pitype >::LevelIterator lbegin(int level) const
Iterator to first entity of given codim on level.
Traits::template Partition< All_Partition >::LeafGridView leafView() const
View for the leaf grid for All_Partition.
Definition: agrid.hh:417
const GlobalIdSet & globalIdSet() const
return global IdSet
Definition: agrid.hh:500
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
~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:197
marker assigning subentities to one element containing them
Definition: treeiterator.hh:30
Store a reference to an entity with a minimal memory footprint.
Definition: entityseed.hh:24
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:25
bool mark(int refCount, const typename Traits ::template Codim< 0 >::Entity &e)
Marks an entity to be refined/coarsened in a subsequent adapt.
Definition: grid.hh:1121
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: grid.hh:1133
static ReturnImplementationType< InterfaceType >::ImplementationType & getRealImplementation(InterfaceType &i)
return real implementation of interface class
Definition: grid.hh:1223
Provide a generic factory class for unstructured grids.
Definition: gridfactory.hh:263
Id Set Interface.
Definition: indexidset.hh:403
Index Set Interface base class.
Definition: indexidset.hh:78
Default exception if a function was called while the object is not in a valid state for that function...
Definition: exceptions.hh:307
A reference counting smart pointer.
Definition: shared_ptr.hh:64
Different resources needed by all grid implementations.
Provide a generic factory class for unstructured grids.
Implements a matrix constructed from a given type representing a field and compile-time given number ...
Implements a vector constructed from a given type representing a field and a compile-time given size.
#define DUNE_THROW(E, m)
Definition: exceptions.hh:244
Dune namespace.
Definition: alignment.hh:14
Implements an utility class that provides collective communication methods for sequential programs.
Provides size cache classes to implement the grids size method efficiently.
Standard Dune debug streams.
Interface class for vertex projection at the boundary.
Definition: boundaryprojection.hh:24
Contains #undefs for all preprocessor macros defined by alberta.
Contains #undefs for all preprocessor macros defined by alberta.