Go to the documentation of this file.
25 #include <boost/algorithm/string/replace.hpp>
45 return Input::Type::Record( equation_name+
":UserData",
"Record to set fields of the equation: "+equation_name+
".")
47 "Name of user defined field.")
50 "Instance of FieldAlgoBase descendant.\n"
51 "Please specify shape of field in 'shape_type' key.")
53 "Unit of the field values provided in the main input file, in the external file, or "
54 "by a function (FieldPython).")
61 ASSERT_PERMANENT(&add_field==found_field)(add_field.
name()).error(
"You cannot add field of the same name that exists in FieldSet!\n");
71 for(
auto field_ptr : other.
field_list) this->operator +=(*field_ptr);
80 for(
auto name : names) set += (*this)[name];
86 FieldSet FieldSet::subset( FieldFlag::Flags::Mask mask)
const {
96 string rec_name = equation_name +
":Data";
113 std::shared_ptr<Input::Type::TypeBase> field_type_ptr;
125 if (default_val !=
"") {
126 boost::replace_all(default_val,
"\"",
"\\\"");
167 auto &
field = (*this)[dest_field_name];
183 if (found_field)
return *found_field;
185 THROW(ExcUnknownField() << FieldCommon::EI_Field(field_name) << EI_FieldType(
"FieldSet"));
191 bool changed_all=
false;
199 bool changed_all=
false;
214 bool is_jump =
false;
222 for (
unsigned int i_reg_patch=0; i_reg_patch<cache_map.
n_regions(); ++i_reg_patch) {
231 std::unordered_set<const FieldCommon *> used_fields;
233 for (
unsigned int i_reg=0; i_reg<
mesh_->
region_db().size(); ++i_reg) {
243 if (used_fields.find(f) != used_fields.end() )
return;
244 used_fields.insert(f);
246 for (
auto f_dep : dep_vec) {
266 if (this->
mesh_ !=
nullptr) {
286 s <<
"\nregion_idx " << reg_it.first <<
": ";
287 for (
auto f_it : reg_it.second) {
288 s << f_it->name() <<
", ";
static const Input::Type::Record & make_user_field_type(const std::string &equation_name)
Declare input record type of field defined by user.
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
FieldCommon & operator[](const std::string &field_name) const
Class RefElement defines numbering of vertices, sides, calculation of normal vectors etc.
#define ASSERT_GT(a, b)
Definition of comparative assert macro (Greater Than) only for debug mode.
bool is_jump_time() const
bool set_time(const TimeStep &time, LimitSide limit_side)
bool is_constant(Region reg) const
const RegionDB & region_db() const
Directing class of FieldValueCache.
void set_dependency(FieldSet &used_fieldset)
virtual void copy_from(const FieldCommon &other)=0
virtual std::vector< const FieldCommon * > set_dependency(unsigned int i_reg) const =0
#define THROW(whole_exception_expr)
Wrapper for throw. Saves the throwing point.
Range< FieldListAccessor > fields_range() const
Returns range of Fields held in field_list.
std::map< unsigned int, std::vector< const FieldCommon * > > region_field_update_order_
virtual bool set_time(const TimeStep &time, LimitSide limit_side)=0
FieldCommon & flags(FieldFlag::Flags::Mask mask)
IT::Instance get_input_type() override
std::ostream & operator<<(std::ostream &stream, const FieldSet &set)
static string field_value_shape()
static string field_unit()
static IT::Record field_descriptor_record(const string &record_name)
std::vector< FieldCommon * > field_list
List of all fields.
FieldCoords X_
Field holds coordinates for computing of FieldFormulas.
void topological_sort(const FieldCommon *f, unsigned int i_reg, std::unordered_set< const FieldCommon * > &used_fields)
Helper method sort used fields by dependency.
std::string print_dependency() const
Return order of evaluated fields by dependency and region_idx.
virtual std::string get_value_attribute() const =0
#define ASSERT_PERMANENT(expr)
Allow use shorter versions of macro names if these names is not used with external library.
Representation of one time step..
const Mesh * mesh_
Pointer to the mesh.
Implementation of bidirectional map.
Common abstract parent of all Field<...> classes.
Class for representation SI units of Fields.
static const std::string field_descriptor_record_description(const string &record_name)
void set_mesh(const Mesh &mesh) override
void cache_update(ElementCacheMap &cache_map)
Container for various descendants of FieldCommonBase.
static constexpr Mask input_copy
static const Input::Type::Record & get_input_type()
void set_field_coords(FieldCoords *field_coords)
Setter of field_coords data member.
bool is_multifield() const
void set_mesh(const Mesh &mesh) override
FieldCommon & input_default(const string &input_default)
virtual IT::Instance get_input_type()=0
unsigned int region_idx_from_chunk_position(unsigned int chunk_pos) const
Return begin position of region chunk specified by position in map.
static string field_default_value()
void set_mesh(const Mesh &mesh)
virtual IT::Array get_multifield_input_type()=0
static constexpr Mask declare_input
The field can be set from input. The key in input field descriptor is declared. (default on)
FieldSet()
Default constructor.
Class MappingP1 implements the affine transformation of the unit cell onto the actual cell.
const std::string & input_name() const
void set_field(const std::string &dest_field_name, FieldCommon &source)
static const Input::Type::Selection & get_user_field_shape_selection()
Input selection of user field shape.
FieldCommon & description(const string &description)
Class template representing a field with values dependent on: point, element, and region.
virtual void cache_update(ElementCacheMap &cache_map, unsigned int region_patch_idx) const =0
FieldDepth depth_
Field holds surface depth for computing of FieldFormulas.
Input::Type::Record make_field_descriptor_type(const std::string &equation_name) const
unsigned int n_regions() const
Return number of stored regions.
virtual bool is_constant(Region reg)=0
FieldCommon * field(const std::string &field_name) const
FieldCommon & name(const string &name)