Flow123d
3.9.0-be1f591da
|
Class for representation of a vector of fields of the same physical quantity. More...
#include <multi_field.hh>
Classes | |
class | MultiFieldFactory |
Public Types | |
typedef FieldAlgorithmBase< spacedim, Value > | SubFieldBaseType |
typedef Field< spacedim, Value > | SubFieldType |
typedef FieldAlgorithmBase< spacedim, Value >::Point | Point |
typedef FieldValue_< 0, 1, typename Value::element_type > | MultiFieldValue |
Public Member Functions | |
TYPEDEF_ERR_INFO (EI_MultiFieldName, const string) | |
TYPEDEF_ERR_INFO (EI_Size, unsigned int) | |
TYPEDEF_ERR_INFO (EI_ExpectedSize, unsigned int) | |
DECLARE_INPUT_EXCEPTION (Exc_InvalidMultiFieldSize,<< "Invalid size "<< EI_Size::val<< "of the MultiField "<< EI_MultiFieldName::qval<< ", expected size: "<< EI_ExpectedSize::val) | |
MultiField (bool bc=false) | |
MultiField (const MultiField &other) | |
MultiField & | operator= (const MultiField &other) |
IT::Instance | get_input_type () override |
IT::Array | get_multifield_input_type () override |
auto | disable_where (const MultiField< spacedim, typename FieldValue< spacedim >::Enum > &control_field, const vector< FieldEnum > &value_list) -> MultiField & |
bool | set_time (const TimeStep &time, LimitSide limit_side) override |
void | set_mesh (const Mesh &mesh) override |
void | copy_from (const FieldCommon &other) override |
void | field_output (std::shared_ptr< OutputTime > stream, OutputTime::DiscreteSpace type) override |
void | observe_output (std::shared_ptr< Observe > observe) override |
bool | is_constant (Region reg) override |
FieldResult | field_result (RegionSet region_set) const override |
Indicates special field states. More... | |
std::string | get_value_attribute () const override |
virtual | ~MultiField () |
unsigned int | size () const |
Number of subfields that compose the multi-field. More... | |
std::vector< const FieldCommon * > | set_dependency (FieldSet &field_set, unsigned int i_reg) const override |
SubFieldType & | operator[] (unsigned int idx) |
const SubFieldType & | operator[] (unsigned int idx) const |
FieldCommon * | get_component (unsigned int idx) override |
void | setup_components () |
void | set_input_list (const Input::Array &list, const TimeGovernor &tg) override |
void | cache_reallocate (const ElementCacheMap &cache_map, unsigned int region_idx) const override |
Implements FieldCommon::cache_reallocate. More... | |
void | cache_update (ElementCacheMap &cache_map, unsigned int region_patch_idx) const override |
Implements FieldCommon::cache_update. More... | |
void | set (std::vector< typename Field< spacedim, Value >::FieldBasePtr > field_vec, double time, std::vector< std::string > region_set_names={"ALL"}) |
void | set (typename Field< spacedim, Value >::FieldBasePtr field, double time, std::vector< std::string > region_set_names={"ALL"}) |
FieldValueCache< double > * | value_cache () override |
Implements FieldCommon::value_cache. More... | |
const FieldValueCache< double > * | value_cache () const override |
Implements FieldCommon::value_cache. More... | |
Public Member Functions inherited from FieldCommon | |
TYPEDEF_ERR_INFO (EI_Time, double) | |
TYPEDEF_ERR_INFO (EI_Field, std::string) | |
TYPEDEF_ERR_INFO (EI_FieldInputName, std::string) | |
TYPEDEF_ERR_INFO (EI_FieldName, std::string) | |
TYPEDEF_ERR_INFO (EI_RegId, unsigned int) | |
TYPEDEF_ERR_INFO (EI_RegLabel, std::string) | |
DECLARE_INPUT_EXCEPTION (ExcNonascendingTime,<< "Non-ascending time: "<< EI_Time::val<< " for field "<< EI_Field::qval<< ".\n") | |
DECLARE_INPUT_EXCEPTION (ExcMissingDomain,<< "Missing domain specification (region or r_id) in the field descriptor:") | |
DECLARE_EXCEPTION (ExcFieldMeshDifference,<< "Two copies of the field "<< EI_Field::qval<< "call set_mesh with different arguments.\n") | |
DECLARE_INPUT_EXCEPTION (ExcMissingFieldValue,<< "Missing value of the input field "<< EI_FieldInputName::qval<< " ("<< EI_FieldName::qval<< ") on region ID: "<< EI_RegId::val<< " label: "<< EI_RegLabel::qval<< ".\n") | |
FieldCommon & | name (const string &name) |
FieldCommon & | description (const string &description) |
FieldCommon & | input_default (const string &input_default) |
FieldCommon & | units (const UnitSI &units) |
Set basic units of the field. More... | |
FieldCommon & | set_limits (double min, double max=std::numeric_limits< double >::max()) |
FieldCommon & | input_selection (Input::Type::Selection element_selection) |
FieldCommon & | output_type (OutputTime::DiscreteSpace rt) |
FieldCommon & | flags (FieldFlag::Flags::Mask mask) |
FieldCommon & | flags_add (FieldFlag::Flags::Mask mask) |
void | set_components (const std::vector< string > &names) |
const std::string & | input_name () const |
const std::string & | name () const |
const std::string | description () const |
const std::string & | input_default () const |
const UnitSI & | units () const |
std::pair< double, double > | limits () const |
OutputTime::DiscreteSpace | get_output_type () const |
bool | is_bc () const |
unsigned int | n_comp () const |
std::string | full_comp_name (unsigned int i_comp) const |
const Mesh * | mesh () const |
FieldFlag::Flags & | flags () |
FieldFlag::Flags | get_flags () const |
double | time () const |
bool | is_jump_time () |
unsigned int | input_list_size () const |
bool | changed () const |
void | mark_input_times (const TimeGovernor &tg) |
void | set_component_index (unsigned int idx) |
bool | is_multifield () const |
virtual FieldCommon * | get_component (FMT_UNUSED unsigned int idx) |
virtual void | set_output_data_cache (FMT_UNUSED OutputTime::DiscreteSpace space_type, FMT_UNUSED std::shared_ptr< OutputTime > stream) |
Create and set shared_ptr to ElementDataCache. Used only in descendant Field<>. More... | |
virtual void | fill_data_value (FMT_UNUSED const std::vector< int > &offsets) |
Fill data to ElementDataCache on given patch. More... | |
virtual | ~FieldCommon () |
void | set_time_result_changed () |
Manually mark flag that the field has been changed. More... | |
Private Attributes | |
std::vector< SubFieldType > | sub_fields_ |
Subfields (items) of MultiField. More... | |
Input::Array | full_input_list_ |
Full list of input field descriptors from which the subfields of MultiField are set. More... | |
const TimeGovernor * | tg_ |
TimeGovernor is necessary for set input list in setup_components method. More... | |
const MultiField< spacedim, typename FieldValue< spacedim >::Enum > * | no_check_control_field_ |
Additional Inherited Members | |
Static Public Member Functions inherited from FieldCommon | |
static IT::Record | field_descriptor_record (const string &record_name) |
static const std::string | field_descriptor_record_description (const string &record_name) |
static bool | print_message_table (ostream &stream, std::string equation_name) |
Public Attributes inherited from FieldCommon | |
std::vector< uint > | shape_ |
Protected Types inherited from FieldCommon | |
enum | TimeStatus { TimeStatus::changed, TimeStatus::constant, TimeStatus::changed_forced, TimeStatus::unknown } |
Protected Member Functions inherited from FieldCommon | |
FieldCommon () | |
FieldCommon (const FieldCommon &other) | |
void | set_history_changed () |
void | set_shape (uint n_rows, uint n_cols) |
Protected Attributes inherited from FieldCommon | |
std::string | name_ |
std::shared_ptr< SharedData > | shared_ |
TimeStatus | set_time_result_ |
double | last_time_ = -numeric_limits<double>::infinity() |
LimitSide | last_limit_side_ = LimitSide::left |
bool | is_jump_time_ |
OutputTime::DiscreteSpace | default_output_data_ = OutputTime::ELEM_DATA |
unsigned int | component_index_ |
bool | multifield_ |
FieldFlag::Flags | flags_ = FieldFlag::declare_input & FieldFlag::equation_input & FieldFlag::allow_output |
Field flags. Default setting is "an equation input field, that can read from user input, and can be written to output". More... | |
Static Protected Attributes inherited from FieldCommon | |
static const unsigned int | history_length_limit_ =3 |
static std::vector< MessageData > | messages_data_ = std::vector<FieldCommon::MessageData>() |
Vector of data of initialization messages. More... | |
Class for representation of a vector of fields of the same physical quantity.
When solving a system of same equations with the number of components given at runtime (as in the case of transport equation for runtime given number of substances) we need means how to work with the whole vector of fields at once. This is the aim of this class. It provides the interface given by the parent class FieldCommonBase
, but principally it is just a vector of Field<Value,dim> objects. The sub-fields or components of a MultiField
are independent objects, how ever the setters propagates the values from the MultiFields to the individual fields. The only exception is the set_name
method which in conjunction with MultiField::set_subfield_names
can set unique name to each component.
Template parameters are used for every subfield.
TODO:
Definition of MultiField must be in separate file. In other case source file field.cc is too big and compiler can throw compile error.
Definition at line 87 of file multi_field.hh.
typedef FieldValue_<0,1,typename Value::element_type> MultiField< spacedim, Value >::MultiFieldValue |
Definition at line 92 of file multi_field.hh.
typedef FieldAlgorithmBase<spacedim, Value>::Point MultiField< spacedim, Value >::Point |
Definition at line 91 of file multi_field.hh.
typedef FieldAlgorithmBase<spacedim, Value> MultiField< spacedim, Value >::SubFieldBaseType |
Definition at line 89 of file multi_field.hh.
typedef Field<spacedim, Value> MultiField< spacedim, Value >::SubFieldType |
Definition at line 90 of file multi_field.hh.
MultiField< spacedim, Value >::MultiField | ( | bool | bc = false | ) |
Default constructor. bc indicates boundary multifield.
Definition at line 38 of file multi_field.impl.hh.
MultiField< spacedim, Value >::MultiField | ( | const MultiField< spacedim, Value > & | other | ) |
Copy constructor.
Definition at line 51 of file multi_field.impl.hh.
|
inlinevirtual |
Virtual destructor.
Definition at line 203 of file multi_field.hh.
|
overridevirtual |
Implements FieldCommon::cache_reallocate.
Implements FieldCommon.
Definition at line 382 of file multi_field.impl.hh.
|
overridevirtual |
Implements FieldCommon::cache_update.
Implements FieldCommon.
Definition at line 389 of file multi_field.impl.hh.
|
overridevirtual |
Polymorphic copy. Check correct type, allows copy of MultiField or Field.
Implements FieldCommon.
Definition at line 177 of file multi_field.impl.hh.
MultiField< spacedim, Value >::DECLARE_INPUT_EXCEPTION | ( | Exc_InvalidMultiFieldSize | , |
<< "Invalid size "<< EI_Size::val<< "of the MultiField< spacedim, Value > "<< EI_MultiFieldName::qval<< " | , | ||
expected size:"<< EI_ExpectedSize::val | |||
) |
auto MultiField< spacedim, Value >::disable_where | ( | const MultiField< spacedim, typename FieldValue< spacedim >::Enum > & | control_field, |
const vector< FieldEnum > & | value_list | ||
) | -> MultiField & |
By this method you can allow that the field need not to be set on regions (and times) where the given control_field
is FieldConstant and has value in given value_list
. We check this in the set_time method. Through this mechanism we can switch of e.g. boundary data fields according to the type of the boundary condition.
Definition at line 133 of file multi_field.impl.hh.
|
overridevirtual |
Implementation of FieldCommonBase::output()
.
Implements FieldCommon.
Definition at line 198 of file multi_field.impl.hh.
|
overridevirtual |
Indicates special field states.
Return possible values from the enum FieldResult
, see description there.
Only difference to Field<>::field_result is meaning of result_constant
. Here we return this value if all subfields are (possibly different) constants.
Not used yet. Possibly tune behavior after usage.
Implements FieldCommon.
Definition at line 229 of file multi_field.impl.hh.
|
inlineoverride |
Returns pointer to the sub-field (component, as FieldCommon) of given index idx
.
Definition at line 235 of file multi_field.hh.
|
overridevirtual |
Returns input type of particular field instance, this is usually static member input_type of the corresponding FieldBase class ( with same template parameters), however, for fields returning "Enum" we have to create whole unique Input::Type hierarchy for every instance since every such field use different Selection for initialization, even if all returns just unsigned int.
Implements FieldCommon.
Definition at line 116 of file multi_field.impl.hh.
|
overridevirtual |
Returns input type for MultiField instance. TODO: temporary solution, see multifield_
Implements FieldCommon.
Definition at line 126 of file multi_field.impl.hh.
|
overridevirtual |
Return specification of the field value type in form of the string: [ <element type>, NRows, NCols]
Result is valid JSON (and/or flow style YAML). For multifields not implemented.
Implements FieldCommon.
Definition at line 252 of file multi_field.impl.hh.
|
overridevirtual |
Implementation of FieldCommonBase::is_constant()
.
Implements FieldCommon.
Definition at line 222 of file multi_field.impl.hh.
|
overridevirtual |
Implementation of FieldCommonBase::observe_output().
Implements FieldCommon.
Definition at line 213 of file multi_field.impl.hh.
MultiField< spacedim, Value > & MultiField< spacedim, Value >::operator= | ( | const MultiField< spacedim, Value > & | other | ) |
Assignment operator. Same properties as copy constructor, but class member name_ is not copied.
Definition at line 64 of file multi_field.impl.hh.
|
inline |
Returns reference to the sub-field (component) of given index idx
.
Definition at line 217 of file multi_field.hh.
|
inline |
Returns constant reference to the sub-field (component) of given index idx
.
Definition at line 226 of file multi_field.hh.
void MultiField< spacedim, Value >::set | ( | std::vector< typename Field< spacedim, Value >::FieldBasePtr > | field_vec, |
double | time, | ||
std::vector< std::string > | region_set_names = {"ALL"} |
||
) |
Assigns fields from field_vec
to individual components and all regions in region sets given by region_set_names
. Field is added to the history with given time and possibly used in the next call of the set_time method. Caller is responsible for correct construction of given field.
Use this method only if necessary.
Definition at line 396 of file multi_field.impl.hh.
void MultiField< spacedim, Value >::set | ( | typename Field< spacedim, Value >::FieldBasePtr | field, |
double | time, | ||
std::vector< std::string > | region_set_names = {"ALL"} |
||
) |
Same as previous but only for one-component MultiField (simplification for HeatModel).
Definition at line 418 of file multi_field.impl.hh.
|
overridevirtual |
Implementation of FieldCommon::set_dependency().
Implements FieldCommon.
Definition at line 374 of file multi_field.impl.hh.
|
overridevirtual |
Returns vector of value in one given point on
an element given by ElementAccessor elm
. It returns reference to he actual value in order to avoid temporaries for vector and tensor values. Returns std::vector of vector values in several points at once. The base class implements trivial implementation using the value(,,)
method. This is not optimal as it involves lot of virtual calls, but this overhead can be negligible for more complex fields as Python of Formula.
Implements FieldCommon.
Definition at line 295 of file multi_field.impl.hh.
|
overridevirtual |
We have to override the set_mesh
method in order to call set_mesh method for subfields.
Implements FieldCommon.
Definition at line 166 of file multi_field.impl.hh.
|
overridevirtual |
Abstract method to update field to the new time level. Implemented by in class template Field<...>.
Return true if the value of the field was changed on some region. The returned value is also stored in changed_during_set_time
data member.
In first call initialize MultiField to the number of components given by the size of names
and use this vector to name individual components. Should be called after the setters derived from FieldCommonBase.
Implements FieldCommon.
Definition at line 144 of file multi_field.impl.hh.
void MultiField< spacedim, Value >::setup_components |
Initialize components of MultiField.
Must be call after setting components, mesh and limit side.
Definition at line 266 of file multi_field.impl.hh.
|
inline |
Number of subfields that compose the multi-field.
Definition at line 206 of file multi_field.hh.
MultiField< spacedim, Value >::TYPEDEF_ERR_INFO | ( | EI_ExpectedSize | , |
unsigned int | |||
) |
MultiField< spacedim, Value >::TYPEDEF_ERR_INFO | ( | EI_MultiFieldName | , |
const | string | ||
) |
MultiField< spacedim, Value >::TYPEDEF_ERR_INFO | ( | EI_Size | , |
unsigned int | |||
) |
|
inlineoverridevirtual |
Implements FieldCommon::value_cache.
Implements FieldCommon.
Definition at line 294 of file multi_field.hh.
|
inlineoverridevirtual |
Implements FieldCommon::value_cache.
Implements FieldCommon.
Definition at line 289 of file multi_field.hh.
|
private |
Full list of input field descriptors from which the subfields of MultiField are set.
Definition at line 304 of file multi_field.hh.
|
private |
If this pointer is set, turn off check of initialization in the set_time
method on the regions where the method get_constant_enum_value
of the control field returns value from no_check_values_
. This field is private copy, its set_time method is called from the set_Time method of actual object.
Definition at line 316 of file multi_field.hh.
|
private |
Subfields (items) of MultiField.
Definition at line 301 of file multi_field.hh.
|
private |
TimeGovernor is necessary for set input list in setup_components method.
Definition at line 307 of file multi_field.hh.