3 #ifndef DUNE_ALU3DGRIDMAPPINGS_HH
4 #define DUNE_ALU3DGRIDMAPPINGS_HH
11 #include <dune/common/fvector.hh>
12 #include <dune/common/fmatrix.hh>
13 #include <dune/common/exceptions.hh>
22 template<
int mydim,
int coorddim,
class Gr
idImp>
25 template< ALU3dGr
idElementType,
class >
34 typedef FieldVector<alu3d_ctype, 3>
coord_t;
35 typedef FieldMatrix<alu3d_ctype, 3, 3>
mat_t;
37 static const double _epsilon ;
52 void linear (
const coord_t&) ;
53 void inverse (
const coord_t&) ;
56 const coord_t&,
const coord_t&,
57 const coord_t&,
const coord_t&,
58 const coord_t&,
const coord_t&);
69 void map2world (
const coord_t&, coord_t&)
const ;
72 void world2map (
const coord_t&, coord_t&) ;
74 template <
class vector_t>
76 const vector_t&,
const vector_t&,
77 const vector_t&,
const vector_t&,
78 const vector_t&,
const vector_t&);
81 inline bool affine ()
const {
return affine_; }
117 void normal(
const coord2_t&, coord3_t&)
const ;
126 template <
class vector_t>
127 void buildMapping (
const vector_t & ,
const vector_t & ,
128 const vector_t & ,
const vector_t & );
132 template <
class vector_t>
133 void buildMapping (
const vector_t & ,
const vector_t & ,
134 const vector_t & ,
const vector_t & ,
160 typedef FieldMatrix<alu3d_ctype,3,3>
mat3_t;
166 typedef FieldMatrix<alu3d_ctype,3,2>
inv_t;
188 const coord3_t&,
const coord3_t&) ;
191 const double3_t &,
const double3_t &) ;
195 void inverse (
const coord3_t&)
const;
204 void world2map(
const coord3_t &, coord2_t & )
const;
208 void map2world(
const coord2_t&, coord3_t&)
const ;
218 template <
class vector_t>
219 void buildMapping (
const vector_t & ,
const vector_t & ,
220 const vector_t & ,
const vector_t & );
233 typedef FieldVector< ctype, 2 >
map_t;
236 typedef FieldMatrix< ctype, cdim, 2 >
inv_t;
253 const world_t &p2,
const world_t &p3 );
254 BilinearMapping (
const ctype (&p0)[ cdim ],
const ctype (&p1)[ cdim ],
255 const ctype (&p2)[ cdim ],
const ctype (&p3)[ cdim ] );
259 void world2map (
const world_t &, map_t & )
const;
260 void map2world (
const ctype x,
const ctype y, world_t &w )
const;
261 void map2world (
const map_t &, world_t & )
const;
263 ctype
det (
const map_t & )
const;
268 template<
class vector_t >
270 const vector_t &,
const vector_t & );
274 static void multMatrix (
const matrix_t &,
const FieldMatrix< ctype, 2, 2 > &, inv_t & );
277 void inverse (
const map_t & )
const;
283 template<
int cdim,
int mydim >
292 typedef FieldVector< ctype, mydim >
map_t;
294 typedef FieldMatrix< ctype, mydim, cdim >
matrix_t;
295 typedef FieldMatrix< ctype, cdim, mydim >
inv_t;
319 inline bool affine ()
const {
return true ; }
328 ctype
det(
const map_t&)
const;
331 void world2map(
const world_t &, map_t &)
const;
335 void map2world(
const map_t &, world_t &)
const ;
339 void inverse (
const map_t&)
const;
348 FieldMatrix<ctype, mydim, mydim>& result)
const;
351 const FieldMatrix< ctype, mydim, mydim> &B,
357 template <
class vector_t>
358 void buildMapping (
const vector_t & ,
const vector_t & ,
359 const vector_t & ,
const vector_t & );
363 template <
class vector_t>
364 void buildMapping (
const vector_t & ,
const vector_t & ,
369 template <
class vector_t>
370 void buildMapping (
const vector_t & ,
const vector_t & );
372 template <
class vector_t>
386 template< ALU3dGr
idElementType type,
class Comm >
390 template<
class Comm >
398 : rule_( rule ), nChild_( nChild )
401 void child2parent (
const CoordinateType &childCoordinates,
402 CoordinateType &parentCoordinates)
const;
404 CoordinateType child2parent (
const FieldVector< alu3d_ctype, 2 > &childCoordinates )
const;
407 void child2parentNosplit(
const CoordinateType& childCoordinates,
408 CoordinateType& parentCoordinates)
const;
409 void child2parentE01(
const CoordinateType& childCoordinates,
410 CoordinateType& parentCoordinates)
const;
411 void child2parentE12(
const CoordinateType& childCoordinates,
412 CoordinateType& parentCoordinates)
const;
413 void child2parentE20(
const CoordinateType& childCoordinates,
414 CoordinateType& parentCoordinates)
const;
415 void child2parentIso4(
const CoordinateType& childCoordinates,
416 CoordinateType& parentCoordinates)
const;
418 RefinementRuleType rule_;
423 template<
class Comm >
431 : rule_( rule ), nChild_( nChild )
434 void child2parent (
const CoordinateType &childCoordinates,
435 CoordinateType &parentCoordinates)
const;
437 CoordinateType child2parent (
const FieldVector< alu3d_ctype, 2 > &childCoordinates )
const;
440 void child2parentNosplit(
const CoordinateType& childCoordinates,
441 CoordinateType& parentCoordinates)
const;
442 void child2parentIso4(
const CoordinateType& childCoordinates,
443 CoordinateType& parentCoordinates)
const;
445 RefinementRuleType rule_;
451 #if COMPILE_ALUGRID_INLINE
452 #include "mappings_imp.cc"
FieldVector< ctype, cdim > world_t
Definition: mappings.hh:232
mat3_t Dfi
Definition: mappings.hh:170
alu3d_ctype _b[4][3]
Definition: mappings.hh:168
void normal(const coord2_t &, coord3_t &) const
mat3_t Df
Definition: mappings.hh:170
FieldMatrix< ctype, 2, cdim > matrix_t
Definition: mappings.hh:235
A linear mapping.
Definition: mappings.hh:284
void multTransposedMatrix(const matrix_t &matrix, FieldMatrix< ctype, mydim, mydim > &result) const
Definition: alu3dinclude.hh:201
FieldMatrix< alu3d_ctype, 3, 3 > mat_t
Definition: mappings.hh:35
SurfaceNormalCalculator BaseType
Definition: mappings.hh:147
const matrix_t & jacobianTransposed(const map_t &) const
~BilinearSurfaceMapping()
Definition: mappings.hh:193
FieldVector< alu3d_ctype, 3 > coord_t
Definition: mappings.hh:34
bool calcedInv_
Definition: mappings.hh:248
bool affine_
Definition: mappings.hh:245
static const double _epsilon
Definition: mappings.hh:102
alu3d_ctype det(const coord_t &)
NonConformingFaceMapping(RefinementRuleType rule, int nChild)
Definition: mappings.hh:430
void inverse(const map_t &) const
coord3_t normal_
Definition: mappings.hh:175
A bilinear surface mapping.
Definition: mappings.hh:144
FieldVector< alu3d_ctype, 3 > CoordinateType
Definition: mappings.hh:394
ctype det(const map_t &) const
void inverseCodimOne(const map_t &) const
void map2world(const coord2_t &, coord3_t &) const
alu3d_ctype ctype
Definition: mappings.hh:287
SurfaceNormalCalculator()
Constructor creating empty mapping with double , i.e. zero.
matrix_t matrix_
Definition: mappings.hh:242
bool _calcedInv
Definition: mappings.hh:178
void inverse(const map_t &) const
FieldVector< alu3d_ctype, 3 > coord3_t
Definition: mappings.hh:93
FieldVector< ctype, cdim > world_t
Definition: mappings.hh:291
bool affine() const
Definition: mappings.hh:114
const inv_t & jacobianInverseTransposed(const map_t &) const
~TrilinearMapping()
Definition: mappings.hh:65
bool calcedMatrix_
Definition: mappings.hh:246
NonConformingFaceMapping(RefinementRuleType rule, int nChild)
Definition: mappings.hh:397
FieldVector< alu3d_ctype, 2 > coord2_t
Definition: mappings.hh:154
ALU3dImplTraits< hexa, Comm >::HfaceRuleType RefinementRuleType
Definition: mappings.hh:428
FieldMatrix< alu3d_ctype, 2, 3 > matrix_t
Definition: mappings.hh:163
void buildMapping(const vector_t &, const vector_t &, const vector_t &, const vector_t &, const vector_t &, const vector_t &, const vector_t &, const vector_t &)
void map2world(const coord_t &, coord_t &) const
bool _calcedInv
true if inverse has been calculated
Definition: mappings.hh:306
FieldVector< alu3d_ctype, 2 > CoordinateType
Definition: mappings.hh:427
A bilinear mapping.
Definition: mappings.hh:227
const matrix_t & jacobianTransposed(const coord2_t &) const
matrix_t _matrix
transformation matrix (transposed)
Definition: mappings.hh:298
bool _calcedMatrix
Definition: mappings.hh:180
A bilinear surface mapping.
Definition: mappings.hh:89
void world2map(const world_t &, map_t &) const
alu3d_ctype det(const coord2_t &) const
FieldVector< ctype, mydim > map_t
Definition: mappings.hh:292
FieldVector< ctype, 2 > map_t
Definition: mappings.hh:233
inv_t invTransposed_
Definition: mappings.hh:171
bool _calcedDet
true if determinant has been calculated
Definition: mappings.hh:309
Definition: topology.hh:13
void buildMapping(const vector_t &, const vector_t &, const vector_t &, const vector_t &)
bool affine() const
Definition: mappings.hh:319
Definition: alugrid/3d/entity.hh:28
FieldMatrix< alu3d_ctype, 3, 2 > inv_t
Definition: mappings.hh:166
bool _affine
Definition: mappings.hh:104
inv_t _invTransposed
storage for inverse of jacobian (transposed)
Definition: mappings.hh:299
void buildMapping(const vector_t &, const vector_t &, const vector_t &, const vector_t &)
void map2world(const ctype x, const ctype y, world_t &w) const
void buildMapping(const vector_t &, const vector_t &, const vector_t &, const vector_t &)
alu3d_ctype double3_t[3]
Definition: mappings.hh:97
void multMatrix(const matrix_t &A, const FieldMatrix< ctype, mydim, mydim > &B, inv_t &ret) const
const inv_t & jacobianInverseTransposed(const coord2_t &) const
FieldMatrix< ctype, cdim, mydim > inv_t
Definition: mappings.hh:295
ALU3dImplTraits< tetra, Comm >::HfaceRuleType RefinementRuleType
Definition: mappings.hh:395
bool calcedDet_
Definition: mappings.hh:247
const inv_t & jacobianInverseTransposed(const map_t &) const
void inverse(const coord3_t &) const
FieldVector< alu3d_ctype, 2 > coord2_t
Definition: mappings.hh:94
FieldVector< alu3d_ctype, 3 > coord3_t
Definition: mappings.hh:153
bool affine() const
Definition: mappings.hh:81
LinearMapping()
Constructor creating empty mapping with double , i.e. zero.
void negativeNormal(const coord2_t &, coord3_t &) const
ctype double_t[cdim]
Definition: mappings.hh:289
world_t _p0
Definition: mappings.hh:300
Definition: mappings.hh:387
static const double _epsilon
Definition: mappings.hh:150
TrilinearMapping()
Definition: mappings.hh:61
double alu3d_ctype
Definition: alu3dinclude.hh:59
const matrix_t & jacobianTransposed(const map_t &) const
matrix_t matrix_
Definition: mappings.hh:172
FieldMatrix< alu3d_ctype, 3, 3 > mat3_t
Definition: mappings.hh:160
const mat_t & jacobianTransposed(const coord_t &)
ctype _b[4][cdim]
Definition: mappings.hh:239
ctype _det
P[0].
Definition: mappings.hh:303
ctype det(const map_t &) const
FieldMatrix< ctype, cdim, 2 > inv_t
Definition: mappings.hh:236
void world2map(const coord3_t &, coord2_t &) const
inv_t invTransposed_
Definition: mappings.hh:243
BilinearSurfaceMapping()
Constructor creating empty mapping with double , i.e. zero.
Definition: topology.hh:13
[ provides Dune::Grid ]
Definition: alugrid/3d/entity.hh:36
Definition: mappings.hh:30
coord3_t tmp_
Definition: mappings.hh:176
void world2map(const coord_t &, coord_t &)
alu3d_ctype double_t[3]
Definition: mappings.hh:33
static void multTransposedMatrix(const matrix_t &, FieldMatrix< ctype, 2, 2 > &)
bool _calcedTransposed
Definition: mappings.hh:179
static const alu3d_ctype ALUnumericEpsilon
Definition: mappings.hh:20
void buildMapping(const vector_t &, const vector_t &, const vector_t &, const vector_t &)
Include standard header files.
Definition: agrid.hh:59
void world2map(const world_t &, map_t &) const
const mat_t & jacobianInverseTransposed(const coord_t &)
~SurfaceNormalCalculator()
Definition: mappings.hh:111
alu3d_ctype DetDf
Definition: mappings.hh:173
ctype det_
Definition: mappings.hh:241
alu3d_ctype ctype
Definition: mappings.hh:230
FieldMatrix< ctype, mydim, cdim > matrix_t
Definition: mappings.hh:294
void calculateDeterminant(const map_t &) const
void map2worldlinear(const ctype, const ctype) const
static void multMatrix(const matrix_t &, const FieldMatrix< ctype, 2, 2 > &, inv_t &)
alu3d_ctype _n[3][3]
Definition: mappings.hh:100
void map2world(const map_t &, world_t &) const