60 template <
int spacedim, class
Value>
67 "GMSH mesh with data. Can be different from actual computational mesh.")
69 "Section where to find the field.\n Some sections are specific to file format: " 70 "point_data/node_data, cell_data/element_data, -/element_node_data, native/-.\n" 71 "If not given by a user, we try to find the field in all sections, but we report an error " 72 "if it is found in more than one section.")
74 "The values of the Field are read from the ```$ElementData``` section with field name given by this key.")
76 "Default value is set on elements which values have not been listed in the mesh data file.")
78 "Definition of the unit of all times defined in the mesh data file.")
80 "This key allows reading field data from the mesh data file shifted in time. Considering the time 't', field descriptor with time 'T', " 81 "time shift 'S', then if 't > T', we read the time frame 't + S'.")
83 IT::Default(
"\"equivalent_mesh\""),
"Type of interpolation applied to the input spatial data.\n" 84 "The default value 'equivalent_mesh' assumes the data being constant on elements living on the same mesh " 85 "as the computational mesh, but possibly with different numbering. In the case of the same numbering, " 86 "the user can set 'identical_mesh' to omit algorithm for guessing node and element renumbering. " 87 "Alternatively, in case of different input mesh, several interpolation algorithms are available.")
91 template <
int spacedim,
class Value>
95 "Specify the section in mesh input file where field data is listed.\nSome sections are specific to file format.")
96 .
add_value(OutputTime::DiscreteSpace::NODE_DATA,
"node_data",
"point_data (VTK) / node_data (GMSH)")
97 .
add_value(OutputTime::DiscreteSpace::ELEM_DATA,
"element_data",
"cell_data (VTK) / element_data (GMSH)")
98 .
add_value(OutputTime::DiscreteSpace::CORNER_DATA,
"element_node_data",
"element_node_data (only for GMSH)")
99 .
add_value(OutputTime::DiscreteSpace::NATIVE_DATA,
"native_data",
"native_data (only for VTK)")
103 template <
int spacedim,
class Value>
106 return it::Selection(
"interpolation",
"Specify interpolation of the input data from its input mesh to the computational mesh.")
107 .
add_value(DataInterpolation::identic_msh,
"identic_mesh",
"Topology and indices of nodes and elements of" 108 "the input mesh and the computational mesh are identical. " 109 "This interpolation is typically used for GMSH input files containing only the field values without " 110 "explicit mesh specification.")
111 .
add_value(DataInterpolation::equivalent_msh,
"equivalent_mesh",
"Topologies of the input mesh and the computational mesh " 112 "are the same, the node and element numbering may differ. " 113 "This interpolation can be used also for VTK input data.")
114 .
add_value(DataInterpolation::gauss_p0,
"P0_gauss",
"Topologies of the input mesh and the computational mesh may differ. " 115 "Constant values on the elements of the computational mesh are evaluated using the Gaussian quadrature of the fixed order 4, " 116 "where the quadrature points and their values are found in the input mesh and input data using the BIH tree search." 118 .
add_value(DataInterpolation::interp_p0,
"P0_intersection",
"Topologies of the input mesh and the computational mesh may differ. " 119 "Can be applied only for boundary fields. For every (boundary) element of the computational mesh the " 120 "intersection with the input mesh is computed. Constant values on the elements of the computational mesh " 121 "are evaluated as the weighted average of the (constant) values on the intersecting elements of the input mesh.")
125 template <
int spacedim,
class Value>
127 Input::register_class< FieldFE<spacedim, Value>,
unsigned int >(
"FieldFE") +
132 template <
int spacedim,
class Value>
135 field_name_(
""), fe_values_(4)
141 template <
int spacedim,
class Value>
145 if (dof_values.
size()==0) {
153 this->fill_fe_item<0>();
154 this->fill_fe_item<1>();
155 this->fill_fe_item<2>();
156 this->fill_fe_item<3>();
157 this->
fe_ =
dh_->ds()->fe();
159 this->fill_fe_system_data<0>(block_index);
160 this->fill_fe_system_data<1>(block_index);
161 this->fill_fe_system_data<2>(block_index);
162 this->fill_fe_system_data<3>(block_index);
171 unsigned int ndofs =
dh_->max_elem_dofs();
177 init_data.
ndofs = ndofs;
206 template <
int spacedim,
class Value>
219 ASSERT(
false).error(
"Invalid element dimension!");
230 template <
int spacedim,
class Value>
251 ASSERT(
false).error(
"Invalid element dimension!");
257 template <
int spacedim,
class Value>
266 unsigned int last_element_idx = -1;
269 unsigned int range_bgn=0, range_end=0;
271 for (
unsigned int i_data = reg_chunk_begin; i_data < reg_chunk_end; ++i_data) {
273 if (elm_idx != last_element_idx) {
276 cell =
dh_->cell_accessor_from_element( elm_idx );
278 last_element_idx = elm_idx;
279 range_bgn = this->
fe_item_[elm.dim()].range_begin_;
280 range_end = this->
fe_item_[elm.dim()].range_end_;
286 for (
unsigned int i_dof=range_bgn, i_cdof=0; i_dof<range_end; i_dof++, i_cdof++) {
289 data_cache.
set(i_data) = mat_value;
294 template <
int spacedim,
class Value>
297 std::shared_ptr<EvalPoints> eval_points = cache_map.
eval_points();
298 std::array<Quadrature, 4> quads{
QGauss(0, 1), this->init_quad<1>(eval_points), this->init_quad<2>(eval_points), this->init_quad<3>(eval_points)};
306 template <
int spacedim,
class Value>
307 template <
unsigned int dim>
311 for (
unsigned int k=0; k<eval_points->size(dim); k++)
312 quad.
set(k) = eval_points->local_point<dim>(k);
317 template <
int spacedim,
class Value>
340 template <
int spacedim,
class Value>
344 ASSERT(
field_name_ !=
"").error(
"Uninitialized FieldFE, did you call init_from_input()?\n");
355 WarningOut().fmt(
"Source mesh of FieldFE '{}' is not compatible with target mesh.\nInterpolation of input data will be changed to 'P0_gauss'.\n",
358 }
else if (this->
interpolation_ == DataInterpolation::interp_p0) {
359 if (!boundary_domain) {
361 WarningOut().fmt(
"Interpolation 'P0_intersection' of FieldFE '{}' can't be used on bulk region.\nIt will be changed to 'P0_gauss'.\n",
372 template <
int spacedim,
class Value>
376 auto bc_mesh =
dh_->mesh()->get_bc_mesh();
378 boundary_dofs_ = std::make_shared< std::vector<IntIdx> >( n_comp * bc_mesh->n_elements() );
382 for (
auto ele : bc_mesh->elements_range()) {
383 IntIdx elm_shift = n_comp * ele.idx();
384 for (
unsigned int i=0; i<
n_comp; ++i, ++j) {
385 in_vec[j] = elm_shift + i;
399 template <
int spacedim,
class Value>
404 switch (this->
value_.n_rows() * this->
value_.n_cols()) {
420 ASSERT(
false).error(
"Should not happen!\n");
423 std::shared_ptr<DOFHandlerMultiDim> dh_par = std::make_shared<DOFHandlerMultiDim>(
const_cast<Mesh &
>(*mesh) );
424 std::shared_ptr<DiscreteSpace> ds = std::make_shared<EqualOrderDiscreteSpace>( &
const_cast<Mesh &
>(*mesh), fe);
425 dh_par->distribute_dofs(ds);
427 unsigned int ndofs =
dh_->max_elem_dofs();
429 this->fill_fe_item<0>();
430 this->fill_fe_item<1>();
431 this->fill_fe_item<2>();
432 this->fill_fe_item<3>();
433 this->
fe_ =
dh_->ds()->fe();
442 init_data.ndofs = ndofs;
443 init_data.n_comp = this->
n_comp();
444 init_data.mixed_fe = this->
fe_;
447 init_data.range_begin = this->
fe_item_[0].range_begin_;
448 init_data.range_end = this->
fe_item_[0].range_end_;
450 init_data.range_begin = this->
fe_item_[1].range_begin_;
451 init_data.range_end = this->
fe_item_[1].range_end_;
453 init_data.range_begin = this->
fe_item_[2].range_begin_;
454 init_data.range_end = this->
fe_item_[2].range_end_;
456 init_data.range_begin = this->
fe_item_[3].range_begin_;
457 init_data.range_end = this->
fe_item_[3].range_end_;
463 template <
int spacedim,
class Value>
467 ASSERT(
field_name_ !=
"").error(
"Uninitialized FieldFE, did you call init_from_input()?\n");
471 unsigned int n_components = this->
value_.n_rows() * this->
value_.n_cols();
474 double read_time = (time.
end()+time_shift) / time_unit_coef;
479 unsigned int n_entities;
480 bool is_native = (header_query.discretization == OutputTime::DiscreteSpace::NATIVE_DATA);
488 n_entities = boundary ?
dh_->mesh()->get_bc_mesh()->n_elements() :
dh_->mesh()->n_elements();
504 }
else if (this->
interpolation_==DataInterpolation::identic_msh) {
506 }
else if (this->
interpolation_==DataInterpolation::equivalent_msh) {
520 template <
int spacedim,
class Value>
523 static const unsigned int quadrature_order = 4;
528 unsigned int quadrature_size=0;
530 unsigned int elem_count;
536 QGauss quad(3, quadrature_order);
537 q_points.resize(quad.
size());
538 q_weights.resize(quad.
size());
541 for (
auto cell :
dh_->own_range()) {
542 auto ele = cell.elm();
543 std::fill(elem_value.begin(), elem_value.end(), 0.0);
544 switch (cell.dim()) {
547 q_points[0] = *ele.node(0);
560 searched_elements.clear();
561 source_mesh->get_bih_tree().find_bounding_box(ele.bounding_box(), searched_elements);
563 for (
unsigned int i=0; i<quadrature_size; ++i) {
564 std::fill(sum_val.begin(), sum_val.end(), 0.0);
569 switch (elm->
dim()) {
571 contains = arma::norm(*elm.
node(0) - q_points[i], 2) < 4*std::numeric_limits<double>::epsilon();
583 ASSERT(
false).error(
"Invalid element dimension!");
587 unsigned int index = sum_val.size() * (*it);
588 for (
unsigned int j=0; j < sum_val.size(); j++) {
589 sum_val[j] += (*data_vec)[index+j];
595 if (elem_count > 0) {
596 for (
unsigned int j=0; j < sum_val.size(); j++) {
597 elem_value[j] += (sum_val[j] / elem_count) * q_weights[i];
604 else loc_dofs = cell.get_loc_dof_indices();
607 for (
unsigned int i=0; i < elem_value.size(); i++) {
615 template <
int spacedim,
class Value>
621 double total_measure;
626 else mesh =
dh_->mesh();
628 if (elm.dim() == 3) {
629 xprintf(
Err,
"Dimension of element in target mesh must be 0, 1 or 2! elm.idx() = %d\n", elm.idx());
632 double epsilon = 4* numeric_limits<double>::epsilon() * elm.measure();
635 if (elm.dim() == 0) {
636 searched_elements.clear();
637 source_mesh->get_bih_tree().find_point(*elm.node(0), searched_elements);
640 searched_elements.clear();
641 source_mesh->get_bih_tree().find_bounding_box(bb, searched_elements);
655 if (ele->
dim() == 3) {
659 arma::vec::fixed<3> real_point = *elm.node(0);
663 measure = (std::fabs(arma::sum( unit_point )-1) <= 1e-14
664 && arma::min( unit_point ) >= 0)
691 if (measure > epsilon) {
692 unsigned int index =
value.size() * (*it);
694 for (
unsigned int i=0; i <
value.size(); i++) {
695 value[i] += vec[index+i] * measure;
697 total_measure += measure;
703 if (total_measure > epsilon) {
712 for (
unsigned int i=0; i <
value.size(); i++) {
716 WarningOut().fmt(
"Processed element with idx {} is out of source mesh!\n", elm.idx());
724 template <
int spacedim,
class Value>
728 unsigned int dof_size, data_vec_i;
735 for (
auto cell :
dh_->own_range()) {
736 dof_size = cell.get_dof_indices(global_dof_indices);
737 LocDofVec loc_dofs = cell.get_loc_dof_indices();
738 data_vec_i = source_target_vec[cell.elm_idx()] * dof_size;
740 for (
unsigned int i=0; i<dof_size; ++i, ++data_vec_i) {
741 data_vec_.
add( loc_dofs[i], (*data_cache)[ data_vec_i ] );
742 ++count_vector[ loc_dofs[i] ];
753 template <
int spacedim,
class Value>
757 unsigned int data_vec_i, i_elm;
763 Mesh *mesh =
dh_->mesh()->get_bc_mesh();
767 data_vec_i = i_elm *
dh_->max_elem_dofs();
768 for (
unsigned int i=0; i<loc_dofs.n_elem; ++i, ++data_vec_i) {
770 data_vec_.
add( loc_dofs[i], (*data_cache)[data_vec_i] );
771 ++count_vector[ loc_dofs[i] ];
779 for (
auto cell :
dh_->own_range()) {
780 LocDofVec loc_dofs = cell.get_loc_dof_indices();
781 data_vec_i = i_elm *
dh_->max_elem_dofs();
782 for (
unsigned int i=0; i<loc_dofs.n_elem; ++i, ++data_vec_i) {
784 data_vec_.
add( loc_dofs[i], (*data_cache)[data_vec_i] );
785 ++count_vector[ loc_dofs[i] ];
798 template <
int spacedim,
class Value>
802 unsigned int data_vec_i;
809 Mesh *mesh =
dh_->mesh()->get_bc_mesh();
815 for (
unsigned int i=0; i<loc_dofs.n_elem; ++i) {
818 ++count_vector[ loc_dofs[i] ];
821 data_vec_i = source_target_vec[ele.mesh_idx()] *
dh_->max_elem_dofs();
822 for (
unsigned int i=0; i<loc_dofs.n_elem; ++i, ++data_vec_i) {
824 data_vec_.
add( loc_dofs[i], (*data_cache)[data_vec_i] );
825 ++count_vector[ loc_dofs[i] ];
832 for (
auto cell :
dh_->own_range()) {
833 LocDofVec loc_dofs = cell.get_loc_dof_indices();
837 for (
unsigned int i=0; i<loc_dofs.n_elem; ++i) {
840 ++count_vector[ loc_dofs[i] ];
843 data_vec_i = source_target_vec[cell.elm_idx()] *
dh_->max_elem_dofs();
844 for (
unsigned int i=0; i<loc_dofs.n_elem; ++i, ++data_vec_i) {
846 data_vec_.
add( loc_dofs[i], (*data_cache)[data_vec_i] );
847 ++count_vector[ loc_dofs[i] ];
860 template <
int spacedim,
class Value>
863 double loc_values[output_data_cache.
n_comp()];
866 for (
auto dh_cell :
dh_->own_range()) {
867 LocDofVec loc_dofs = dh_cell.get_loc_dof_indices();
868 for (i=0; i<loc_dofs.n_elem; ++i) loc_values[i] =
data_vec_.
get( loc_dofs[i] );
869 for ( ; i<output_data_cache.
n_comp(); ++i) loc_values[i] = numeric_limits<double>::signaling_NaN();
870 output_data_cache.
store_value( dh_cell.local_idx(), loc_values );
878 template <
int spacedim,
class Value>
885 template <
int spacedim,
class Value>
892 template <
int spacedim,
class Value>
914 template <
int spacedim,
class Value>
unsigned int region_chunk_begin(unsigned int region_patch_idx) const
Return begin position of region chunk in FieldValueCache.
Armor::ArmaMat< typename Value::element_type, Value::NRows_, Value::NCols_ > handle_fe_shape(unsigned int dim, unsigned int i_dof, unsigned int i_qp)
Class MappingP1 implements the affine transformation of the unit cell onto the actual cell...
virtual ~FieldFE()
Destructor.
void init_unit_conversion_coefficient(const Input::Record &rec, const struct FieldAlgoBaseInitData &init_data)
Init value of unit_conversion_coefficient_ from input.
unsigned int size() const
Return size of output data.
Bounding box in 3d ambient space.
void set_dof_handler_hash(std::size_t hash)
void interpolate_gauss(ElementDataCache< double >::ComponentDataPtr data_vec)
Interpolate data (use Gaussian distribution) over all elements of target mesh.
unsigned int size() const
FEValueHandler< 0, spacedim, Value > value_handler0_
Value handler that allows get value of 0D elements.
Armor::Array< double >::ArrayMatSet set(uint i)
#define ASSERT_EQ_DBG(a, b)
Definition of comparative assert macro (EQual) only for debug mode.
std::shared_ptr< std::vector< T > > ComponentDataPtr
arma::Col< IntIdx > LocDofVec
MixedPtr< FiniteElement > fe_
Classes with algorithms for computation of intersections of meshes.
void calculate_equivalent_values(ElementDataCache< double >::ComponentDataPtr data_cache)
Calculate data of equivalent_mesh interpolation on input over all elements of target mesh...
Some value(s) is set to NaN.
void initialize(FEValueInitData init_data)
Initialize data members.
std::vector< FEValues< spacedim > > fe_values_
List of FEValues objects of dimensions 0,1,2,3 used for value calculation.
unsigned int n_values() const
unsigned int component_idx_
Specify if the field is part of a MultiField and which component it is.
LocDofVec get_loc_dof_indices(unsigned int cell_idx) const
TODO: Temporary solution. Fix problem with merge new DOF handler and boundary Mesh. Will be removed in future.
static void get_element_ids(const FilePath &file_path, const Mesh &mesh)
std::string field_name_
field name read from input
void local_to_ghost_begin()
local_to_ghost_{begin,end} updates the ghost values on neighbouring processors from local values ...
double compute_measure() const override
Computes the relative measure of intersection object.
unsigned int i_element_
mesh_idx of ElementAccessor appropriate to element
void value_list(const Armor::array &point_list, const ElementAccessor< spacedim > &elm, std::vector< typename Value::return_type > &value_list)
Returns std::vector of scalar values in several points at once.
static const unsigned int undef_idx
FEValueHandler< 2, spacedim, Value > value_handler2_
Value handler that allows get value of 2D elements.
const EvalPointData & eval_point_data(unsigned int point_idx) const
Return item of eval_point_data_ specified by its position.
unsigned int range_end
Holds end of component range of evaluation.
VectorMPI data_vec_
Store data of Field.
void store_value(unsigned int idx, const T *value)
Fundamental simplicial intersections.
static BaryPoint project_real_to_unit(const RealPoint &point, const ElementMap &map)
unsigned int dim() const
Return dimension of element appropriate to cell.
FilePath reader_file_
mesh reader file
double read_coef(Input::Iterator< Input::Record > unit_it) const
#define INSTANCE_ALL(field)
void init()
Initializes lower dimensional objects. Sets correctly the pointers to Plucker coordinates and product...
Directing class of FieldValueCache.
void initialize(FEValueInitData init_data)
Initialize data members.
Cell accessor allow iterate over DOF handler cells.
Helper struct stores data for initizalize descentants of FieldAlgorithmBase.
Value::return_type const & value(const Point &p, const ElementAccessor< spacedim > &elm)
Returns one value in one given point.
Class FESystem for compound finite elements.
static const Input::Type::Record & get_input_type()
LocDofVec get_loc_dof_indices() const
Returns the local indices of dofs associated to the cell on the local process.
void set_mesh(const Mesh *mesh, bool boundary_domain) override
#define ASSERT(expr)
Allow use shorter versions of macro names if these names is not used with external library...
#define ADD_CALLS(n_calls)
Increase number of calls in actual timer.
double default_value_
Default value of element if not set in mesh data file.
FEValueHandler< 3, spacedim, Value > value_handler3_
Value handler that allows get value of 3D elements.
bool set_time(const TimeStep &time) override
static const Input::Type::Selection & get_interp_selection_input_type()
Value::return_type const & value(const Point &p, const ElementAccessor< spacedim > &elm)
Returns one value in one given point.
Value::return_type r_value_
void fill_boundary_dofs()
NodeAccessor< 3 > node(unsigned int ni) const
Base class for quadrature rules on simplices in arbitrary dimensions.
Symmetric Gauss-Legendre quadrature formulae on simplices.
VectorMPI set_fe_data(std::shared_ptr< DOFHandlerMultiDim > dh, VectorMPI dof_values=VectorMPI::sequential(0), unsigned int block_index=FieldFE< spacedim, Value >::undef_uint)
unsigned int data_size() const
constexpr bool match(Mask mask) const
void init()
Initializes lower dimensional objects. Sets correctly the pointers to Plucker coordinates and product...
double unit_conversion_coefficient_
Coeficient of conversion of user-defined unit.
MixedPtr< FiniteElement > mixed_fe
FiniteElement objects of all dimensions.
bool boundary_domain_
Is set in set_mesh method. Value true means, that we accept only boundary element accessors in the va...
OutputTime::DiscreteSpace discretization_
Specify section where to find the field data in input mesh file.
std::shared_ptr< DOFHandlerMultiDim > dh_
DOF handler object.
Quadrature init_quad(std::shared_ptr< EvalPoints > eval_points)
Initialize FEValues object of given dimension.
static const Input::Type::Tuple & get_input_time_type(double lower_bound=-std::numeric_limits< double >::max(), double upper_bound=std::numeric_limits< double >::max())
DataInterpolation interpolation_
Specify type of FE data interpolation.
Compound finite element on dim dimensional simplex.
std::array< FEItem, 4 > fe_item_
Holds specific data of field evaluation over all dimensions.
Definitions of basic Lagrangean finite elements with polynomial shape functions.
void resize(unsigned int local_size)
#define START_TIMER(tag)
Starts a timer with specified tag.
void interpolate_intersection(ElementDataCache< double >::ComponentDataPtr data_vec)
Interpolate data (use intersection library) over all elements of target mesh.
std::shared_ptr< std::vector< IntIdx > > boundary_dofs_
unsigned int region_chunk_end(unsigned int region_patch_idx) const
Return end position of region chunk in FieldValueCache.
virtual Value::return_type const & value(const Point &p, const ElementAccessor< spacedim > &elm)
ArrayMatSet set(uint index)
virtual Range< ElementAccessor< 3 > > elements_range() const
Returns range of bulk elements.
void local_to_ghost_data_scatter_begin()
Call begin scatter functions (local to ghost) on data vector.
unsigned int ndofs
number of dofs
static Input::Type::Default get_input_default()
Space< spacedim >::Point Point
void add(unsigned int pos, double val)
Add value to item on given position.
void local_to_ghost_data_scatter_end()
Call end scatter functions (local to ghost) on data vector.
unsigned int i_eval_point_
index of point in EvalPoint object
void set_boundary_dofs_vector(std::shared_ptr< std::vector< IntIdx > > boundary_dofs)
TODO: Temporary solution. Fix problem with merge new DOF handler and boundary Mesh. Will be removed in future.
unsigned int compute_quadrature(std::vector< arma::vec::fixed< 3 >> &q_points, std::vector< double > &q_weights, const ElementAccessor< spacedim > &elm, unsigned int order=3)
Compute real coordinates and weights (use QGauss) for given element.
CheckResult
Return type of method that checked data stored in ElementDataCache (NaN values, limits) ...
std::shared_ptr< DOFHandlerMultiDim > dh
DOF handler object.
double read_time(Input::Iterator< Input::Tuple > time_it, double default_time=std::numeric_limits< double >::quiet_NaN()) const
typename arma::Mat< Type >::template fixed< nr, nc > ArmaMat
void local_to_ghost_end()
local_to_ghost_{begin,end} updates the ghost values on neighbouring processors from local values ...
#define ASSERT_LE_DBG(a, b)
Definition of comparative assert macro (Less or Equal) only for debug mode.
FEValueHandler< 1, spacedim, Value > value_handler1_
Value handler that allows get value of 1D elements.
Dedicated class for storing path to input and output files.
void set(unsigned int pos, double val)
Set value on given position.
static const Input::Type::Selection & get_disc_selection_input_type()
double get(unsigned int pos) const
Return value on given position.
int LongIdx
Define type that represents indices of large arrays (elements, nodes, dofs etc.)
bool is_constant_in_space_
Flag detects that field is only dependent on time.
void value_list(const Armor::array &point_list, const ElementAccessor< spacedim > &elm, std::vector< typename Value::return_type > &value_list)
Returns std::vector of scalar values in several points at once.
Value value_
Last value, prevents passing large values (vectors) by value.
Input::Record in_rec_
Accessor to Input::Record.
#define ASSERT_PTR(ptr)
Definition of assert macro checking non-null pointer (PTR)
void normalize(unsigned int pos, double divisor)
Normalize value on given position.
FieldFE(unsigned int n_comp=0)
std::shared_ptr< EvalPoints > eval_points() const
Getter of eval_points object.
MixedPtr< FESystem > mixed_fe_system(MixedPtr< FiniteElement > fe, Args &&...args)
Definitions of particular quadrature rules on simplices.
Class for 2D-2D intersections.
#define WarningOut()
Macro defining 'warning' record of log.
void cache_update(FieldValueCache< typename Value::element_type > &data_cache, ElementCacheMap &cache_map, unsigned int region_patch_idx) override
void set_boundary_dofs_vector(std::shared_ptr< std::vector< IntIdx > > boundary_dofs)
TODO: Temporary solution. Fix problem with merge new DOF handler and boundary Mesh. Will be removed in future.
#define END_TIMER(tag)
Ends a timer with specified tag.
std::shared_ptr< std::vector< LongIdx > > source_target_mesh_elm_map_
Maps element indices between source (data) and target (computational) mesh if data interpolation is s...
virtual void value_list(const Armor::array &point_list, const ElementAccessor< spacedim > &elm, std::vector< typename Value::return_type > &value_list)
virtual void init_from_input(const Input::Record &rec, const struct FieldAlgoBaseInitData &init_data)
static std::shared_ptr< Mesh > get_mesh(const FilePath &file_path)
VectorMPI data_vec
Store data of Field.
void cache_reinit(const ElementCacheMap &cache_map) override
static ElementMap element_map(ElementAccessor< 3 > elm)
unsigned int n_comp() const
static constexpr Mask equation_input
The field is data parameter of the owning equation. (default on)
static bool contains_point(arma::vec point, ElementAccessor< 3 > elm)
Test if element contains given point.
Internal auxiliary class representing intersection object of simplex<dimA> and simplex<dimB>.
static std::shared_ptr< BaseMeshReader > get_reader(const FilePath &file_path)
unsigned int n_comp
number of components
unsigned int size() const
Returns number of quadrature points.
void calculate_native_values(ElementDataCache< double >::ComponentDataPtr data_cache)
Calculate native data over all elements of target mesh.
FieldFlag::Flags flags_
Field flags.
Initialization structure of FEValueHandler class.
unsigned int range_begin
Holds begin of component range of evaluation.
#define THROW(whole_exception_expr)
Wrapper for throw. Saves the throwing point.
Representation of one time step..
static std::shared_ptr< std::vector< LongIdx > > get_target_mesh_element_map(const FilePath &file_path, Mesh *computational_mesh)
void make_dof_handler(const Mesh *mesh)
Create DofHandler object.
Implementation of range helper class.
void native_data_to_cache(ElementDataCache< double > &output_data_cache)
#define FLOW123D_FORCE_LINK_IN_CHILD(x)
#define ASSERT_EQ(a, b)
Definition of comparative assert macro (EQual)
static constexpr Mask declare_input
The field can be set from input. The key in input field descriptor is declared. (default on) ...
static VectorMPI sequential(unsigned int size)
unsigned int n_comp() const
Internal class representing intersection object.
#define ASSERT_LT_DBG(a, b)
Definition of comparative assert macro (Less Than) only for debug mode.
void calculate_identic_values(ElementDataCache< double >::ComponentDataPtr data_cache)
Calculate data of identict_mesh interpolation on input data over all elements of target mesh...