OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment that supports ordinary (i.e., non-delayed) and TLM connections.
Flags.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenModelica.
3  *
4  * Copyright (c) 1998-CurrentYear, Open Source Modelica Consortium (OSMC),
5  * c/o Linköpings universitet, Department of Computer and Information Science,
6  * SE-58183 Linköping, Sweden.
7  *
8  * All rights reserved.
9  *
10  * THIS PROGRAM IS PROVIDED UNDER THE TERMS OF GPL VERSION 3 LICENSE OR
11  * THIS OSMC PUBLIC LICENSE (OSMC-PL) VERSION 1.2.
12  * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS PROGRAM CONSTITUTES
13  * RECIPIENT'S ACCEPTANCE OF THE OSMC PUBLIC LICENSE OR THE GPL VERSION 3,
14  * ACCORDING TO RECIPIENTS CHOICE.
15  *
16  * The OpenModelica software and the Open Source Modelica
17  * Consortium (OSMC) Public License (OSMC-PL) are obtained
18  * from OSMC, either from the above address,
19  * from the URLs: http://www.ida.liu.se/projects/OpenModelica or
20  * http://www.openmodelica.org, and in the OpenModelica distribution.
21  * GNU version 3 is obtained from: http://www.gnu.org/copyleft/gpl.html.
22  *
23  * This program is distributed WITHOUT ANY WARRANTY; without
24  * even the implied warranty of MERCHANTABILITY or FITNESS
25  * FOR A PARTICULAR PURPOSE, EXCEPT AS EXPRESSLY SET FORTH
26  * IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE CONDITIONS OF OSMC-PL.
27  *
28  * See the full OSMC Public License conditions for more details.
29  *
30  */
31 
32 #ifndef _OMS_FLAGS_H_
33 #define _OMS_FLAGS_H_
34 
35 #include "Types.h"
36 #include <string>
37 #include <vector>
38 #include <map>
39 
40 namespace oms
41 {
42  class Flags
43  {
44  private:
45  Flags();
46  ~Flags();
47  void setDefaults();
48 
49  // stop the compiler generating methods copying the object
50  Flags(Flags const&);
51  Flags& operator=(Flags const&);
52 
53  static Flags& GetInstance();
54 
55  public:
56  static oms_status_enu_t SetCommandLineOption(const std::string& cmd);
57 
59  static bool DefaultModeIsCS() {return GetInstance().defaultModeIsCS;}
60  static bool DeleteTempFiles() {return GetInstance().deleteTempFiles;}
62  static bool DumpAlgLoops() {return GetInstance().dumpAlgLoops;}
63  static bool EmitEvents() {return GetInstance().emitEvents;}
66  static bool ProgressBar() {return GetInstance().progressBar;}
67  static bool RealTime() {return GetInstance().realTime;}
68  static bool SkipCSVHeader() {return GetInstance().skipCSVHeader;}
69  static bool SolverStats() {return GetInstance().solverStats;}
70  static bool StripRoot() {return GetInstance().stripRoot;}
71  static bool SuppressPath() {return GetInstance().suppressPath;}
72  static bool WallTime() {return GetInstance().wallTime;}
73  static bool ZeroNominal() {return GetInstance().zeroNominal;}
74  static double InitialStepSize() {return GetInstance().initialStepSize;}
75  static double MaximumStepSize() {return GetInstance().maximumStepSize;}
76  static double MinimumStepSize() {return GetInstance().minimumStepSize;}
77  static double StartTime() {return GetInstance().startTime;}
78  static double StopTime() {return GetInstance().stopTime;}
79  static double Timeout() {return GetInstance().timeout;}
80  static double Tolerance() {return GetInstance().tolerance;}
84  static std::string ResultFile() {return GetInstance().resultFile;}
85  static unsigned int Intervals() {return GetInstance().intervals;}
86  static unsigned int MaxEventIteration() {return GetInstance().maxEventIteration;}
87  static unsigned int MaxLoopIteration() {return GetInstance().maxLoopIteration;}
88  static unsigned int NumProcs() {return GetInstance().numProcs;}
89 
90  private:
96  bool emitEvents;
100  bool realTime;
103  bool stripRoot;
105  bool wallTime;
110  double startTime;
111  double stopTime;
112  double timeout;
113  double tolerance;
117  std::string resultFile;
118  unsigned int intervals;
119  unsigned int maxEventIteration;
120  unsigned int maxLoopIteration;
121  unsigned int numProcs;
122 
123  private:
124  struct Flag
125  {
126  const std::string name;
127  const std::string abbr;
128  const std::string desc;
129  const std::string regex;
130  oms_status_enu_t (*fcn)(const std::string& value);
131  const bool interrupt;
132  };
133 
134  std::map<std::string, unsigned int> lookup;
135  std::vector<std::string> files;
136 
137  const std::string re_void = "";
138  const std::string re_default = ".+";
139  const std::string re_bool = "(true|false)";
140  const std::string re_mode = "(me|cs)";
141  const std::string re_double = "((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?";
142  const std::string re_number = "[[:digit:]]+";
143  const std::string re_filename = ".+(\\.fmu|\\.ssp|\\.lua)";
144  const std::string re_stepSize = "((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?(,((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?,((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?)?";
145 
146  const std::vector<Flag> flags = {
147  {"", "", "FMU or SSP file", re_filename, Flags::Filename, false},
148  {"--addParametersToCSV", "", "Export parameters to .csv file (true, [false])", re_default, Flags::AddParametersToCSV, false},
149  {"--algLoopSolver", "", "Specifies the alg. loop solver method (fixedpoint, [kinsol]) used for algebraic loops spanning over multiple components.", re_default, Flags::AlgLoopSolver, false},
150  {"--clearAllOptions", "", "Reset all flags to default values", re_void, Flags::ClearAllOptions, false},
151  {"--deleteTempFiles", "", "Deletes temp files as soon as they are no longer needed ([true], false)", re_bool, Flags::DeleteTempFiles, false},
152  {"--directionalDerivatives", "", "Specifies whether directional derivatives should be used to calculate the Jacobian for alg. loops or if a numerical approximation should be used instead ([true], false)", re_bool, Flags::DirectionalDerivatives, false},
153  {"--dumpAlgLoops", "", "Dump information for alg loops (true, [false])", re_bool, Flags::DumpAlgLoops, false},
154  {"--emitEvents", "", "Specifies whether events should be emitted or not ([true], false)", re_bool, Flags::EmitEvents, false},
155  {"--fetchAllVars", "", "Workaround for certain FMUs that do not update all internal dependencies automatically", re_default, Flags::FetchAllVars, false},
156  {"--help", "-h", "Displays the help text", re_void, Flags::Help, true},
157  {"--ignoreInitialUnknowns", "", "Ignore the initial unknowns from the modelDescription.xml (true, [false])", re_bool, Flags::IgnoreInitialUnknowns, false},
158  {"--inputExtrapolation", "", "Enables input extrapolation using derivative information (true, [false])", re_bool, Flags::InputExtrapolation, false},
159  {"--intervals", "-i", "Specifies the number of communication points (arg > 1)", re_number, Flags::Intervals, false},
160  {"--logFile", "-l", "Specifies the logfile (stdout is used if no log file is specified)", re_default, Flags::LogFile, false},
161  {"--logLevel", "", "0 default, 1 debug, 2 debug+trace", re_number, Flags::LogLevel, false},
162  {"--maxEventIteration", "", "Specifies the max. number of iterations for handling a single event", re_number, Flags::MaxEventIteration, false},
163  {"--maxLoopIteration", "", "Specifies the max. number of iterations for solving algebraic loops between system-level components. Internal algebraic loops of components are not affected.", re_number, Flags::MaxLoopIteration, false},
164  {"--mode", "-m", "Forces a certain FMI mode iff the FMU provides cs and me (cs, [me])", re_mode, Flags::Mode, false},
165  {"--numProcs", "-n", "Specifies the max. number of processors to use (0=auto, 1=default)", re_number, Flags::NumProcs, false},
166  {"--progressBar", "", "Shows a progress bar for the simulation progress in the terminal (true, [false])", re_bool, Flags::ProgressBar, false},
167  {"--realTime", "", "Experimental feature for (soft) real-time co-simulation (true, [false])", re_bool, Flags::RealTime, false},
168  {"--resultFile", "-r", "Specifies the name of the output result file", re_default, Flags::ResultFile, false},
169  {"--skipCSVHeader", "", "Skip exporting the scv delimiter in the header ([true], false), ", re_default, Flags::SkipCSVHeader, false},
170  {"--solver", "", "Specifies the integration method (euler, [cvode])", re_default, Flags::Solver, false},
171  {"--solverStats", "", "Adds solver stats to the result file, e.g. step size; not supported for all solvers (true, [false])", re_bool, Flags::SolverStats, false},
172  {"--startTime", "-s", "Specifies the start time", re_double, Flags::StartTime, false},
173  {"--stepSize", "", "Specifies the step size (<step size> or <init step,min step,max step>)", re_stepSize, Flags::StepSize, false},
174  {"--stopTime", "-t", "Specifies the stop time", re_double, Flags::StopTime, false},
175  {"--stripRoot", "", "Removes the root system prefix from all exported signals (true, [false])", re_bool, Flags::StripRoot, false},
176  {"--suppressPath", "", "Supresses path information in info messages; especially useful for testing ([true], false)", re_bool, Flags::SuppressPath, false},
177  {"--tempDir", "", "Specifies the temp directory", re_default, Flags::TempDir, false},
178  {"--timeout", "", "Specifies the maximum allowed time in seconds for running a simulation (0 disables)", re_number, Flags::Timeout, false},
179  {"--tolerance", "", "Specifies the relative tolerance", re_double, Flags::Tolerance, false},
180  {"--version", "-v", "Displays version information", re_void, Flags::Version, false},
181  {"--wallTime", "", "Add wall time information for to the result file (true, [false])", re_bool, Flags::WallTime, false},
182  {"--workingDir", "", "Specifies the working directory", re_default, Flags::WorkingDir, false},
183  {"--zeroNominal", "", "Using this flag, FMUs with invalid nominal values will be accepted and the invalid nominal values will be replaced with 1.0", re_bool, Flags::ZeroNominal, false}
184  };
185 
186  static oms_status_enu_t AddParametersToCSV(const std::string& value);
187  static oms_status_enu_t AlgLoopSolver(const std::string& value);
188  static oms_status_enu_t ClearAllOptions(const std::string& value);
189  static oms_status_enu_t DeleteTempFiles(const std::string& value);
190  static oms_status_enu_t DirectionalDerivatives(const std::string& value);
191  static oms_status_enu_t DumpAlgLoops(const std::string& value);
192  static oms_status_enu_t EmitEvents(const std::string& value);
193  static oms_status_enu_t FetchAllVars(const std::string& value);
194  static oms_status_enu_t Filename(const std::string& value);
195  static oms_status_enu_t Help(const std::string& value);
196  static oms_status_enu_t IgnoreInitialUnknowns(const std::string& value);
197  static oms_status_enu_t InputExtrapolation(const std::string& value);
198  static oms_status_enu_t Intervals(const std::string& value);
199  static oms_status_enu_t LogFile(const std::string& value);
200  static oms_status_enu_t LogLevel(const std::string& value);
201  static oms_status_enu_t MaxEventIteration(const std::string& value);
202  static oms_status_enu_t MaxLoopIteration(const std::string& value);
203  static oms_status_enu_t Mode(const std::string& value);
204  static oms_status_enu_t NumProcs(const std::string& value);
205  static oms_status_enu_t ProgressBar(const std::string& value);
206  static oms_status_enu_t RealTime(const std::string& value);
207  static oms_status_enu_t ResultFile(const std::string& value);
208  static oms_status_enu_t SkipCSVHeader(const std::string& value);
209  static oms_status_enu_t Solver(const std::string& value);
210  static oms_status_enu_t SolverStats(const std::string& value);
211  static oms_status_enu_t StartTime(const std::string& value);
212  static oms_status_enu_t StepSize(const std::string& value);
213  static oms_status_enu_t StopTime(const std::string& value);
214  static oms_status_enu_t StripRoot(const std::string& value);
215  static oms_status_enu_t SuppressPath(const std::string& value);
216  static oms_status_enu_t TempDir(const std::string& value);
217  static oms_status_enu_t Timeout(const std::string& value);
218  static oms_status_enu_t Tolerance(const std::string& value);
219  static oms_status_enu_t Version(const std::string& value);
220  static oms_status_enu_t WallTime(const std::string& value);
221  static oms_status_enu_t WorkingDir(const std::string& value);
222  static oms_status_enu_t ZeroNominal(const std::string& value);
223  };
224 }
225 
226 #endif
unsigned int numProcs
Definition: Flags.h:121
bool dumpAlgLoops
Definition: Flags.h:95
oms_solver_enu_t
Definition: Types.h:96
bool solverStats
Definition: Flags.h:102
const std::string desc
Definition: Flags.h:128
bool defaultModeIsCS
Definition: Flags.h:92
const std::string regex
Definition: Flags.h:129
static bool DumpAlgLoops()
Definition: Flags.h:62
const std::string name
Definition: Flags.h:126
const std::string re_stepSize
Definition: Flags.h:144
static bool ProgressBar()
Definition: Flags.h:66
static oms_status_enu_t Filename(const std::string &value)
Definition: Flags.cpp:267
const std::string re_number
Definition: Flags.h:142
void setDefaults()
Definition: Flags.cpp:64
bool progressBar
Definition: Flags.h:99
static oms_solver_enu_t MasterAlgorithm()
Definition: Flags.h:82
bool deleteTempFiles
Definition: Flags.h:93
static oms_alg_solver_enu_t AlgLoopSolver()
Definition: Flags.h:81
static bool InputExtrapolation()
Definition: Flags.h:65
const bool interrupt
Definition: Flags.h:131
static oms_solver_enu_t Solver()
Definition: Flags.h:83
const std::string abbr
Definition: Flags.h:127
static double StopTime()
Definition: Flags.h:78
double tolerance
Definition: Flags.h:113
static bool DefaultModeIsCS()
Definition: Flags.h:59
bool emitEvents
Definition: Flags.h:96
const std::string re_void
Definition: Flags.h:137
static Flags & GetInstance()
Definition: Flags.cpp:99
oms_status_enu_t
Definition: Types.h:43
unsigned int maxEventIteration
Definition: Flags.h:119
std::vector< std::string > files
Definition: Flags.h:135
Flags()
Definition: Flags.cpp:48
bool inputExtrapolation
Definition: Flags.h:98
oms_solver_enu_t masterAlgorithm
Definition: Flags.h:115
bool suppressPath
Definition: Flags.h:104
bool ignoreInitialUnknowns
Definition: Flags.h:97
static oms_status_enu_t Mode(const std::string &value)
Definition: Flags.cpp:347
static oms_status_enu_t WorkingDir(const std::string &value)
Definition: Flags.cpp:480
unsigned int intervals
Definition: Flags.h:118
static bool StripRoot()
Definition: Flags.h:70
static bool DeleteTempFiles()
Definition: Flags.h:60
static oms_status_enu_t LogFile(const std::string &value)
Definition: Flags.cpp:323
static unsigned int MaxEventIteration()
Definition: Flags.h:86
static oms_status_enu_t Version(const std::string &value)
Definition: Flags.cpp:474
static bool EmitEvents()
Definition: Flags.h:63
static double InitialStepSize()
Definition: Flags.h:74
static unsigned int NumProcs()
Definition: Flags.h:88
std::string resultFile
Definition: Flags.h:117
static std::string ResultFile()
Definition: Flags.h:84
bool zeroNominal
Definition: Flags.h:106
double startTime
Definition: Flags.h:110
bool stripRoot
Definition: Flags.h:103
static double MaximumStepSize()
Definition: Flags.h:75
bool realTime
Definition: Flags.h:100
double maximumStepSize
Definition: Flags.h:108
static bool SkipCSVHeader()
Definition: Flags.h:68
const std::string re_double
Definition: Flags.h:141
const std::string re_filename
Definition: Flags.h:143
const std::string re_mode
Definition: Flags.h:140
static oms_status_enu_t LogLevel(const std::string &value)
Definition: Flags.cpp:329
static double StartTime()
Definition: Flags.h:77
static bool DirectionalDerivatives()
Definition: Flags.h:61
oms_status_enu_t(* fcn)(const std::string &value)
Definition: Flags.h:130
~Flags()
Definition: Flags.cpp:60
static unsigned int Intervals()
Definition: Flags.h:85
static oms_status_enu_t Help(const std::string &value)
Definition: Flags.cpp:273
double timeout
Definition: Flags.h:112
oms_alg_solver_enu_t
Definition: Types.h:110
static oms_status_enu_t FetchAllVars(const std::string &value)
Definition: Flags.cpp:230
static double MinimumStepSize()
Definition: Flags.h:76
Definition: AlgLoop.h:44
Definition: Flags.h:42
static unsigned int MaxLoopIteration()
Definition: Flags.h:87
static double Tolerance()
Definition: Flags.h:80
double initialStepSize
Definition: Flags.h:107
static double Timeout()
Definition: Flags.h:79
static oms_status_enu_t ClearAllOptions(const std::string &value)
Definition: Flags.cpp:200
bool directionalDerivatives
Definition: Flags.h:94
const std::vector< Flag > flags
Definition: Flags.h:146
oms_solver_enu_t solver
Definition: Flags.h:116
const std::string re_default
Definition: Flags.h:138
static bool RealTime()
Definition: Flags.h:67
static bool AddParametersToCSV()
Definition: Flags.h:58
double minimumStepSize
Definition: Flags.h:109
static oms_status_enu_t SetCommandLineOption(const std::string &cmd)
Definition: Flags.cpp:122
oms_alg_solver_enu_t algLoopSolver
Definition: Flags.h:114
bool addParametersToCSV
Definition: Flags.h:91
double stopTime
Definition: Flags.h:111
static bool SolverStats()
Definition: Flags.h:69
bool wallTime
Definition: Flags.h:105
static oms_status_enu_t StepSize(const std::string &value)
Definition: Flags.cpp:419
static bool SuppressPath()
Definition: Flags.h:71
static bool ZeroNominal()
Definition: Flags.h:73
bool skipCSVHeader
Definition: Flags.h:101
Flags & operator=(Flags const &)
not implemented
Definition: Flags.h:124
static bool IgnoreInitialUnknowns()
Definition: Flags.h:64
const std::string re_bool
Definition: Flags.h:139
unsigned int maxLoopIteration
Definition: Flags.h:120
static oms_status_enu_t TempDir(const std::string &value)
Definition: Flags.cpp:456
std::map< std::string, unsigned int > lookup
Definition: Flags.h:134
static bool WallTime()
Definition: Flags.h:72