Dune Core Modules (2.3.1)

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
14namespace 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
628 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
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 namespace FacadeOptions
773 {
775 template< int mydim, int cdim, class GridImp >
776 struct StoreGeometryReference< mydim, cdim, GridImp, ALU2dGridGeometry >
777 {
779 static const bool v = false;
780 };
781 }
782
783} // end namespace Dune
784
785#include "geometry_imp.cc"
786
787#endif
Definition: geometry.hh:631
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
const FieldMatrix< alu2d_ctype, cdim, mydim > & jacobianInverseTransposed(const LocalCoordinate &local) const
jacobian inverse transposed
bool buildGeom(const HElementType &item)
Methods that not belong to the Interface, but have to be public.
ALU2dGridGeometry & operator=(const ALU2dGridGeometry &)
assigment operator
bool buildLocalGeom(const GeometryType &geo, const LocalGeomType &lg)
static GeometryProviderType & geoProvider()
return storage provider for geometry objects
Definition: geometry.hh:749
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
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:92
Default implementation for class Geometry.
Definition: geometry.hh:322
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:14
Traits class determining whether the Dune::Geometry facade class stores the implementation object by ...
Definition: geometry.hh:47
static const bool v
Whether to store by reference.
Definition: geometry.hh:49
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Jul 15, 22:36, 2024)