14 #include <boost/circular_buffer.hpp>
24 namespace IT=Input::Type;
49 <<
"Non-ascending time: " << EI_Time::val <<
" for field " << EI_Field::qval <<
".\n");
51 <<
"Missing domain specification (region, r_id, or r_set) in fields descriptor:");
53 <<
"Two copies of the field " << EI_Field::qval <<
"call set_mesh with different arguments.\n");
62 { shared_->name_ = name;
return *
this;}
67 {is_copy_=
true;
return *
this;}
72 { shared_->desc_ = desc;
return *
this;}
84 { shared_->default_ = dflt;
return *
this;}
97 { shared_->units_ = units;
return *
this;}
107 shared_->element_selection_=element_selection;
119 { type_of_output_data_ = rt;
return *
this; }
128 { shared_->n_comp_ = (shared_->n_comp_ ? n_comp : 0);}
150 virtual void set_limit_side(
LimitSide side) = 0;
155 const std::string &
name()
const
156 {
return shared_->name_;}
159 {
return shared_->desc_;}
162 {
return shared_->default_;}
165 {
return shared_->units_;}
168 {
return type_of_output_data_; }
171 {
return shared_->bc_;}
174 {
return shared_->n_comp_;}
177 {
return shared_->mesh_;}
187 {
return last_time_; }
195 static IT::Record field_descriptor_record(
const string& record_name);
255 virtual bool is_constant(
Region reg) =0;
264 return ( (set_time_result_ == TimeStatus::changed) );
294 last_time_ = -numeric_limits<double>::infinity();
393 double last_time_ = -numeric_limits<double>::infinity();
403 static const unsigned int history_length_limit_=3;
434 template<
int spacedim,
class Value>
442 static constexpr
bool is_enum_valued = boost::is_same<typename Value::element_type, FieldEnum>::value;
443 static const unsigned int space_dim = spacedim;
466 Field(
const string &name,
bool bc =
false);
506 void set_mesh(
const Mesh &mesh)
override;
517 bool is_constant(
Region reg)
override;
546 { this->limit_side_=side; }
616 void check_initialized_region_fields_();
663 template<
int spacedim,
class Value>
695 template<
int spacedim,
class Value>
714 void set_limit_side(
LimitSide side)
override;
728 void set_mesh(
const Mesh &mesh)
override;
744 bool is_constant(
Region reg)
override;
752 inline unsigned int size()
const
753 {
return sub_fields_.size(); }
765 void set_complemented_vector_field( TransposedField &complemented);
771 {
return sub_fields_[idx]; }
785 template<
int spacedim,
class Value>
790 ASSERT(elm.
region_idx().
idx() < region_fields_.size(),
"Region idx %u out of range %lu, field: %s\n",
791 elm.
region_idx().
idx(), (
unsigned long int) region_fields_.size(), name().c_str());
793 "Null field ptr on region id: %d, idx: %d, field: %s\n", elm.
region().
id(), elm.
region_idx().
idx(), name().c_str());
799 template<
int spacedim,
class Value>
804 ASSERT(elm.
region_idx().
idx() < region_fields_.size(),
"Region idx %u out of range %lu, field: %s\n",
805 elm.
region_idx().
idx(), (
unsigned long int) region_fields_.size(), name().c_str());
807 "Null field ptr on region id: %d, field: %s\n", elm.
region().
id(), name().c_str());
809 region_fields_[elm.
region_idx().
idx()]->value_list(point_list,elm, value_list);