18 #ifndef ASSEMBLY_OBSERVE_HH_
19 #define ASSEMBLY_OBSERVE_HH_
21 #include <unordered_map>
39 template <
template<
IntDim...>
class DimAssembly>
44 GenericAssemblyObserve(
typename DimAssembly<1>::EqFields *eq_fields,
const std::unordered_set<string> &observe_fields_list,
45 std::shared_ptr<Observe> observe)
69 void assemble(std::shared_ptr<DOFHandlerMultiDim> dh)
override {
72 unsigned int i_ep, subset_begin, subset_idx;
73 auto &patch_point_data =
observe_->patch_point_data();
74 for(
auto & p_data : patch_point_data) {
77 i_ep = subset_begin + p_data.i_quad_point;
78 DHCellAccessor dh_cell = dh->cell_accessor_from_element(p_data.elem_idx);
112 template <
unsigned int dim>
118 static constexpr
const char *
name() {
return "Output_Observe_Assembly"; }
126 for (
auto observe_field : observe_fields_list) {
140 unsigned int element_patch_idx, field_value_cache_position, val_idx;
142 for (
unsigned int i=0; i<bulk_integral_data.
permanent_size(); ++i) {
143 if (bulk_integral_data[i].cell.dim() != dim)
continue;
148 this->
offsets_[field_value_cache_position] = val_idx;
161 for(
auto & p_data : patch_point_data) {
163 if (el_acc.dim()!=dim)
continue;
165 p_data.i_quad = el_acc.dim() - 1;
166 p_data.i_quad_point = reg_points.size();
167 reg_points.push_back(p_data.local_coords);
170 if (reg_points.size() > 0) {
172 for (
uint j=0; j<reg_points.size(); j++) {
173 arma::vec::fixed<dim> fix_p = reg_points[j].subvec(0, dim-1);
197 template <
template<
IntDim...>
class DimAssembly>
Quadrature * quad_
Quadrature used in assembling methods.
AssemblyInternals * asm_internals_
Holds shared internals data with GeneriAssembly.
std::shared_ptr< BulkIntegralAcc< dim > > create_bulk_integral(Quadrature *quad)
const DimIntegrals< dim > & integrals() const
Getter of integrals_.
EqFields * eq_fields_
Data objects shared with EquationOutput.
FieldSet used_fields_
Sub field set contains fields performed to output.
void assemble_cell_integrals(RevertableList< BulkIntegralData > &bulk_integral_data)
Assembles the cell integrals for the given dimension.
AssemblyObserveOutput(EqFields *eq_fields, const std::unordered_set< string > &observe_fields_list, Observe *observe, AssemblyInternals *asm_internals)
Constructor.
void initialize()
Initialize auxiliary vectors and other data members.
std::shared_ptr< BulkIntegralAcc< dim > > bulk_integral_
Accessor of integral.
void create_observe_integrals(std::array< std::shared_ptr< BulkIntegral >, 3 > &integrals)
Create bulk integral according to dim.
~AssemblyObserveOutput()
Destructor.
std::vector< int > offsets_
Holds indices (offsets) of cached data to output data vector.
static constexpr const char * name()
static unsigned int get()
Return number of stored elements.
Cell accessor allow iterate over DOF handler cells.
RegionIdx region_idx() const
void clear_element_eval_points_map()
Reset all items of elements_eval_points_map.
void create_patch()
Create patch of cached elements before reading data to cache.
RevertableList< EvalPointData > eval_point_data_
void init(std::shared_ptr< EvalPoints > eval_points)
Init cache.
void make_paermanent_eval_points()
Mark eval_point_data_ as permanent.
int element_eval_point(unsigned int i_elem_in_cache, unsigned int i_eval_point) const
unsigned int position_in_cache(unsigned mesh_elm_idx, bool bdr=false) const
Return position of element stored in ElementCacheMap.
Container for various descendants of FieldCommonBase.
Range< FieldListAccessor > fields_range() const
Returns range of Fields held in field_list.
const Mesh * mesh() const
Returns pointer to mesh.
FieldCommon * field(const std::string &field_name) const
AssemblyInternals asm_internals_
Holds shared internals data.
Generic class of observe output assemblation.
std::shared_ptr< Observe > observe_
Shared Observe object.
void reallocate_cache()
Calls cache_reallocate method on set of used fields.
GenericAssemblyObserve(typename DimAssembly< 1 >::EqFields *eq_fields, const std::unordered_set< string > &observe_fields_list, std::shared_ptr< Observe > observe)
Constructor.
std::array< std::shared_ptr< BulkIntegral >, 3 > bulk_integrals_
Bulk integrals of elements of dimensions 1, 2, 3.
RevertableList< BulkIntegralData > bulk_integral_data_
Holds data for computing bulk integrals.
MixedPtr< DimAssembly, 1 > multidim_assembly_
Assembly object.
MixedPtr< DimAssembly, 1 > multidim_assembly() const
Getter to set of assembly objects.
void assemble(std::shared_ptr< DOFHandlerMultiDim > dh) override
General assemble methods.
ElementAccessor< 3 > element_accessor(unsigned int idx) const
Create and return ElementAccessor to element of given idx.
Point accessor allow iterate over local Observe points.
unsigned int loc_point_time_index() const
Return local index in data cache (combination of local point index and index of stored time)
OutputDataPtr get_output_cache(std::string field_name)
PatchPointVec & patch_point_data()
Getter of patch_point_data.
Base class for quadrature rules on simplices in arbitrary dimensions.
Armor::Array< double >::ArrayMatSet set(uint i)
double weight(unsigned int i) const
Returns the ith weight.
unsigned int idx() const
Returns a global index of the region.
Declaration of class which handles the ordering of degrees of freedom (dof) and mappings between loca...
unsigned int IntDim
A dimension index type.
Holds common data shared between GenericAssemblz and Assembly<dim> classes.
ElementCacheMap element_cache_map_
ElementCacheMap according to EvalPoints.
std::shared_ptr< EvalPoints > eval_points_
EvalPoints object shared by all integrals.
std::size_t make_permanent()
Finalize temporary part of data.
void reset()
Clear the list.
std::size_t emplace_back(Args &&... args)
std::size_t permanent_size() const
Return permanent size of list.
#define END_TIMER(tag)
Ends a timer with specified tag.
#define START_TIMER(tag)
Starts a timer with specified tag.