dune-grid  2.9.0
coordfunctioncaller.hh
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
2 // SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
3 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
4 // vi: set et ts=4 sw=2 sts=2:
5 #ifndef DUNE_GEOGRID_COORDFUNCTIONCALLER_HH
6 #define DUNE_GEOGRID_COORDFUNCTIONCALLER_HH
7 
10 
11 namespace Dune
12 {
13 
14  namespace GeoGrid
15  {
16 
17  // CoordFunctionCaller
18  // -------------------
19 
20  template< class HostEntity, class CoordFunctionInterface >
22 
23  template< class HostEntity, class ct, unsigned int dimD, unsigned int dimR, class Impl >
24  class CoordFunctionCaller< HostEntity, AnalyticalCoordFunctionInterface< ct, dimD, dimR, Impl > >
25  {
26  typedef AnalyticalCoordFunctionInterface< ct, dimD, dimR, Impl > CoordFunctionInterface;
28 
29  static const int codimension = HostEntity::codimension;
30 
31  public:
32  typedef typename CoordFunctionInterface::RangeVector RangeVector;
33 
34  CoordFunctionCaller ( const HostEntity &hostEntity,
35  const CoordFunctionInterface &coordFunction )
36  : hostCorners_( hostEntity ),
37  coordFunction_( coordFunction )
38  {}
39 
40  void evaluate ( unsigned int i, RangeVector &y ) const
41  {
42  coordFunction_.evaluate( hostCorners_[ i ], y );
43  }
44 
45  GeometryType type () const
46  {
47  return hostCorners_.type();
48  }
49 
50  std::size_t size () const
51  {
52  return hostCorners_.size();
53  }
54 
55  private:
56  const HostCorners< HostEntity > hostCorners_;
57  const CoordFunctionInterface &coordFunction_;
58  };
59 
60  template< class HostEntity, class ct, unsigned int dimR, class Impl >
61  class CoordFunctionCaller< HostEntity, DiscreteCoordFunctionInterface< ct, dimR, Impl > >
62  {
63  typedef DiscreteCoordFunctionInterface< ct, dimR, Impl > CoordFunctionInterface;
64  typedef CoordFunctionCaller< HostEntity, CoordFunctionInterface > This;
65 
66  typedef typename CoordFunctionInterface::RangeVector RangeVector;
67 
68  public:
69  CoordFunctionCaller ( const HostEntity &hostEntity,
70  const CoordFunctionInterface &coordFunction )
71  : hostEntity_( hostEntity ),
72  coordFunction_( coordFunction )
73  {}
74 
75  void evaluate ( unsigned int i, RangeVector &y ) const
76  {
77  coordFunction_.evaluate( hostEntity_, i, y );
78  }
79 
80  GeometryType type () const
81  {
82  return hostEntity_.type();
83  }
84 
85  std::size_t size () const
86  {
87  auto refElement = referenceElement< ct, HostEntity::mydimension >( type() );
88  return refElement.size( HostEntity::mydimension );
89  }
90 
91  private:
92  const HostEntity &hostEntity_;
93  const CoordFunctionInterface &coordFunction_;
94  };
95 
96  } // namespace GeoGrid
97 
98 } // namespace Dune
99 
100 #endif // #ifndef DUNE_GEOGRID_COORDFUNCTIONCALLER_HH
Include standard header files.
Definition: agrid.hh:60
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:132
Interface class for using an analytical function to define the geometry of a Dune::GeometryGrid....
Definition: coordfunction.hh:44
Definition: coordfunctioncaller.hh:21