Flow123d
release_3.0.0-968-gc87a28e79
|
Go to the documentation of this file.
25 IT::Selection(
"Discrete_output",
"Discrete type of output. Determines type of output data (element, node, native etc).")
32 static const IT::Record &field_output_setting =
33 IT::Record(
"FieldOutputSetting",
"Setting of the field output. The field name, output times, output interpolation (future).")
36 "The field name (from selection).")
38 "Output times specific to particular field.")
40 "Optional value. Implicit value is given by field and can be changed.")
44 "Output of the equation's fields."
45 "The output is done through the output stream of the associated balance law equation."
46 "The stream defines output format for the full space information in selected times and "
47 "observe points for the full time information. The key 'fields' select the fields for the full spatial output."
48 "The set of output times may be specified per field otherwise common time set 'times' is used. If even this is not provided"
49 "the time set of the output_stream is used. The initial time of the equation is automatically added "
50 "to the time set of every selected field. The end time of the equation is automatically added "
51 "to the common output time set.")
54 "Output times used for the output fields without is own time series specification.")
56 "Add all input time points of the equation, mentioned in the 'input_fields' list, also as the output points.")
58 "Array of output fields and their individual output settings.")
60 "Array of the fields evaluated in the observe points of the associated output stream.")
67 const string &additional_description)
69 string selection_name = equation_name +
":OutputFields";
70 string description =
"Selection of output fields for the " + equation_name +
" model.\n" + additional_description;
79 string desc =
"(($[" +
field->
units().format_latex()+
"]$)) "; +
"Output of: the field " +
field->
name() +
" ";
81 desc +=
"Input field: ";
84 sel.
add_value(i,
field->
name(), desc, { {FlowAttribute::field_value_shape(), field->get_value_attribute()} });
98 const string &equation_name,
99 const string &additional_description)
104 param_vec.push_back( std::make_pair(
"output_field_selection", std::make_shared< IT::Selection >(output_field_selection) ) );
122 ASSERT(
stream_).error(
"The 'set_stream' method must be called before the 'read_from_input'.");
126 if (in_rec.
opt_val(
"times", times_array) ) {
130 auto times_array_it =
stream_->get_time_set_array();
131 if (times_array_it) {
138 if (in_rec.
val<
bool>(
"add_input_times")) {
149 string field_name =
it -> val< Input::FullEnum >(
"field");
158 if (
it->opt_val(
"times", field_times_array)) {
168 auto observe_fields_array = in_rec.
val<
Input::Array>(
"observe_fields");
169 for(
auto it = observe_fields_array.begin<
Input::FullEnum>();
it != observe_fields_array.end(); ++
it) {
180 auto current_mark_it = marks.current(step,
equation_type_ | marks.type_output() );
181 if (current_mark_it == marks.end(
equation_type_ | marks.type_output()) )
return false;
182 return (field_times_it->second.contains(*current_mark_it) );
219 if (
stream_->is_output_data_caches_init())
return;
222 bool need_refinment =
stream_->get_output_mesh_record();
225 if(
stream_->enable_refinement()) {
243 WarningOut() <<
"Ignoring output mesh record.\n Output in GMSH format available only on computational mesh!";
267 std::string error_control_field_name =
"";
269 auto it =
stream_->get_output_mesh_record()->find<std::string>(
"error_control_field");
270 if(
it) error_control_field_name = *
it;
272 if(error_control_field_name!=
"")
276 if(
field ==
nullptr){
277 THROW(FieldSet::ExcUnknownField()
278 << FieldCommon::EI_Field(error_control_field_name));
285 DebugOut() <<
"Error control field for output mesh set: " << error_control_field_name <<
".";
286 auto lambda_function =
288 { error_control_field->
value_list(point_list, elm, value_list); };
295 THROW(ExcFieldNotScalar()
296 << FieldCommon::EI_Field(error_control_field_name));
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
virtual void observe_output(std::shared_ptr< Observe > observe)=0
std::function< void(const std::vector< Space< spacedim >::Point > &, const ElementAccessor< spacedim > &, std::vector< double > &)> ErrorControlFieldFunc
OutputTime::DiscreteSpace get_output_type() const
double end_time() const
End time.
FieldCommon & output_type(OutputTime::DiscreteSpace rt)
void initialize(std::shared_ptr< OutputTime > stream, Mesh *mesh, Input::Record in_rec, const TimeGovernor &tg)
OutputMeshBase::ErrorControlFieldFunc select_error_control_field()
Selects the error control field out of output field set according to input record.
#define ASSERT(expr)
Allow use shorter versions of macro names if these names is not used with external library.
const Input::Type::Selection & create_output_field_selection(const string &equation_name, const string &additional_description)
TimeMark::Type equation_fixed_mark_type() const
virtual void value_list(const std::vector< Point > &point_list, const ElementAccessor< spacedim > &elm, std::vector< typename Value::return_type > &value_list) const
bool is_field_output_time(const FieldCommon &field, TimeStep step) const
void add(double begin, TimeMark::Type mark_type)
#define THROW(whole_exception_expr)
Wrapper for throw. Saves the throwing point.
TimeMarks::iterator end(TimeMark::Type mask) const
Iterator for the end mimics container-like of TimeMarks.
FieldCommon & flags(FieldFlag::Flags::Mask mask)
static constexpr Mask allow_output
The field can output. Is part of generated output selection. (default on)
const Input::Type::Instance & make_output_type(const string &equation_name, const string &aditional_description="")
std::vector< FieldCommon * > field_list
List of all fields.
TimeMarks::iterator begin(TimeMark::Type mask) const
Iterator for the begin mimics container-like of TimeMarks.
void read_from_input(Input::Record in_rec, const TimeGovernor &tg)
Representation of one time step..
Basic time management functionality for unsteady (and steady) solvers (class Equation).
void add_output_times(double begin, double step, double end)
Common abstract parent of all Field<...> classes.
std::unordered_map< string, OutputTimeSet > field_output_times_
Time sets of individual fields.
TimeMark::Type equation_type_
The time mark type of the equation.
static Input::Type::Record & get_input_type()
virtual void field_output(std::shared_ptr< OutputTime > stream)=0
void read_from_input(Input::Array in_array, const TimeGovernor &tg)
bool eq(double other_time) const
void output(TimeStep step)
This class is a collection of time marks to manage various events occurring during simulation time.
std::unordered_set< string > observe_fields_
Set of observed fields. The observe points are given within the observe stream.
static const Input::Type::Array get_input_type()
static TimeMarks & marks()
#define WarningOut()
Macro defining 'warning' record of log.
static constexpr Mask equation_input
The field is data parameter of the owning equation. (default on)
const Input::Type::Instance & make_output_type_from_record(Input::Type::Record &in_rec, const string &equation_name, const string &aditional_description="")
TimeMark::Type equation_mark_type() const
void make_output_mesh(bool parallel)
std::set< OutputTime::DiscreteSpace > used_interpolations_
OutputTimeSet common_output_times_
The time set used for the fields without explicit time set.
FieldCommon & description(const string &description)
Class template representing a field with values dependent on: point, element, and region.
#define DebugOut()
Macro defining 'debug' record of log.
#define ASSERT_PTR(ptr)
Definition of assert macro checking non-null pointer (PTR)
std::shared_ptr< OutputTime > stream_
output stream (may be shared by more equation)
TimeMark::Type equation_fixed_type_
The fixed time mark type of the equation.
std::shared_ptr< OutputMeshBase > output_mesh_
Output mesh.
FieldCommon * field(const std::string &field_name) const
FieldCommon & name(const string &name)