DUNE PDELab (2.8)

coordfunctioncaller.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_GEOGRID_COORDFUNCTIONCALLER_HH
4#define DUNE_GEOGRID_COORDFUNCTIONCALLER_HH
5
6#include <dune/grid/geometrygrid/hostcorners.hh>
7#include <dune/grid/geometrygrid/coordfunction.hh>
8
9namespace Dune
10{
11
12 namespace GeoGrid
13 {
14
15 // CoordFunctionCaller
16 // -------------------
17
18 template< class HostEntity, class CoordFunctionInterface >
19 class CoordFunctionCaller;
20
21 template< class HostEntity, class ct, unsigned int dimD, unsigned int dimR, class Impl >
22 class CoordFunctionCaller< HostEntity, AnalyticalCoordFunctionInterface< ct, dimD, dimR, Impl > >
23 {
24 typedef AnalyticalCoordFunctionInterface< ct, dimD, dimR, Impl > CoordFunctionInterface;
25 typedef CoordFunctionCaller< HostEntity, CoordFunctionInterface > This;
26
27 static const int codimension = HostEntity::codimension;
28
29 public:
30 typedef typename CoordFunctionInterface::RangeVector RangeVector;
31
32 CoordFunctionCaller ( const HostEntity &hostEntity,
33 const CoordFunctionInterface &coordFunction )
34 : hostCorners_( hostEntity ),
35 coordFunction_( coordFunction )
36 {}
37
38 void evaluate ( unsigned int i, RangeVector &y ) const
39 {
40 coordFunction_.evaluate( hostCorners_[ i ], y );
41 }
42
43 GeometryType type () const
44 {
45 return hostCorners_.type();
46 }
47
48 std::size_t size () const
49 {
50 return hostCorners_.size();
51 }
52
53 private:
54 const HostCorners< HostEntity > hostCorners_;
55 const CoordFunctionInterface &coordFunction_;
56 };
57
58 template< class HostEntity, class ct, unsigned int dimR, class Impl >
59 class CoordFunctionCaller< HostEntity, DiscreteCoordFunctionInterface< ct, dimR, Impl > >
60 {
61 typedef DiscreteCoordFunctionInterface< ct, dimR, Impl > CoordFunctionInterface;
62 typedef CoordFunctionCaller< HostEntity, CoordFunctionInterface > This;
63
64 typedef typename CoordFunctionInterface::RangeVector RangeVector;
65
66 public:
67 CoordFunctionCaller ( const HostEntity &hostEntity,
68 const CoordFunctionInterface &coordFunction )
69 : hostEntity_( hostEntity ),
70 coordFunction_( coordFunction )
71 {}
72
73 void evaluate ( unsigned int i, RangeVector &y ) const
74 {
75 coordFunction_.evaluate( hostEntity_, i, y );
76 }
77
78 GeometryType type () const
79 {
80 return hostEntity_.type();
81 }
82
83 std::size_t size () const
84 {
85 auto refElement = referenceElement< ct, HostEntity::mydimension >( type() );
86 return refElement.size( HostEntity::mydimension );
87 }
88
89 private:
90 const HostEntity &hostEntity_;
91 const CoordFunctionInterface &coordFunction_;
92 };
93
94 } // namespace GeoGrid
95
96} // namespace Dune
97
98#endif // #ifndef DUNE_GEOGRID_COORDFUNCTIONCALLER_HH
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:130
Dune namespace.
Definition: alignedallocator.hh:11
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Dec 22, 23:30, 2024)