Flow123d  release_2.2.0-33-g759111d
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 "fields/field_common.hh"
19 
20 
21 /****************************************************************************
22  * Implementation of FieldCommon
23  */
24 
25 
27 : shared_( std::make_shared<SharedData>() ),
28  set_time_result_(TimeStatus::unknown),
29  is_jump_time_(true),
30  component_index_(std::numeric_limits<unsigned int>::max())
31 {
32  shared_->bc_=false;
33  shared_->input_default_="";
34  shared_->n_comp_ = 0;
35  shared_->mesh_ = nullptr;
36  shared_->is_fully_initialized_=false;
37 }
38 
39 
40 
42 : name_(other.name_),
43  shared_(other.shared_),
45  last_time_(other.last_time_),
49 {
51 }
52 
53 
54 
56  return IT::Record(record_name, field_descriptor_record_description(record_name))
57  .declare_key("region", IT::Array( IT::String(), 1 ), "Labels of the regions where to set fields. ")
58  .declare_key("rid", IT::Integer(0), "ID of the region where to set fields.",
60  "\"Specification of the region by its ID is obsolete, will be removed in release 3.0.\\n"
61  "Use region label declared in the Mesh record or default label 'region_<ID>'.\""} })
62  .declare_key("time", IT::Double(0.0), IT::Default("0.0"),
63  "Apply field setting in this record after this time.\n"
64  "These times have to form an increasing sequence.")
65  .close();
66 }
67 
68 const std::string FieldCommon::field_descriptor_record_description(const string& record_name) {
69  return "Record to set fields of the equation.\n"
70  "The fields are set only on the domain specified by one of the keys: 'region', 'rid'\n"
71  "and after the time given by the key 'time'. The field setting can be overridden by\n"
72  " any " + record_name + " record that comes later in the boundary data array.";
73 }
74 
75 
76 
78  if (! flags().match(FieldFlag::declare_input)) return;
79 
80  // pass through field descriptors containing key matching field name.
82  double time;
83  for( auto &item : shared_->input_list_) {
84  time = item.val<double>("time"); // default time=0
85  TimeGovernor::marks().add( TimeMark(time, mark_type | TimeGovernor::marks().type_input() ));
86  }
87 }
88 
89 
90 
91 bool FieldCommon::print_message_table(ostream& stream, std::string equation_name) {
92  if (FieldCommon::messages_data_.size() == 0) return false;
93 
94  stream << endl << "Used default values of Fields for equation " << equation_name << ":" << endl;
95  stream << std::setfill('-') << setw(100) << "" << endl;
96  stream << std::setfill(' ') << " Field name" << setw(21) << "" << "Default value" << setw(7) << "" << "Apply on regions" << endl;
98  stringstream ss;
99  stream << " " << std::left << setw(30) << it->field_name_ << "" << " "
100  << setw(18) << it->default_value_ << "" << " " << it->region_list_ << endl;
101  }
102  stream << std::setfill('-') << setw(100) << "" << endl << endl;
103 
105  return true;
106 }
107 
108 
109 
111 
112 
113 
Common abstract parent of all Field<...> classes.
Definition: field_common.hh:60
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:77
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:68
Class for declaration of the integral input data.
Definition: type_base.hh:489
Basic time management functionality for unsteady (and steady) solvers (class Equation).
static TimeMarks & marks()
Class for declaration of inputs sequences.
Definition: type_base.hh:345
std::shared_ptr< SharedData > shared_
double time() const
Class for declaration of the input data that are floating point numbers.
Definition: type_base.hh:540
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:55
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:490
LimitSide last_limit_side_
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:36
Record type proxy class.
Definition: type_record.hh:182
static string obsolete()
static bool print_message_table(ostream &stream, std::string equation_name)
Definition: field_common.cc:91
Class for declaration of the input data that are in string format.
Definition: type_base.hh:588
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