3 #ifndef DUNE_DGFPARSERYASP_HH
4 #define DUNE_DGFPARSERYASP_HH
16 template<
class Gr
idImp,
class IntersectionImp >
55 dwarn <<
"GridParameterBlock: found keyword `overlap' but no value, defaulting to `" <<
_overlap <<
"' !\n";
65 dwarn <<
"YaspGridParameterBlock: Parameter 'overlap' not specified, "
66 <<
"defaulting to '" <<
_overlap <<
"'." << std::endl;
89 typedef FieldVector< double, dimension > Point;
96 generate( input, comm );
102 std::ifstream input( filename.c_str() );
103 generate( input, comm );
108 delete boundaryDomainBlock_;
116 template <
class Intersection>
121 template <
class Intersection>
124 if( boundaryDomainBlock_->isactive() )
126 std::vector< Point > corners;
127 getCorners( intersection.
geometry(), corners );
128 const dgf::DomainData *data = boundaryDomainBlock_->contains( corners );
138 template<
int codim >
147 return boundaryDomainBlock_->hasParameter();
150 template<
class GG,
class II >
156 std::vector< Point > corners;
157 getCorners( intersection.
geometry(), corners );
158 const dgf::DomainData *data = boundaryDomainBlock_->contains( corners );
168 template<
class Entity >
177 template<
class Geometry >
178 static void getCorners (
const Geometry &geometry, std::vector< Point > &corners )
180 corners.resize( geometry.
corners() );
181 for(
int i = 0; i < geometry.
corners(); ++i )
185 corners[ i ][ j ] = corner[ j ];
190 dgf::BoundaryDomBlock *boundaryDomainBlock_;
191 std::vector<double> emptyParam;
195 inline void DGFGridFactory< YaspGrid< dim > >
196 ::generate ( std::istream &gridin, MPICommunicatorType comm )
198 dgf::IntervalBlock intervalBlock( gridin );
200 if( !intervalBlock.isactive() )
201 DUNE_THROW( DGFException,
"YaspGrid can only be created from an interval block." );
203 if( intervalBlock.numIntervals() != 1 )
204 DUNE_THROW( DGFException,
"YaspGrid can only handle 1 interval block." );
206 if( intervalBlock.dimw() != dim )
208 DUNE_THROW( DGFException,
209 "Cannot read an interval of dimension " << intervalBlock.dimw()
210 <<
" into a YaspGrid< " << dim <<
" >." );
213 const dgf::IntervalBlock::Interval &interval = intervalBlock.get( 0 );
215 FieldVector<double,dim> lang;
217 for(
int i = 0; i < dim; ++i )
220 if( fabs( interval.p[ 0 ][ i ] ) > 1e-10 )
222 DUNE_THROW( DGFException,
223 "YaspGrid cannot handle grids with non-zero left lower corner." );
226 lang[ i ] = interval.p[ 1 ][ i ] - interval.p[ 0 ][ i ];
227 anz[ i ] = interval.n[ i ];
230 typedef dgf::PeriodicFaceTransformationBlock::AffineTransformation Transformation;
231 dgf::PeriodicFaceTransformationBlock trafoBlock( gridin, dim );
232 std::bitset< dim > per;
233 const int numTrafos = trafoBlock.numTransformations();
234 for(
int k = 0; k < numTrafos; ++k )
236 const Transformation &trafo = trafoBlock.transformation( k );
238 bool identity =
true;
239 for(
int i = 0; i < dim; ++i )
240 for(
int j = 0; j < dim; ++j )
241 identity &= (fabs( (i == j ? 1.0 : 0.0) - trafo.matrix( i, j ) ) < 1e-10);
243 DUNE_THROW( DGFException,
"YaspGrid can only handle shifts as periodic face transformations." );
247 for(
int i = 0; i < dim; ++i )
249 if( fabs( trafo.shift[ i ] ) < 1e-10 )
254 if( (numDirs != 1) || (fabs( fabs( trafo.shift[ dir ] ) - lang[ dir ] ) >= 1e-10) )
256 std::cerr <<
"Tranformation '" << trafo
257 <<
"' does not map boundaries on boundaries." << std::endl;
264 dgf::YaspGridParameterBlock grdParam( gridin );
267 grid_ =
new YaspGrid< dim >( comm, lang, anz, per, grdParam.overlap() );
269 grid_ =
new YaspGrid< dim >( lang, anz, per, grdParam.overlap() );
272 boundaryDomainBlock_ =
new dgf::BoundaryDomBlock( gridin, dimension );
283 #endif // #ifndef DUNE_DGFPARSERYASP_HH
MPIHelper::MPICommunicator MPICommunicatorType
Definition: dgfyasp.hh:86
bool findtoken(std::string token)
Definition: basic.cc:121
Some simple static information for a given GridType.
Definition: io/file/dgfparser/dgfparser.hh:54
static double refineWeight()
Definition: dgfyasp.hh:278
std::vector< double > & parameter(const Entity &entity)
Definition: dgfyasp.hh:169
int overlap() const
get dimension of world found in block
Definition: dgfyasp.hh:72
bool haveBoundaryParameters() const
Definition: dgfgridfactory.hh:156
Wrapper class for entities.
Definition: common/entity.hh:56
exception class for IO errors in the DGF parser
Definition: dgfexception.hh:12
Grid parameters for YaspGridThe YaspGridParameter class is in charge of passing parameters specific t...
Definition: dgfyasp.hh:36
[ provides Dune::Grid ]
Definition: yaspgrid.hh:62
G Grid
Definition: dgfgridfactory.hh:37
DGFGridFactory(const std::string &filename, MPICommunicatorType comm=MPIHelper::getCommunicator())
Definition: dgfyasp.hh:99
Wrapper class for geometries.
Definition: common/geometry.hh:101
Common Grid parametersFor each grid implementation there is a set of parameters that can be passed vi...
Definition: gridparameter.hh:31
Grid * grid() const
Definition: dgfyasp.hh:111
int _overlap
Definition: dgfyasp.hh:40
bool getnextentry(ENTRY &entry)
Definition: basic.hh:61
The dimension of the grid.
Definition: common/grid.hh:400
Geometry geometry() const
geometrical information about the intersection in global coordinates.
Definition: common/intersection.hh:343
YaspGridParameterBlock(std::istream &in)
constructor taking istream
Definition: dgfyasp.hh:44
static int refineStepsForHalf()
Definition: dgfyasp.hh:277
FieldVector< ctype, cdim > GlobalCoordinate
type of the global coordinates
Definition: common/geometry.hh:136
std::string type
type of additional boundary parameters
Definition: parser.hh:23
bool wasInserted(const Intersection &intersection) const
Definition: dgfyasp.hh:117
static const int dimension
Definition: dgfgridfactory.hh:38
int boundaryId(const Intersection &intersection) const
Definition: dgfyasp.hh:122
~DGFGridFactory()
Definition: dgfyasp.hh:106
MPIHelper::MPICommunicator MPICommunicatorType
Definition: dgfgridfactory.hh:39
int corners() const
Return the number of corners of the reference element.
Definition: common/geometry.hh:162
Intersection of a mesh entities of codimension 0 ("elements") with a "neighboring" element or with th...
Definition: albertagrid/dgfparser.hh:26
bool haveBoundaryParameters() const
Definition: dgfyasp.hh:145
int indexInInside() const
Local index of codim 1 entity in the inside() entity where intersection is contained in...
Definition: common/intersection.hh:363
int numParameters() const
Definition: dgfyasp.hh:139
DGFGridFactory(std::istream &input, MPICommunicatorType comm=MPIHelper::getCommunicator())
Definition: dgfyasp.hh:93
int id() const
Definition: boundarydom.hh:40
const DGFBoundaryParameter::type & boundaryParameter(const Intersection< GG, II > &intersection) const
Definition: dgfyasp.hh:152
Definition: boundarydom.hh:20
YaspGrid< dim > Grid
Definition: dgfyasp.hh:84
static const type & defaultValue()
default constructor
Definition: parser.hh:26
GlobalCoordinate corner(int i) const
Obtain a corner of the geometry.
Definition: common/geometry.hh:176
Definition: boundarydom.hh:191
const BoundaryParameter & parameter() const
Definition: boundarydom.hh:52