Flow123d  release_3.0.0-872-gff21c48
field_common.cc
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 field_common.cc
15  * @brief
16  */
17 
18 #include <iomanip> // for operator<<, setw, setfill, left
19 #include "fields/field_common.hh"
20 #include "input/accessors_impl.hh" // for Record::val
21 #include "input/attribute_lib.hh" // for Attribute
22 #include "input/storage.hh" // for ExcStorageTypeMismatch
23 #include "tools/time_marks.hh" // for TimeMark, TimeMark::Type, TimeMarks
24 
25 
26 /****************************************************************************
27  * Implementation of FieldCommon
28  */
29 
30 
32 : shared_( std::make_shared<SharedData>() ),
33  set_time_result_(TimeStatus::unknown),
34  is_jump_time_(true),
35  component_index_(std::numeric_limits<unsigned int>::max())
36 {
37  shared_->bc_=false;
38  shared_->input_default_="";
39  shared_->n_comp_ = 0;
40  shared_->mesh_ = nullptr;
41  shared_->is_fully_initialized_=false;
42 }
43 
44 
45 
47 : name_(other.name_),
48  shared_(other.shared_),
50  last_time_(other.last_time_),
54 {
56 }
57 
58 
59 
61  return IT::Record(record_name, field_descriptor_record_description(record_name))
62  .declare_key("region", IT::Array( IT::String(), 1 ), "Labels of the regions where to set fields. ")
63  .declare_key("rid", IT::Integer(0), "ID of the region where to set fields.",
65  "\"Specification of the region by its ID is obsolete, will be removed in release 3.0.\\n"
66  "Use region label declared in the Mesh record or default label 'region_<ID>'.\""} })
67  .declare_key("time", TimeGovernor::get_input_time_type(0.0), IT::Default("0.0"),
68  "Apply field setting in this record after this time.\n"
69  "These times have to form an increasing sequence.")
70  .close();
71 }
72 
73 const std::string FieldCommon::field_descriptor_record_description(const string& record_name) {
74  return "Record to set fields of the equation.\n"
75  "The fields are set only on the domain specified by one of the keys: 'region', 'rid'\n"
76  "and after the time given by the key 'time'. The field setting can be overridden by\n"
77  " any " + record_name + " record that comes later in the boundary data array.";
78 }
79 
80 
81 
83  if (! flags().match(FieldFlag::declare_input)) return;
84 
85  // pass through field descriptors containing key matching field name.
87  double time;
88  for( auto &item : shared_->input_list_) {
89  time = tg.read_time( item.find<Input::Tuple>("time") ); // default time=0
90  TimeGovernor::marks().add( TimeMark(time, mark_type | TimeGovernor::marks().type_input() ));
91  }
92 }
93 
94 
95 
96 bool FieldCommon::print_message_table(ostream& stream, std::string equation_name) {
97  if (FieldCommon::messages_data_.size() == 0) return false;
98 
99  stream << endl << "Used default values of Fields for equation " << equation_name << ":" << endl;
100  stream << std::setfill('-') << setw(100) << "" << endl;
101  stream << std::setfill(' ') << " Field name" << setw(21) << "" << "Default value" << setw(7) << "" << "Apply on regions" << endl;
103  stringstream ss;
104  stream << " " << std::left << setw(30) << it->field_name_ << "" << " "
105  << setw(18) << it->default_value_ << "" << " " << it->region_list_ << endl;
106  }
107  stream << std::setfill('-') << setw(100) << "" << endl << endl;
108 
110  return true;
111 }
112 
113 
114 
116 
117 
118 
Common abstract parent of all Field<...> classes.
Definition: field_common.hh:73
bool is_jump_time_
Class Input::Type::Default specifies default value of keys of a Input::Type::Record.
Definition: type_record.hh:61
std::string name_
unsigned int component_index_
double last_time_
void mark_input_times(const TimeGovernor &tg)
Definition: field_common.cc:82
FlagArray & add(Mask mask)
Definition: flag_array.hh:170
static const std::string field_descriptor_record_description(const string &record_name)
Definition: field_common.cc:73
Class for declaration of the integral input data.
Definition: type_base.hh:490
Basic time management functionality for unsteady (and steady) solvers (class Equation).
static TimeMarks & marks()
Class for declaration of inputs sequences.
Definition: type_base.hh:346
std::shared_ptr< SharedData > shared_
double time() const
static const Input::Type::Tuple & get_input_time_type(double lower_bound=-std::numeric_limits< double >::max(), double upper_bound=std::numeric_limits< double >::max())
static constexpr Mask input_copy
Definition: field_flag.hh:44
FieldFlag::Flags & flags()
TimeMark::Type equation_fixed_mark_type() const
FieldFlag::Flags flags_
Field flags. Default setting is "an equation input field, that can read from user input...
static IT::Record field_descriptor_record(const string &record_name)
Definition: field_common.cc:60
Record & declare_key(const string &key, std::shared_ptr< TypeBase > type, const Default &default_value, const string &description, TypeBase::attribute_map key_attributes=TypeBase::attribute_map())
Declares a new key of the Record.
Definition: type_record.cc:501
LimitSide last_limit_side_
double read_time(Input::Iterator< Input::Tuple > time_it, double default_time=std::numeric_limits< double >::quiet_NaN()) const
TimeMark add(const TimeMark &mark)
Definition: time_marks.cc:81
static std::vector< MessageData > messages_data_
Vector of data of initialization messages.
virtual ~FieldCommon()
Class used for marking specified times at which some events occur.
Definition: time_marks.hh:45
Record type proxy class.
Definition: type_record.hh:182
Accessor to the data with type Type::Tuple.
Definition: accessors.hh:412
static string obsolete()
static bool print_message_table(ostream &stream, std::string equation_name)
Definition: field_common.cc:96
Class for declaration of the input data that are in string format.
Definition: type_base.hh:589
TimeStatus set_time_result_
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