Flow123d  JS_before_hm-1727-ga1133b990
eval_subset.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 eval_subset.hh
15  * @brief
16  * @author David Flanderka
17  */
18 
19 #ifndef EVAL_SUBSET_HH_
20 #define EVAL_SUBSET_HH_
21 
22 #include <memory>
23 #include <armadillo>
24 #include "fields/eval_points.hh"
26 #include "mesh/range_wrapper.hh"
27 #include "mesh/accessors.hh"
28 #include "fem/dh_cell_accessor.hh"
29 
30 
31 class Side;
32 class BulkIntegral;
33 class EdgeIntegral;
34 class CouplingIntegral;
35 class BoundaryIntegral;
36 
37 
38 /**
39  * @brief Base point accessor class.
40  *
41  * TODO: remove virtual methods from Points classes, need changes also in Field::operator().
42  */
43 class PointBase {
44 public:
45  /// Default constructor
47  : local_point_idx_(0), elm_cache_map_(nullptr) {}
48 
49  /// Constructor
50  PointBase(const ElementCacheMap *elm_cache_map, unsigned int loc_point_idx)
51  : local_point_idx_(loc_point_idx), elm_cache_map_(elm_cache_map) {}
52 
53  /// Getter of EvalPoints object.
54  inline std::shared_ptr<EvalPoints> eval_points() const {
55  ASSERT_PTR(elm_cache_map_).error("Invalid point.\n");
56  return elm_cache_map_->eval_points();
57  }
58 
59  // Getter of ElementCacheMap object.
60  inline const ElementCacheMap *elm_cache_map() const {
61  return elm_cache_map_;
62  }
63 
64  // Getter of element patch index.
65  inline unsigned int elem_patch_idx() const {
66  return elem_patch_idx_;
67  }
68 
69  /// Iterates to next point.
70  void inc() {
71  this->local_point_idx_++;
72  }
73 
74  /// Local coordinates within element
75  //template<unsigned int dim>
76  //inline arma::vec::fixed<dim> loc_coords() const {
77  // return this->eval_points()->local_point<dim>( this->eval_point_idx() );
78  //}
79 
80  // Global coordinates within element
81  //arma::vec3 coords() const;
82 
83 protected:
84  /// Index of the local point in the integral object.
85  unsigned int local_point_idx_;
86  /// Index of element in the patch.
87  unsigned int elem_patch_idx_;
88  /// Pointer ElementCacheMap needed for point evaluation.
90 };
91 
92 
93 /**
94  * @brief Point accessor allow iterate over bulk quadrature points defined in local element coordinates.
95  */
96 class BulkPoint : public PointBase {
97 public:
98  /// Default constructor
100  : PointBase() {}
101 
102  /// Constructor
104  : PointBase(elm_cache_map, cache_pos.i_ep_) {
105  this->elem_patch_idx_ = cache_pos.i_elm_;
106  }
107 
108  /// Comparison of accessors.
109  bool operator==(const BulkPoint& other) {
110  return (elem_patch_idx_ == other.elem_patch_idx_) && (local_point_idx_ == other.local_point_idx_);
111  }
112 
113  /// Return index in EvalPoints object
114  inline unsigned int eval_point_idx() const {
115  return local_point_idx_;
116  }
117 };
118 
119 
120 /**
121  * @brief General point accessor allow iterate over quadrature points of given side defined in local element coordinates.
122  *
123  * Common ancestor of all side points classes (Edge-, Coupling-, BoundaryPoint)
124  */
125 class SidePoint : public PointBase {
126 public:
127  /// Default constructor
129  : PointBase() {}
130 
131  /// Constructor
132  SidePoint(DHCellSide cell_side, const ElementCacheMap *elm_cache_map, unsigned int local_point_idx)
133  : PointBase(elm_cache_map, local_point_idx), side_idx_(cell_side.side_idx()),
134  permutation_idx_( cell_side.element()->permutation_idx( side_idx_ ) ) {
135  this->elem_patch_idx_ = this->elm_cache_map_->position_in_cache(cell_side.element().mesh_idx());
136  }
137 
138  // Index of permutation
139  inline unsigned int permutation_idx() const {
140  return permutation_idx_;
141  }
142 
143 protected:
144  /// Index of side in element
145  unsigned int side_idx_;
146  /// Permutation index corresponding with DHCellSide
147  unsigned int permutation_idx_;
148 };
149 
150 
151 /**
152  * @brief Point accessor allow iterate over quadrature points of given side defined in local element coordinates.
153  */
154 class EdgePoint : public SidePoint {
155 public:
156  /// Default constructor
158  : SidePoint() {}
159 
160  /// Constructor
161  EdgePoint(DHCellSide cell_side, const ElementCacheMap *elm_cache_map, const EdgeIntegral *edge_integral, unsigned int local_point_idx)
162  : SidePoint(cell_side, elm_cache_map, local_point_idx), integral_(edge_integral) {}
163 
164  /// Return corresponds EdgePoint of neighbour side of same dimension (computing of side integrals).
165  inline EdgePoint point_on(DHCellSide edg_side) const;
166 
167  /// Comparison of accessors.
168  bool operator==(const EdgePoint& other) {
169  return (elem_patch_idx_ == other.elem_patch_idx_) && (local_point_idx_ == other.local_point_idx_);
170  }
171 
172  /// Return index in EvalPoints object
173  inline unsigned int eval_point_idx() const;
174 
175 private:
176  /// Pointer to edge point integral
178 };
179 
180 
181 /**
182  * @brief Point accessor allow iterate over quadrature points of given side defined in local element coordinates.
183  */
184 class CouplingPoint : public SidePoint {
185 public:
186  /// Default constructor
188  : SidePoint() {}
189 
190  /// Constructor
191  CouplingPoint(DHCellSide cell_side, const ElementCacheMap *elm_cache_map, const CouplingIntegral *coupling_integral, unsigned int local_point_idx)
192  : SidePoint(cell_side, elm_cache_map, local_point_idx), integral_(coupling_integral) {}
193 
194  /// Return corresponds EdgePoint of neighbour side of same dimension (computing of side integrals).
195  inline BulkPoint lower_dim(DHCellAccessor cell_lower) const;
196 
197  /// Return index in EvalPoints object
198  inline unsigned int eval_point_idx() const;
199 
200  /// Comparison of accessors.
201  bool operator==(const CouplingPoint& other) {
202  return (elem_patch_idx_ == other.elem_patch_idx_) && (local_point_idx_ == other.local_point_idx_);
203  }
204 
205 private:
206  /// Pointer to edge point set
208 };
209 
210 /**
211  * @brief Point accessor allow iterate over quadrature points of given side defined in local element coordinates.
212  */
213 class BoundaryPoint : public SidePoint {
214 public:
215  /// Default constructor
217  : SidePoint() {}
218 
219  /// Constructor
220  BoundaryPoint(DHCellSide cell_side, const ElementCacheMap *elm_cache_map, const BoundaryIntegral *bdr_integral, unsigned int local_point_idx)
221  : SidePoint(cell_side, elm_cache_map, local_point_idx), integral_(bdr_integral) {}
222 
223  /// Return corresponds BulkPoint on boundary element.
224  inline BulkPoint point_bdr(ElementAccessor<3> bdr_elm) const;
225 
226  /// Return index in EvalPoints object
227  inline unsigned int eval_point_idx() const;
228 
229  /// Comparison of accessors.
230  bool operator==(const BoundaryPoint& other) {
231  return (elem_patch_idx_ == other.elem_patch_idx_) && (local_point_idx_ == other.local_point_idx_);
232  }
233 
234 private:
235  /// Pointer to edge point set
237 };
238 
239 
240 
241 /**
242  * Base integral class holds common data members and methods.
243  */
245 public:
246  /// Default constructor
247  BaseIntegral() : eval_points_(nullptr), dim_(0) {}
248 
249  /// Constructor of bulk (n_permutations==0) or side subset
250  BaseIntegral(std::shared_ptr<EvalPoints> eval_points, unsigned int dim)
252 
253  /// Destructor
254  virtual ~BaseIntegral();
255 
256  /// Getter of eval_points
257  std::shared_ptr<EvalPoints> eval_points() const {
258  return eval_points_;
259  }
260 
261  /// Returns dimension.
262  unsigned int dim() const {
263  return dim_;
264  }
265 protected:
266  /// Pointer to EvalPoints
267  std::shared_ptr<EvalPoints> eval_points_;
268  /// Dimension of points
269  unsigned int dim_;
270 };
271 
272 /**
273  * Integral class of bulk points, allows assemblation of volume integrals.
274  */
275 class BulkIntegral : public BaseIntegral, public std::enable_shared_from_this<BulkIntegral> {
276 public:
277  /// Default constructor
279 
280  /// Constructor of bulk integral
281  BulkIntegral(std::shared_ptr<EvalPoints> eval_points, unsigned int dim)
283 
284  /// Destructor
285  ~BulkIntegral();
286 
287  /// Return index of data block according to subset in EvalPoints object
288  inline int get_subset_idx() const {
289  return subset_index_;
290  }
291 
292  /// Returns range of bulk local points for appropriate cell accessor
293  inline Range< BulkPoint > points(unsigned int element_patch_idx, const ElementCacheMap *elm_cache_map) const {
294  auto bgn_it = make_iter<BulkPoint>( BulkPoint(elm_cache_map, PatchCacheLoc(element_patch_idx, eval_points_->subset_begin(dim_, subset_index_)) ));
295  auto end_it = make_iter<BulkPoint>( BulkPoint(elm_cache_map, PatchCacheLoc(element_patch_idx, eval_points_->subset_end(dim_, subset_index_)) ));
296  return Range<BulkPoint>(bgn_it, end_it);
297  }
298 
299 private:
300  /// Index of data block according to subset in EvalPoints object.
301  unsigned int subset_index_;
302 };
303 
304 /**
305  * Integral class of side points, allows assemblation of element - element fluxes.
306  */
307 class EdgeIntegral : public BaseIntegral, public std::enable_shared_from_this<EdgeIntegral> {
308 public:
309  /// Default constructor
311 
312  /// Constructor of edge integral
313  EdgeIntegral(std::shared_ptr<EvalPoints> eval_points, unsigned int dim, unsigned int n_permutations, unsigned int points_per_side);
314 
315  /// Destructor
316  ~EdgeIntegral();
317 
318  /// Getter of n_sides
319  inline unsigned int n_sides() const {
320  return n_sides_;
321  }
322 
323  /// Return index of data block according to subset in EvalPoints object
324  inline int get_subset_idx() const {
325  return subset_index_;
326  }
327 
328  /// Returns range of side local points for appropriate cell side accessor
329  inline Range< EdgePoint > points(const DHCellSide &cell_side, const ElementCacheMap *elm_cache_map) const {
330  unsigned int begin_idx = eval_points_->subset_begin(dim_, subset_index_);
331  unsigned int end_idx = eval_points_->subset_end(dim_, subset_index_);
332  unsigned int points_per_side = (end_idx - begin_idx) / this->n_sides();
333  auto bgn_it = make_iter<EdgePoint>( EdgePoint(cell_side, elm_cache_map, this, 0 ) );
334  auto end_it = make_iter<EdgePoint>( EdgePoint(cell_side, elm_cache_map, this, points_per_side ) );
335  return Range<EdgePoint>(bgn_it, end_it);
336  }
337 
338  /// Returns structure of permutation indices.
339  inline int perm_idx_ptr(uint i_side, uint i_perm, uint i_point) const {
340  return perm_indices_[i_side][i_perm][i_point];
341  }
342 
343 private:
344  /// Index of data block according to subset in EvalPoints object.
345  unsigned int subset_index_;
346  /// Indices to EvalPoints for different sides and permutations reflecting order of points.
347  unsigned int*** perm_indices_;
348  /// Number of sides (value 0 indicates bulk set)
349  unsigned int n_sides_;
350  /// Number of permutations (value 0 indicates bulk set)
351  unsigned int n_permutations_;
352 
353  friend class EvalPoints;
354  friend class EdgePoint;
355 };
356 
357 /**
358  * Integral class of neighbour points, allows assemblation of element - side fluxes.
359  *
360  * Dimension corresponds with element of higher dim.
361  */
362 class CouplingIntegral : public BaseIntegral, public std::enable_shared_from_this<CouplingIntegral> {
363 public:
364  /// Default constructor
366 
367  /// Constructor of ngh integral
368  CouplingIntegral(std::shared_ptr<EdgeIntegral> edge_integral, std::shared_ptr<BulkIntegral> bulk_integral);
369 
370  /// Destructor
372 
373  /// Return index of data block according to subset of higher dim in EvalPoints object
374  inline int get_subset_high_idx() const {
375  return edge_integral_->get_subset_idx();
376  }
377 
378  /// Return index of data block according to subset of lower dim in EvalPoints object
379  inline int get_subset_low_idx() const {
380  return bulk_integral_->get_subset_idx();
381  }
382 
383  /// Returns range of side local points for appropriate cell side accessor
384  inline Range< CouplingPoint > points(const DHCellSide &cell_side, const ElementCacheMap *elm_cache_map) const {
385  unsigned int begin_idx = eval_points_->subset_begin(dim_, get_subset_high_idx());
386  unsigned int end_idx = eval_points_->subset_end(dim_, get_subset_high_idx());
387  unsigned int points_per_side = (end_idx - begin_idx) / edge_integral_->n_sides();
388  auto bgn_it = make_iter<CouplingPoint>( CouplingPoint(cell_side, elm_cache_map, this, 0 ) );
389  auto end_it = make_iter<CouplingPoint>( CouplingPoint(cell_side, elm_cache_map, this, points_per_side ) );
390  return Range<CouplingPoint>(bgn_it, end_it);
391  }
392 
393 private:
394  /// Integral according to side subset part (element of higher dim) in EvalPoints object.
395  std::shared_ptr<EdgeIntegral> edge_integral_;
396  /// Integral according to bulk subset part (element of lower dim) in EvalPoints object.
397  std::shared_ptr<BulkIntegral> bulk_integral_;
398 
399  friend class CouplingPoint;
400 };
401 
402 /**
403  * Integral class of boundary points, allows assemblation of fluxes between sides and neighbouring boundary elements.
404  */
405 class BoundaryIntegral : public BaseIntegral, public std::enable_shared_from_this<BoundaryIntegral> {
406 public:
407  /// Default constructor
409 
410  /// Constructor of bulk subset
411  BoundaryIntegral(std::shared_ptr<EdgeIntegral> edge_integral, std::shared_ptr<BulkIntegral> bulk_integral);
412 
413  /// Destructor
415 
416  /// Return index of data block according to subset of higher dim in EvalPoints object
417  inline int get_subset_high_idx() const {
418  return edge_integral_->get_subset_idx();
419  }
420 
421  /// Return index of data block according to subset of lower dim (boundary) in EvalPoints object
422  inline int get_subset_low_idx() const {
423  return bulk_integral_->get_subset_idx();
424  }
425 
426  /// Returns range of bulk local points for appropriate cell accessor
427  inline Range< BoundaryPoint > points(const DHCellSide &cell_side, const ElementCacheMap *elm_cache_map) const {
428  unsigned int begin_idx = eval_points_->subset_begin(dim_, get_subset_high_idx());
429  unsigned int end_idx = eval_points_->subset_end(dim_, get_subset_high_idx());
430  unsigned int points_per_side = (end_idx - begin_idx) / edge_integral_->n_sides();
431  auto bgn_it = make_iter<BoundaryPoint>( BoundaryPoint(cell_side, elm_cache_map, this, 0 ) );
432  auto end_it = make_iter<BoundaryPoint>( BoundaryPoint(cell_side, elm_cache_map, this, points_per_side ) );
433  return Range<BoundaryPoint>(bgn_it, end_it);
434  }
435 
436 private:
437  /// Integral according to higher dim (bulk) element subset part in EvalPoints object.
438  std::shared_ptr<EdgeIntegral> edge_integral_;
439  /// Integral according to kower dim (boundary) element subset part in EvalPoints object.
440  std::shared_ptr<BulkIntegral> bulk_integral_;
441 
442  friend class BoundaryPoint;
443 };
444 
445 
446 /******************************************************************************
447  * Implementation of inlined methods
448  */
449 
450 inline unsigned int EdgePoint::eval_point_idx() const {
452 }
453 
454 inline EdgePoint EdgePoint::point_on(DHCellSide edg_side) const {
455  return EdgePoint(edg_side, elm_cache_map_, this->integral_, this->local_point_idx_);
456 }
457 
458 
459 inline unsigned int CouplingPoint::eval_point_idx() const {
461 }
462 
464  unsigned int i_elm = elm_cache_map_->position_in_cache(cell_lower.elm().mesh_idx());
465  unsigned int i_ep = this->eval_points()->subset_begin(cell_lower.dim(), integral_->get_subset_low_idx()) + local_point_idx_;
466  PatchCacheLoc c_pos(i_elm, i_ep);
467  return BulkPoint(elm_cache_map_, c_pos);
468 }
469 
470 
471 inline unsigned int BoundaryPoint::eval_point_idx() const {
473 }
474 
476  unsigned int i_elm = elm_cache_map_->position_in_cache(bdr_elm.mesh_idx());
477  unsigned int i_ep = this->eval_points()->subset_begin(bdr_elm.dim(), integral_->get_subset_low_idx()) + local_point_idx_;
478  PatchCacheLoc c_pos(i_elm, i_ep);
479  return BulkPoint(elm_cache_map_, c_pos);
480 }
481 
482 #endif /* EVAL_SUBSET_HH_ */
CouplingIntegral::points
Range< CouplingPoint > points(const DHCellSide &cell_side, const ElementCacheMap *elm_cache_map) const
Returns range of side local points for appropriate cell side accessor.
Definition: eval_subset.hh:384
BulkIntegral::BulkIntegral
BulkIntegral()
Default constructor.
Definition: eval_subset.hh:278
ElementAccessor::dim
unsigned int dim() const
Definition: accessors.hh:157
EdgeIntegral::n_sides_
unsigned int n_sides_
Number of sides (value 0 indicates bulk set)
Definition: eval_subset.hh:349
ElementAccessor::mesh_idx
unsigned int mesh_idx() const
Return global idx of element in full element vector.
Definition: accessors.hh:187
PointBase::eval_points
std::shared_ptr< EvalPoints > eval_points() const
Getter of EvalPoints object.
Definition: eval_subset.hh:54
PointBase::elem_patch_idx_
unsigned int elem_patch_idx_
Index of element in the patch.
Definition: eval_subset.hh:87
CouplingPoint
Point accessor allow iterate over quadrature points of given side defined in local element coordinate...
Definition: eval_subset.hh:184
BulkIntegral::points
Range< BulkPoint > points(unsigned int element_patch_idx, const ElementCacheMap *elm_cache_map) const
Returns range of bulk local points for appropriate cell accessor.
Definition: eval_subset.hh:293
BaseIntegral::BaseIntegral
BaseIntegral()
Default constructor.
Definition: eval_subset.hh:247
SidePoint::permutation_idx_
unsigned int permutation_idx_
Permutation index corresponding with DHCellSide.
Definition: eval_subset.hh:147
BoundaryPoint::point_bdr
BulkPoint point_bdr(ElementAccessor< 3 > bdr_elm) const
Return corresponds BulkPoint on boundary element.
Definition: eval_subset.hh:475
BoundaryIntegral::bulk_integral_
std::shared_ptr< BulkIntegral > bulk_integral_
Integral according to kower dim (boundary) element subset part in EvalPoints object.
Definition: eval_subset.hh:440
PointBase::elem_patch_idx
unsigned int elem_patch_idx() const
Definition: eval_subset.hh:65
BoundaryPoint::integral_
const BoundaryIntegral * integral_
Pointer to edge point set.
Definition: eval_subset.hh:236
CouplingIntegral::get_subset_low_idx
int get_subset_low_idx() const
Return index of data block according to subset of lower dim in EvalPoints object.
Definition: eval_subset.hh:379
CouplingIntegral::CouplingIntegral
CouplingIntegral()
Default constructor.
Definition: eval_subset.hh:365
ElementCacheMap
Directing class of FieldValueCache.
Definition: field_value_cache.hh:141
eval_points.hh
EdgePoint::integral_
const EdgeIntegral * integral_
Pointer to edge point integral.
Definition: eval_subset.hh:177
BaseIntegral::eval_points_
std::shared_ptr< EvalPoints > eval_points_
Pointer to EvalPoints.
Definition: eval_subset.hh:267
BulkPoint
Point accessor allow iterate over bulk quadrature points defined in local element coordinates.
Definition: eval_subset.hh:96
BulkIntegral::get_subset_idx
int get_subset_idx() const
Return index of data block according to subset in EvalPoints object.
Definition: eval_subset.hh:288
ElementAccessor< 3 >
PointBase
Base point accessor class.
Definition: eval_subset.hh:43
SidePoint
General point accessor allow iterate over quadrature points of given side defined in local element co...
Definition: eval_subset.hh:125
DHCellAccessor::dim
unsigned int dim() const
Return dimension of element appropriate to cell.
Definition: dh_cell_accessor.hh:101
EdgePoint
Point accessor allow iterate over quadrature points of given side defined in local element coordinate...
Definition: eval_subset.hh:154
BaseIntegral::BaseIntegral
BaseIntegral(std::shared_ptr< EvalPoints > eval_points, unsigned int dim)
Constructor of bulk (n_permutations==0) or side subset.
Definition: eval_subset.hh:250
uint
unsigned int uint
Definition: mh_dofhandler.hh:101
BoundaryPoint::eval_point_idx
unsigned int eval_point_idx() const
Return index in EvalPoints object.
Definition: eval_subset.hh:471
ElementCacheMap::position_in_cache
unsigned int position_in_cache(unsigned mesh_elm_idx) const
Return position of element stored in ElementCacheMap.
Definition: field_value_cache.hh:205
BaseIntegral::dim_
unsigned int dim_
Dimension of points.
Definition: eval_subset.hh:269
BoundaryIntegral::get_subset_low_idx
int get_subset_low_idx() const
Return index of data block according to subset of lower dim (boundary) in EvalPoints object.
Definition: eval_subset.hh:422
BaseIntegral::dim
unsigned int dim() const
Returns dimension.
Definition: eval_subset.hh:262
EdgePoint::EdgePoint
EdgePoint(DHCellSide cell_side, const ElementCacheMap *elm_cache_map, const EdgeIntegral *edge_integral, unsigned int local_point_idx)
Constructor.
Definition: eval_subset.hh:161
PointBase::PointBase
PointBase()
Default constructor.
Definition: eval_subset.hh:46
EdgePoint::point_on
EdgePoint point_on(DHCellSide edg_side) const
Return corresponds EdgePoint of neighbour side of same dimension (computing of side integrals).
Definition: eval_subset.hh:454
EdgePoint::EdgePoint
EdgePoint()
Default constructor.
Definition: eval_subset.hh:157
PointBase::inc
void inc()
Iterates to next point.
Definition: eval_subset.hh:70
EdgeIntegral::~EdgeIntegral
~EdgeIntegral()
Destructor.
Definition: eval_subset.cc:56
DHCellSide
Side accessor allows to iterate over sides of DOF handler cell.
Definition: dh_cell_accessor.hh:176
BulkPoint::operator==
bool operator==(const BulkPoint &other)
Comparison of accessors.
Definition: eval_subset.hh:109
EdgeIntegral
Definition: eval_subset.hh:307
SidePoint::side_idx_
unsigned int side_idx_
Index of side in element.
Definition: eval_subset.hh:145
dh_cell_accessor.hh
accessors.hh
CouplingPoint::integral_
const CouplingIntegral * integral_
Pointer to edge point set.
Definition: eval_subset.hh:207
CouplingIntegral::CouplingPoint
friend class CouplingPoint
Definition: eval_subset.hh:399
EdgeIntegral::n_permutations_
unsigned int n_permutations_
Number of permutations (value 0 indicates bulk set)
Definition: eval_subset.hh:351
BoundaryIntegral::BoundaryPoint
friend class BoundaryPoint
Definition: eval_subset.hh:442
BulkIntegral::subset_index_
unsigned int subset_index_
Index of data block according to subset in EvalPoints object.
Definition: eval_subset.hh:301
EdgeIntegral::perm_idx_ptr
int perm_idx_ptr(uint i_side, uint i_perm, uint i_point) const
Returns structure of permutation indices.
Definition: eval_subset.hh:339
CouplingIntegral
Definition: eval_subset.hh:362
BoundaryIntegral::edge_integral_
std::shared_ptr< EdgeIntegral > edge_integral_
Integral according to higher dim (bulk) element subset part in EvalPoints object.
Definition: eval_subset.hh:438
CouplingPoint::eval_point_idx
unsigned int eval_point_idx() const
Return index in EvalPoints object.
Definition: eval_subset.hh:459
EdgeIntegral::n_sides
unsigned int n_sides() const
Getter of n_sides.
Definition: eval_subset.hh:319
CouplingPoint::CouplingPoint
CouplingPoint(DHCellSide cell_side, const ElementCacheMap *elm_cache_map, const CouplingIntegral *coupling_integral, unsigned int local_point_idx)
Constructor.
Definition: eval_subset.hh:191
BaseIntegral::eval_points
std::shared_ptr< EvalPoints > eval_points() const
Getter of eval_points.
Definition: eval_subset.hh:257
BoundaryIntegral
Definition: eval_subset.hh:405
PatchCacheLoc
Holds pair of positions of point in cache (element and eval point)
Definition: field_value_cache.hh:81
BaseIntegral::~BaseIntegral
virtual ~BaseIntegral()
Destructor.
Definition: eval_subset.cc:28
ElementCacheMap::eval_points
std::shared_ptr< EvalPoints > eval_points() const
Getter of eval_points object.
Definition: field_value_cache.hh:183
DHCellAccessor::elm
const ElementAccessor< 3 > elm() const
Return ElementAccessor to element of loc_ele_idx_.
Definition: dh_cell_accessor.hh:71
Side
Definition: accessors.hh:361
BoundaryIntegral::BoundaryIntegral
BoundaryIntegral()
Default constructor.
Definition: eval_subset.hh:408
BoundaryPoint::operator==
bool operator==(const BoundaryPoint &other)
Comparison of accessors.
Definition: eval_subset.hh:230
BulkPoint::eval_point_idx
unsigned int eval_point_idx() const
Return index in EvalPoints object.
Definition: eval_subset.hh:114
BulkIntegral::~BulkIntegral
~BulkIntegral()
Destructor.
Definition: eval_subset.cc:36
CouplingIntegral::edge_integral_
std::shared_ptr< EdgeIntegral > edge_integral_
Integral according to side subset part (element of higher dim) in EvalPoints object.
Definition: eval_subset.hh:395
EdgeIntegral::points
Range< EdgePoint > points(const DHCellSide &cell_side, const ElementCacheMap *elm_cache_map) const
Returns range of side local points for appropriate cell side accessor.
Definition: eval_subset.hh:329
PointBase::PointBase
PointBase(const ElementCacheMap *elm_cache_map, unsigned int loc_point_idx)
Constructor.
Definition: eval_subset.hh:50
EdgePoint::operator==
bool operator==(const EdgePoint &other)
Comparison of accessors.
Definition: eval_subset.hh:168
BoundaryIntegral::points
Range< BoundaryPoint > points(const DHCellSide &cell_side, const ElementCacheMap *elm_cache_map) const
Returns range of bulk local points for appropriate cell accessor.
Definition: eval_subset.hh:427
DHCellSide::element
ElementAccessor< 3 > element() const
Definition: dh_cell_accessor.hh:223
SidePoint::permutation_idx
unsigned int permutation_idx() const
Definition: eval_subset.hh:139
PointBase::local_point_idx_
unsigned int local_point_idx_
Local coordinates within element.
Definition: eval_subset.hh:85
EdgePoint::eval_point_idx
unsigned int eval_point_idx() const
Return index in EvalPoints object.
Definition: eval_subset.hh:450
EdgeIntegral::get_subset_idx
int get_subset_idx() const
Return index of data block according to subset in EvalPoints object.
Definition: eval_subset.hh:324
BaseIntegral
Definition: eval_subset.hh:244
EdgeIntegral::perm_indices_
unsigned int *** perm_indices_
Indices to EvalPoints for different sides and permutations reflecting order of points.
Definition: eval_subset.hh:347
BoundaryPoint
Point accessor allow iterate over quadrature points of given side defined in local element coordinate...
Definition: eval_subset.hh:213
Range
Range helper class.
Definition: range_wrapper.hh:65
CouplingPoint::lower_dim
BulkPoint lower_dim(DHCellAccessor cell_lower) const
Return corresponds EdgePoint of neighbour side of same dimension (computing of side integrals).
Definition: eval_subset.hh:463
BulkPoint::BulkPoint
BulkPoint(const ElementCacheMap *elm_cache_map, PatchCacheLoc cache_pos)
Constructor.
Definition: eval_subset.hh:103
DHCellAccessor
Cell accessor allow iterate over DOF handler cells.
Definition: dh_cell_accessor.hh:43
PointBase::elm_cache_map_
const ElementCacheMap * elm_cache_map_
Pointer ElementCacheMap needed for point evaluation.
Definition: eval_subset.hh:89
BoundaryPoint::BoundaryPoint
BoundaryPoint()
Default constructor.
Definition: eval_subset.hh:216
SidePoint::SidePoint
SidePoint()
Default constructor.
Definition: eval_subset.hh:128
EdgeIntegral::subset_index_
unsigned int subset_index_
Index of data block according to subset in EvalPoints object.
Definition: eval_subset.hh:345
EdgeIntegral::EdgeIntegral
EdgeIntegral()
Default constructor.
Definition: eval_subset.hh:310
PointBase::elm_cache_map
const ElementCacheMap * elm_cache_map() const
Definition: eval_subset.hh:60
field_value_cache.hh
PatchCacheLoc::i_elm_
unsigned int i_elm_
index of element in patch
Definition: field_value_cache.hh:87
CouplingPoint::CouplingPoint
CouplingPoint()
Default constructor.
Definition: eval_subset.hh:187
BoundaryIntegral::~BoundaryIntegral
~BoundaryIntegral()
Destructor.
Definition: eval_subset.cc:90
CouplingIntegral::~CouplingIntegral
~CouplingIntegral()
Destructor.
Definition: eval_subset.cc:76
SidePoint::SidePoint
SidePoint(DHCellSide cell_side, const ElementCacheMap *elm_cache_map, unsigned int local_point_idx)
Constructor.
Definition: eval_subset.hh:132
BoundaryPoint::BoundaryPoint
BoundaryPoint(DHCellSide cell_side, const ElementCacheMap *elm_cache_map, const BoundaryIntegral *bdr_integral, unsigned int local_point_idx)
Constructor.
Definition: eval_subset.hh:220
BoundaryIntegral::get_subset_high_idx
int get_subset_high_idx() const
Return index of data block according to subset of higher dim in EvalPoints object.
Definition: eval_subset.hh:417
BulkIntegral::BulkIntegral
BulkIntegral(std::shared_ptr< EvalPoints > eval_points, unsigned int dim)
Constructor of bulk integral.
Definition: eval_subset.hh:281
BulkPoint::BulkPoint
BulkPoint()
Default constructor.
Definition: eval_subset.hh:99
ASSERT_PTR
#define ASSERT_PTR(ptr)
Definition of assert macro checking non-null pointer (PTR)
Definition: asserts.hh:336
CouplingPoint::operator==
bool operator==(const CouplingPoint &other)
Comparison of accessors.
Definition: eval_subset.hh:201
BulkIntegral
Definition: eval_subset.hh:275
CouplingIntegral::get_subset_high_idx
int get_subset_high_idx() const
Return index of data block according to subset of higher dim in EvalPoints object.
Definition: eval_subset.hh:374
range_wrapper.hh
Implementation of range helper class.
EdgeIntegral::EdgePoint
friend class EdgePoint
Definition: eval_subset.hh:354
CouplingIntegral::bulk_integral_
std::shared_ptr< BulkIntegral > bulk_integral_
Integral according to bulk subset part (element of lower dim) in EvalPoints object.
Definition: eval_subset.hh:397
EvalPoints
Class holds local coordinations of evaluating points (bulk and sides) specified by element dimension.
Definition: eval_points.hh:43