Flow123d  JS_before_hm-1804-gf2ad740aa
multi_field.impl.hh
Go to the documentation of this file.
1 /*!
2  *
3  * Copyright (C) 2015 Technical University of Liberec. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU General Public License version 3 as published by the
7  * Free Software Foundation. (http://www.gnu.org/licenses/gpl-3.0.en.html)
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12  *
13  *
14  * @file multi_field.impl.hh
15  * @brief
16  */
17 
18 #ifndef MULTI_FIELD_IMPL_HH_
19 #define MULTI_FIELD_IMPL_HH_
20 
21 
22 #include "multi_field.hh"
24 #include "fields/eval_subset.hh"
25 #include "fields/eval_points.hh"
27 #include "fields/field_set.hh"
28 #include "input/input_exception.hh"
29 #include "io/observe.hh"
30 
31 namespace it = Input::Type;
32 
33 /******************************************************************************************
34  * Implementation of MultiField<...>
35  */
36 
37 template<int spacedim, class Value>
39 : FieldCommon(),
40  no_check_control_field_(nullptr)
41 {
42 // static_assert(Value::NRows_ == 1 && Value::NCols_ == 1, "");
43  this->multifield_ = true;
44  this->shared_->bc_ = bc;
45  this->set_shape( Value::NRows_, Value::NCols_ );
46 }
47 
48 
49 
50 template<int spacedim, class Value>
52 : FieldCommon(other),
53  sub_fields_(other.sub_fields_),
54  full_input_list_(other.full_input_list_),
55  no_check_control_field_(other.no_check_control_field_)
56 {
57  this->multifield_ = true;
58  this->set_shape( Value::NRows_, Value::NCols_ );
59 }
60 
61 
62 
63 template<int spacedim, class Value>
65 {
66  //OLD_ASSERT( flags().match( FieldFlag::input_copy ) , "Try to assign to non-copy field '%s' from the field '%s'.", this->name().c_str(), other.name().c_str());
67  ASSERT_PTR_DBG(other.shared_->mesh_).error("Must call set_mesh before assign to other field.\n");
68  ASSERT_DBG( !shared_->mesh_ || (shared_->mesh_==other.shared_->mesh_))
69  .error("Assignment between multi fields with different meshes.\n");
70  ASSERT_GT_DBG( shared_->comp_names_.size(), 0).error("Vector of component names can't be empty!\n");
71  ASSERT_EQ_DBG( shared_->comp_names_.size(), other.shared_->comp_names_.size())
72  .error("Both multi fields must have same size of vectors of component names.\n");
73 
74  // check for self assignement
75  if (&other == this) return *this;
76 
77  // class members derived from FieldCommon
78  std::vector< std::string > comp_names = shared_->comp_names_; // keep component names
79  shared_ = other.shared_;
80  shared_->comp_names_ = comp_names;
81  shared_->is_fully_initialized_ = false;
82  set_time_result_ = other.set_time_result_;
83  last_time_ = other.last_time_;
84  last_limit_side_ = other.last_limit_side_;
85  is_jump_time_ = other.is_jump_time_;
86  component_index_ = other.component_index_;
87  this->multifield_ = true;
88  this->shape_ = other.shape_;
89 
90  // class members of Field class
91  if ( size() == 0 ) {
92  // move subfields from other, set correct names
93  sub_fields_.clear();
94  sub_fields_.reserve( other.size() );
95  for (unsigned int i=0; i<other.size(); ++i) {
96  sub_fields_.push_back( other.sub_fields_[i] );
97  if (this->shared_->comp_names_[i].length() == 0)
98  THROW( Input::ExcInputMessage() << EI_Message("The field " + this->input_name()
99  + " has set empty name of component.") );
100  else {
101  sub_fields_[i].name_ = this->shared_->comp_names_[i] + "_" + name();
102  }
103  }
104  } else {
105  THROW( ExcMessage() << EI_Message("Internal error. Assignment operator can't be used after call setup_component() method.") );
106  }
107  full_input_list_ = other.full_input_list_;
108  no_check_control_field_ = other.no_check_control_field_;
109 
110  return *this;
111 }
112 
113 
114 
115 template<int spacedim, class Value>
117  ASSERT(false).error("This method can't be used for MultiField");
118 
119  it::Abstract abstract = it::Abstract();
121  return inst;
122 }
123 
124 
125 template<int spacedim, class Value>
127  it::Array type = it::Array( SubFieldBaseType::get_input_type_instance(shared_->input_element_selection_), 1);
128  return type;
129 }
130 
131 
132 template<int spacedim, class Value>
134  const MultiField<spacedim, typename FieldValue<spacedim>::Enum > &control_field,
135  const vector<FieldEnum> &value_list) -> MultiField &
136 {
137  no_check_control_field_=&control_field;
138  shared_->no_check_values_=value_list;
139  return *this;
140 }
141 
142 
143 template<int spacedim, class Value>
145  const TimeStep &time, LimitSide limit_side)
146 {
147  // initialization of Multifield for first call
148  if (sub_fields_.size() == 0) {
149  setup_components();
150  }
151 
152  // set time for sub fields
153  set_time_result_ = TimeStatus::constant;
154  is_jump_time_=false;
155  for( SubFieldType &field : sub_fields_) {
156  if (field.set_time(time, limit_side))
157  set_time_result_ = TimeStatus::changed;
158  is_jump_time_ = is_jump_time_ || field.is_jump_time();
159  }
160  return (set_time_result_ == TimeStatus::changed);
161 }
162 
163 
164 
165 template<int spacedim, class Value>
167  // test if mesh is not set
168  if (shared_->mesh_ && shared_->mesh_ != &mesh) {
169  THROW(ExcFieldMeshDifference() << EI_Field(name()) );
170  }
171 
172  shared_->mesh_ = &mesh;
173 }
174 
175 
176 template<int spacedim, class Value>
178  ASSERT_DBG( flags().match(FieldFlag::equation_input))(other.name())(this->name())
179  .error("Can not copy to the non-copy field.");
180 
181  // do not use copy if the field have its own input
182  if ( flags().match(FieldFlag::declare_input)
183  && this->shared_->input_list_.size() != 0 ) return;
184 
185  if (typeid(other) == typeid(*this)) {
186  auto const &other_field = dynamic_cast< MultiField<spacedim, Value> const &>(other);
187  this->operator=(other_field);
188  } else if (typeid(other) == typeid(SubFieldType)) {
189  auto const &other_field = dynamic_cast< SubFieldType const &>(other);
190  sub_fields_.resize(1);
191  sub_fields_[0] = other_field;
192  }
193 }
194 
195 
196 
197 template<int spacedim, class Value>
198 void MultiField<spacedim, Value>::field_output(std::shared_ptr<OutputTime> stream, OutputTime::DiscreteSpaceFlags type)
199 {
200  // currently we cannot output boundary fields
201  if (!is_bc()) {
203 
204  for (unsigned long index=0; index < this->size(); index++) {
205  sub_fields_[index].compute_field_data( type, stream );
206  }
207  }
208 }
209 
210 
211 
212 template<int spacedim, class Value>
213 void MultiField<spacedim, Value>::observe_output(std::shared_ptr<Observe> observe)
214 {
215  for(auto &field : sub_fields_) field.observe_output(observe);
216 }
217 
218 
219 
220 
221 template<int spacedim, class Value>
223  bool const_all=true;
224  for(auto &field : sub_fields_) const_all = const_all && field.is_constant(reg);
225  return const_all;
226 }
227 
228 template<int spacedim, class Value>
230 {
231  ASSERT_DBG(true).error("Not used yet. Test it.");
232 
233  FieldResult result_all = result_none;
234  for(auto &field : sub_fields_) {
235  FieldResult sub_result = field.field_result(region_set);
236  if (sub_result == result_none) return result_none;
237 
238  if (result_all == result_none) // first subfield
239  result_all = sub_result;
240  else if (sub_result == result_other || result_all == result_other)
241  result_all = result_other;
242  else if (sub_result != result_all)
243  result_all = result_constant; // all subfields are (possibly different) constants
244  }
245 
246  return result_all;
247 
248 }
249 
250 
251 template<int spacedim, class Value>
253 {
254  int nrows = Value::NRows_;
255  int ncols = Value::NCols_;
256  string type = "Integer";
258  type = "Double";
259 
260  return fmt::format("{{ \"subfields\": true, \"shape\": [ {}, {} ], \"type\": \"{}\", \"limit\": [ {}, {} ] }}",
261  nrows, ncols, type, this->limits().first, this->limits().second);
262 }
263 
264 
265 template<int spacedim, class Value>
267  unsigned int comp_size = this->shared_->comp_names_.size();
268  string full_name;
269  ASSERT_GT(comp_size, 0).error("Vector of component names is empty!\n");
270  ASSERT_PTR(this->shared_->mesh_).error("Mesh is not set!\n");
271 
272  sub_fields_.reserve( comp_size );
273  for(unsigned int i_comp=0; i_comp < comp_size; i_comp++)
274  {
275  if (this->shared_->comp_names_[i_comp].length() == 0)
276  full_name = name();
277  else {
278  full_name = this->shared_->comp_names_[i_comp] + "_" + name();
279  }
280 
281  sub_fields_.push_back( SubFieldType(i_comp, name(), full_name, is_bc()) );
282  sub_fields_[i_comp].units( units() );
283  if (no_check_control_field_ != nullptr && no_check_control_field_->size() == sub_fields_.size())
284  sub_fields_[i_comp].disable_where((*no_check_control_field_)[i_comp], shared_->no_check_values_);
285  sub_fields_[i_comp].set_mesh( *(shared_->mesh_) );
286 // sub_fields_[i_comp].set_limit_side(this->limit_side_);
287  sub_fields_[i_comp].input_selection(shared_->input_element_selection_);
288  sub_fields_[i_comp].add_factory( std::make_shared<MultiFieldFactory>(i_comp) );
289 
290  if (this->shared_->input_default_!="") {
291  sub_fields_[i_comp].shared_->input_default_ = this->shared_->input_default_;
292  }
293 
294  sub_fields_[i_comp].flags_ = this->flags_;
295  sub_fields_[i_comp].set_input_list(this->full_input_list_, *tg_);
296  }
297 }
298 
299 
300 
301 template<int spacedim, class Value>
303  if (! flags().match(FieldFlag::declare_input)) return;
304 
305  // Check sizes of Arrays defined MultiField in field descriptors
307  it != list.end();
308  ++it) {
309  Input::Array mf_array;
310  if ( it->opt_val(this->input_name(), mf_array) ) {
311  unsigned int comp_size = this->shared_->comp_names_.size();
312  if (mf_array.size() != 1 && mf_array.size() != comp_size)
313  THROW( Exc_InvalidMultiFieldSize() << EI_MultiFieldName(this->input_name())
314  << EI_Size(mf_array.size()) << EI_ExpectedSize(comp_size) << list.ei_address() );
315  }
316  }
317 
318  this->full_input_list_ = list;
319  this->tg_ = &tg;
320 
321  // Save the full array for future use in FieldCommon::mark_input_times().
322  list.copy_to(shared_->input_list_);
323 }
324 
325 
326 // template<int spacedim, class Value>
327 // typename MultiField<spacedim, Value>::MultiFieldValue::return_type MultiField<spacedim, Value>::value(const Point &p, const ElementAccessor<spacedim> &elm) const {
328 // typename MultiFieldValue::return_type ret(size(), 1);
329 // for (unsigned int i_comp=0; i_comp < size(); i_comp++) {
330 // ret(i_comp, 0) = sub_fields_[i_comp].value(p,elm);
331 // }
332 //
333 // return ret;
334 // }
335 //
336 //
337 //
338 // template<int spacedim, class Value>
339 // void MultiField<spacedim, Value>::value_list(const std::vector< Point > &point_list, const ElementAccessor<spacedim> &elm,
340 // std::vector<typename MultiFieldValue::return_type> &value_list) const {
341 // OLD_ASSERT_EQUAL( point_list.size(), value_list.size() );
342 // for(unsigned int i=0; i< point_list.size(); i++) {
343 // value_list[i]=this->value(point_list[i], elm);
344 // }
345 // }
346 
347 
348 
349 template<int spacedim, class Value>
351  Input::Array multifield_arr;
352  if (descriptor_rec.opt_val(field.input_name(), multifield_arr))
353  {
354  //OLD_ASSERT(multifield_arr.size() == 1 || multifield_arr.size() == field.n_comp(),
355  // "Invalid size of Array defined for MultiField '%s'!\n", field.input_name().c_str());
356  unsigned int position = 0;
357  auto it = multifield_arr.begin<Input::AbstractRecord>();
358  if (multifield_arr.size() > 1)
359  while (index_ != position) {
360  ++it; ++position;
361  }
362 
363  FieldAlgoBaseInitData init_data(field.input_name(), field.n_comp(), field.units(), field.limits(), field.get_flags());
365  field_algo_base->set_component_idx(index_);
366  return field_algo_base;
367  }
368 
369  return NULL;
370 }
371 
372 
373 
374 template<int spacedim, class Value>
376  return in_rec.find<Input::Array>(input_name);
377 }
378 
379 
380 template<int spacedim, class Value>
382  ASSERT(false).error("Set dependency of MultiField should be performed by individual components!\n");
384 }
385 
386 
387 
388 template<int spacedim, class Value>
389 void MultiField<spacedim, Value>::cache_reallocate(FMT_UNUSED const ElementCacheMap &cache_map, FMT_UNUSED unsigned int region_idx) const {
390  //for(auto &field : sub_fields_) field.cache_reallocate(cache_map);
391  ASSERT(false).error("Cache reallocate of MultiField should be performed by individual components!\n");
392 }
393 
394 
395 template<int spacedim, class Value>
397  FMT_UNUSED unsigned int region_patch_idx) const {
398  ASSERT(false).error("Cache update of MultiField should be performed by individual components!\n");
399 }
400 
401 
402 template<int spacedim, class Value>
405  double time,
406  std::vector<std::string> region_set_names)
407 {
408  unsigned int comp_size = this->shared_->comp_names_.size();
409  ASSERT_GT_DBG(comp_size, 0).error("Vector of component names is empty!\n");
410  ASSERT_EQ_DBG(comp_size, field_vec.size());
411  ASSERT_PTR_DBG(this->shared_->mesh_).error("Mesh is not set!\n");
412 
413  sub_fields_.reserve( comp_size );
414  for(unsigned int i_comp=0; i_comp < comp_size; i_comp++)
415  {
416  sub_fields_.push_back( SubFieldType(i_comp, name(), "", is_bc()) );
417  sub_fields_[i_comp].set_mesh( *(shared_->mesh_) );
418  sub_fields_[i_comp].flags_ = this->flags_;
419  sub_fields_[i_comp].set(field_vec[i_comp], time, region_set_names);
420  }
421 }
422 
423 
424 template<int spacedim, class Value>
427  double time,
428  std::vector<std::string> region_set_names)
429 {
430  ASSERT_EQ_DBG(this->shared_->comp_names_.size(), 1).error("Size of component names vector must be 1!\n");
431  ASSERT_PTR_DBG(this->shared_->mesh_).error("Mesh is not set!\n");
432 
433  sub_fields_.reserve(1);
434  sub_fields_.push_back( SubFieldType(0, name(), "", is_bc()) );
435  sub_fields_[0].set_mesh( *(shared_->mesh_) );
436  sub_fields_[0].flags_ = this->flags_;
437  sub_fields_[0].set(field, time, region_set_names);
438 }
439 
440 
441 
442 #endif /* MULTI_FIELD_IMPL_HH_ */
FieldCommon::units
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
Definition: field_common.hh:150
result_none
@ result_none
Definition: field_algo_base.hh:71
FieldCommon::shared_
std::shared_ptr< SharedData > shared_
Definition: field_common.hh:630
MultiField::cache_reallocate
void cache_reallocate(const ElementCacheMap &cache_map, unsigned int region_idx) const override
Implements FieldCommon::cache_reallocate.
Definition: multi_field.impl.hh:389
FieldCommon::last_limit_side_
LimitSide last_limit_side_
Definition: field_common.hh:653
eval_subset.hh
MultiField::setup_components
void setup_components()
Definition: multi_field.impl.hh:266
ASSERT_GT
#define ASSERT_GT(a, b)
Definition of comparative assert macro (Greater Than)
Definition: asserts.hh:312
MultiField::set_mesh
void set_mesh(const Mesh &mesh) override
Definition: multi_field.impl.hh:166
FieldCommon::last_time_
double last_time_
Definition: field_common.hh:652
MultiField::SubFieldType
Field< spacedim, Value > SubFieldType
Definition: multi_field.hh:90
MultiField::disable_where
auto disable_where(const MultiField< spacedim, typename FieldValue< spacedim >::Enum > &control_field, const vector< FieldEnum > &value_list) -> MultiField &
Definition: multi_field.impl.hh:133
ASSERT_GT_DBG
#define ASSERT_GT_DBG(a, b)
Definition of comparative assert macro (Greater Than) only for debug mode.
Definition: asserts.hh:316
field_algo_base.hh
MultiField::set_dependency
std::vector< const FieldCommon * > set_dependency(FieldSet &field_set, unsigned int i_reg) const override
Definition: multi_field.impl.hh:381
ASSERT
#define ASSERT(expr)
Allow use shorter versions of macro names if these names is not used with external library.
Definition: asserts.hh:347
FieldCommon::set_shape
void set_shape(uint n_rows, uint n_cols)
Definition: field_common.hh:530
MultiField::set
void set(std::vector< typename Field< spacedim, Value >::FieldBasePtr > field_vec, double time, std::vector< std::string > region_set_names={"ALL"})
Definition: multi_field.impl.hh:403
MultiField::is_constant
bool is_constant(Region reg) override
Definition: multi_field.impl.hh:222
ElementCacheMap
Directing class of FieldValueCache.
Definition: field_value_cache.hh:151
eval_points.hh
value
static constexpr bool value
Definition: json.hpp:87
ASSERT_DBG
#define ASSERT_DBG(expr)
Definition: include_fadbad.hh:28
FieldResult
FieldResult
Definition: field_algo_base.hh:70
field_set.hh
result_other
@ result_other
Definition: field_algo_base.hh:72
THROW
#define THROW(whole_exception_expr)
Wrapper for throw. Saves the throwing point.
Definition: exceptions.hh:53
std::vector< std::string >
MultiField::get_value_attribute
std::string get_value_attribute() const override
Definition: multi_field.impl.hh:252
MultiField::MultiFieldFactory::create_field
virtual Field< spacedim, Value >::FieldBasePtr create_field(Input::Record rec, const FieldCommon &field)
Definition: multi_field.impl.hh:350
ASSERT_EQ_DBG
#define ASSERT_EQ_DBG(a, b)
Definition of comparative assert macro (EQual) only for debug mode.
Definition: asserts.hh:332
MultiField::get_input_type
IT::Instance get_input_type() override
Definition: multi_field.impl.hh:116
OutputTime::discrete_flags_defined
static bool discrete_flags_defined(DiscreteSpaceFlags &dsf)
Check if at least one of discrete space flag is set to true.
Definition: output_time.hh:125
FieldCommon::flags_
FieldFlag::Flags flags_
Field flags. Default setting is "an equation input field, that can read from user input,...
Definition: field_common.hh:683
MultiField::MultiFieldFactory::index_
unsigned int index_
Definition: multi_field.hh:110
fmt::format
std::string format(CStringRef format_str, ArgList args)
Definition: format.h:3141
MultiField::full_input_list_
Input::Array full_input_list_
Full list of input field descriptors from which the subfields of MultiField are set.
Definition: multi_field.hh:304
MultiField::MultiFieldFactory::is_active_field_descriptor
bool is_active_field_descriptor(const Input::Record &in_rec, const std::string &input_name) override
Definition: multi_field.impl.hh:375
Input::Array::begin
Iterator< ValueType > begin() const
Definition: accessors_impl.hh:145
ASSERT_PTR_DBG
#define ASSERT_PTR_DBG(ptr)
Definition of assert macro checking non-null pointer (PTR) only for debug mode.
Definition: asserts.hh:340
result_constant
@ result_constant
Definition: field_algo_base.hh:73
FieldCommon::shape_
std::vector< uint > shape_
Definition: field_common.hh:505
Region
Definition: region.hh:146
OutputTime::DiscreteSpaceFlags
std::array< bool, 4 > DiscreteSpaceFlags
Definition: output_time.hh:122
Input::Iterator
Definition: accessors.hh:143
MultiField::cache_update
void cache_update(ElementCacheMap &cache_map, unsigned int region_patch_idx) const override
Implements FieldCommon::cache_update.
Definition: multi_field.impl.hh:396
MultiField::copy_from
void copy_from(const FieldCommon &other) override
Definition: multi_field.impl.hh:177
Input::Record
Accessor to the data with type Type::Record.
Definition: accessors.hh:291
MultiField::size
unsigned int size() const
Number of subfields that compose the multi-field.
Definition: multi_field.hh:206
FieldCommon::multifield_
bool multifield_
Definition: field_common.hh:675
FieldAlgoBaseInitData
Helper struct stores data for initizalize descentants of FieldAlgorithmBase.
Definition: field_algo_base.hh:81
MultiField::set_time
bool set_time(const TimeStep &time, LimitSide limit_side) override
Definition: multi_field.impl.hh:144
MultiField::set_input_list
void set_input_list(const Input::Array &list, const TimeGovernor &tg) override
Definition: multi_field.impl.hh:302
TimeStep
Representation of one time step..
Definition: time_governor.hh:123
TimeGovernor
Basic time management functionality for unsteady (and steady) solvers (class Equation).
Definition: time_governor.hh:310
Input::AbstractRecord
Accessor to the polymorphic input data of a type given by an AbstracRecord object.
Definition: accessors.hh:458
FieldCommon
Common abstract parent of all Field<...> classes.
Definition: field_common.hh:74
Input::Type::Abstract
Class for declaration of polymorphic Record.
Definition: type_abstract.hh:62
Input::Record::opt_val
bool opt_val(const string &key, Ret &value) const
Definition: accessors_impl.hh:107
Input::Type::Instance
Helper class that stores data of generic types.
Definition: type_generic.hh:89
Input::Array::size
unsigned int size() const
Definition: accessors_impl.hh:163
MultiField::operator=
MultiField & operator=(const MultiField &other)
Definition: multi_field.impl.hh:64
LimitSide
LimitSide
Definition: field_common.hh:61
input_exception.hh
FieldCommon::is_bc
bool is_bc() const
Definition: field_common.hh:266
FieldSet
Container for various descendants of FieldCommonBase.
Definition: field_set.hh:159
Input::Record::find
Iterator< Ret > find(const string &key) const
Definition: accessors_impl.hh:91
FieldValue_
Definition: field_values.hh:248
Input::Type
Definition: balance.hh:41
MultiField::field_result
FieldResult field_result(RegionSet region_set) const override
Indicates special field states.
Definition: multi_field.impl.hh:229
observe.hh
Field::FieldBasePtr
std::shared_ptr< FieldBaseType > FieldBasePtr
Definition: field.hh:99
Mesh
Definition: mesh.h:98
multi_field.hh
Input::Type::Array
Class for declaration of inputs sequences.
Definition: type_base.hh:339
Input::Array
Accessor to input data conforming to declared Array.
Definition: accessors.hh:566
MultiField::field_output
void field_output(std::shared_ptr< OutputTime > stream, OutputTime::DiscreteSpaceFlags type) override
Definition: multi_field.impl.hh:198
MultiField
Class for representation of a vector of fields of the same physical quantity.
Definition: multi_field.hh:87
field_value_cache.hh
MultiField::get_multifield_input_type
IT::Array get_multifield_input_type() override
Definition: multi_field.impl.hh:126
MultiField::sub_fields_
std::vector< SubFieldType > sub_fields_
Subfields (items) of MultiField.
Definition: multi_field.hh:301
FieldFlag::equation_input
static constexpr Mask equation_input
The field is data parameter of the owning equation. (default on)
Definition: field_flag.hh:33
FieldCommon::get_flags
FieldFlag::Flags get_flags() const
Definition: field_common.hh:278
FieldFlag::declare_input
static constexpr Mask declare_input
The field can be set from input. The key in input field descriptor is declared. (default on)
Definition: field_flag.hh:35
FieldCommon::name
const std::string & name() const
Definition: field_common.hh:243
FieldCommon::n_comp
unsigned int n_comp() const
Definition: field_common.hh:269
FieldCommon::is_jump_time_
bool is_jump_time_
Definition: field_common.hh:659
FieldCommon::input_name
const std::string & input_name() const
Definition: field_common.hh:240
FieldCommon::limits
std::pair< double, double > limits() const
Definition: field_common.hh:258
Field< spacedim, FieldValue< 3 >::Enum >
std::list
Definition: doxy_dummy_defs.hh:9
MultiField::no_check_control_field_
const MultiField< spacedim, typename FieldValue< spacedim >::Enum > * no_check_control_field_
Definition: multi_field.hh:316
MultiField::observe_output
void observe_output(std::shared_ptr< Observe > observe) override
Definition: multi_field.impl.hh:213
ASSERT_PTR
#define ASSERT_PTR(ptr)
Definition of assert macro checking non-null pointer (PTR)
Definition: asserts.hh:336
FieldCommon::time
double time() const
Definition: field_common.hh:285
FieldAlgorithmBase::function_factory
static std::shared_ptr< FieldAlgorithmBase< spacedim, Value > > function_factory(const Input::AbstractRecord &rec, const struct FieldAlgoBaseInitData &init_data)
Definition: field_algo_base.impl.hh:101
FieldCommon::set_time_result_
TimeStatus set_time_result_
Definition: field_common.hh:646
FieldCommon::component_index_
unsigned int component_index_
Definition: field_common.hh:669
FieldCommon::name
FieldCommon & name(const string &name)
Definition: field_common.hh:118
MultiField::MultiField
MultiField(bool bc=false)
Definition: multi_field.impl.hh:38
FMT_UNUSED
#define FMT_UNUSED
Definition: posix.h:75