34 template <
unsigned int dim>
44 bulk_integrals_[tpl] = std::make_shared<internal_integrals::Bulk>(quad, quad->
dim(), shared_from_this(), i_subset);
48 return map_it->second;
52 std::shared_ptr<internal_integrals::Bulk> EvalPoints::add_bulk_internal<0>(
Quadrature *quad)
61 bulk_integrals_[tpl] = std::make_shared<internal_integrals::Bulk>(quad, quad->
dim(), shared_from_this(), i_subset);
65 return map_it->second;
68 template <
unsigned int dim>
76 for (
unsigned int i=0; i<dim+1; ++i) {
82 edge_integrals_[tpl] = std::make_shared<internal_integrals::Edge>(quad, quad->
dim()+1, shared_from_this(), i_subset);
86 return map_it->second;
90 return get_max_integral_quad_size<internal_integrals::Bulk>(
bulk_integrals_, dim);
94 return get_max_integral_quad_size<internal_integrals::Edge>(
edge_integrals_, dim);
97 template<
class Integral>
100 for (
auto integral_it : integrals)
101 if (integral_it.second->dim() == dim)
102 if (integral_it.second->quad()->size() > max_qsize)
103 max_qsize = integral_it.second->quad()->size();
108 : local_points_(dim), n_subsets_(0), dim_(dim)
114 template <
unsigned int dim>
116 ASSERT_GT(dim, 0).error(
"Dimension 0 not supported!\n");
117 unsigned int local_points_old_size = local_points_.size();
118 local_points_.resize(quad_points.
size() + local_points_old_size);
119 for (
unsigned int i=0; i<quad_points.
size(); ++i) {
122 local_points_.set(i+local_points_old_size) = quad_points.
vec<dim>(i);
131 subset_starts_[n_subsets_] = this->
size();
132 return n_subsets_ - 1;
136 template std::shared_ptr<internal_integrals::Bulk> EvalPoints::add_bulk_internal<0>(
Quadrature *);
137 template std::shared_ptr<internal_integrals::Bulk> EvalPoints::add_bulk_internal<1>(
Quadrature *);
138 template std::shared_ptr<internal_integrals::Bulk> EvalPoints::add_bulk_internal<2>(
Quadrature *);
139 template std::shared_ptr<internal_integrals::Bulk> EvalPoints::add_bulk_internal<3>(
Quadrature *);
140 template std::shared_ptr<internal_integrals::Edge> EvalPoints::add_edge_internal<1>(
Quadrature *);
141 template std::shared_ptr<internal_integrals::Edge> EvalPoints::add_edge_internal<2>(
Quadrature *);
142 template std::shared_ptr<internal_integrals::Edge> EvalPoints::add_edge_internal<3>(
Quadrature *);
#define ASSERT_LT(a, b)
Definition of comparative assert macro (Less Than) only for debug mode.
#define ASSERT_EQ(a, b)
Definition of comparative assert macro (EQual) only for debug mode.
#define ASSERT_GT(a, b)
Definition of comparative assert macro (Greater Than) only for debug mode.
ArmaVec< Type, nr > vec(uint mat_index) const
unsigned int size() const
Subobject holds evaluation points data of one dimension (0,1,2,3)
std::array< int, EvalPoints::max_subsets+1 > subset_starts_
Indices of subsets data in local_points_ vector, used size is n_subsets_ + 1.
DimEvalPoints(unsigned int dim)
Constructor.
uint add_subset()
Adds new subset and its end size to subset_starts_ array.
Armor::Array< double > local_points_
Local coords of points vector.
void add_local_points(const Armor::Array< double > &quad_points)
Adds set of local point to local_points_ (bulk or side).
static const unsigned int undefined_dim
Undefined dimension of new (empty) object.
unsigned int size(unsigned int dim) const
Return size of evaluation points object (number of points).
std::shared_ptr< internal_integrals::Edge > add_edge_internal(Quadrature *)
The same as add_bulk but for edge points on sides.
std::shared_ptr< internal_integrals::Bulk > add_bulk_internal(Quadrature *)
static const unsigned int max_subset_points
Maximal average number of points hold in subset.
uint get_max_integral_quad_size(IntegralPtrMap< Integral > integrals, unsigned int dim) const
Common implementation of get_max_bulk_quad_size and get_max_side_quad_size.
IntegralPtrMap< internal_integrals::Bulk > bulk_integrals_
Maps of all BulkIntegrals of dimensions 0,1,2,3.
uint get_max_bulk_quad_size(unsigned int dim) const
Return maximal size of quadrature of given dimension of bulk integral (Bulk, Coupling /lower-dim/)
IntegralPtrMap< internal_integrals::Edge > edge_integrals_
Maps of all EdgeIntegrals of dimensions 1,2,3.
std::array< DimEvalPoints, 4 > dim_eval_points_
Sub objects of dimensions 0,1,2,3.
static constexpr unsigned int max_subsets
Maximal number of hold subsets.
uint get_max_side_quad_size(unsigned int dim) const
Return maximal size of quadrature of given dimension of side integral (Edge, Coupling /higher-dim/,...
Base class for quadrature rules on simplices in arbitrary dimensions.
Quadrature make_from_side(unsigned int sid) const
const Armor::Array< double > & get_points() const
Return a reference to the whole array of quadrature points.
unsigned int size() const
Returns number of quadrature points.
std::unordered_map< std::tuple< uint, uint >, std::shared_ptr< Integral >, IntegralTplHash > IntegralPtrMap
Alias for unordered_map of shared_ptr<Integral> with custom hash.
Class FEValues calculates finite element data on the actual cells such as shape function values,...
Basic definitions of numerical quadrature rules.
Class RefElement defines numbering of vertices, sides, calculation of normal vectors etc.
static std::tuple< uint, uint > integral_tuple(uint dim, uint quad_size)
Create tuple from dimennsion and size of Quadrature.