Flow123d  JB_transport-112d700
field_value_cache.hh
Go to the documentation of this file.
1 /*!
2  *
3  * Copyright (C) 2015 Technical University of Liberec. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU General Public License version 3 as published by the
7  * Free Software Foundation. (http://www.gnu.org/licenses/gpl-3.0.en.html)
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12  *
13  *
14  * @file field_value_cache.hh
15  * @brief
16  * @author David Flanderka
17  */
18 
19 #ifndef FIELD_VALUE_CACHE_HH_
20 #define FIELD_VALUE_CACHE_HH_
21 
22 #include <set>
23 #include <unordered_map>
24 #include <unordered_set>
25 #include <vector>
26 #include "system/armor.hh"
27 #include "fields/eval_points.hh"
28 #include "mesh/accessors.hh"
29 #include "tools/mixed.hh"
30 #include "tools/revertable_list.hh"
31 #include "fem/dofhandler.hh"
32 
33 class EvalPoints;
34 class ElementCacheMap;
35 class DHCellAccessor;
36 class DHCellSide;
37 template < template<IntDim...> class DimAssembly> class GenericAssembly;
38 template < template<IntDim...> class DimAssembly> class GenericAssemblyObserve;
39 
40 
41 /**
42  * @brief Class holds precomputed field values of selected element set.
43  *
44  * Every field in equation use own instance used for elements of all dimensions.
45  */
46 template<class elm_type> using FieldValueCache = Armor::Array<elm_type>;
47 
48 
49 /**
50  * Specifies eval points by idx of region, element and eval point.
51  *
52  * TODO Add better description after finish implementation
53  */
54 struct EvalPointData {
55  EvalPointData() {} ///< Default constructor
56  /// Constructor sets all data members
57  EvalPointData(unsigned int i_reg, unsigned int i_ele, unsigned int i_ep, unsigned int dh_loc_idx)
58  : i_reg_(i_reg), i_element_(i_ele), i_eval_point_(i_ep), dh_loc_idx_(dh_loc_idx) {}
59  /// Copy constructor
62 
63 
64  bool operator < (const EvalPointData &other) {
65  if (i_reg_ == other.i_reg_) {
66  if (i_element_ == other.i_element_)
67  return (i_eval_point_ < other.i_eval_point_);
68  else
69  return (i_element_ < other.i_element_);
70  } else
71  return (i_reg_ < other.i_reg_);
72  }
73 
74  unsigned int i_reg_; ///< region_idx of element
75  unsigned int i_element_; ///< mesh_idx of ElementAccessor appropriate to element
76  unsigned int i_eval_point_; ///< index of point in EvalPoint object
77  unsigned int dh_loc_idx_; ///< local index of cell in DOF handler
78 };
79 
80 
81 
82 
83 /**
84  * @brief Auxiliary data class holds number of elements in cache and allow to set this value
85  * explicitly (e.g. as input parameter).
86  *
87  * Implementation is done as singletone with two access through static methods 'get' and 'set'.
88  *
89  * TODO: This is actually a constant so make it a constant int in element cache map.
90  */
92 public:
93  /// Return number of stored elements
94  static unsigned int get() {
95  return get_instance().n_elem_;
96  }
97 
98  /// Set number of stored elements
99  static void set(unsigned int n_elem) {
100  get_instance().n_elem_ = n_elem;
101  }
102 
103  CacheMapElementNumber(CacheMapElementNumber const&) = delete; ///< We don't need copy constructor.
104  void operator=(CacheMapElementNumber const&) = delete; ///< We don't need assignment operator.
105 
106 private:
107  /// Forbiden default constructor
109 
110 
112  {
113  static CacheMapElementNumber instance;
114  return instance;
115  }
116 
117  /// Maximal number of elements stored in cache.
118  unsigned int n_elem_;
119 };
120 
121 
122 /**
123  * @brief Directing class of FieldValueCache.
124  *
125  * Manage storing and updating element data (elements of same dimension) to cache. We need only
126  * one shared instance of this class for all fields in equation (but typically for dim = 1,2,3).
127  *
128  * IMPORTANT: Because there are combined bulk and boundary elements, we must use mesh_idx value
129  * to correct identification of elements.
130  *
131  * TODO:
132  * 1. Generic assembly pass through the patch collecting needed quadrature points. (PASS ORDER)
133  * 2. Then we sort these points for efficient chae_upadate of the fields (CACHE ORDER)
134  * 3. We pass through the patch again evaluating actual integrals. This second pass is currently inefficient since
135  * we can not map efficiently from the PASS ORDER to the CACHE ORDER), this leads to many complications in
136  * quad point classes.
137  * We should:
138  * 1. have templated patch iteration mechanism, so that we can iterate through the evaluated integrals
139  * twice in consistent way performing:
140  * FIRST: collection of evaluation points
141  * SECOND: evaluation of integrals using the fields and fe_values
142  * Having a consistent implementation allows us to assign unique indices to the integral points on the patch.
143  * 2. Sort collected points, remove duplicities, mark new indices to the original list of points.
144  * 3. SECOND pass, use unique index to find the point in the cache.
145  *
146  * Resulting simplifications:
147  * - no need for associating point operations for Edge, Coupling and Boundary points,
148  * we add assiciated eval point pairs as separate eval points with unique ids. Consistent integral iteration
149  * allows us to simply take two succesive points at the second pass.
150  * - no need for the matrix mapping (element, eval_point) to the cache index
151  */
153 public:
154  /// Index of invalid element in cache.
155  static const unsigned int undef_elem_idx;
156 
157  /// Size of block (evaluation of FieldFormula) must be multiple of this value.
158  /// TODO We should take this value from BParser and it should be dependent on processor configuration.
159  static const unsigned int simd_size_double;
160 
161  /// Constructor
162  ElementCacheMap();
163 
164  /// Destructor
166 
167  /// Init cache
168  void init(std::shared_ptr<EvalPoints> eval_points);
169 
170  /// Create patch of cached elements before reading data to cache.
171  void create_patch();
172 
173  /// Reset all items of elements_eval_points_map
176  unsigned int last_element_idx = -1, i_elem_row = -1;
177  for (unsigned int i=0; i<eval_point_data_.permanent_size(); ++i) {
178  if (eval_point_data_[i].i_element_ != last_element_idx) { // new element
179  i_elem_row++;
180  last_element_idx =eval_point_data_[i].i_element_;
181  }
183  }
185  }
186 
187  /// Start update of cache.
188  void start_elements_update();
189 
190  /// Finish update after reading data to cache.
191  void finish_elements_update();
192 
193  /// Getter of eval_points object.
194  inline std::shared_ptr<EvalPoints> eval_points() const {
195  return eval_points_;
196  }
197 
198  /** Adds EvalPointData using emplace_back.
199  * Arguments correspond to constructor of EvalPointData.
200  */
201  inline void add_eval_point(unsigned int i_reg, unsigned int i_ele, unsigned int i_eval_point, unsigned int dh_loc_idx)
202  {
203  eval_point_data_.emplace_back(i_reg, i_ele, i_eval_point, dh_loc_idx);
204  set_of_regions_.insert(i_reg);
205  }
206 
207  /// Returns number of eval. points with addition of max simd duplicates due to regions.
208  inline unsigned int get_simd_rounded_size()
209  {
211  }
212 
213  /*
214  * Access to item of \p element_eval_points_map_ like to two-dimensional array.
215  *
216  * @param i_elem_in_cache idx of ElementAccessor in ElementCacheMap
217  * @param i_eval_point index of local point in EvalPoints
218  * @return index of point in FieldValueCache.
219  */
220  inline int element_eval_point(unsigned int i_elem_in_cache, unsigned int i_eval_point) const {
222  return element_eval_points_map_[i_elem_in_cache*eval_points_->max_size()+i_eval_point];
223  }
224 
225  /// Return mesh_idx of element stored at given position of ElementCacheMap
226  inline unsigned int elm_idx_on_position(unsigned pos) const {
227  return elm_idx_[pos];
228  }
229 
230  /// Return position of element stored in ElementCacheMap
231  inline unsigned int position_in_cache(unsigned mesh_elm_idx, bool bdr=false) const {
232  std::unordered_map<unsigned int, unsigned int>::const_iterator it;
233  if (bdr) {
234  it = element_to_map_bdr_.find(mesh_elm_idx);
235  if ( it != element_to_map_bdr_.end() ) return it->second;
237  } else {
238  it = element_to_map_.find(mesh_elm_idx);
239  if ( it != element_to_map_.end() ) return it->second;
241  }
242  }
243 
244  /// Return number of stored regions.
245  inline unsigned int n_regions() const {
246  return regions_starts_.permanent_size() - 1;
247  }
248 
249  /// Return number of stored elements.
250  inline unsigned int n_elements() const {
251  return element_starts_.permanent_size() - 1;
252  }
253 
254  /// Return begin position of element chunk in FieldValueCache
255  inline unsigned int element_chunk_begin(unsigned int elm_patch_idx) const {
256  ASSERT_LT(elm_patch_idx, n_elements());
257  return element_starts_[elm_patch_idx];
258  }
259 
260  /// Return end position of element chunk in FieldValueCache
261  inline unsigned int element_chunk_end(unsigned int elm_patch_idx) const {
262  ASSERT_LT(elm_patch_idx, n_elements());
263  return element_starts_[elm_patch_idx+1];
264  }
265 
266  /// Return begin position of region chunk in FieldValueCache
267  inline unsigned int region_chunk_begin(unsigned int region_patch_idx) const {
268  ASSERT_LT(region_patch_idx, n_regions());
269  return element_starts_[ regions_starts_[region_patch_idx] ];
270  }
271 
272  /// Return end position of region chunk in FieldValueCache
273  inline unsigned int region_chunk_end(unsigned int region_patch_idx) const {
274  ASSERT_LT(region_patch_idx, n_regions());
275  return element_starts_[ regions_starts_[region_patch_idx+1] ];
276  }
277 
278  /// Return begin position of region chunk specified by position in map
279  inline unsigned int region_chunk_by_map_index(unsigned int r_idx) const {
280  if (r_idx <= n_regions()) return element_starts_[ regions_starts_[r_idx] ];
282  }
283 
284  /// Return begin position of region chunk specified by position in map
285  inline unsigned int region_idx_from_chunk_position(unsigned int chunk_pos) const {
286  return eval_point_data_[ this->region_chunk_by_map_index(chunk_pos) ].i_reg_;
287  }
288 
289  /// Return item of eval_point_data_ specified by its position
290  inline const EvalPointData &eval_point_data(unsigned int point_idx) const {
291  return eval_point_data_[point_idx];
292  }
293 
294  /// Return value of evaluation point given by idx of element in patch and local point idx in EvalPoints from cache.
295  template<class Value>
296  inline typename Value::return_type get_value(const FieldValueCache<typename Value::element_type> &field_cache,
297  unsigned int elem_patch_idx, unsigned int eval_points_idx) const {
298  ASSERT_EQ(Value::NRows_, field_cache.n_rows());
299  ASSERT_EQ(Value::NCols_, field_cache.n_cols());
300  unsigned int value_cache_idx = this->element_eval_point(elem_patch_idx, eval_points_idx);
301  ASSERT(value_cache_idx != ElementCacheMap::undef_elem_idx);
302  return Value::get_from_array(field_cache, value_cache_idx);
303  }
304 protected:
305 
306  /// Special constant (@see element_eval_points_map_).
307  static const int unused_point = -1;
308 
309  /// Base number of stored regions in patch
310  static const unsigned int regions_in_chunk = 3;
311 
312  /// Base number of stored elements in patch
313  static const unsigned int elements_in_chunk = 10;
314 
315  /// Set item of \p element_eval_points_map_.
316  inline void set_element_eval_point(unsigned int i_elem_in_cache, unsigned int i_eval_point, int val) const {
318  element_eval_points_map_[i_elem_in_cache*eval_points_->max_size()+i_eval_point] = val;
319  }
320 
321  /// Vector of element indexes stored in cache.
323 
324  /// Pointer to EvalPoints
325  std::shared_ptr<EvalPoints> eval_points_;
326 
327  /// Flag is set down during update of cache when this can't be read
329 
330  /**
331  * This array provides indexes to FieldValueCache.
332  *
333  * This one dimensional array behaves like two dimensional factually.
334  * Size is set to 'n_cached_elements * n_eval_points' and items are
335  * accessible through two indices:
336  *
337  * 1: Over elements holds in ElementCacheMap
338  * 2: Over EvalPoints for each element
339  *
340  * Use always and only methods \p element_eval_point for read and
341  * \p set_element_eval_point (for write) to access to items!
342  *
343  * Array is filled in those three steps:
344  * a. Reset - all items are set to ElementCacheMap::unused_point
345  * b. Used eval points are set to ElementCacheMap::point_in_proggress
346  * c. Eval points marked in previous step are sequentially numbered
347  *
348  * TODO improve description
349  */
351 
352  ///< Holds data of evaluating points in patch.
354 
355  /// @name Holds start positions and orders of region chunks and element chunks
356  // @{
357 
358  RevertableList<unsigned int> regions_starts_; ///< Start positions of elements in regions (size = n_regions+1, last value is end of last region)
359  RevertableList<unsigned int> element_starts_; ///< Start positions of elements in eval_point_data_ (size = n_elements+1)
360  std::unordered_map<unsigned int, unsigned int> element_to_map_; ///< Maps bulk element_idx to element index in patch - TODO remove
361  std::unordered_map<unsigned int, unsigned int> element_to_map_bdr_; ///< Maps boundary element_idx to element index in patch - TODO remove
362 
363  // @}
364 
365  /// Keeps set of unique region indices of added eval. points.
366  std::unordered_set<unsigned int> set_of_regions_;
367 
368  // TODO: remove friend class
369  template < template<IntDim...> class DimAssembly>
370  friend class GenericAssembly;
371  template < template<IntDim...> class DimAssembly>
373 };
374 
375 
376 
377 #endif /* FIELD_VALUE_CACHE_HH_ */
EvalPointData::i_element_
unsigned int i_element_
mesh_idx of ElementAccessor appropriate to element
Definition: field_value_cache.hh:75
ElementCacheMap::element_chunk_begin
unsigned int element_chunk_begin(unsigned int elm_patch_idx) const
Return begin position of element chunk in FieldValueCache.
Definition: field_value_cache.hh:255
ElementCacheMap::elm_idx_on_position
unsigned int elm_idx_on_position(unsigned pos) const
Return mesh_idx of element stored at given position of ElementCacheMap.
Definition: field_value_cache.hh:226
CacheMapElementNumber::get
static unsigned int get()
Return number of stored elements.
Definition: field_value_cache.hh:94
CacheMapElementNumber::CacheMapElementNumber
CacheMapElementNumber()
Forbiden default constructor.
Definition: field_value_cache.hh:108
EvalPointData::i_eval_point_
unsigned int i_eval_point_
index of point in EvalPoint object
Definition: field_value_cache.hh:76
armor.hh
ElementCacheMap::element_to_map_bdr_
std::unordered_map< unsigned int, unsigned int > element_to_map_bdr_
Maps boundary element_idx to element index in patch - TODO remove.
Definition: field_value_cache.hh:361
ElementCacheMap::create_patch
void create_patch()
Create patch of cached elements before reading data to cache.
Definition: field_value_cache.cc:60
EvalPointData::operator<
bool operator<(const EvalPointData &other)
Definition: field_value_cache.hh:64
ElementCacheMap::region_chunk_by_map_index
unsigned int region_chunk_by_map_index(unsigned int r_idx) const
Return begin position of region chunk specified by position in map.
Definition: field_value_cache.hh:279
EvalPointData::EvalPointData
EvalPointData(const EvalPointData &other)
Copy constructor.
Definition: field_value_cache.hh:60
RevertableList::emplace_back
std::size_t emplace_back(Args &&... args)
Definition: revertable_list.hh:114
ElementCacheMap::position_in_cache
unsigned int position_in_cache(unsigned mesh_elm_idx, bool bdr=false) const
Return position of element stored in ElementCacheMap.
Definition: field_value_cache.hh:231
ASSERT
#define ASSERT(expr)
Definition: asserts.hh:351
ElementCacheMap::simd_size_double
static const unsigned int simd_size_double
Definition: field_value_cache.hh:159
CacheMapElementNumber
Auxiliary data class holds number of elements in cache and allow to set this value explicitly (e....
Definition: field_value_cache.hh:91
ElementCacheMap
Directing class of FieldValueCache.
Definition: field_value_cache.hh:152
ElementCacheMap::undef_elem_idx
static const unsigned int undef_elem_idx
Index of invalid element in cache.
Definition: field_value_cache.hh:155
eval_points.hh
RevertableList::permanent_size
std::size_t permanent_size() const
Return permanent size of list.
Definition: revertable_list.hh:71
ElementCacheMap::n_elements
unsigned int n_elements() const
Return number of stored elements.
Definition: field_value_cache.hh:250
ElementCacheMap::set_element_eval_point
void set_element_eval_point(unsigned int i_elem_in_cache, unsigned int i_eval_point, int val) const
Set item of element_eval_points_map_.
Definition: field_value_cache.hh:316
std::vector< unsigned int >
ElementCacheMap::element_chunk_end
unsigned int element_chunk_end(unsigned int elm_patch_idx) const
Return end position of element chunk in FieldValueCache.
Definition: field_value_cache.hh:261
CacheMapElementNumber::operator=
void operator=(CacheMapElementNumber const &)=delete
We don't need assignment operator.
RevertableList::reset
void reset()
Clear the list.
Definition: revertable_list.hh:142
ElementCacheMap::element_eval_points_map_
int * element_eval_points_map_
Holds data of evaluating points in patch.
Definition: field_value_cache.hh:350
dofhandler.hh
Declaration of class which handles the ordering of degrees of freedom (dof) and mappings between loca...
ElementCacheMap::set_of_regions_
std::unordered_set< unsigned int > set_of_regions_
Keeps set of unique region indices of added eval. points.
Definition: field_value_cache.hh:366
ElementCacheMap::regions_starts_
RevertableList< unsigned int > regions_starts_
Start positions of elements in regions (size = n_regions+1, last value is end of last region)
Definition: field_value_cache.hh:358
ElementCacheMap::eval_point_data_
RevertableList< EvalPointData > eval_point_data_
Definition: field_value_cache.hh:353
EvalPointData::dh_loc_idx_
unsigned int dh_loc_idx_
local index of cell in DOF handler
Definition: field_value_cache.hh:77
ASSERT_LT
#define ASSERT_LT(a, b)
Definition of comparative assert macro (Less Than) only for debug mode.
Definition: asserts.hh:301
ElementCacheMap::init
void init(std::shared_ptr< EvalPoints > eval_points)
Init cache.
Definition: field_value_cache.cc:50
ElementCacheMap::eval_point_data
const EvalPointData & eval_point_data(unsigned int point_idx) const
Return item of eval_point_data_ specified by its position.
Definition: field_value_cache.hh:290
RevertableList::temporary_size
std::size_t temporary_size() const
Return temporary size of list (full size of stored data).
Definition: revertable_list.hh:77
Armor::Array::n_rows
uint n_rows() const
Definition: armor.hh:715
ElementCacheMap::region_chunk_end
unsigned int region_chunk_end(unsigned int region_patch_idx) const
Return end position of region chunk in FieldValueCache.
Definition: field_value_cache.hh:273
DHCellSide
Side accessor allows to iterate over sides of DOF handler cell.
Definition: dh_cell_accessor.hh:176
ElementCacheMap::elements_in_chunk
static const unsigned int elements_in_chunk
Base number of stored elements in patch.
Definition: field_value_cache.hh:313
EvalPointData::i_reg_
unsigned int i_reg_
region_idx of element
Definition: field_value_cache.hh:74
accessors.hh
CacheMapElementNumber::get_instance
static CacheMapElementNumber & get_instance()
Definition: field_value_cache.hh:111
ElementCacheMap::clear_element_eval_points_map
void clear_element_eval_points_map()
Reset all items of elements_eval_points_map.
Definition: field_value_cache.hh:174
ElementCacheMap::eval_points_
std::shared_ptr< EvalPoints > eval_points_
Pointer to EvalPoints.
Definition: field_value_cache.hh:325
EvalPointData::EvalPointData
EvalPointData(unsigned int i_reg, unsigned int i_ele, unsigned int i_ep, unsigned int dh_loc_idx)
Constructor sets all data members.
Definition: field_value_cache.hh:57
ElementCacheMap::eval_points
std::shared_ptr< EvalPoints > eval_points() const
Getter of eval_points object.
Definition: field_value_cache.hh:194
ElementCacheMap::element_eval_point
int element_eval_point(unsigned int i_elem_in_cache, unsigned int i_eval_point) const
Definition: field_value_cache.hh:220
ElementCacheMap::unused_point
static const int unused_point
Special constant (.
Definition: field_value_cache.hh:307
ElementCacheMap::regions_in_chunk
static const unsigned int regions_in_chunk
Base number of stored regions in patch.
Definition: field_value_cache.hh:310
ASSERT_EQ
#define ASSERT_EQ(a, b)
Definition of comparative assert macro (EQual) only for debug mode.
Definition: asserts.hh:333
ElementCacheMap::element_to_map_
std::unordered_map< unsigned int, unsigned int > element_to_map_
Maps bulk element_idx to element index in patch - TODO remove.
Definition: field_value_cache.hh:360
ElementCacheMap::elm_idx_
std::vector< unsigned int > elm_idx_
Vector of element indexes stored in cache.
Definition: field_value_cache.hh:322
Armor::Array::n_cols
uint n_cols() const
Definition: armor.hh:720
RevertableList< EvalPointData >
ElementCacheMap::add_eval_point
void add_eval_point(unsigned int i_reg, unsigned int i_ele, unsigned int i_eval_point, unsigned int dh_loc_idx)
Definition: field_value_cache.hh:201
Input::Type
Definition: balance.hh:41
ElementCacheMap::finish_elements_update
void finish_elements_update()
Finish update after reading data to cache.
Definition: field_value_cache.cc:122
ElementCacheMap::get_simd_rounded_size
unsigned int get_simd_rounded_size()
Returns number of eval. points with addition of max simd duplicates due to regions.
Definition: field_value_cache.hh:208
ElementCacheMap::region_chunk_begin
unsigned int region_chunk_begin(unsigned int region_patch_idx) const
Return begin position of region chunk in FieldValueCache.
Definition: field_value_cache.hh:267
DHCellAccessor
Cell accessor allow iterate over DOF handler cells.
Definition: dh_cell_accessor.hh:43
ElementCacheMap::region_idx_from_chunk_position
unsigned int region_idx_from_chunk_position(unsigned int chunk_pos) const
Return begin position of region chunk specified by position in map.
Definition: field_value_cache.hh:285
revertable_list.hh
ElementCacheMap::~ElementCacheMap
~ElementCacheMap()
Destructor.
Definition: field_value_cache.cc:43
Armor::Array
Definition: armor.hh:597
EvalPointData
Definition: field_value_cache.hh:54
ElementCacheMap::ElementCacheMap
ElementCacheMap()
Constructor.
Definition: field_value_cache.cc:36
CacheMapElementNumber::n_elem_
unsigned int n_elem_
Maximal number of elements stored in cache.
Definition: field_value_cache.hh:118
GenericAssemblyObserve
Generic class of observe output assemblation.
Definition: assembly_observe.hh:40
ElementCacheMap::start_elements_update
void start_elements_update()
Start update of cache.
Definition: field_value_cache.cc:118
ASSERT_PTR
#define ASSERT_PTR(ptr)
Definition of assert macro checking non-null pointer (PTR) only for debug mode.
Definition: asserts.hh:341
CacheMapElementNumber::set
static void set(unsigned int n_elem)
Set number of stored elements.
Definition: field_value_cache.hh:99
mixed.hh
GenericAssembly
Generic class of assemblation.
Definition: generic_assembly.hh:165
ElementCacheMap::get_value
Value::return_type get_value(const FieldValueCache< typename Value::element_type > &field_cache, unsigned int elem_patch_idx, unsigned int eval_points_idx) const
Return value of evaluation point given by idx of element in patch and local point idx in EvalPoints f...
Definition: field_value_cache.hh:296
ElementCacheMap::n_regions
unsigned int n_regions() const
Return number of stored regions.
Definition: field_value_cache.hh:245
ElementCacheMap::ready_to_reading_
bool ready_to_reading_
Flag is set down during update of cache when this can't be read.
Definition: field_value_cache.hh:328
ElementCacheMap::element_starts_
RevertableList< unsigned int > element_starts_
Start positions of elements in eval_point_data_ (size = n_elements+1)
Definition: field_value_cache.hh:359
EvalPoints
Class holds local coordinations of evaluating points (bulk and sides) specified by element dimension.
Definition: eval_points.hh:43
IntDim
unsigned int IntDim
A dimension index type.
Definition: mixed.hh:19