3 #ifndef DUNE_ALBERTA_DGFPARSER_HH
4 #define DUNE_ALBERTA_DGFPARSER_HH
8 #include <dune/grid/albertagrid.hh>
11 #include <dune/grid/io/file/dgfparser/dgfparser.hh>
12 #include <dune/grid/io/file/dgfparser/blocks/projection.hh>
14 #include <dune/grid/common/intersection.hh>
15 #include <dune/grid/io/file/dgfparser/parser.hh>
25 template<
class Gr
idImp,
class IntersectionImp >
33 template<
int dim,
int dimworld >
34 struct DGFGridFactory< AlbertaGrid< dim, dimworld > >
36 typedef AlbertaGrid<dim,dimworld> Grid;
39 typedef typename Grid::template Codim<0>::Entity Element;
40 typedef typename Grid::template Codim<dimension>::Entity Vertex;
43 explicit DGFGridFactory ( std::istream &input,
45 explicit DGFGridFactory (
const std::string &filename,
53 template<
class Intersection >
54 bool wasInserted (
const Intersection &intersection )
const
56 return factory_.wasInserted( intersection );
59 template<
class Intersection >
60 int boundaryId (
const Intersection &intersection )
const
62 return Grid::getRealImplementation( intersection ).boundaryId();
66 bool haveBoundaryParameters ()
const
68 return dgf_.haveBndParameters;
71 template <
class GG,
class II >
73 boundaryParameter (
const Intersection< GG, II > & intersection )
const
78 const int face = intersection.indexInInside();
80 const ReferenceElement< double, dimension > & refElem =
82 int corners = refElem.size( face, 1, dimension );
83 std :: vector< unsigned int > bound( corners );
84 for(
int i=0; i < corners; ++i )
86 const int k = refElem.subEntity( face, 1, i, dimension );
87 bound[ i ] = factory_.insertionIndex( *entity.template subEntity< dimension >( k ) );
90 DuneGridFormatParser::facemap_t::key_type key( bound,
false );
91 const DuneGridFormatParser::facemap_t::const_iterator pos = dgf_.facemap.find( key );
92 if( pos != dgf_.facemap.end() )
93 return dgf_.facemap.find( key )->second.second;
99 int numParameters ()
const
102 return dgf_.nofelparams;
103 else if( codim == dimension )
104 return dgf_.nofvtxparams;
109 std::vector< double > ¶meter (
const Element &element )
111 if( numParameters< 0 >() <= 0 )
114 "Calling DGFGridFactory::parameter is only allowed if there are parameters." );
116 return dgf_.elParams[ factory_.insertionIndex( element ) ];
119 std::vector< double > ¶meter (
const Vertex &vertex )
121 if( numParameters< dimension >() <= 0 )
124 "Calling DGFGridFactory::parameter is only allowed if there are parameters." );
126 return dgf_.vtxParams[ factory_.insertionIndex( vertex ) ];
130 bool generate( std::istream &input );
133 GridFactory factory_;
134 DuneGridFormatParser dgf_;
142 template<
int dim,
int dimworld >
143 struct DGFGridInfo< AlbertaGrid< dim, dimworld > >
161 template<
int dim,
int dimworld >
162 inline DGFGridFactory< AlbertaGrid< dim, dimworld > >
163 ::DGFGridFactory ( std::istream &input, MPICommunicatorType comm )
169 DUNE_THROW(DGFException,
"Error resetting input stream." );
174 template<
int dim,
int dimworld >
175 inline DGFGridFactory< AlbertaGrid< dim, dimworld > >
176 ::DGFGridFactory (
const std::string &filename, MPICommunicatorType comm )
179 std::ifstream input( filename.c_str() );
181 DUNE_THROW( DGFException,
"Macrofile " << filename <<
" not found." );
182 if( !generate( input ) )
183 grid_ =
new AlbertaGrid< dim, dimworld >( filename.c_str() );
specialization of the generic GridFactory for AlbertaGrid
@ dimension
The dimension of the grid.
Definition: grid.hh:400
Intersection of a mesh entities of codimension 0 ("elements") with a "neighboring" element or with th...
Definition: intersection.hh:161
GridImp::template Codim< 0 >::EntityPointer EntityPointer
Pointer to the type of entities that this Intersection belongs to.
Definition: intersection.hh:191
GridImp::template Codim< 0 >::Entity Entity
Type of entity that this Intersection belongs to.
Definition: intersection.hh:188
MPI_Comm MPICommunicator
The type of the mpi communicator.
Definition: mpihelper.hh:174
static MPICommunicator getCommunicator()
get the default communicator
Definition: mpihelper.hh:182
#define DUNE_THROW(E, m)
Definition: exceptions.hh:244
Dune namespace.
Definition: alignment.hh:14
static const type & defaultValue()
default constructor
Definition: parser.hh:26
std::string type
type of additional boundary parameters
Definition: parser.hh:23
static double refineWeight()
static int refineStepsForHalf()
number of globalRefine steps needed to refuce h by 0.5
static const ReferenceElement< ctype, dim > & general(const GeometryType &type)
get general reference elements
Definition: referenceelements.hh:568