Dune Core Modules (2.4.2)

geometry.hh
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_ALU2DGRIDGEOMETRY_HH
4 #define DUNE_ALU2DGRIDGEOMETRY_HH
5 
6 // Dune includes
8 #include <dune/geometry/genericgeometry/topologytypes.hh>
9 
10 #include <dune/grid/alugrid/2d/alu2dinclude.hh>
11 #include <dune/grid/alugrid/3d/mappings.hh>
12 #include <dune/grid/alugrid/common/memory.hh>
13 
14 namespace Dune
15 {
16 
17  // Forward declarations
18  template<int cd, int dim, class GridImp>
19  class ALU2dGridEntity;
20  template<int cd, class GridImp >
21  class ALU2dGridEntityPointer;
22  template<int mydim, int cdim, class GridImp>
23  class ALU2dGridGeometry;
24  template< int dim, int dimworld, ALU2DSPACE ElementType eltype >
25  class ALU2dGrid;
26 
27 
28  template< int mydim, int cdim, ALU2DSPACE ElementType eltype >
29  class MyALU2dGridGeometryImpl;
30 
31  template <int ncorners, class Mapping>
32  class MyALU2dGridGeometryImplBase
33  {
34  private:
35  // prohibited due to reference counting
36  MyALU2dGridGeometryImplBase( const MyALU2dGridGeometryImplBase& );
37 
38  protected:
40  static const int corners_ = ncorners ;
41 
43  typedef Mapping MappingType;
44 
45  typedef typename MappingType::ctype ctype;
46 
47  typedef typename MappingType::map_t map_t;
48  typedef typename MappingType::world_t world_t;
49 
50  typedef typename MappingType::matrix_t matrix_t;
51  typedef typename MappingType::inv_t inv_t;
52 
53  // get my dimension
54  enum { mydim = ncorners < 3 ? ncorners-1 : 2 };
55  typedef ReferenceElement< ctype, mydim > ReferenceElementType ;
56 
58  MappingType mapping_;
59 
61  const ReferenceElementType& referenceElement_ ;
62 
64  double volume_ ;
65 
67  mutable unsigned int refCount_;
68 
70  bool valid_ ;
71 
72  const MappingType& mapping() const
73  {
74  assert( valid() );
75  return mapping_;
76  }
77 
78  public:
80  MyALU2dGridGeometryImplBase( const GeometryType type )
81  : mapping_(),
82  referenceElement_( ReferenceElements< ctype, mydim >::general( type ) ),
83  volume_( 1.0 )
84  {
85  reset();
86  }
87 
89  void reset()
90  {
91  // reset reference counter
92  refCount_ = 1;
93  // reset status
94  valid_ = false ;
95  }
96 
98  void operator ++ () { ++ refCount_; }
99 
101  void operator -- () { assert( refCount_ > 0 ); --refCount_; }
102 
104  bool operator ! () const { return refCount_ == 0; }
105 
107  bool stillUsed () const { return refCount_ > 1 ; }
108 
109  // set status to invalid
110  void invalidate () { valid_ = false ; }
111 
112  // return true if geometry is valid
113  bool valid () const { return valid_; }
114 
115  // return volume
116  double volume() const { return volume_; }
117 
118  // return true if geometry is affine
119  bool affine() const
120  {
121  assert( valid() );
122  return mapping().affine();
123  }
124 
125  // return number of corners
126  int corners () const { return corners_ ; }
127 
128  // return coordinate of the i-th corner
129  world_t corner( int i ) const
130  {
131  world_t coordinate;
132  map2world( referenceElement_.position( i, mydim ), coordinate );
133  return coordinate;
134  }
135 
136  // map from reference to global coordinates
137  void map2world ( const map_t &m, world_t &w ) const
138  {
139  return mapping().map2world( m, w );
140  }
141 
142  // map from global to reference coordinates
143  void world2map ( const world_t &w, map_t &m ) const
144  {
145  return mapping().world2map( w, m );
146  }
147 
148  // return jacobian transposed
149  const matrix_t &jacobianTransposed ( const map_t &m ) const
150  {
151  return mapping().jacobianTransposed( m );
152  }
153 
154  // return jacobian inverse transposed
155  const inv_t &jacobianInverseTransposed ( const map_t &m ) const
156  {
157  return mapping().jacobianInverseTransposed( m );
158  }
159 
160  // return determinante of mapping
161  ctype det ( const map_t &m ) const { return mapping().det( m ); }
162  };
163 
164  // geometry implementation for vertices
165  template< int cdim, ALU2DSPACE ElementType eltype >
166  class MyALU2dGridGeometryImpl< 0, cdim, eltype >
167  : public MyALU2dGridGeometryImplBase< 1, LinearMapping< cdim, 0 > >
168  {
169  typedef MyALU2dGridGeometryImplBase< 1, LinearMapping< cdim, 0 > > BaseType;
170  protected:
171  using BaseType :: mapping_ ;
172  using BaseType :: valid_ ;
173 
174  public:
175  using BaseType :: valid ;
176  using BaseType :: invalidate ;
177  using BaseType :: corners ;
178 
179  typedef typename BaseType :: ctype ctype ;
180  typedef typename BaseType :: map_t map_t ;
181 
182  // default constructor
183  MyALU2dGridGeometryImpl () : BaseType( type() ) {}
184 
185  GeometryType type () const
186  {
187  return GeometryType(
188  (eltype == ALU2DSPACE triangle ?
189  GenericGeometry :: SimplexTopology< 0 > :: type :: id :
190  GenericGeometry :: CubeTopology < 0 > :: type :: id),
191  0 );
192  }
193 
194  // update geometry coordinates
195  template< class Vector >
196  void update ( const Vector &p0 )
197  {
198  mapping_.buildMapping( p0 );
199  valid_ = true ;
200  }
201 
202  // return determinante of mapping
203  ctype det ( const map_t &m ) const { return 1.0; }
204  };
205 
206  // geometry implementation for lines
207  template< int cdim, ALU2DSPACE ElementType eltype >
208  class MyALU2dGridGeometryImpl< 1, cdim, eltype >
209  : public MyALU2dGridGeometryImplBase< 2, LinearMapping< cdim, 1 > >
210  {
211  typedef MyALU2dGridGeometryImplBase< 2, LinearMapping< cdim, 1 > > BaseType;
212  protected:
213  using BaseType :: mapping_ ;
214  using BaseType :: valid_ ;
215  using BaseType :: volume_ ;
216  using BaseType :: corners_ ;
217 
218  public:
219  using BaseType :: valid ;
220  using BaseType :: invalidate ;
221  using BaseType :: corners ;
222 
223  typedef typename BaseType :: ctype ctype ;
224  typedef typename BaseType :: map_t map_t ;
225 
226  // default constructor
227  MyALU2dGridGeometryImpl () : BaseType( type() ) {}
228 
229  GeometryType type () const
230  {
231  return GeometryType(
232  (eltype == ALU2DSPACE triangle ?
233  GenericGeometry :: SimplexTopology< 1 > :: type :: id :
234  GenericGeometry :: CubeTopology < 1 > :: type :: id),
235  1 );
236  }
237 
238  // update geometry in father coordinates
239  template< class Geo, class LocalGeo >
240  void updateLocal ( const Geo &geo, const LocalGeo &localGeo )
241  {
242  assert( localGeo.corners() == corners_ );
243  // compute the local coordinates in father refelem
244  FieldMatrix< alu2d_ctype, corners_, cdim > coord;
245  for( int i = 0; i < corners_; ++i )
246  {
247  // calculate coordinate
248  coord[ i ] = geo.local( localGeo.corner( i ) );
249  // to avoid rounding errors
250  for( int j = 0; j < cdim; ++j )
251  coord[ i ][ j ] = (coord[ i ][ j ] < 1e-14 ? 0 : coord[ i ][ j ]);
252  }
253  mapping_.buildMapping( coord[ 0 ], coord[ 1 ] );
254  volume_ = mapping_.det( map_t(0.25) );
255  valid_ = true ;
256  }
257 
258  // update geometry coordinates
259  template< class Vector >
260  void update ( const Vector &p0, const Vector &p1, const double volume )
261  {
262  mapping_.buildMapping( p0, p1 );
263  volume_ = volume ;
264  valid_ = true ;
265  }
266 
267  // return determinante of mapping
268  ctype det ( const map_t &m ) const { return volume_; }
269  };
270 
271  // geometry implementation for triangles
272  template< int cdim >
273  class MyALU2dGridGeometryImpl< 2, cdim, ALU2DSPACE triangle >
274  : public MyALU2dGridGeometryImplBase< 3, LinearMapping< cdim, 2 > >
275  {
276  typedef MyALU2dGridGeometryImplBase< 3, LinearMapping< cdim, 2 > > BaseType;
277  protected:
278  using BaseType :: mapping_ ;
279  using BaseType :: valid_ ;
280  using BaseType :: volume_ ;
281  using BaseType :: corners_ ;
282  using BaseType :: referenceElement_;
283 
284  public:
285  using BaseType :: valid ;
286  using BaseType :: invalidate ;
287  using BaseType :: corners ;
288 
289  typedef typename BaseType :: ctype ctype ;
290  typedef typename BaseType :: map_t map_t ;
291 
292  // default constructor
293  MyALU2dGridGeometryImpl () : BaseType( type() )
294  {
295  // if this assertion fails change factor in method det below
296  assert( std::abs( referenceElement_.volume() - 0.5 ) < 1e-10 );
297  }
298 
299  GeometryType type () const
300  {
301  return GeometryType( GenericGeometry :: SimplexTopology< 2 > :: type :: id , 2 );
302  }
303 
304  // update geometry in father coordinates
305  template< class Geo, class LocalGeo >
306  void updateLocal ( const Geo &geo, const LocalGeo &localGeo )
307  {
308  assert( localGeo.corners() == corners_ );
309  // compute the local coordinates in father refelem
310  FieldMatrix< alu2d_ctype, corners_, cdim > coord;
311  for( int i = 0; i < corners_; ++i )
312  {
313  // calculate coordinate
314  coord[ i ] = geo.local( localGeo.corner( i ) );
315  // to avoid rounding errors
316  for( int j = 0; j < cdim; ++j )
317  coord[ i ][ j ] = (coord[ i ][ j ] < 1e-14 ? 0 : coord[ i ][ j ]);
318  }
319  mapping_.buildMapping( coord[ 0 ], coord[ 1 ], coord[ 2 ] );
320  // set volume to a fraction of the reference volume which is 0.5
321  volume_ = referenceElement_.volume() * ( localGeo.volume() / geo.volume() );
322  assert( (volume_ > 0.0) && (volume_ < referenceElement_.volume() ) );
323  valid_ = true ;
324  }
325 
326  template< class HElement >
327  void update ( const HElement &item )
328  {
329  mapping_.buildMapping( item.getVertex( 0 )->coord(), item.getVertex( 1 )->coord(),
330  item.getVertex( 2 )->coord() );
331  volume_ = item.area();
332  valid_ = true ;
333  }
334 
335  // return determinante of mapping
336  ctype det ( const map_t &m ) const
337  {
338  return 2.0 * volume_ ;
339  }
340  };
341 
342  // geometry implementation for quadrilaterals
343  template< int cdim >
344  class MyALU2dGridGeometryImpl< 2, cdim, ALU2DSPACE quadrilateral >
345  : public MyALU2dGridGeometryImplBase< 4, BilinearMapping< cdim > >
346  {
347  typedef MyALU2dGridGeometryImplBase< 4, BilinearMapping< cdim > > BaseType;
348  protected:
349  using BaseType :: mapping_ ;
350  using BaseType :: valid_ ;
351  using BaseType :: volume_ ;
352  using BaseType :: corners_ ;
353  using BaseType :: referenceElement_;
354 
355  public:
356  using BaseType :: valid ;
357  using BaseType :: invalidate ;
358  using BaseType :: corners ;
359 
360  // default constructor
361  MyALU2dGridGeometryImpl () : BaseType( type() ) {}
362 
363  GeometryType type () const
364  {
365  return GeometryType( GenericGeometry :: CubeTopology< 2 > :: type :: id, 2 ) ;
366  }
367 
368  // update geometry in father coordinates
369  template< class Geo, class LocalGeo >
370  void updateLocal ( const Geo &geo, const LocalGeo &localGeo )
371  {
372  assert( localGeo.corners() == corners_ );
373  // compute the local coordinates in father refelem
374  FieldMatrix< alu2d_ctype, corners_, cdim > coord;
375  for( int i = 0; i < corners_; ++i )
376  {
377  // calculate coordinate
378  coord[ i ] = geo.local( localGeo.corner( i ) );
379  // to avoid rounding errors
380  for( int j = 0; j < cdim; ++j )
381  coord[ i ][ j ] = (coord[ i ][ j ] < 1e-14 ? 0 : coord[ i ][ j ]);
382  }
383  mapping_.buildMapping( coord[ 0 ], coord[ 1 ], coord[ 2 ], coord[ 3 ] );
384  volume_ = referenceElement_.volume() * ( localGeo.volume() / geo.volume() );
385  assert( (volume_ > 0.0) && (volume_ < referenceElement_.volume() ) );
386  valid_ = true ;
387  }
388 
389  template< class HElement >
390  void update ( const HElement &item )
391  {
392  mapping_.buildMapping( item.getVertex( 0 )->coord(), item.getVertex( 1 )->coord(),
393  item.getVertex( 3 )->coord(), item.getVertex( 2 )->coord() );
394  volume_ = item.area();
395  valid_ = true ;
396  }
397  };
398 
399  // geometry implementation for triangles
400  template< int cdim >
401  class MyALU2dGridGeometryImpl< 2, cdim, ALU2DSPACE mixed >
402  : public MyALU2dGridGeometryImplBase< 4, BilinearMapping< cdim > >
403  {
404  typedef MyALU2dGridGeometryImplBase< 4, BilinearMapping< cdim > > BaseType;
405  protected:
406  typedef typename BaseType :: MappingType BilinearMappingType;
407  typedef Dune :: LinearMapping< cdim, 2 > LinearMappingType;
408 
409  using BaseType :: mapping_ ;
410  using BaseType :: volume_ ;
411  using BaseType :: valid_ ;
412  using BaseType :: referenceElement_ ;
413 
414  typedef typename LinearMappingType::ctype ctype;
415 
416  typedef typename LinearMappingType::map_t map_t;
417  typedef typename LinearMappingType::world_t world_t;
418 
419  typedef typename LinearMappingType::matrix_t matrix_t;
420  typedef typename LinearMappingType::inv_t inv_t;
421 
422  typedef typename BaseType :: ReferenceElementType ReferenceElementType;
423 
425  const ReferenceElementType& simplexReferenceElement_ ;
426 
427  // for the mixed geometry the number of corners can vary
428  int myCorners_;
429 
430  public:
431  using BaseType :: valid ;
432  using BaseType :: invalidate ;
433 
434  // default constructor
435  MyALU2dGridGeometryImpl ()
436  : BaseType( type( 4 ) ),
437  simplexReferenceElement_( ReferenceElements< ctype, 2 >::general( type( 3 ) ) ),
438  myCorners_( 0 )
439  {
440  // make sure that bilinear mapping reserves more memory, othersize change
441  assert( sizeof( BilinearMappingType ) >= sizeof( LinearMappingType ) );
442  }
443 
444  public:
445  // return true if current mapping is affine
446  bool affine () const
447  {
448  return (corners() == 3 ? linearMapping().affine() : bilinearMapping().affine());
449  }
450 
451  // return current number of corners
452  int corners () const { return myCorners_; }
453 
454  // return coordinate of the i-th corner
455  world_t corner( int i ) const
456  {
457  world_t coordinate;
458  if( corners() == 3 )
459  linearMapping().map2world( simplexReferenceElement_.position( i, 2 ), coordinate );
460  else
461  bilinearMapping().map2world( referenceElement_.position( i, 2 ), coordinate );
462  return coordinate;
463  }
464 
465  // return current type of geometry
466  GeometryType type () const { return type( corners() ); }
467 
468  protected:
469  // return type of geometry depending on number of corners
470  GeometryType type ( const int corners ) const
471  {
472  return GeometryType( (corners == 3 ?
473  GenericGeometry :: SimplexTopology< 2 > :: type :: id :
474  GenericGeometry :: CubeTopology < 2 > :: type :: id), 2);
475  }
476 
477  public:
478  void map2world ( const map_t &m, world_t &w ) const
479  {
480  if( corners() == 3 )
481  linearMapping().map2world( m, w );
482  else
483  bilinearMapping().map2world( m, w );
484  }
485 
486  void world2map ( const world_t &w, map_t &m ) const
487  {
488  if( corners() == 3 )
489  linearMapping().world2map( w, m );
490  else
491  bilinearMapping().world2map( w, m );
492  }
493 
494  const matrix_t &jacobianTransposed ( const map_t &m ) const
495  {
496  return (corners() == 3 ? linearMapping().jacobianTransposed( m ) : bilinearMapping().jacobianTransposed( m ));
497  }
498 
499  const inv_t &jacobianInverseTransposed ( const map_t &m ) const
500  {
501  return (corners() == 3 ? linearMapping().jacobianInverseTransposed( m ) : bilinearMapping().jacobianInverseTransposed( m ));
502  }
503 
504  ctype det ( const map_t &m ) const
505  {
506  return (corners() == 3 ? linearMapping().det( m ) : bilinearMapping().det( m ));
507  }
508 
509  // update geometry in father coordinates
510  template< class Geo, class LocalGeo >
511  void updateLocal ( const Geo &geo, const LocalGeo &localGeo )
512  {
513  const int corners = localGeo.corners();
514 
515  // compute the local coordinates in father refelem
516  FieldMatrix< alu2d_ctype, 4, cdim > coord;
517  for( int i = 0; i < corners; ++i )
518  {
519  // calculate coordinate
520  coord[ i ] = geo.local( localGeo.corner( i ) );
521  // to avoid rounding errors
522  for( int j = 0; j < cdim; ++j )
523  coord[ i ][ j ] = (coord[ i ][ j ] < 1e-14 ? 0 : coord[ i ][ j ]);
524  }
525 
526  updateMapping( corners );
527  if( corners == 3 )
528  {
529  linearMapping().buildMapping( coord[ 0 ], coord[ 1 ], coord[ 2 ] );
530  volume_ = simplexReferenceElement_.volume() * ( localGeo.volume() / geo.volume() );
531  }
532  else
533  {
534  bilinearMapping().buildMapping( coord[ 0 ], coord[ 1 ], coord[ 2 ], coord[ 3 ] );
535  volume_ = referenceElement_.volume() * ( localGeo.volume() / geo.volume() );
536  }
537 
538  assert( (volume_ > 0.0) && (volume_ < 1.0) );
539  valid_ = true ;
540  }
541 
542  template< class HElement >
543  void update ( const HElement &item )
544  {
545  const int corners = item.numvertices();
546  updateMapping( corners );
547  if( corners == 3 )
548  linearMapping().buildMapping( item.getVertex( 0 )->coord(), item.getVertex( 1 )->coord(),
549  item.getVertex( 2 )->coord() );
550  else
551  bilinearMapping().buildMapping( item.getVertex( 0 )->coord(), item.getVertex( 1 )->coord(),
552  item.getVertex( 3 )->coord(), item.getVertex( 2 )->coord() );
553 
554  volume_ = item.area();
555  valid_ = true ;
556  }
557 
558  private:
559  MyALU2dGridGeometryImpl &operator= ( const MyALU2dGridGeometryImpl &other );
560 
561  const LinearMappingType &linearMapping () const
562  {
563  assert( valid() );
564  return static_cast< const LinearMappingType * >( &mapping_ );
565  }
566 
567  LinearMappingType &linearMapping ()
568  {
569  assert( valid() );
570  return static_cast< LinearMappingType * >( &mapping_ );
571  }
572 
573  const BilinearMappingType &bilinearMapping () const
574  {
575  assert( valid() );
576  return static_cast< const BilinearMappingType * >( &mapping_ );
577  }
578 
579  BilinearMappingType &bilinearMapping ()
580  {
581  assert( valid() );
582  return static_cast< BilinearMappingType * >( &mapping_ );
583  }
584 
585  void updateMapping ( const int corners )
586  {
587  assert( (corners == 3) || (corners == 4) );
588  if( corners != myCorners_ )
589  {
590  destroyMapping();
591  corners = myCorners_;
592  if( corners == 3 )
593  new( &mapping_ )LinearMappingType;
594  else
595  new( &mapping_ )BilinearMappingType;
596  }
597  }
598 
599  void destroyMapping ()
600  {
601  if( corners() == 3 )
602  linearMapping().~LinearMappingType();
603  else if( corners() == 4 )
604  bilinearMapping().~BilinearMappingType();
605  }
606  };
607 
608 
609  //**********************************************************************
610  //
611  // --ALU2dGridGeometry
612  // --Geometry
613  //**********************************************************************
626  template< int mydim, int cdim, class GridImp >
630  : public GeometryDefaultImplementation< mydim, cdim, GridImp, ALU2dGridGeometry >
631  {
632  static const ALU2DSPACE ElementType eltype = GridImp::elementType;
633 
635  typedef typename GridImp::template Codim<0>::Geometry Geometry;
639  enum { dimbary=mydim+1};
640 
641  typedef typename ALU2dImplTraits< GridImp::dimensionworld, eltype >::HElementType HElementType ;
642  typedef typename ALU2dImplInterface< 0, GridImp::dimensionworld, eltype >::Type VertexType;
643 
644  // type of specialized geometry implementation
645  typedef MyALU2dGridGeometryImpl< mydim, cdim, eltype > GeometryImplType;
646 
647  public:
650 
651  public:
655 
658 
661 
664 
667  const GeometryType type () const { return geoImpl().type(); }
668 
670  int corners () const { return geoImpl().corners(); }
671 
673  GlobalCoordinate corner ( int i ) const;
674 
677  GlobalCoordinate global ( const LocalCoordinate& local ) const;
678 
682 
684  alu2d_ctype integrationElement (const LocalCoordinate& local) const;
685 
687  alu2d_ctype volume () const;
688 
690  bool affine() const { return geoImpl().affine(); }
691 
694 
697 
698  //***********************************************************************
700  //***********************************************************************
702  // method for elements
703  bool buildGeom(const HElementType & item);
704  // method for edges
705  bool buildGeom(const HElementType & item, const int aluFace);
706  // method for vertices
707  bool buildGeom(const VertexType & item, const int );
708 
711  template <class GeometryType, class LocalGeomType >
712  bool buildLocalGeom(const GeometryType & geo , const LocalGeomType & lg);
713 
715  bool buildLocalGeometry(const int faceNumber, const int twist,const int coorns);
716 
719 
721  void print (std::ostream& ss) const;
722 
724  inline bool buildGeomInFather(const Geometry &fatherGeom,
725  const Geometry & myGeom );
726 
727  // returns true if geometry information is valid
728  inline bool valid() const { return geoImpl().valid(); }
729 
730  // invalidate geometry implementation
731  void invalidate () ;
732 
733  protected:
734  // return reference coordinates of the alu triangle
735  static std::pair< FieldMatrix< alu2d_ctype, 4, 2 >, FieldVector< alu2d_ctype, 4 > >
736  calculateReferenceCoords ( const int corners );
737  protected:
739  void assign( const ALU2dGridGeometry& other );
741  void removeObj();
743  void getObject();
744 
745  // type of object provider
747 
750  {
751 #ifdef USE_SMP_PARALLEL
752  typedef ALUGridObjectFactory< GridImp > GridObjectFactoryType;
753  static std::vector< GeometryProviderType > storage( GridObjectFactoryType :: maxThreads() );
754  return storage[ GridObjectFactoryType :: threadNumber () ];
755 #else
756  static GeometryProviderType storage;
757  return storage;
758 #endif
759  }
760 
761  // return reference to geometry implementation
762  GeometryImplType& geoImpl() const
763  {
764  assert( geoImpl_ );
765  return *geoImpl_;
766  }
767 
768  // implementation of the coordinates and mapping
769  GeometryImplType* geoImpl_;
770  };
771 
772 } // end namespace Dune
773 
774 #include "geometry_imp.cc"
775 
776 #endif
Definition: geometry.hh:631
ALU2dGridGeometry & operator=(const ALU2dGridGeometry &)
assigment operator
const FieldMatrix< alu2d_ctype, mydim, cdim > & jacobianTransposed(const LocalCoordinate &local) const
jacobian transposed
GlobalCoordinate global(const LocalCoordinate &local) const
int corners() const
return the number of corners of this element. Corners are numbered 0...n-1
Definition: geometry.hh:670
const GeometryType type() const
Definition: geometry.hh:667
bool buildGeomInFather(const Geometry &fatherGeom, const Geometry &myGeom)
build geometry with local coords of child in reference element
bool buildLocalGeometry(const int faceNumber, const int twist, const int coorns)
build local geometry given local face number
void print(std::ostream &ss) const
print internal data
void removeObj()
remove pointer object
GlobalCoordinate corner(int i) const
access to coordinates of corners. Index is the number of the corner
alu2d_ctype integrationElement(const LocalCoordinate &local) const
A(l) , see grid.hh.
GlobalCoordinate & getCoordVec(int i)
return non-const reference to coord vecs
void getObject()
get a new pointer object
bool buildGeom(const HElementType &item)
Methods that not belong to the Interface, but have to be public.
const FieldMatrix< alu2d_ctype, cdim, mydim > & jacobianInverseTransposed(const LocalCoordinate &local) const
jacobian inverse transposed
bool buildLocalGeom(const GeometryType &geo, const LocalGeomType &lg)
bool affine() const
return true if geometry has affine mapping
Definition: geometry.hh:690
~ALU2dGridGeometry()
destructor releasing object
ALU2dGridGeometry(const ALU2dGridGeometry &)
copy constructor copying pointer and increasing reference counter
alu2d_ctype volume() const
return volume of geometry
static GeometryProviderType & geoProvider()
return storage provider for geometry objects
Definition: geometry.hh:749
void assign(const ALU2dGridGeometry &other)
assign pointer
organize the memory management for entitys used by the NeighborIterator
Definition: memory.hh:21
A dense n x m matrix.
Definition: fmatrix.hh:67
vector space out of a tensor product of fields.
Definition: fvector.hh:94
Default implementation for class Geometry.
Definition: geometry.hh:302
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:25
Different resources needed by all grid implementations.
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
Dune namespace.
Definition: alignment.hh:10
Static tag representing a codimension.
Definition: dimension.hh:22
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 16, 22:29, 2024)