MicroModelicaCCompiler  4.5.3
model_config.hpp
Go to the documentation of this file.
1 /*****************************************************************************
2 
3  This file is part of QSS Solver.
4 
5  QSS Solver is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  QSS Solver is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with QSS Solver. If not, see <http://www.gnu.org/licenses/>.
17 
18  ******************************************************************************/
19 
20 #pragma once
21 
22 #include <string>
23 
24 #include <ir/annotation.hpp>
25 #include <ir/index.hpp>
26 #include <ir/equation.hpp>
27 #include <ir/expression.hpp>
28 #include <util/symbol_table.hpp>
29 #include <util/util.hpp>
30 
31 namespace MicroModelica {
32 namespace Util {
33 
34 class ModelConfig {
35  public:
36  static ModelConfig& instance()
37  {
38  static ModelConfig _instance;
39  return _instance;
40  }
41 
42  ~ModelConfig() = default;
43 
45  inline IR::EquationTable algebraics() { return _algebraics; };
46  inline Deps::ModelDependencies dependencies() { return _dependencies; };
47  inline void setDependencies(Deps::ModelDependencies dependencies) { _dependencies = dependencies; };
48  inline IR::ModelAnnotation modelAnnotations() { return _model_annotations; };
49  inline void setModelAnnotations(IR::ModelAnnotation model_annotations)
50  {
51  _model_annotations = model_annotations;
52  _sym_diff = model_annotations.symDiff();
53  };
54  bool generateDerivatives() { return _sym_diff && isQss(); };
55  inline int order() { return _model_annotations.order(); };
56  inline bool isQss() { return !_model_annotations.isClassic(); };
58  inline IR::EquationTable derivatives() { return _derivatives; };
59  inline void setOrderedDerivatives(IR::EquationTable ordered_derivatives) { _ordered_derivatives = ordered_derivatives; };
61  inline void setAlgorithm(bool algorithm) { _algorithm = algorithm; };
62  inline bool algorithm() { return _algorithm; };
63  inline void setStateNbr(int state_nbr) { _state_nbr = state_nbr; }
64  inline int stateNbr() const { return _state_nbr; }
65  inline void setAlgebraicNbr(int algebraic_nbr) { _algebraic_nbr = algebraic_nbr; }
66  inline int algebraicNbr() const { return _algebraic_nbr; }
67  inline void setSymDiff(bool sym_diff) { _sym_diff = sym_diff; }
68  inline bool symDiff() const { return _sym_diff; }
69 
70  // Symbol table access.
71  inline VarSymbolTable& symbols() { return _symbols; };
72  inline SymbolTable localSymbols() { return _local_symbols; };
74  inline Option<Variable> lookup(std::string var_name) { return _symbols[var_name]; };
75  inline void addLocalSymbol(std::string symbol)
76  {
77  if (_init_symbols) {
78  _local_init_symbols.insert(symbol, symbol);
79  } else {
80  _local_symbols.insert(symbol, symbol);
81  }
82  };
83  inline void addVariable(VarName name, Variable var) { _symbols.insert(name, var); }
84  inline void setSymbols(const VarSymbolTable& symbols) { _symbols = symbols; };
85  inline void clearLocalSymbols() { _local_symbols.clear(); };
86  inline void setLocalInitSymbols() { _init_symbols = true; };
87  inline void unsetLocalInitSymbols() { _init_symbols = false; };
88 
89  inline void setEvents(IR::EventTable events) { _events = events; }
90  inline IR::EventTable events() const { return _events; }
91  inline bool functionOutputs() const { return _function_outputs; }
92  inline void setFunctionOutputs(bool function_outputs) { _function_outputs = function_outputs; }
93  inline bool functionCode() const { return _function_code; }
94  inline void setFunctionCode(bool function_code) { _function_code = function_code; }
95  inline bool compiledFunctionVar() const { return _compiled_function_var; }
96  inline void setCompiledFunctionVar(bool compiled_function_var) { _compiled_function_var = compiled_function_var; }
97  inline void setReinit(bool reinit) { _reinit = reinit; }
98  inline bool reinit() { return _reinit; }
99  inline void setInitialCode(bool initial_code) { _initial_code = initial_code; }
100  inline bool initialCode() { return _initial_code; }
101 
102  private:
103  ModelConfig()
104  : _model_annotations(),
110  _algorithm(false),
120  _compiled_function_var(false),
121  _sym_diff(false),
122  _reinit(false),
124  {
126  };
127 
130  Deps::ModelDependencies _dependencies;
145  bool _sym_diff;
146  bool _reinit;
148 };
149 
150 } // namespace Util
151 } // namespace MicroModelica
MicroModelica::Util::ModelConfig::ModelConfig
ModelConfig()
Definition: model_config.hpp:154
MicroModelica::Util::ModelConfig::lookup
Option< Variable > lookup(std::string var_name)
Definition: model_config.hpp:125
MicroModelica::Util::ModelConfig::reinit
bool reinit()
Definition: model_config.hpp:149
ModelTable< std::string, std::string >
MicroModelica::Util::ModelConfig::_function_outputs
bool _function_outputs
Definition: model_config.hpp:193
MicroModelica::Util::ModelConfig::_model_annotations
IR::ModelAnnotation _model_annotations
Definition: model_config.hpp:177
MicroModelica::Util::ModelConfig::order
int order()
Definition: model_config.hpp:106
MicroModelica::Util::ModelConfig::_initial_code
bool _initial_code
Definition: model_config.hpp:198
MicroModelica::Util::VarSymbolTable
Definition: symbol_table.hpp:184
MicroModelica::Util::ModelConfig::symbols
VarSymbolTable & symbols()
Definition: model_config.hpp:122
index.hpp
MicroModelica::Util::ModelConfig::_types
TypeSymbolTable _types
Definition: model_config.hpp:192
MicroModelica::Util::ModelConfig::setFunctionCode
void setFunctionCode(bool function_code)
Definition: model_config.hpp:145
MicroModelica::Util::ModelConfig::_algorithm
bool _algorithm
Definition: model_config.hpp:185
MicroModelica::Util::ModelConfig::localInitSymbols
SymbolTable localInitSymbols()
Definition: model_config.hpp:124
expression.hpp
MicroModelica::Util::ModelConfig::setReinit
void setReinit(bool reinit)
Definition: model_config.hpp:148
MicroModelica::Util::ModelConfig::algorithm
bool algorithm()
Definition: model_config.hpp:113
MicroModelica::Util::ModelConfig::setSymbols
void setSymbols(const VarSymbolTable &symbols)
Definition: model_config.hpp:135
MicroModelica::Util::ModelConfig::setAlgebraics
void setAlgebraics(IR::EquationTable algebraics)
Definition: model_config.hpp:95
MicroModelica::IR::EquationTable
ModelTable< int, Equation > EquationTable
Definition: equation.hpp:169
symbol_table.hpp
MicroModelica::Util::ModelConfig::events
IR::EventTable events() const
Definition: model_config.hpp:141
Option
Definition: util_types.hpp:32
MicroModelica::Util::ModelConfig::addVariable
void addVariable(VarName name, Variable var)
Definition: model_config.hpp:134
MicroModelica::Util::ModelConfig::setSymDiff
void setSymDiff(bool sym_diff)
Definition: model_config.hpp:118
MicroModelica::Util::VarSymbolTable::initialize
void initialize(TypeSymbolTable tst)
Definition: symbol_table.cpp:288
MicroModelica::Util::ModelConfig::_events
IR::EventTable _events
Definition: model_config.hpp:184
MicroModelica::Util::ModelConfig::setDependencies
void setDependencies(Deps::ModelDependencies dependencies)
Definition: model_config.hpp:98
MicroModelica::Util::ModelConfig::_algebraic_nbr
int _algebraic_nbr
Definition: model_config.hpp:186
MicroModelica::Util::ModelConfig::_reinit
bool _reinit
Definition: model_config.hpp:197
MicroModelica::Util::ModelConfig::setEvents
void setEvents(IR::EventTable events)
Definition: model_config.hpp:140
MicroModelica::Util::ModelConfig::setCompiledFunctionVar
void setCompiledFunctionVar(bool compiled_function_var)
Definition: model_config.hpp:147
MicroModelica::Util::ModelConfig::setLocalInitSymbols
void setLocalInitSymbols()
Definition: model_config.hpp:137
MicroModelica::Util::ModelConfig::setStateNbr
void setStateNbr(int state_nbr)
Definition: model_config.hpp:114
MicroModelica::Util::SymbolTable
ModelTable< std::string, std::string > SymbolTable
Definition: equation.hpp:62
MicroModelica::Util::ModelConfig::_algebraics
IR::EquationTable _algebraics
Definition: model_config.hpp:180
MicroModelica::IR::ModelAnnotation::isClassic
bool isClassic()
Definition: annotation.cpp:666
MicroModelica::Util::ModelConfig::addLocalSymbol
void addLocalSymbol(std::string symbol)
Definition: model_config.hpp:126
MicroModelica::Util::ModelConfig::dependencies
Deps::ModelDependencies dependencies()
Definition: model_config.hpp:97
MicroModelica::Util::ModelConfig::setFunctionOutputs
void setFunctionOutputs(bool function_outputs)
Definition: model_config.hpp:143
MicroModelica::Util::ModelConfig::algebraics
IR::EquationTable algebraics()
Definition: model_config.hpp:96
MicroModelica::Util::ModelConfig::_local_symbols
SymbolTable _local_symbols
Definition: model_config.hpp:189
MicroModelica::Util::ModelConfig::generateDerivatives
bool generateDerivatives()
Definition: model_config.hpp:105
MicroModelica::IR::ModelAnnotation
Definition: annotation.hpp:121
VarName
std::string VarName
Definition: util_types.hpp:43
MicroModelica::Util::ModelConfig::orderedDerivatives
IR::EquationTable orderedDerivatives()
Definition: model_config.hpp:111
MicroModelica::Util::ModelConfig::_sym_diff
bool _sym_diff
Definition: model_config.hpp:196
equation.hpp
MicroModelica::Util::ModelConfig::_dependencies
Deps::ModelDependencies _dependencies
Definition: model_config.hpp:181
MicroModelica::Util::ModelConfig::isQss
bool isQss()
Definition: model_config.hpp:107
MicroModelica::Util::ModelConfig::instance
static ModelConfig & instance()
Definition: model_config.hpp:87
MicroModelica::Util::ModelConfig::unsetLocalInitSymbols
void unsetLocalInitSymbols()
Definition: model_config.hpp:138
MicroModelica::Util::ModelConfig::setAlgebraicNbr
void setAlgebraicNbr(int algebraic_nbr)
Definition: model_config.hpp:116
MicroModelica::Util::ModelConfig::modelAnnotations
IR::ModelAnnotation modelAnnotations()
Definition: model_config.hpp:99
MicroModelica::Util::TypeSymbolTable
Definition: symbol_table.hpp:179
MicroModelica::Util::ModelConfig::setAlgorithm
void setAlgorithm(bool algorithm)
Definition: model_config.hpp:112
MicroModelica::IR::ModelAnnotation::order
int order()
Definition: annotation.cpp:684
MicroModelica::Util::ModelConfig::_function_code
bool _function_code
Definition: model_config.hpp:194
MicroModelica::Util::ModelConfig::functionOutputs
bool functionOutputs() const
Definition: model_config.hpp:142
MicroModelica::Util::VarSymbolTable::insert
void insert(VarName name, Variable variable)
Definition: symbol_table.cpp:312
MicroModelica::Util::ModelConfig::_compiled_function_var
bool _compiled_function_var
Definition: model_config.hpp:195
MicroModelica::Util::ModelConfig::setOrderedDerivatives
void setOrderedDerivatives(IR::EquationTable ordered_derivatives)
Definition: model_config.hpp:110
MicroModelica::Util::ModelConfig::_derivatives
IR::EquationTable _derivatives
Definition: model_config.hpp:182
MicroModelica
Definition: files.cpp:45
MicroModelica::Util::ModelConfig::_local_init_symbols
SymbolTable _local_init_symbols
Definition: model_config.hpp:190
MicroModelica::Util::ModelConfig::setInitialCode
void setInitialCode(bool initial_code)
Definition: model_config.hpp:150
MicroModelica::Util::ModelConfig::symDiff
bool symDiff() const
Definition: model_config.hpp:119
MicroModelica::Util::ModelConfig::_ordered_derivatives
IR::EquationTable _ordered_derivatives
Definition: model_config.hpp:183
MicroModelica::Util::ModelConfig::_init_symbols
bool _init_symbols
Definition: model_config.hpp:191
MicroModelica::Util::ModelConfig::setModelAnnotations
void setModelAnnotations(IR::ModelAnnotation model_annotations)
Definition: model_config.hpp:100
ModelTable::insert
void insert(Key k, Value v)
Definition: table.hpp:48
MicroModelica::Util::ModelConfig::setDerivatives
void setDerivatives(IR::EquationTable derivatives)
Definition: model_config.hpp:108
MicroModelica::Util::ModelConfig::~ModelConfig
~ModelConfig()=default
MicroModelica::Util::ModelConfig::stateNbr
int stateNbr() const
Definition: model_config.hpp:115
annotation.hpp
MicroModelica::Util::ModelConfig::compiledFunctionVar
bool compiledFunctionVar() const
Definition: model_config.hpp:146
MicroModelica::Util::ModelConfig::initialCode
bool initialCode()
Definition: model_config.hpp:151
MicroModelica::Util::ModelConfig::_state_nbr
int _state_nbr
Definition: model_config.hpp:187
ModelTable::clear
void clear()
Definition: table.hpp:107
MicroModelica::Util::ModelConfig::clearLocalSymbols
void clearLocalSymbols()
Definition: model_config.hpp:136
MicroModelica::Util::ModelConfig::localSymbols
SymbolTable localSymbols()
Definition: model_config.hpp:123
MicroModelica::Util::ModelConfig::functionCode
bool functionCode() const
Definition: model_config.hpp:144
MicroModelica::Util::ModelConfig::derivatives
IR::EquationTable derivatives()
Definition: model_config.hpp:109
util.hpp
MicroModelica::Util::ModelConfig::algebraicNbr
int algebraicNbr() const
Definition: model_config.hpp:117
MicroModelica::Util::ModelConfig::_symbols
VarSymbolTable _symbols
Definition: model_config.hpp:188