Go to the documentation of this file.
49 template <
int spacedim,
class Value>
73 DECLARE_EXCEPTION( ExcInvalidElemeDim, <<
"Dimension of element in target mesh must be 0, 1 or 2! elm.idx() = " << EI_ElemIdx::val <<
".\n" );
75 <<
"FieldFE " << EI_Field::qval <<
" on region " << EI_Region::qval <<
" have invalid value .\n"
76 <<
"Provided by file " << EI_File::qval <<
" at element ID " << EI_ElemIdx::val <<
".\n"
77 <<
"Please specify in default_value key.\n");
256 template <
unsigned int dim>
260 unsigned int i_dof,
unsigned int i_qp)
263 for (
unsigned int c=0; c<Value::NRows_*Value::NCols_; ++c)
264 v(c/spacedim,c%spacedim) =
fe_values_[dim].shape_value_component(i_dof, i_qp, c);
265 if (Value::NRows_ == Value::NCols_)
271 template<
unsigned int dim>
273 auto fe_system_ptr = std::dynamic_pointer_cast<FESystem<dim>>(
dh_->ds()->fe()[
Dim<dim>{}] );
274 ASSERT(fe_system_ptr !=
nullptr).error(
"Wrong type, must be FESystem!\n");
275 this->
fe_item_[dim].comp_index_ = fe_system_ptr->function_space()->dof_indices()[block_index].component_offset;
276 this->
fe_item_[dim].range_begin_ = fe_system_ptr->fe_dofs(block_index)[0];
277 this->
fe_item_[dim].range_end_ = this->
fe_item_[dim].range_begin_ + fe_system_ptr->fe()[block_index]->n_dofs();
281 template<
unsigned int dim>
283 this->
fe_item_[dim].comp_index_ = 0;
284 this->
fe_item_[dim].range_begin_ = 0;
297 double get_scaled_value(
int i_cache_el,
unsigned int elm_idx,
const std::string ®ion_name, RegionValueErr &actual_compute_region_error);
304 template<
int elemdim>
308 static_assert(elemdim <= spacedim,
"Dimension of element must be less equal than spacedim.");
309 static const double weight_coefs[] = { 1., 1., 2., 6. };
311 QGauss qgauss(elemdim, order);
314 for(
unsigned i=0; i<qgauss.
size(); ++i) {
315 q_weights[i] = qgauss.
weight(i)*weight_coefs[elemdim];
319 return qgauss.
size();
324 std::shared_ptr<DOFHandlerMultiDim>
dh_;
374 template <
int spacedim,
class Value>
375 std::shared_ptr<FieldFE<spacedim, Value> >
create_field_fe(std::shared_ptr<DOFHandlerMultiDim> dh,
380 std::shared_ptr< FieldFE<spacedim, Value> > field_ptr = std::make_shared< FieldFE<spacedim, Value> >();
382 field_ptr->set_fe_data( dh, dh->create_vector(), block_index );
384 field_ptr->set_fe_data( dh, *
vec, block_index );
391 template <
int spacedim,
class Value>
395 std::shared_ptr<DOFHandlerMultiDim> dh_par = std::make_shared<DOFHandlerMultiDim>(mesh);
396 std::shared_ptr<DiscreteSpace> ds = std::make_shared<EqualOrderDiscreteSpace>( &mesh, fe);
397 dh_par->distribute_dofs(ds);
399 return create_field_fe<spacedim,Value>(dh_par);
unsigned int data_size() const
std::string field_name_
field name read from input
std::shared_ptr< EquivalentMeshMap > source_target_mesh_elm_map_
Maps element indices from computational mesh to the source (data).
FieldFlag::Flags flags_
Field flags.
FieldFE(unsigned int n_comp=0)
std::shared_ptr< DOFHandlerMultiDim > conc_dof_handler_
TYPEDEF_ERR_INFO(EI_Field, std::string)
Declaration of exception.
unsigned int range_begin_
void local_to_ghost_data_scatter_end()
Call end scatter functions (local to ghost) on data vector.
void cache_update(FieldValueCache< typename Value::element_type > &data_cache, ElementCacheMap &cache_map, unsigned int region_patch_idx) override
RegionValueErr()
Default constructor, sets valid region.
Armor::ArmaMat< typename Value::element_type, Value::NRows_, Value::NCols_ > handle_fe_shape(unsigned int dim, unsigned int i_dof, unsigned int i_qp)
void set_mesh(const Mesh *mesh) override
static const int registrar
Registrar of class to factory.
Directing class of FieldValueCache.
static constexpr bool value
ElementDataCache< double >::CacheData input_data_cache_
Input ElementDataCache is stored in set_time and used in all evaluation and interpolation methods.
Dedicated class for storing path to input and output files.
unsigned int size() const
Returns number of quadrature points.
@ equivalent_msh
equivalent mesh (default value)
Input::Record in_rec_
Accessor to Input::Record.
std::vector< RegionValueErr > region_value_err_
Set holds data of valid / invalid element values on all regions.
void local_to_ghost_data_scatter_begin()
Call begin scatter functions (local to ghost) on data vector.
Declaration of class which handles the ordering of degrees of freedom (dof) and mappings between loca...
bool boundary_domain_
Is set in set_mesh method. Value true means, that we accept only boundary element accessors in the va...
Space< spacedim >::Point Point
Class FESystem for compound finite elements.
VectorMPI data_vec_
Store data of Field.
void interpolate_gauss()
Interpolate data (use Gaussian distribution) over all elements of target mesh.
void cache_reinit(const ElementCacheMap &cache_map) override
Definitions of basic Lagrangean finite elements with polynomial shape functions.
virtual void init_from_input(const Input::Record &rec, const struct FieldAlgoBaseInitData &init_data)
std::shared_ptr< DOFHandlerMultiDim > get_dofhandler() const
MixedPtr< FiniteElement > fe_
static RealPoint project_unit_to_real(const BaryPoint &point, const ElementMap &map)
std::shared_ptr< DOFHandlerMultiDim > dh_
DOF handler object.
void calculate_element_values()
Calculate data of equivalent_mesh interpolation or native data on input over all elements of target m...
static const Input::Type::Selection & get_interp_selection_input_type()
ArmaMat< double, N, M > mat
const VectorMPI & vec() const
@ interp_p0
P0 interpolation (with the use of calculation of intersections)
double default_value_
Default value of element if not set in mesh data file.
Helper struct stores data for initizalize descentants of FieldAlgorithmBase.
Representation of one time step..
Abstract class for description of finite elements.
double weight(unsigned int i) const
Returns the ith weight.
Common abstract parent of all Field<...> classes.
DataInterpolation interpolation_
Specify type of FE data interpolation.
std::array< FEItem, 4 > fe_item_
Holds specific data of field evaluation over all dimensions.
OutputTime::DiscreteSpace discretization_
Specify section where to find the field data in input mesh file.
RegionValueErr(const std::string ®ion_name, unsigned int elm_id, double value)
Constructor, sets invalid region, element and value specification.
@ gauss_p0
P0 interpolation (with the use of Gaussian distribution)
Symmetric Gauss-Legendre quadrature formulae on simplices.
std::shared_ptr< FieldBaseType > FieldBasePtr
void native_data_to_cache(ElementDataCache< double > &output_data_cache)
static ElementMap element_map(ElementAccessor< 3 > elm)
FieldAlgorithmBase< spacedim, Value > FactoryBaseType
VectorMPI set_fe_data(std::shared_ptr< DOFHandlerMultiDim > dh, VectorMPI dof_values=VectorMPI::sequential(0), unsigned int block_index=FieldFE< spacedim, Value >::undef_uint)
void interpolate_intersection()
Interpolate data (use intersection library) over all elements of target mesh.
DECLARE_INPUT_EXCEPTION(ExcUndefElementValue,<< "FieldFE "<< EI_Field::qval<< " on region "<< EI_Region::qval<< " have invalid value .\n"<< "Provided by file "<< EI_File::qval<< " at element ID "<< EI_ElemIdx::val<< ".\n"<< "Please specify in default_value key.\n")
Armor::ArmaVec< double, point_dim > point(unsigned int i) const
Returns the ith quadrature point.
FieldAlgorithmBase< spacedim, Value >::Point Point
FilePath reader_file_
mesh reader file
Base class for Mesh and BCMesh.
static const Input::Type::Record & get_input_type()
Implementation.
std::shared_ptr< FieldFE< spacedim, Value > > create_field_fe(std::shared_ptr< DOFHandlerMultiDim > dh, VectorMPI *vec=nullptr, unsigned int block_index=FieldFE< spacedim, Value >::undef_uint)
void fill_fe_system_data(unsigned int block_index)
std::vector< FEValues< spacedim > > fe_values_
List of FEValues objects of dimensions 0,1,2,3 used for value calculation.
DECLARE_EXCEPTION(ExcInvalidElemeDim,<< "Dimension of element in target mesh must be 0, 1 or 2! elm.idx() = "<< EI_ElemIdx::val<< ".\n")
static VectorMPI sequential(unsigned int size)
static const Input::Type::Selection & get_disc_selection_input_type()
@ identic_msh
identical mesh
bool set_time(const TimeStep &time) override
Class MappingP1 implements the affine transformation of the unit cell onto the actual cell.
static const unsigned int undef_uint
Field< spacedim, Value >::FieldBasePtr create_field(Input::Record rec, const FieldCommon &field) override
unsigned int compute_fe_quadrature(std::vector< arma::vec::fixed< 3 >> &q_points, std::vector< double > &q_weights, const ElementAccessor< spacedim > &elm, unsigned int order=3)
virtual ~FieldFE()
Destructor.
Base class for quadrature rules on simplices in arbitrary dimensions.
void make_dof_handler(const MeshBase *mesh)
Create DofHandler object.
typename arma::Mat< Type >::template fixed< nr, nc > ArmaMat
double get_scaled_value(int i_cache_el, unsigned int elm_idx, const std::string ®ion_name, RegionValueErr &actual_compute_region_error)
Field< spacedim, Value >::FactoryBase FieldFactoryBaseType
NativeFactory(unsigned int index, std::shared_ptr< DOFHandlerMultiDim > conc_dof_handler, VectorMPI dof_vector=VectorMPI::sequential(0))
Constructor.
Quadrature init_quad(std::shared_ptr< EvalPoints > eval_points)
Initialize FEValues object of given dimension.
Implementation of range helper class.