Flow123d  3.9.0-44fe12069
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  * TODO (readability, optimization):
19  * - EdgePoint::point_on is too general, can fail for non-matching sides,
20  * depends on a map;
21  * Iterator over edge sides should know index of side on the edge or
22  * we should directly iterate over pairs of sides and iterate points over both sides
23  * without mapping.
24  * - similarly for Coupling and boundary points
25  * - Points should just hold necessary indices, without reference to complex classes,
26  * these points only can be used as indices to fields to get appropriate value in the field cache
27  */
28 
29 #ifndef EVAL_SUBSET_HH_
30 #define EVAL_SUBSET_HH_
31 
32 #include <memory>
33 #include <armadillo>
34 #include "fields/eval_points.hh"
36 #include "mesh/range_wrapper.hh"
37 #include "mesh/accessors.hh"
38 #include "fem/dh_cell_accessor.hh"
39 
40 
41 class Side;
42 class BulkIntegral;
43 class EdgeIntegral;
44 class CouplingIntegral;
45 class BoundaryIntegral;
46 
47 
48 /**
49  * @brief Base point accessor class.
50  */
51 /**
52  * @brief Point accessor allow iterate over bulk quadrature points defined in local element coordinates.
53  */
54 
55 class BulkPoint {
56 public:
57  /// Default constructor
59  {}
60 
61  /// Constructor
62  BulkPoint(const ElementCacheMap *elm_cache_map, uint elem_idx, uint loc_point_idx)
63  : elm_cache_map_(elm_cache_map), elem_patch_idx_(elem_idx), local_point_idx_(loc_point_idx)
64  {}
65 
66  /// Getter of EvalPoints object.
67  inline std::shared_ptr<EvalPoints> eval_points() const {
68  ASSERT_PTR(elm_cache_map_).error("Invalid point.\n");
69  return elm_cache_map_->eval_points();
70  }
71 
72  // Getter of ElementCacheMap object.
73  inline const ElementCacheMap *elm_cache_map() const {
74  return elm_cache_map_;
75  }
76 
77 
78  // Getter of element patch index.
79  inline unsigned int elem_patch_idx() const {
80  return elem_patch_idx_;
81  }
82 
83  /// Return index in EvalPoints object
84  inline unsigned int eval_point_idx() const {
85  return local_point_idx_;
86  }
87 
88  /// Iterates to next point.
89  void inc() {
90  this->local_point_idx_++;
91  }
92 
93  /// Comparison of accessors.
94  bool operator==(const BulkPoint& other) {
96  return (local_point_idx_ == other.local_point_idx_);
97  }
98 
99 
100 protected:
102  /// Index of element in the patch.
103  unsigned int elem_patch_idx_;
104  /// Index of the local point in the integral object.
105  unsigned int local_point_idx_;
106 };
107 
108 
109 
110 
111 /**
112  * @brief General point a+ side_begin_ + ccessor allow iterate over quadrature points of given side defined in local element coordinates.
113  *
114  * Common ancestor of all side points classes (Edge-, Coupling-, BoundaryPoint)
115  */
116 class SidePoint : public BulkPoint {
117 public:
118  /// Default constructor
120  : BulkPoint() {}
121 
122  /// Constructor
124  : BulkPoint(bulk), side_begin_(side_begin)
125  {
126  //DebugOut().fmt("begin: {} sidx: {}", side_begin_, local_point_idx_);
127  }
128 
129 
130  /// Constructor
131  inline SidePoint(DHCellSide cell_side, const ElementCacheMap *elm_cache_map,
132  const EdgeIntegral *edge_integral, unsigned int local_point_idx);
133 
134  /// Return index in EvalPoints object
135  inline unsigned int eval_point_idx() const {
136  return side_begin_ + local_point_idx_;
137  }
138 
139  /// Comparison of accessors.
140  bool operator==(const SidePoint& other) {
143  return (local_point_idx_ == other.local_point_idx_);
144  }
145 
146 
147 protected:
148  //// local_point_idx_ here have meaning of index within the side.
149 
150  /// Index of side in element
151  unsigned int side_begin_;
152 
153 };
154 
155 
156 /**
157  * @brief Point accessor allow iterate over quadrature points of given side defined in local element coordinates.
158  */
159 class EdgePoint : public SidePoint {
160 public:
161  /// Default constructor
163  : SidePoint() {}
164 
165  /// Constructor
166  inline EdgePoint(BulkPoint bulk, const EdgeIntegral *edge_integral, uint side_begin);
167 
168  /// Return corresponds EdgePoint of neighbour side of same dimension (computing of side integrals).
169  inline EdgePoint point_on(const DHCellSide &edg_side) const;
170 
171  /// Comparison of accessors.
172  bool operator==(const EdgePoint& other) {
173  return (elem_patch_idx_ == other.elem_patch_idx_) && (local_point_idx_ == other.local_point_idx_);
174  }
175 private:
177 };
178 
179 
180 /**
181  * @brief Point accessor allow iterate over quadrature points of given side defined in local element coordinates.
182  */
183 class CouplingPoint : public SidePoint {
184 public:
185  /// Default constructor
187  : SidePoint() {}
188 
189  /// Constructor
190 
191  inline CouplingPoint(BulkPoint bulk, const CouplingIntegral *coupling_integral, uint side_begin);
192 
193  /// Return corresponds EdgePoint of neighbour side of same dimension (computing of side integrals).
194  inline BulkPoint lower_dim(DHCellAccessor cell_lower) const;
195 
196  /// Comparison of accessors.
197  bool operator==(const CouplingPoint& other) {
198  return (elem_patch_idx_ == other.elem_patch_idx_) && (local_point_idx_ == other.local_point_idx_);
199  }
200 
201 private:
202  /// Pointer to edge point set
204 };
205 
206 /**
207  * @brief Point accessor allow iterate over quadrature points of given side defined in local element coordinates.
208  */
209 class BoundaryPoint : public SidePoint {
210 public:
211  /// Default constructor
213  : SidePoint() {}
214 
215  /// Constructor
216  inline BoundaryPoint(BulkPoint bulk, const BoundaryIntegral *bdr_integral, uint side_begin);
217 
218  /// Return corresponds BulkPoint on boundary element.
219  inline BulkPoint point_bdr(ElementAccessor<3> bdr_elm) const;
220 
221  /// Comparison of accessors.
222  bool operator==(const BoundaryPoint& other) {
223  return (elem_patch_idx_ == other.elem_patch_idx_) && (local_point_idx_ == other.local_point_idx_);
224  }
225 
226 private:
227  /// Pointer to edge point set
229 };
230 
231 
232 
233 /**
234  * Base integral class holds common data members and methods.
235  */
237 public:
238  /// Default constructor
239  BaseIntegral() : eval_points_(nullptr), dim_(0) {}
240 
241  /// Constructor of bulk or side subset
242  BaseIntegral(std::shared_ptr<EvalPoints> eval_points, unsigned int dim)
244 
245  /// Destructor
246  virtual ~BaseIntegral();
247 
248  /// Getter of eval_points
249  std::shared_ptr<EvalPoints> eval_points() const {
250  return eval_points_;
251  }
252 
253  /// Returns dimension.
254  unsigned int dim() const {
255  return dim_;
256  }
257 protected:
258  /// Pointer to EvalPoints
259  std::shared_ptr<EvalPoints> eval_points_;
260  /// Dimension of the cell on which points are placed
261  unsigned int dim_;
262 };
263 
264 /**
265  * Integral class of bulk points, allows assemblation of volume integrals.
266  */
267 class BulkIntegral : public BaseIntegral, public std::enable_shared_from_this<BulkIntegral> {
268 public:
269  /// Default constructor
271 
272  /// Constructor of bulk integral
273  BulkIntegral(std::shared_ptr<EvalPoints> eval_points, unsigned int dim, uint i_subset)
275  {
276  begin_idx_ = eval_points_->subset_begin(dim_, subset_index_);
277  end_idx_ = eval_points_->subset_end(dim_, subset_index_);
278  }
279 
280  /// Destructor
281  ~BulkIntegral();
282 
283  /// Return index of data block according to subset in EvalPoints object
284  inline int get_subset_idx() const {
285  return subset_index_;
286  }
287 
288 
289  /// Returns range of bulk local points for appropriate cell accessor
290  inline Range< BulkPoint > points(unsigned int element_patch_idx, const ElementCacheMap *elm_cache_map) const {
291  auto bgn_it = make_iter<BulkPoint>( BulkPoint(elm_cache_map, element_patch_idx, begin_idx_));
292  auto end_it = make_iter<BulkPoint>( BulkPoint(elm_cache_map, element_patch_idx, end_idx_));
293  return Range<BulkPoint>(bgn_it, end_it);
294  }
295 
296 protected:
297  /// Index of data block according to subset in EvalPoints object.
298  unsigned int subset_index_;
301 
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  ASSERT_PERMANENT(false);
313  }
314 
315  /// Constructor of edge integral
316  EdgeIntegral(std::shared_ptr<EvalPoints> eval_points, unsigned int dim, uint i_subset);
317 
318  /// Destructor
319  ~EdgeIntegral();
320 
321  /// Getter of n_sides
322  inline unsigned int n_sides() const {
323  return n_sides_;
324  }
325 
326  /// Return index of data block according to subset in EvalPoints object
327  inline int get_subset_idx() const {
328  return subset_index_;
329  }
330 
331  inline uint side_begin(const DHCellSide &cell_side) const {
332  return begin_idx_ + cell_side.side_idx() * n_points_per_side_;
333  }
334 
335  /// Returns range of side local points for appropriate cell side accessor
336  inline Range< EdgePoint > points(const DHCellSide &cell_side, const ElementCacheMap *elm_cache_map) const {
337  ASSERT_EQ(cell_side.dim(), dim_);
338  //DebugOut() << "points per side: " << n_points_per_side_;
339  uint element_patch_idx = elm_cache_map->position_in_cache(cell_side.element().idx());
340  uint begin_idx = side_begin(cell_side);
341  auto bgn_it = make_iter<EdgePoint>( EdgePoint(
342  BulkPoint(elm_cache_map, element_patch_idx, 0), this, begin_idx));
343  auto end_it = make_iter<EdgePoint>( EdgePoint(
344  BulkPoint(elm_cache_map, element_patch_idx, n_points_per_side_), this, begin_idx));
345  return Range<EdgePoint>(bgn_it, end_it);
346  }
347 
348 
349 private:
350  unsigned int subset_index_;
352 
353  /// Number of sides (value 0 indicates bulk set)
354  unsigned int n_sides_;
355  /// Number of points. TODO: pass this to the constructor, avoid extraction from the eval_points
357 
358  friend class EvalPoints;
359  friend class EdgePoint;
360  friend class CouplingIntegral;
361  friend class BoundaryIntegral;
362 };
363 
364 /**
365  * Integral class of neighbour points, allows assemblation of element - side fluxes.
366  *
367  * Dimension corresponds with element of higher dim.
368  */
369 class CouplingIntegral : public BaseIntegral, public std::enable_shared_from_this<CouplingIntegral> {
370 public:
371  /// Default constructor
373 
374  /// Constructor of ngh integral
375  CouplingIntegral(std::shared_ptr<EdgeIntegral> edge_integral, std::shared_ptr<BulkIntegral> bulk_integral);
376 
377  /// Destructor
379 
380  /// Return index of data block according to subset of higher dim in EvalPoints object
381  inline int get_subset_high_idx() const {
382  return edge_integral_->get_subset_idx();
383  }
384 
385  /// Return index of data block according to subset of lower dim in EvalPoints object
386  inline int get_subset_low_idx() const {
387  return bulk_integral_->get_subset_idx();
388  }
389 
390  inline uint bulk_begin() const {
391  return eval_points_->subset_begin(dim_-1, bulk_integral_->get_subset_idx());
392  }
393 
394  /// Returns range of side local points for appropriate cell side accessor
395  inline Range< CouplingPoint > points(const DHCellSide &cell_side, const ElementCacheMap *elm_cache_map) const {
396  ASSERT_EQ(cell_side.dim(), dim_);
397  uint element_patch_idx = elm_cache_map->position_in_cache(cell_side.element().idx());
398  uint begin_idx = edge_integral_->side_begin(cell_side);
399  auto bgn_it = make_iter<CouplingPoint>( CouplingPoint(
400  BulkPoint(elm_cache_map, element_patch_idx, 0), this, begin_idx) );
401  auto end_it = make_iter<CouplingPoint>( CouplingPoint(
402  BulkPoint(elm_cache_map, element_patch_idx, edge_integral_->n_points_per_side_), this, begin_idx) );;
403  return Range<CouplingPoint>(bgn_it, end_it);
404  }
405 
406 private:
407  /// Integral according to side subset part (element of higher dim) in EvalPoints object.
408  std::shared_ptr<EdgeIntegral> edge_integral_;
409  /// Integral according to bulk subset part (element of lower dim) in EvalPoints object.
410  std::shared_ptr<BulkIntegral> bulk_integral_;
411 
412  friend class CouplingPoint;
413 };
414 
415 /**
416  * Integral class of boundary points, allows assemblation of fluxes between sides and neighbouring boundary elements.
417  */
418 class BoundaryIntegral : public BaseIntegral, public std::enable_shared_from_this<BoundaryIntegral> {
419 public:
420  /// Default constructor
422 
423  /// Constructor of bulk subset
424  BoundaryIntegral(std::shared_ptr<EdgeIntegral> edge_integral, std::shared_ptr<BulkIntegral> bulk_integral);
425 
426  /// Destructor
428 
429  /// Return index of data block according to subset of higher dim in EvalPoints object
430  inline int get_subset_high_idx() const {
431  return edge_integral_->get_subset_idx();
432  }
433 
434  /// Return index of data block according to subset of lower dim (boundary) in EvalPoints object
435  inline int get_subset_low_idx() const {
436  return bulk_integral_->get_subset_idx();
437  }
438 
439  inline uint bulk_begin() const {
440  // DebugOut().fmt("edge_begin: {} bdr_begin: {}",
441  // eval_points_->subset_begin(dim_, edge_integral_->get_subset_idx()),
442  // eval_points_->subset_begin(dim_-1, bulk_integral_->get_subset_idx()));
443  return eval_points_->subset_begin(dim_-1, bulk_integral_->get_subset_idx());
444  }
445 
446  /// Returns range of bulk local points for appropriate cell accessor
447  inline Range< BoundaryPoint > points(const DHCellSide &cell_side, const ElementCacheMap *elm_cache_map) const {
448  ASSERT_EQ(cell_side.dim(), dim_);
449  uint element_patch_idx = elm_cache_map->position_in_cache(cell_side.element().idx());
450  uint begin_idx = edge_integral_->side_begin(cell_side);
451  auto bgn_it = make_iter<BoundaryPoint>( BoundaryPoint(
452  BulkPoint(elm_cache_map, element_patch_idx, 0), this, begin_idx) );
453  auto end_it = make_iter<BoundaryPoint>( BoundaryPoint(
454  BulkPoint(elm_cache_map, element_patch_idx, edge_integral_->n_points_per_side_), this, begin_idx) );;
455  return Range<BoundaryPoint>(bgn_it, end_it);
456  }
457 
458 private:
459  /// Integral according to higher dim (bulk) element subset part in EvalPoints object.
460  std::shared_ptr<EdgeIntegral> edge_integral_;
461  /// Integral according to kower dim (boundary) element subset part in EvalPoints object.
462  std::shared_ptr<BulkIntegral> bulk_integral_;
463 
464  friend class BoundaryPoint;
465 };
466 
467 
468 /******************************************************************************
469  * Implementation of inlined methods
470  */
471 
472 /// Constructor
473 EdgePoint::EdgePoint(BulkPoint bulk, const EdgeIntegral *edge_integral, uint side_begin)
474 : SidePoint(bulk, side_begin),
475  integral_(edge_integral)
476 {}
477 
478 inline EdgePoint EdgePoint::point_on(const DHCellSide &edg_side) const {
479  uint element_patch_idx = elm_cache_map_->position_in_cache(edg_side.element().idx());
480  uint side_begin = integral_->side_begin(edg_side);
481  return EdgePoint(BulkPoint(elm_cache_map_, element_patch_idx, local_point_idx_),
482  integral_, side_begin);
483 }
484 
485 //******************************************************************************
486 CouplingPoint::CouplingPoint(BulkPoint bulk, const CouplingIntegral *coupling_integral, uint side_begin)
487 : SidePoint(bulk, side_begin),
488  integral_(coupling_integral)
489 {}
490 
491 
493  unsigned int i_elm = elm_cache_map_->position_in_cache(cell_lower.elm().idx());
494  unsigned int i_ep = integral_->bulk_begin() + local_point_idx_;
495  return BulkPoint(elm_cache_map_, i_elm, i_ep);
496 }
497 
498 
499 
500 //******************************************************************************
502 : SidePoint(bulk, side_begin),
503  integral_(bdr_integral)
504 {}
505 
506 
507 
509  unsigned int i_elm = elm_cache_map_->position_in_cache(bdr_elm.idx(), true);
510  unsigned int i_ep = integral_->bulk_begin() + local_point_idx_;
511  //DebugOut() << "begin:" << integral_->bulk_begin() << "iloc " << local_point_idx_;
512  return BulkPoint(elm_cache_map_, i_elm, i_ep);
513 }
514 
515 #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:395
BulkIntegral::BulkIntegral
BulkIntegral()
Default constructor.
Definition: eval_subset.hh:270
BulkPoint::elm_cache_map_
const ElementCacheMap * elm_cache_map_
Definition: eval_subset.hh:101
BulkPoint::elem_patch_idx
unsigned int elem_patch_idx() const
Definition: eval_subset.hh:79
EdgeIntegral::n_sides_
unsigned int n_sides_
Number of sides (value 0 indicates bulk set)
Definition: eval_subset.hh:354
BulkPoint::elm_cache_map
const ElementCacheMap * elm_cache_map() const
Definition: eval_subset.hh:73
CouplingPoint
Point accessor allow iterate over quadrature points of given side defined in local element coordinate...
Definition: eval_subset.hh:183
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:290
BaseIntegral::BaseIntegral
BaseIntegral()
Default constructor.
Definition: eval_subset.hh:239
BoundaryPoint::point_bdr
BulkPoint point_bdr(ElementAccessor< 3 > bdr_elm) const
Return corresponds BulkPoint on boundary element.
Definition: eval_subset.hh:508
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:462
BulkIntegral::begin_idx_
uint begin_idx_
Definition: eval_subset.hh:299
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:215
BoundaryPoint::integral_
const BoundaryIntegral * integral_
Pointer to edge point set.
Definition: eval_subset.hh:228
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:386
BulkPoint::BulkPoint
BulkPoint(const ElementCacheMap *elm_cache_map, uint elem_idx, uint loc_point_idx)
Constructor.
Definition: eval_subset.hh:62
BulkIntegral::BulkIntegral
BulkIntegral(std::shared_ptr< EvalPoints > eval_points, unsigned int dim, uint i_subset)
Constructor of bulk integral.
Definition: eval_subset.hh:273
CouplingIntegral::CouplingIntegral
CouplingIntegral()
Default constructor.
Definition: eval_subset.hh:372
CouplingIntegral::bulk_begin
uint bulk_begin() const
Definition: eval_subset.hh:390
ElementCacheMap
Directing class of FieldValueCache.
Definition: field_value_cache.hh:151
eval_points.hh
EdgePoint::integral_
const EdgeIntegral * integral_
Definition: eval_subset.hh:176
BaseIntegral::eval_points_
std::shared_ptr< EvalPoints > eval_points_
Pointer to EvalPoints.
Definition: eval_subset.hh:259
BulkIntegral::end_idx_
uint end_idx_
Definition: eval_subset.hh:300
BulkPoint
Base point accessor class.
Definition: eval_subset.hh:55
BulkIntegral::get_subset_idx
int get_subset_idx() const
Return index of data block according to subset in EvalPoints object.
Definition: eval_subset.hh:284
ElementAccessor< 3 >
SidePoint
General point a+ side_begin_ + ccessor allow iterate over quadrature points of given side defined in ...
Definition: eval_subset.hh:116
EdgePoint
Point accessor allow iterate over quadrature points of given side defined in local element coordinate...
Definition: eval_subset.hh:159
BaseIntegral::BaseIntegral
BaseIntegral(std::shared_ptr< EvalPoints > eval_points, unsigned int dim)
Constructor of bulk or side subset.
Definition: eval_subset.hh:242
uint
unsigned int uint
Definition: mh_dofhandler.hh:101
DHCellSide::dim
unsigned int dim() const
Return dimension of element appropriate to the side.
Definition: dh_cell_accessor.hh:214
BaseIntegral::dim_
unsigned int dim_
Dimension of the cell on which points are placed.
Definition: eval_subset.hh:261
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:435
BaseIntegral::dim
unsigned int dim() const
Returns dimension.
Definition: eval_subset.hh:254
EdgePoint::EdgePoint
EdgePoint()
Default constructor.
Definition: eval_subset.hh:162
SidePoint::SidePoint
SidePoint(BulkPoint bulk, uint side_begin)
Constructor.
Definition: eval_subset.hh:123
EdgeIntegral::~EdgeIntegral
~EdgeIntegral()
Destructor.
Definition: eval_subset.cc:58
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:94
SidePoint::eval_point_idx
unsigned int eval_point_idx() const
Return index in EvalPoints object.
Definition: eval_subset.hh:135
EdgePoint::point_on
EdgePoint point_on(const DHCellSide &edg_side) const
Return corresponds EdgePoint of neighbour side of same dimension (computing of side integrals).
Definition: eval_subset.hh:478
EdgeIntegral
Definition: eval_subset.hh:307
EdgeIntegral::side_begin
uint side_begin(const DHCellSide &cell_side) const
Definition: eval_subset.hh:331
dh_cell_accessor.hh
accessors.hh
CouplingPoint::integral_
const CouplingIntegral * integral_
Pointer to edge point set.
Definition: eval_subset.hh:203
CouplingIntegral::CouplingPoint
friend class CouplingPoint
Definition: eval_subset.hh:412
BoundaryIntegral::BoundaryPoint
friend class BoundaryPoint
Definition: eval_subset.hh:464
BulkIntegral::subset_index_
unsigned int subset_index_
Index of data block according to subset in EvalPoints object.
Definition: eval_subset.hh:298
ASSERT_PERMANENT
#define ASSERT_PERMANENT(expr)
Allow use shorter versions of macro names if these names is not used with external library.
Definition: asserts.hh:347
CouplingIntegral
Definition: eval_subset.hh:369
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:460
EdgeIntegral::begin_idx_
uint begin_idx_
Definition: eval_subset.hh:351
EdgeIntegral::n_sides
unsigned int n_sides() const
Getter of n_sides.
Definition: eval_subset.hh:322
BaseIntegral::eval_points
std::shared_ptr< EvalPoints > eval_points() const
Getter of eval_points.
Definition: eval_subset.hh:249
BoundaryIntegral
Definition: eval_subset.hh:418
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:193
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:390
BoundaryIntegral::BoundaryIntegral
BoundaryIntegral()
Default constructor.
Definition: eval_subset.hh:421
BulkPoint::inc
void inc()
Iterates to next point.
Definition: eval_subset.hh:89
BoundaryPoint::operator==
bool operator==(const BoundaryPoint &other)
Comparison of accessors.
Definition: eval_subset.hh:222
ASSERT_EQ
#define ASSERT_EQ(a, b)
Definition of comparative assert macro (EQual) only for debug mode.
Definition: asserts.hh:332
BulkPoint::elem_patch_idx_
unsigned int elem_patch_idx_
Index of element in the patch.
Definition: eval_subset.hh:103
SidePoint::side_begin_
unsigned int side_begin_
Index of side in element.
Definition: eval_subset.hh:151
BulkPoint::eval_point_idx
unsigned int eval_point_idx() const
Return index in EvalPoints object.
Definition: eval_subset.hh:84
BulkPoint::eval_points
std::shared_ptr< EvalPoints > eval_points() const
Getter of EvalPoints object.
Definition: eval_subset.hh:67
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:408
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:336
EdgePoint::operator==
bool operator==(const EdgePoint &other)
Comparison of accessors.
Definition: eval_subset.hh:172
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:447
DHCellSide::element
ElementAccessor< 3 > element() const
Definition: dh_cell_accessor.hh:223
EdgeIntegral::get_subset_idx
int get_subset_idx() const
Return index of data block according to subset in EvalPoints object.
Definition: eval_subset.hh:327
BaseIntegral
Definition: eval_subset.hh:236
BoundaryIntegral::bulk_begin
uint bulk_begin() const
Definition: eval_subset.hh:439
BoundaryPoint
Point accessor allow iterate over quadrature points of given side defined in local element coordinate...
Definition: eval_subset.hh:209
bulk
@ bulk
Definition: generic_assembly.hh:33
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:492
DHCellAccessor
Cell accessor allow iterate over DOF handler cells.
Definition: dh_cell_accessor.hh:43
EdgeIntegral::n_points_per_side_
uint n_points_per_side_
Number of points. TODO: pass this to the constructor, avoid extraction from the eval_points.
Definition: eval_subset.hh:356
BoundaryPoint::BoundaryPoint
BoundaryPoint()
Default constructor.
Definition: eval_subset.hh:212
SidePoint::SidePoint
SidePoint()
Default constructor.
Definition: eval_subset.hh:119
EdgeIntegral::subset_index_
unsigned int subset_index_
Definition: eval_subset.hh:350
EdgeIntegral::EdgeIntegral
EdgeIntegral()
Default constructor.
Definition: eval_subset.hh:310
field_value_cache.hh
BulkPoint::local_point_idx_
unsigned int local_point_idx_
Index of the local point in the integral object.
Definition: eval_subset.hh:105
CouplingPoint::CouplingPoint
CouplingPoint()
Default constructor.
Definition: eval_subset.hh:186
BoundaryIntegral::~BoundaryIntegral
~BoundaryIntegral()
Destructor.
Definition: eval_subset.cc:90
ElementAccessor::idx
unsigned int idx() const
We need this method after replacing Region by RegionIdx, and movinf RegionDB instance into particular...
Definition: accessors.hh:215
CouplingIntegral::~CouplingIntegral
~CouplingIntegral()
Destructor.
Definition: eval_subset.cc:73
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:430
BulkPoint::BulkPoint
BulkPoint()
Default constructor.
Definition: eval_subset.hh:58
DHCellSide::side_idx
unsigned int side_idx() const
Definition: dh_cell_accessor.hh:235
ASSERT_PTR
#define ASSERT_PTR(ptr)
Definition of assert macro checking non-null pointer (PTR) only for debug mode.
Definition: asserts.hh:340
CouplingPoint::operator==
bool operator==(const CouplingPoint &other)
Comparison of accessors.
Definition: eval_subset.hh:197
SidePoint::operator==
bool operator==(const SidePoint &other)
Comparison of accessors.
Definition: eval_subset.hh:140
BulkIntegral
Definition: eval_subset.hh:267
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:381
range_wrapper.hh
Implementation of range helper class.
EdgeIntegral::EdgePoint
friend class EdgePoint
Definition: eval_subset.hh:359
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:410
EvalPoints
Class holds local coordinations of evaluating points (bulk and sides) specified by element dimension.
Definition: eval_points.hh:43