8 #include "dgfparser.hh"
16 template<
class Gr
idImp,
class IntersectionImp >
24 template<
int dim,
int dimworld,
class ctype >
34 typedef FieldVector< double, dimension > Point;
42 generate( input, comm );
48 std::ifstream input( filename.c_str() );
49 generate( input, comm );
57 template<
class Intersection >
63 template<
class Intersection >
66 if( boundaryDomainBlock_->isactive() )
68 std::vector< Point > corners;
69 getCorners( intersection.
geometry(), corners );
70 const dgf::DomainData *data = boundaryDomainBlock_->contains( corners );
89 return boundaryDomainBlock_->isactive();
92 template<
class GG,
class II >
98 std::vector< Point > corners;
99 getCorners( intersection.
geometry(), corners );
100 const dgf::DomainData *data = boundaryDomainBlock_->contains( corners );
111 template<
class Entity >
120 template<
class Geometry >
121 static void getCorners (
const Geometry &geometry, std::vector< Point > &corners )
123 corners.resize( geometry.
corners() );
124 for(
int i = 0; i < geometry.
corners(); ++i )
128 corners[ i ][ j ] = corner[ j ];
133 dgf::BoundaryDomBlock *boundaryDomainBlock_;
134 std::vector< double > emptyParam;
139 template<
int dim,
int dimworld,
class ctype >
140 inline void DGFGridFactory< SGrid< dim, dimworld, ctype > >
141 ::generate ( std::istream &gridin, MPICommunicatorType comm )
143 dgf::IntervalBlock intervalBlock( gridin );
145 if( !intervalBlock.isactive() )
146 DUNE_THROW( DGFException,
"SGrid can only be created from an interval block." );
148 if( intervalBlock.numIntervals() != 1 )
149 DUNE_THROW( DGFException,
"SGrid can only handle 1 interval block." );
151 if( intervalBlock.dimw() != dim )
153 DUNE_THROW( DGFException,
154 "Cannot read an interval of dimension " << intervalBlock.dimw()
155 <<
"into a SGrid< " << dim <<
", " << dimworld <<
" >." );
158 const dgf::IntervalBlock::Interval &interval = intervalBlock.get( 0 );
160 FieldVector< double, dimension > lower, upper;
161 FieldVector< int, dimension > anz;
162 for(
int i = 0; i < dimension; ++i )
164 lower[ i ] = interval.p[ 0 ][ i ];
165 upper[ i ] = interval.p[ 1 ][ i ];
166 anz[ i ] = interval.n[ i ];
169 grid_ =
new Grid( anz, lower, upper );
171 boundaryDomainBlock_ =
new dgf::BoundaryDomBlock( gridin, dimension );
176 template<
int dim,
int dimworld,
class ctype >
186 return 1.0 / double( 1 << dim );
191 #endif // #ifndef DUNE_DGFS_HH