Flow123d
JS_before_hm-2198-g122e1f2e2
|
Go to the documentation of this file.
18 #ifndef ASSEMBLY_BASE_HH_
19 #define ASSEMBLY_BASE_HH_
33 template <
unsigned int dim>
80 ASSERT_PTR(
quad_).error(
"Data member 'quad_' must be initialized if you use bulk integral!\n");
85 ASSERT_PTR(
quad_low_).error(
"Data member 'quad_low_' must be initialized if you use edge integral!\n");
90 ASSERT_PTR(
quad_).error(
"Data member 'quad_' must be initialized if you use coupling integral!\n");
91 ASSERT_PTR(
quad_low_).error(
"Data member 'quad_low_' must be initialized if you use coupling integral!\n");
96 ASSERT_PTR(
quad_).error(
"Data member 'quad_' must be initialized if you use boundary integral!\n");
97 ASSERT_PTR(
quad_low_).error(
"Data member 'quad_low_' must be initialized if you use boundary integral!\n");
110 ASSERT_DBG( cell_side.
dim() > 0 ).error(
"Invalid cell dimension, must be 1, 2 or 3!\n");
116 ASSERT_DBG( cell_side.
dim() > 1 ).error(
"Invalid cell dimension, must be 2 or 3!\n");
122 ASSERT_DBG( cell_side.
dim() > 0 ).error(
"Invalid cell dimension, must be 1, 2 or 3!\n");
128 for (
unsigned int i=0; i<bulk_integral_data.
permanent_size(); ++i) {
129 if (bulk_integral_data[i].cell.dim() != dim)
continue;
142 for (
unsigned int i=0; i<boundary_integral_data.
permanent_size(); ++i) {
143 if (boundary_integral_data[i].side.dim() != dim)
continue;
150 for (
unsigned int i=0; i<edge_integral_data.
permanent_size(); ++i) {
151 auto range = edge_integral_data[i].edge_side_range;
152 if (range.begin()->dim() != dim)
continue;
159 for (
unsigned int i=0; i<coupling_integral_data.
permanent_size(); ++i) {
160 if (coupling_integral_data[i].side.dim() != dim)
continue;
161 this->
dimjoin_intergral(coupling_integral_data[i].cell, coupling_integral_data[i].side);
168 std::shared_ptr<BulkIntegral>
bulk_;
169 std::shared_ptr<EdgeIntegral>
edge_;
std::shared_ptr< BoundaryIntegral > boundary_
Boundary integrals betwwen side and boundary element of dim-1.
std::array< std::shared_ptr< CouplingIntegral >, 2 > coupling_
Coupling integrals between elements of dimensions 1-2, 2-3.
std::string print_update_flags(UpdateFlags u) const
Print update flags to string format.
virtual ~AssemblyBase()
Destructor.
Set of all used integral necessary in assemblation.
Range< EdgePoint > edge_points(const DHCellSide &cell_side) const
Return EdgePoint range of appropriate dimension.
unsigned int position_in_cache(unsigned mesh_elm_idx, bool bdr=false) const
Return position of element stored in ElementCacheMap.
Quadrature * quad_low_
Quadrature used in assembling methods (dim-1).
void assemble_boundary_side_integrals(const RevertableList< BoundaryIntegralData > &boundary_integral_data)
Assembles the boundary side integrals for the given dimension.
virtual void begin()
Method prepares object before assemblation (e.g. balance, ...).
Directing class of FieldValueCache.
std::size_t permanent_size() const
Return permanent size of list.
std::array< std::shared_ptr< EdgeIntegral >, 3 > edge_
Edge integrals between elements of dimensions 1, 2, 3.
virtual void end()
Method finishes object after assemblation (e.g. balance, ...).
std::shared_ptr< BulkIntegral > bulk_
Bulk integrals of elements.
virtual void assemble_cell_integrals(const RevertableList< BulkIntegralData > &bulk_integral_data)
Assembles the cell integrals for the given dimension.
unsigned int dim() const
Return dimension of element appropriate to the side.
GenericAssemblyBase::EdgeIntegralData EdgeIntegralData
GenericAssemblyBase::BulkIntegralData BulkIntegralData
virtual void dimjoin_intergral(FMT_UNUSED DHCellAccessor cell_lower_dim, FMT_UNUSED DHCellSide neighb_side)
Assembles the fluxes between elements of different dimensions.
DimIntegrals integrals_
Set of used integrals.
Side accessor allows to iterate over sides of DOF handler cell.
GenericAssemblyBase::BoundaryIntegralData BoundaryIntegralData
AssemblyBase(unsigned int quad_order)
Constructor.
int n_active_integrals() const
Getter of active_integrals.
std::array< std::shared_ptr< BulkIntegral >, 3 > bulk_
Bulk integrals of elements of dimensions 1, 2, 3.
Definitions of particular quadrature rules on simplices.
void assemble_edge_integrals(const RevertableList< EdgeIntegralData > &edge_integral_data)
Assembles the edge integrals for the given dimension.
std::shared_ptr< EdgeIntegral > edge_
Edge integrals between elements of same dimensions.
Symmetric Gauss-Legendre quadrature formulae on simplices.
virtual void boundary_side_integral(FMT_UNUSED DHCellSide cell_side)
Assembles the fluxes on the boundary.
Range< BulkPoint > bulk_points(unsigned int element_patch_idx) const
Return BulkPoint range of appropriate dimension.
Cell accessor allow iterate over DOF handler cells.
Enum type UpdateFlags indicates which quantities are to be recomputed on each finite element cell.
void assemble_neighbour_integrals(const RevertableList< CouplingIntegralData > &coupling_integral_data)
Assembles the neighbours integrals for the given dimension.
void create_integrals(std::shared_ptr< EvalPoints > eval_points, AssemblyIntegrals &integrals)
Create integrals according to dim of assembly object.
int active_integrals_
Holds mask of active integrals.
Set of integral of given dimension necessary in assemblation.
virtual void cell_integral(FMT_UNUSED DHCellAccessor cell, FMT_UNUSED unsigned int element_patch_idx)
Assembles the volume integrals on cell.
UpdateFlags
Enum type UpdateFlags indicates which quantities are to be recomputed on each finite element cell.
virtual void edge_integral(FMT_UNUSED RangeConvert< DHEdgeSide, DHCellSide > edge_side_range)
Assembles the fluxes between sides on the edge.
GenericAssemblyBase::CouplingIntegralData CouplingIntegralData
Range< CouplingPoint > coupling_points(const DHCellSide &cell_side) const
Return CouplingPoint range of appropriate dimension.
#define ASSERT_PTR(ptr)
Definition of assert macro checking non-null pointer (PTR)
Base class for quadrature rules on simplices in arbitrary dimensions.
Range< BoundaryPoint > boundary_points(const DHCellSide &cell_side) const
Return BoundaryPoint range of appropriate dimension.
std::shared_ptr< CouplingIntegral > coupling_
Coupling integrals between elements of dimensions dim and dim-1.
ElementCacheMap * element_cache_map_
ElementCacheMap shared with GenericAssembly object.
Quadrature * quad_
Quadrature used in assembling methods.
std::array< std::shared_ptr< BoundaryIntegral >, 3 > boundary_
Boundary integrals betwwen elements of dimensions 1, 2, 3 and boundaries.