Flow123d
JS_before_hm-2198-g122e1f2e2
|
#include <field_formula.hh>
Public Types | |
typedef FieldAlgorithmBase< spacedim, Value >::Point | Point |
typedef FieldAlgorithmBase< spacedim, Value > | FactoryBaseType |
Public Types inherited from FieldAlgorithmBase< spacedim, Value > | |
typedef Space< spacedim >::Point | Point |
Public Member Functions | |
TYPEDEF_ERR_INFO (EI_Field, std::string) | |
DECLARE_INPUT_EXCEPTION (ExcUnknownField,<< "Unknown field "<< EI_Field::qval<< " in the formula: \n") | |
DECLARE_INPUT_EXCEPTION (ExcNotDoubleField,<< "Can not use integer valued field "<< EI_Field::qval<< " in the formula: \n") | |
TYPEDEF_ERR_INFO (EI_BParserMsg, std::string) | |
TYPEDEF_ERR_INFO (EI_Formula, std::string) | |
DECLARE_INPUT_EXCEPTION (ExcParserError,<< "Parsing in "<< EI_BParserMsg::val<< " in the formula: "<< EI_Formula::qval<< "\n") | |
TYPEDEF_ERR_INFO (EI_FParserMsg, std::string) | |
TYPEDEF_ERR_INFO (EI_Row, unsigned int) | |
TYPEDEF_ERR_INFO (EI_Col, unsigned int) | |
DECLARE_INPUT_EXCEPTION (ExcFParserError,<< "ParserError: "<< EI_FParserMsg::val<< "\n in the FieldFormula["<< EI_Row::val<< "]["<< EI_Row::val<< "] == "<< EI_Formula::qval<< " \n") | |
FieldFormula (unsigned int n_comp=0) | |
virtual void | init_from_input (const Input::Record &rec, const struct FieldAlgoBaseInitData &init_data) |
bool | set_time (const TimeStep &time) override |
void | set_mesh (const Mesh *mesh, bool boundary_domain) override |
virtual const Value::return_type & | value (const Point &p, const ElementAccessor< spacedim > &elm) |
virtual void | value_list (const Armor::array &point_list, const ElementAccessor< spacedim > &elm, std::vector< typename Value::return_type > &value_list) |
void | cache_update (FieldValueCache< typename Value::element_type > &data_cache, ElementCacheMap &cache_map, unsigned int region_patch_idx) override |
std::vector< const FieldCommon * > | set_dependency (FieldSet &field_set) override |
void | cache_reinit (const ElementCacheMap &cache_map) override |
virtual | ~FieldFormula () |
Public Member Functions inherited from FieldAlgorithmBase< spacedim, Value > | |
TYPEDEF_ERR_INFO (EI_Field, std::string) | |
DECLARE_EXCEPTION (ExcInputInitUnsupported,<< "The field "<< EI_Field::qval<< " do not support initialization from input.\n") | |
FieldAlgorithmBase (unsigned int n_comp=0) | |
void | set_component_idx (unsigned int idx) |
unsigned int | n_comp () const |
FieldResult | field_result () const |
virtual double | next_change_time () |
virtual void | set_native_dh (std::shared_ptr< DOFHandlerMultiDim >) |
bool | is_constant_in_space () const |
virtual std::vector< const FieldCommon * > | set_dependency (FMT_UNUSED FieldSet &field_set) |
virtual | ~FieldAlgorithmBase () |
Static Public Member Functions | |
static const Input::Type::Record & | get_input_type () |
Implementation. More... | |
Static Public Member Functions inherited from FieldAlgorithmBase< spacedim, Value > | |
static std::string | template_name () |
static Input::Type::Abstract & | get_input_type () |
static const Input::Type::Instance & | get_input_type_instance (Input::Type::Selection value_selection=Input::Type::Selection()) |
static const Input::Type::Record & | get_field_algo_common_keys () |
static std::shared_ptr< FieldAlgorithmBase< spacedim, Value > > | function_factory (const Input::AbstractRecord &rec, const struct FieldAlgoBaseInitData &init_data) |
Private Types | |
typedef StringTensorInput< Value::NRows_, Value::NCols_ > | STI |
Private Member Functions | |
arma::vec | eval_depth_var (const Point &p) |
Private Attributes | |
StringTensor | formula_matrix_ |
std::vector< std::vector< FunctionParser > > | parser_matrix_ |
std::vector< bparser::Parser > | b_parser_ |
Input::Record | in_rec_ |
Accessor to Input::Record. More... | |
std::shared_ptr< SurfaceDepth > | surface_depth_ |
Surface depth object calculate distance from surface. More... | |
bool | has_depth_var_ |
Flag indicates if depth variable 'd' is used in formula - obsolete parameter of FParser. More... | |
bool | has_time_ |
Flag indicates if time variable 't' is used in formula - parameter of BParser. More... | |
uint | sum_shape_sizes_ |
Helper variable for construct of arena, holds sum of sizes (over shape) of all dependent fields. More... | |
bool | first_time_set_ |
Flag indicates first call of set_time method, when FunctionParsers in parser_matrix_ must be initialized. More... | |
bparser::ArenaAlloc * | arena_alloc_ |
Arena object providing data arrays. More... | |
double * | x_ |
Coordinates x, part of previous array. More... | |
double * | y_ |
Coordinates y, part of previous array. More... | |
double * | z_ |
Coordinates z, part of previous array. More... | |
double * | d_ |
Surface depth variable, used optionally if 'd' variable is set. More... | |
double * | res_ |
Result vector of BParser. More... | |
uint * | subsets_ |
Subsets indices in range 0 ... n-1. More... | |
std::vector< const FieldCommon * > | required_fields_ |
std::unordered_map< const FieldCommon *, double * > | eval_field_data_ |
Static Private Attributes | |
static const int | registrar |
Registrar of class to factory. More... | |
Additional Inherited Members | |
Static Public Attributes inherited from FieldAlgorithmBase< spacedim, Value > | |
static const unsigned int | spacedim_ =spacedim |
static constexpr bool | is_enum_valued = std::is_same<typename Value::element_type, FieldEnum>::value |
Protected Member Functions inherited from FieldAlgorithmBase< spacedim, Value > | |
void | init_unit_conversion_coefficient (const Input::Record &rec, const struct FieldAlgoBaseInitData &init_data) |
Init value of unit_conversion_coefficient_ from input. More... | |
Protected Attributes inherited from FieldAlgorithmBase< spacedim, Value > | |
TimeStep | time_ |
Actual time level; initial value is -infinity. More... | |
Value | value_ |
Last value, prevents passing large values (vectors) by value. More... | |
Value::return_type | r_value_ |
FieldResult | field_result_ |
Indicator of particular values (zero, one) constant over space. More... | |
unsigned int | component_idx_ |
Specify if the field is part of a MultiField and which component it is. More... | |
double | unit_conversion_coefficient_ |
Coeficient of conversion of user-defined unit. More... | |
bool | is_constant_in_space_ |
Flag detects that field is only dependent on time. More... | |
Class representing fields given by runtime parsed formulas.
Using libraries: https://github.com/flow123d/bparser/ http://warp.povusers.org/FunctionParser/ (gradually replaced by BParser)
Allows parsing:
Definition at line 63 of file field_formula.hh.
typedef FieldAlgorithmBase<spacedim, Value> FieldFormula< spacedim, Value >::FactoryBaseType |
Definition at line 67 of file field_formula.hh.
typedef FieldAlgorithmBase<spacedim, Value>::Point FieldFormula< spacedim, Value >::Point |
Definition at line 66 of file field_formula.hh.
|
private |
Definition at line 137 of file field_formula.hh.
FieldFormula< spacedim, Value >::FieldFormula | ( | unsigned int | n_comp = 0 | ) |
Definition at line 73 of file field_formula.cc.
|
virtual |
Definition at line 440 of file field_formula.cc.
|
overridevirtual |
Overload FieldAlgorithmBase::cache_reinit
Reinit arena data member.
Reimplemented from FieldAlgorithmBase< spacedim, Value >.
Definition at line 391 of file field_formula.cc.
|
overridevirtual |
Reimplemented from FieldAlgorithmBase< spacedim, Value >.
Definition at line 246 of file field_formula.cc.
FieldFormula< spacedim, Value >::DECLARE_INPUT_EXCEPTION | ( | ExcFParserError | ) |
FieldFormula< spacedim, Value >::DECLARE_INPUT_EXCEPTION | ( | ExcNotDoubleField | , |
<< "Can not use integer valued field "<< EI_Field::qval<< " in the formula: \n" | |||
) |
FieldFormula< spacedim, Value >::DECLARE_INPUT_EXCEPTION | ( | ExcParserError | , |
<< "Parsing in "<< EI_BParserMsg::val<< " in the formula: "<< EI_Formula::qval<< "\n" | |||
) |
FieldFormula< spacedim, Value >::DECLARE_INPUT_EXCEPTION | ( | ExcUnknownField | , |
<< "Unknown field "<< EI_Field::qval<< " in the formula: \n" | |||
) |
|
inlineprivate |
Evaluate depth variable if it is contained in formula.
Return arma vec of point coordinates extended by depth value (or zero if depth is not contained.
Definition at line 289 of file field_formula.cc.
|
static |
Implementation.
Definition at line 37 of file field_formula.cc.
|
virtual |
Function can provide way to initialize itself from the input data.
TODO: make protected, should be called through function factory
Reimplemented from FieldAlgorithmBase< spacedim, Value >.
Definition at line 92 of file field_formula.cc.
|
override |
Set reference of FieldSet.
Definition at line 316 of file field_formula.cc.
|
overridevirtual |
Create SurfaceDepth object if surface region is set.
See also description of the FieldBase<...>::set_mesh.
Reimplemented from FieldAlgorithmBase< spacedim, Value >.
Definition at line 197 of file field_formula.cc.
|
overridevirtual |
For time dependent formulas returns always true. For time independent formulas returns true only for the first time.
Reimplemented from FieldAlgorithmBase< spacedim, Value >.
Definition at line 102 of file field_formula.cc.
FieldFormula< spacedim, Value >::TYPEDEF_ERR_INFO | ( | EI_BParserMsg | , |
std::string | |||
) |
FieldFormula< spacedim, Value >::TYPEDEF_ERR_INFO | ( | EI_Col | , |
unsigned int | |||
) |
FieldFormula< spacedim, Value >::TYPEDEF_ERR_INFO | ( | EI_Field | , |
std::string | |||
) |
FieldFormula< spacedim, Value >::TYPEDEF_ERR_INFO | ( | EI_Formula | , |
std::string | |||
) |
FieldFormula< spacedim, Value >::TYPEDEF_ERR_INFO | ( | EI_FParserMsg | , |
std::string | |||
) |
FieldFormula< spacedim, Value >::TYPEDEF_ERR_INFO | ( | EI_Row | , |
unsigned int | |||
) |
|
virtual |
Returns one value in one given point. ResultType can be used to avoid some costly calculation if the result is trivial.
Implements FieldAlgorithmBase< spacedim, Value >.
Definition at line 210 of file field_formula.cc.
|
virtual |
Returns std::vector of scalar values in several points at once.
Implements FieldAlgorithmBase< spacedim, Value >.
Definition at line 226 of file field_formula.cc.
|
private |
Arena object providing data arrays.
Definition at line 172 of file field_formula.hh.
|
private |
Definition at line 151 of file field_formula.hh.
|
private |
Surface depth variable, used optionally if 'd' variable is set.
Definition at line 178 of file field_formula.hh.
|
private |
Data of fields evaluated in expressions.
Temporary data member, we need to copy data from FieldValueCaches to arrays allocated in arena.
Definition at line 188 of file field_formula.hh.
|
private |
Flag indicates first call of set_time method, when FunctionParsers in parser_matrix_ must be initialized.
Definition at line 169 of file field_formula.hh.
|
private |
Definition at line 147 of file field_formula.hh.
|
private |
Flag indicates if depth variable 'd' is used in formula - obsolete parameter of FParser.
Definition at line 160 of file field_formula.hh.
|
private |
Flag indicates if time variable 't' is used in formula - parameter of BParser.
Definition at line 163 of file field_formula.hh.
|
private |
Accessor to Input::Record.
Definition at line 154 of file field_formula.hh.
|
private |
Definition at line 150 of file field_formula.hh.
|
staticprivate |
Registrar of class to factory.
Definition at line 191 of file field_formula.hh.
|
private |
Definition at line 181 of file field_formula.hh.
|
private |
Result vector of BParser.
Definition at line 179 of file field_formula.hh.
|
private |
Subsets indices in range 0 ... n-1.
Definition at line 180 of file field_formula.hh.
|
private |
Helper variable for construct of arena, holds sum of sizes (over shape) of all dependent fields.
Definition at line 166 of file field_formula.hh.
|
private |
Surface depth object calculate distance from surface.
Definition at line 157 of file field_formula.hh.
|
private |
Coordinates x, part of previous array.
Definition at line 175 of file field_formula.hh.
|
private |
Coordinates y, part of previous array.
Definition at line 176 of file field_formula.hh.
|
private |
Coordinates z, part of previous array.
Definition at line 177 of file field_formula.hh.