dune-grid  2.6-git
coordfunctioncaller.hh
Go to the documentation of this file.
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 
8 
9 namespace Dune
10 {
11 
12  namespace GeoGrid
13  {
14 
15  // CoordFunctionCaller
16  // -------------------
17 
18  template< class HostEntity, class CoordFunctionInterface >
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;
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;
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
Interface class for using a discrete function to define the geometry of a Dune::GeometryGrid. An implementation should be derived from Dune::DiscreteCoordinateFunction and the evaluate method taking an entity of the host grid together with the number of a vertex returns the coordinate in of that corner. The user must ensure continuity of this mapping. In addition an adapt method is provided which is called whenever adapt() is called on the Dune::GeometryGrid.
Definition: coordfunction.hh:172
Definition: coordfunctioncaller.hh:19
GeometryType
Type representing VTK&#39;s entity geometry types.
Definition: common.hh:178
Interface class for using an analytical function to define the geometry of a Dune::GeometryGrid. An implementation should be derived from Dune::AnalyticalCoordFunction and the evaluate method mapping has to be supplied.
Definition: coordfunction.hh:41
Definition: hostcorners.hh:19
Include standard header files.
Definition: agrid.hh:58