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 "OMSimulator/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 
62  static int CVODEMaxSteps() {return GetInstance().cvodeMaxSteps;}
63  static bool DefaultModeIsCS() {return GetInstance().defaultModeIsCS;}
64  static bool DeleteTempFiles() {return GetInstance().deleteTempFiles;}
66  static bool DumpAlgLoops() {return GetInstance().dumpAlgLoops;}
67  static bool EmitEvents() {return GetInstance().emitEvents;}
70  static bool ProgressBar() {return GetInstance().progressBar;}
71  static bool RealTime() {return GetInstance().realTime;}
72  static bool SkipCSVHeader() {return GetInstance().skipCSVHeader;}
73  static bool SolverStats() {return GetInstance().solverStats;}
74  static bool StripRoot() {return GetInstance().stripRoot;}
75  static bool SuppressPath() {return GetInstance().suppressPath;}
76  static bool WallTime() {return GetInstance().wallTime;}
77  static bool ZeroNominal() {return GetInstance().zeroNominal;}
78  static double InitialStepSize() {return GetInstance().initialStepSize;}
79  static double MaximumStepSize() {return GetInstance().maximumStepSize;}
80  static double MinimumStepSize() {return GetInstance().minimumStepSize;}
81  static double StartTime() {return GetInstance().startTime;}
82  static double StopTime() {return GetInstance().stopTime;}
83  static double Tolerance() {return GetInstance().tolerance;}
84  static oms_alg_solver_enu_t AlgLoopSolver() {return GetInstance().algLoopSolver;}
85  static oms_solver_enu_t MasterAlgorithm() {return GetInstance().masterAlgorithm;}
86  static oms_solver_enu_t Solver() {return GetInstance().solver;}
87  static std::string ResultFile() {return GetInstance().resultFile;}
88  static unsigned int Intervals() {return GetInstance().intervals;}
89  static unsigned int MaxEventIteration() {return GetInstance().maxEventIteration;}
90  static unsigned int MaxLoopIteration() {return GetInstance().maxLoopIteration;}
91  static unsigned int NumProcs() {return GetInstance().numProcs;}
92  static unsigned int Timeout() {return GetInstance().timeout;}
93 
94  private:
108  bool realTime;
111  bool stripRoot;
113  bool wallTime;
118  double startTime;
119  double stopTime;
120  double tolerance;
121  oms_alg_solver_enu_t algLoopSolver;
122  oms_solver_enu_t masterAlgorithm;
123  oms_solver_enu_t solver;
124  std::string resultFile;
125  unsigned int intervals;
126  unsigned int maxEventIteration;
127  unsigned int maxLoopIteration;
128  unsigned int numProcs;
129  unsigned int timeout;
130 
131  private:
132  struct Flag
133  {
134  const std::string name;
135  const std::string abbr;
136  const std::string desc;
137  const std::string regex;
138  oms_status_enu_t (*fcn)(const std::string& value);
139  const bool interrupt;
140  };
141 
142  std::map<std::string, unsigned int> lookup;
143  std::vector<std::string> files;
144 
145  const std::string re_void = "";
146  const std::string re_default = ".+";
147  const std::string re_bool = "(true|false)";
148  const std::string re_mode = "(me|cs)";
149  const std::string re_double = "((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?";
150  const std::string re_number = "[[:digit:]]+";
151  const std::string re_filename = ".+(\\.fmu|\\.ssp|\\.lua)";
152  const std::string re_stepSize = "((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?(,((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?,((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?)?";
153 
154  const std::vector<Flag> flags = {
155  {"", "", "FMU or SSP file", re_filename, Flags::Filename, false},
156  {"--addParametersToCSV", "", "Export parameters to .csv file (true, [false])", re_default, Flags::AddParametersToCSV, false},
157  {"--algLoopSolver", "", "Specifies the alg. loop solver method (fixedpoint, [kinsol]) used for algebraic loops spanning over multiple components.", re_default, Flags::AlgLoopSolver, false},
158  {"--clearAllOptions", "", "Reset all flags to default values", re_void, Flags::ClearAllOptions, false},
159  {"--CVODEMaxErrTestFails", "", "Maximum number of error test failures for CVODE", re_number, Flags::CVODEMaxErrTestFails, false},
160  {"--CVODEMaxNLSFailures", "", "Maximum number of nonlinear convergence failures for CVODE", re_number, Flags::CVODEMaxNLSFailures, false},
161  {"--CVODEMaxNLSIterations", "", "Maximum number of nonlinear solver iterations for CVODE", re_number, Flags::CVODEMaxNLSIterations, false},
162  {"--CVODEMaxSteps", "", "Maximum number of steps for CVODE", re_number, Flags::CVODEMaxSteps, false},
163  {"--deleteTempFiles", "", "Deletes temp files as soon as they are no longer needed ([true], false)", re_bool, Flags::DeleteTempFiles, false},
164  {"--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},
165  {"--dumpAlgLoops", "", "Dump information for alg loops (true, [false])", re_bool, Flags::DumpAlgLoops, false},
166  {"--emitEvents", "", "Specifies whether events should be emitted or not ([true], false)", re_bool, Flags::EmitEvents, false},
167  {"--fetchAllVars", "", "Workaround for certain FMUs that do not update all internal dependencies automatically", re_default, Flags::FetchAllVars, false},
168  {"--help", "-h", "Displays the help text", re_void, Flags::Help, true},
169  {"--ignoreInitialUnknowns", "", "Ignore the initial unknowns from the modelDescription.xml (true, [false])", re_bool, Flags::IgnoreInitialUnknowns, false},
170  {"--inputExtrapolation", "", "Enables input extrapolation using derivative information (true, [false])", re_bool, Flags::InputExtrapolation, false},
171  {"--intervals", "-i", "Specifies the number of communication points (arg > 1)", re_number, Flags::Intervals, false},
172  {"--logFile", "-l", "Specifies the logfile (stdout is used if no log file is specified)", re_default, Flags::LogFile, false},
173  {"--logLevel", "", "0 default, 1 debug, 2 debug+trace", re_number, Flags::LogLevel, false},
174  {"--maxEventIteration", "", "Specifies the max. number of iterations for handling a single event", re_number, Flags::MaxEventIteration, false},
175  {"--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},
176  {"--mode", "-m", "Forces a certain FMI mode iff the FMU provides cs and me (cs, [me])", re_mode, Flags::Mode, false},
177  {"--numProcs", "-n", "Specifies the max. number of processors to use (0=auto, 1=default)", re_number, Flags::NumProcs, false},
178  {"--progressBar", "", "Shows a progress bar for the simulation progress in the terminal (true, [false])", re_bool, Flags::ProgressBar, false},
179  {"--realTime", "", "Experimental feature for (soft) real-time co-simulation (true, [false])", re_bool, Flags::RealTime, false},
180  {"--resultFile", "-r", "Specifies the name of the output result file", re_default, Flags::ResultFile, false},
181  {"--skipCSVHeader", "", "Skip exporting the scv delimiter in the header ([true], false), ", re_default, Flags::SkipCSVHeader, false},
182  {"--solver", "", "Specifies the integration method (euler, [cvode])", re_default, Flags::Solver, false},
183  {"--solverStats", "", "Adds solver stats to the result file, e.g. step size; not supported for all solvers (true, [false])", re_bool, Flags::SolverStats, false},
184  {"--startTime", "-s", "Specifies the start time", re_double, Flags::StartTime, false},
185  {"--stepSize", "", "Specifies the step size (<step size> or <init step,min step,max step>)", re_stepSize, Flags::StepSize, false},
186  {"--stopTime", "-t", "Specifies the stop time", re_double, Flags::StopTime, false},
187  {"--stripRoot", "", "Removes the root system prefix from all exported signals (true, [false])", re_bool, Flags::StripRoot, false},
188  {"--suppressPath", "", "Supresses path information in info messages; especially useful for testing ([true], false)", re_bool, Flags::SuppressPath, false},
189  {"--tempDir", "", "Specifies the temp directory", re_default, Flags::TempDir, false},
190  {"--timeout", "", "Specifies the maximum allowed time in seconds for running a simulation (0 disables)", re_number, Flags::Timeout, false},
191  {"--tolerance", "", "Specifies the relative tolerance", re_double, Flags::Tolerance, false},
192  {"--version", "-v", "Displays version information", re_void, Flags::Version, false},
193  {"--wallTime", "", "Add wall time information for to the result file (true, [false])", re_bool, Flags::WallTime, false},
194  {"--workingDir", "", "Specifies the working directory", re_default, Flags::WorkingDir, false},
195  {"--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}
196  };
197 
198  static oms_status_enu_t AddParametersToCSV(const std::string& value);
199  static oms_status_enu_t AlgLoopSolver(const std::string& value);
200  static oms_status_enu_t ClearAllOptions(const std::string& value);
201  static oms_status_enu_t CVODEMaxErrTestFails(const std::string& value);
202  static oms_status_enu_t CVODEMaxNLSFailures(const std::string& value);
203  static oms_status_enu_t CVODEMaxNLSIterations(const std::string& value);
204  static oms_status_enu_t CVODEMaxSteps(const std::string& value);
205  static oms_status_enu_t DeleteTempFiles(const std::string& value);
206  static oms_status_enu_t DirectionalDerivatives(const std::string& value);
207  static oms_status_enu_t DumpAlgLoops(const std::string& value);
208  static oms_status_enu_t EmitEvents(const std::string& value);
209  static oms_status_enu_t FetchAllVars(const std::string& value);
210  static oms_status_enu_t Filename(const std::string& value);
211  static oms_status_enu_t Help(const std::string& value);
212  static oms_status_enu_t IgnoreInitialUnknowns(const std::string& value);
213  static oms_status_enu_t InputExtrapolation(const std::string& value);
214  static oms_status_enu_t Intervals(const std::string& value);
215  static oms_status_enu_t LogFile(const std::string& value);
216  static oms_status_enu_t LogLevel(const std::string& value);
217  static oms_status_enu_t MaxEventIteration(const std::string& value);
218  static oms_status_enu_t MaxLoopIteration(const std::string& value);
219  static oms_status_enu_t Mode(const std::string& value);
220  static oms_status_enu_t NumProcs(const std::string& value);
221  static oms_status_enu_t ProgressBar(const std::string& value);
222  static oms_status_enu_t RealTime(const std::string& value);
223  static oms_status_enu_t ResultFile(const std::string& value);
224  static oms_status_enu_t SkipCSVHeader(const std::string& value);
225  static oms_status_enu_t Solver(const std::string& value);
226  static oms_status_enu_t SolverStats(const std::string& value);
227  static oms_status_enu_t StartTime(const std::string& value);
228  static oms_status_enu_t StepSize(const std::string& value);
229  static oms_status_enu_t StopTime(const std::string& value);
230  static oms_status_enu_t StripRoot(const std::string& value);
231  static oms_status_enu_t SuppressPath(const std::string& value);
232  static oms_status_enu_t TempDir(const std::string& value);
233  static oms_status_enu_t Timeout(const std::string& value);
234  static oms_status_enu_t Tolerance(const std::string& value);
235  static oms_status_enu_t Version(const std::string& value);
236  static oms_status_enu_t WallTime(const std::string& value);
237  static oms_status_enu_t WorkingDir(const std::string& value);
238  static oms_status_enu_t ZeroNominal(const std::string& value);
239  };
240 }
241 
242 #endif
Definition: Flags.h:43
int cvodeMaxNLSIterations
Definition: Flags.h:98
Flags(Flags const &)
not implemented
static double MaximumStepSize()
Definition: Flags.h:79
static bool DefaultModeIsCS()
Definition: Flags.h:63
static unsigned int Timeout()
Definition: Flags.h:92
const std::string re_bool
Definition: Flags.h:147
static unsigned int MaxEventIteration()
Definition: Flags.h:89
static oms_status_enu_t Help(const std::string &value)
Definition: Flags.cpp:301
static unsigned int Intervals()
Definition: Flags.h:88
bool addParametersToCSV
Definition: Flags.h:95
const std::string re_default
Definition: Flags.h:146
static double Tolerance()
Definition: Flags.h:83
const std::string re_mode
Definition: Flags.h:148
static oms_solver_enu_t Solver()
Definition: Flags.h:86
Flags & operator=(Flags const &)
not implemented
static oms_status_enu_t Filename(const std::string &value)
Definition: Flags.cpp:295
static oms_status_enu_t WorkingDir(const std::string &value)
Definition: Flags.cpp:508
static bool WallTime()
Definition: Flags.h:76
static int CVODEMaxNLSIterations()
Definition: Flags.h:61
oms_alg_solver_enu_t algLoopSolver
Definition: Flags.h:121
double initialStepSize
Definition: Flags.h:115
std::string resultFile
Definition: Flags.h:124
static bool DumpAlgLoops()
Definition: Flags.h:66
std::map< std::string, unsigned int > lookup
Definition: Flags.h:142
static oms_status_enu_t LogLevel(const std::string &value)
Definition: Flags.cpp:357
static int CVODEMaxErrTestFails()
Definition: Flags.h:59
double maximumStepSize
Definition: Flags.h:116
unsigned int intervals
Definition: Flags.h:125
static bool RealTime()
Definition: Flags.h:71
static oms_solver_enu_t MasterAlgorithm()
Definition: Flags.h:85
static double StopTime()
Definition: Flags.h:82
static int CVODEMaxNLSFailures()
Definition: Flags.h:60
static bool SuppressPath()
Definition: Flags.h:75
static oms_status_enu_t StepSize(const std::string &value)
Definition: Flags.cpp:447
static bool EmitEvents()
Definition: Flags.h:67
const std::string re_filename
Definition: Flags.h:151
static oms_status_enu_t TempDir(const std::string &value)
Definition: Flags.cpp:484
static double InitialStepSize()
Definition: Flags.h:78
bool suppressPath
Definition: Flags.h:112
static int CVODEMaxSteps()
Definition: Flags.h:62
static bool SkipCSVHeader()
Definition: Flags.h:72
static bool ZeroNominal()
Definition: Flags.h:77
double startTime
Definition: Flags.h:118
void setDefaults()
Definition: Flags.cpp:64
static bool ProgressBar()
Definition: Flags.h:70
bool ignoreInitialUnknowns
Definition: Flags.h:105
bool dumpAlgLoops
Definition: Flags.h:103
unsigned int timeout
Definition: Flags.h:129
static bool DeleteTempFiles()
Definition: Flags.h:64
bool defaultModeIsCS
Definition: Flags.h:100
bool realTime
Definition: Flags.h:108
static double StartTime()
Definition: Flags.h:81
bool solverStats
Definition: Flags.h:110
static bool InputExtrapolation()
Definition: Flags.h:69
static bool IgnoreInitialUnknowns()
Definition: Flags.h:68
static bool AddParametersToCSV()
Definition: Flags.h:58
double tolerance
Definition: Flags.h:120
static Flags & GetInstance()
Definition: Flags.cpp:103
bool deleteTempFiles
Definition: Flags.h:101
static std::string ResultFile()
Definition: Flags.h:87
bool progressBar
Definition: Flags.h:107
const std::vector< Flag > flags
Definition: Flags.h:154
unsigned int maxEventIteration
Definition: Flags.h:126
static unsigned int MaxLoopIteration()
Definition: Flags.h:90
bool emitEvents
Definition: Flags.h:104
unsigned int maxLoopIteration
Definition: Flags.h:127
static bool DirectionalDerivatives()
Definition: Flags.h:65
static oms_status_enu_t FetchAllVars(const std::string &value)
Definition: Flags.cpp:258
static oms_status_enu_t ClearAllOptions(const std::string &value)
Definition: Flags.cpp:204
double minimumStepSize
Definition: Flags.h:117
const std::string re_void
Definition: Flags.h:145
std::vector< std::string > files
Definition: Flags.h:143
static bool SolverStats()
Definition: Flags.h:73
static unsigned int NumProcs()
Definition: Flags.h:91
static oms_status_enu_t SetCommandLineOption(const std::string &cmd)
Definition: Flags.cpp:126
static oms_alg_solver_enu_t AlgLoopSolver()
Definition: Flags.h:84
Flags()
Definition: Flags.cpp:48
const std::string re_stepSize
Definition: Flags.h:152
int cvodeMaxNLSFails
Definition: Flags.h:97
unsigned int numProcs
Definition: Flags.h:128
static oms_status_enu_t LogFile(const std::string &value)
Definition: Flags.cpp:351
const std::string re_number
Definition: Flags.h:150
bool stripRoot
Definition: Flags.h:111
const std::string re_double
Definition: Flags.h:149
int cvodeMaxSteps
Definition: Flags.h:99
~Flags()
Definition: Flags.cpp:60
bool inputExtrapolation
Definition: Flags.h:106
static bool StripRoot()
Definition: Flags.h:74
bool skipCSVHeader
Definition: Flags.h:109
bool zeroNominal
Definition: Flags.h:114
int cvodeMaxErrTestFails
Definition: Flags.h:96
static oms_status_enu_t Mode(const std::string &value)
Definition: Flags.cpp:375
bool directionalDerivatives
Definition: Flags.h:102
static oms_status_enu_t Version(const std::string &value)
Definition: Flags.cpp:502
oms_solver_enu_t masterAlgorithm
Definition: Flags.h:122
bool wallTime
Definition: Flags.h:113
static double MinimumStepSize()
Definition: Flags.h:80
oms_solver_enu_t solver
Definition: Flags.h:123
double stopTime
Definition: Flags.h:119
Definition: AlgLoop.h:45
Definition: Flags.h:133
const std::string name
Definition: Flags.h:134
const bool interrupt
Definition: Flags.h:139
const std::string abbr
Definition: Flags.h:135
const std::string desc
Definition: Flags.h:136
const std::string regex
Definition: Flags.h:137
oms_status_enu_t(* fcn)(const std::string &value)
Definition: Flags.h:138