Flow123d
master-9c1c1b8e5
|
Go to the documentation of this file.
31 IT::Selection(
"Discrete_output",
"Discrete type of output. Determines type of output data (element, node, native etc).")
38 static const IT::Record &field_output_setting =
39 IT::Record(
"FieldOutputSetting",
"Setting of the field output. The field name, output times, output interpolation (future).")
42 "The field name (from selection).")
44 "Output times specific to particular field.")
46 "Optional value. Implicit value is given by field and can be changed.")
50 "Output of the equation's fields."
51 "The output is done through the output stream of the associated balance law equation."
52 "The stream defines output format for the full space information in selected times and "
53 "observe points for the full time information. The key 'fields' select the fields for the full spatial output."
54 "The set of output times may be specified per field otherwise common time set 'times' is used. If even this is not provided"
55 "the time set of the output_stream is used. The initial time of the equation is automatically added "
56 "to the time set of every selected field. The end time of the equation is automatically added "
57 "to the common output time set.")
60 "Output times used for the output fields without is own time series specification.")
62 "Add all input time points of the equation, mentioned in the 'input_fields' list, also as the output points.")
64 "Array of output fields and their individual output settings.")
66 "Array of the fields evaluated in the observe points of the associated output stream.")
73 :
FieldSet(), output_elem_data_assembly_(nullptr), output_node_data_assembly_(nullptr), output_corner_data_assembly_(nullptr),
74 observe_output_assembly_(nullptr) {
88 const string &additional_description)
90 string selection_name = equation_name +
":OutputFields";
91 string description =
"Selection of output fields for the " + equation_name +
" model.\n" + additional_description;
100 string desc =
"(($[" +
field->
units().format_latex()+
"]$)) "; +
"Output of: the field " +
field->
name() +
" ";
102 desc +=
"Input field: ";
105 sel.
add_value(i,
field->
name(), desc, { {FlowAttribute::field_value_shape(), field->get_value_attribute()} });
119 const string &equation_name,
120 const string &additional_description)
125 param_vec.push_back( std::make_pair(
"output_field_selection", std::make_shared< IT::Selection >(output_field_selection) ) );
140 dh_ = make_shared<DOFHandlerMultiDim>(*
mesh_);
141 std::shared_ptr<DiscreteSpace> ds = std::make_shared<EqualOrderDiscreteSpace>(
mesh_, fe_p_disc);
142 dh_->distribute_dofs(ds);
148 std::shared_ptr<DiscreteSpace> ds = std::make_shared<EqualOrderDiscreteSpace>(
mesh_, fe_p_disc);
162 ASSERT(
stream_).error(
"The 'set_stream' method must be called before the 'read_from_input'.");
166 if (in_rec.
opt_val(
"times", times_array) ) {
170 auto times_array_it =
stream_->get_time_set_array();
171 if (times_array_it) {
178 if (in_rec.
val<
bool>(
"add_input_times")) {
191 auto observe_fields_array = in_rec.
val<
Input::Array>(
"observe_fields");
192 for(
auto it = observe_fields_array.begin<
Input::FullEnum>();
it != observe_fields_array.end(); ++
it) {
199 string field_name =
it -> val< Input::FullEnum >(
"field");
204 if (
it->opt_val(
"interpolation", interpolations)) {
207 interpolation[ *it_interp ] =
true;
214 if (
it->opt_val(
"times", field_times_array)) {
229 for (
uint i_comp=0; i_comp<found_field->
n_comp(); ++i_comp) {
244 auto current_mark_it = marks.current(step,
equation_type_ | marks.type_output() );
245 if (current_mark_it == marks.end(
equation_type_ | marks.type_output()) )
return false;
246 return (field_times_it->second.output_set_.contains(*current_mark_it) );
255 if (step.
end() >
stream_->registered_time()) {
270 used_fields += *(f_acc.field());
273 if (used_fields.size()>0) {
275 mixed_assmbly[1_d]->set_output_data(used_fields,
stream_);
276 mixed_assmbly[2_d]->set_output_data(used_fields,
stream_);
277 mixed_assmbly[3_d]->set_output_data(used_fields,
stream_);
288 used_fields += *(f_acc.field());
291 if (used_fields.size()>0) {
293 mixed_assmbly[1_d]->set_output_data(used_fields,
stream_);
294 mixed_assmbly[2_d]->set_output_data(used_fields,
stream_);
295 mixed_assmbly[3_d]->set_output_data(used_fields,
stream_);
306 used_fields += *(f_acc.field());
309 if (used_fields.size()>0) {
311 mixed_assmbly[1_d]->set_output_data(used_fields,
stream_);
312 mixed_assmbly[2_d]->set_output_data(used_fields,
stream_);
313 mixed_assmbly[3_d]->set_output_data(used_fields,
stream_);
328 auto *field_ptr = this->
field(observe_field);
330 if (field_ptr->is_multifield()) {
331 for (
uint i_comp=0; i_comp<field_ptr->n_comp(); ++i_comp) {
332 observe_ptr->prepare_compute_data(field_ptr->full_comp_name(i_comp), step.
end(), field_ptr->n_shape());
335 observe_ptr->prepare_compute_data(field_ptr->name(), field_ptr->time(), field_ptr->n_shape());
353 if (
stream_->is_output_data_caches_init())
return;
356 bool need_refinment =
stream_->get_output_mesh_record();
359 if(
stream_->enable_refinement()) {
377 WarningOut() <<
"Ignoring output mesh record.\n Output in GMSH format available only on computational mesh!";
401 std::string error_control_field_name =
"";
403 auto it =
stream_->get_output_mesh_record()->find<std::string>(
"error_control_field");
404 if(
it) error_control_field_name = *
it;
406 if(error_control_field_name!=
"")
410 if(
field ==
nullptr){
411 THROW(FieldSet::ExcUnknownField()
412 << FieldCommon::EI_Field(error_control_field_name));
419 DebugOut() <<
"Error control field for output mesh set: " << error_control_field_name <<
".";
420 auto lambda_function =
422 { error_control_field->
value_list(point_list, elm, value_list); };
429 THROW(ExcFieldNotScalar()
430 << FieldCommon::EI_Field(error_control_field_name));
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
EquationOutput()
Default constructor.
const Mesh * mesh() const
Returns pointer to mesh.
constexpr bool match(Mask mask) const
GenericAssemblyObserve< AssemblyObserveOutput > * observe_output_assembly_
OutputTime::DiscreteSpace get_output_type() const
double end_time() const
End time.
void initialize(std::shared_ptr< OutputTime > stream, Mesh *mesh, Input::Record in_rec, const TimeGovernor &tg)
Declaration of class which provides the finite element for every mesh cell.
OutputMeshBase::ErrorControlFieldFunc select_error_control_field()
Selects the error control field out of output field set according to input record.
const Input::Type::Selection & create_output_field_selection(const string &equation_name, const string &additional_description)
TimeMark::Type equation_fixed_mark_type() 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.
Range< FieldListAccessor > fields_range() const
Returns range of Fields held in field_list.
TimeMarks::iterator end(TimeMark::Type mask) const
Iterator for the end mimics container-like of TimeMarks.
std::shared_ptr< DOFHandlerMultiDim > dh_node_
FieldCommon & flags(FieldFlag::Flags::Mask mask)
static constexpr Mask allow_output
The field can output. Is part of generated output selection. (default on)
void assemble(std::shared_ptr< DOFHandlerMultiDim > dh) override
General assemble methods.
Declaration of class which handles the ordering of degrees of freedom (dof) and mappings between loca...
void assemble(std::shared_ptr< DOFHandlerMultiDim > dh) override
General assemble methods.
const Input::Type::Instance & make_output_type(const string &equation_name, const string &aditional_description="")
std::function< void(const Armor::array &, const ElementAccessor< spacedim > &, std::vector< double > &)> ErrorControlFieldFunc
Definitions of basic Lagrangean finite elements with polynomial shape functions.
GenericAssembly< AssemblyOutputNodeData > * output_node_data_assembly_
std::array< bool, 4 > DiscreteSpaceFlags
OutputTimeSet output_set_
Set of output times.
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.
GenericAssembly< AssemblyOutputNodeData > * output_corner_data_assembly_
static void set_discrete_flag(DiscreteSpaceFlags &dsf, DiscreteSpace d_space)
void read_from_input(Input::Record in_rec, const TimeGovernor &tg)
MixedPtr< DimAssembly, 1 > multidim_assembly() const
Getter to set of assembly objects.
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)
static DiscreteSpaceFlags empty_discrete_flags()
Check if at least one of discrete space flag is set to true.
std::unordered_map< string, FieldOutputConfig > field_output_times_
Time sets of individual fields.
Common abstract parent of all Field<...> classes.
TimeMark::Type equation_type_
The time mark type of the equation.
static Input::Type::Record & get_input_type()
Container for various descendants of FieldCommonBase.
void read_from_input(Input::Array in_array, const TimeGovernor &tg)
bool is_multifield() const
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()
virtual void value_list(const Armor::array &point_list, const ElementAccessor< spacedim > &elm, std::vector< typename Value::return_type > &value_list) const
#define WarningOut()
Macro defining 'warning' record of log.
static constexpr Mask equation_input
The field is data parameter of the owning equation. (default on)
FieldFlag::Flags get_flags() const
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
Configuration of output of one field. Pair of OutputTimeSet and DiscreteSpaces.
OutputTime::DiscreteSpaceFlags space_flags_
Array of used DiscreteSpaces.
unsigned int n_comp() const
void make_output_mesh(bool parallel)
std::shared_ptr< DOFHandlerMultiDim > dh_
Objects for distribution of dofs.
std::string full_comp_name(unsigned int i_comp) const
std::set< OutputTime::DiscreteSpace > used_interpolations_
OutputTimeSet common_output_times_
The time set used for the fields without explicit time set.
GenericAssembly< AssemblyOutputElemData > * output_elem_data_assembly_
general assembly objects, hold assembly objects of appropriate dimension
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) only for debug mode.
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.
static const unsigned int N_DISCRETE_SPACES
~EquationOutput()
Destructor.
void init_field_item(Input::Iterator< Input::Record > it, const TimeGovernor &tg)
Initialize data of Field given by passed Input::Record.
std::shared_ptr< OutputMeshBase > output_mesh_
Output mesh.
FieldCommon * field(const std::string &field_name) const
FieldCommon & name(const string &name)