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 
58  static bool DefaultModeIsCS() {return GetInstance().defaultModeIsCS;}
60  static bool InputDerivatives() {return GetInstance().inputDerivatives;}
61  static bool ProgressBar() {return GetInstance().progressBar;}
62  static bool SuppressPath() {return GetInstance().suppressPath;}
63  static double StartTime() {return GetInstance().startTime;}
64  static double StopTime() {return GetInstance().stopTime;}
65  static double Timeout() {return GetInstance().timeout;}
66  static double Tolerance() {return GetInstance().tolerance;}
67  static std::string ResultFile() {return GetInstance().resultFile;}
70  static unsigned int Intervals() {return GetInstance().intervals;}
71 
72  static void SuppressPath(bool value) {GetInstance().suppressPath = value;}
73 
74  private:
80  unsigned int intervals;
81  double startTime;
82  double stopTime;
83  double timeout;
84  double tolerance;
87  std::string resultFile;
88 
89  private:
90  struct Flag
91  {
92  const std::string name;
93  const std::string abbr;
94  const std::string desc;
95  const std::string regex;
96  oms_status_enu_t (*fnc)(const std::string& value);
97  const bool interrupt;
98  };
99 
100  std::map<std::string, unsigned int> lookup;
101 
102  const std::string re_void = "";
103  const std::string re_default = ".+";
104  const std::string re_bool = "(true|false)";
105  const std::string re_mode = "(me|cs)";
106  const std::string re_double = "((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?";
107  const std::string re_number = "[[:digit:]]+";
108  const std::string re_filename = ".+(\\.fmu|\\.ssp)";
109 
110  const std::vector<Flag> flags = {
111  {"", "", "FMU or SSP file", re_filename, Flags::Filename, false},
112  {"--clearAllOptions", "", "Reset all flags to default values", re_void, Flags::ClearAllOptions, false},
113  {"--fetchAllVars", "", "", re_default, Flags::FetchAllVars, false},
114  {"--help", "-h", "Displays the help text", re_void, Flags::Help, true},
115  {"--ignoreInitialUnknowns", "", "Ignore the initial unknowns from the modelDesction.xml", re_bool, Flags::IgnoreInitialUnknowns, false},
116  {"--intervals", "-i", "Specifies the number of communication points (arg > 1)", re_number, Flags::Intervals, false},
117  {"--logFile", "-l", "Specifies the logfile (stdout is used if no log file is specified)", re_default, Flags::LogFile, false},
118  {"--logLevel", "", "0 default, 1 default+debug, 2 default+debug+trace", re_number, Flags::LogLevel, false},
119  {"--mode", "-m", "Forces a certain FMI mode iff the FMU provides cs and me [arg: cs (default) or me]", re_mode, Flags::Mode, false},
120  {"--progressBar", "", "", re_bool, Flags::ProgressBar, false},
121  {"--resultFile", "-r", "Specifies the name of the output result file", re_default, Flags::ResultFile, false},
122  {"--setInputDerivatives", "", "", re_bool, Flags::SetInputDerivatives, false},
123  {"--solver", "", "Specifies the integration method (internal, euler, cvode)", re_void, Flags::Solver, false},
124  {"--startTime", "-s", "Specifies the start time", re_double, Flags::StartTime, false},
125  {"--stopTime", "-t", "Specifies the stop time", re_double, Flags::StopTime, false},
126  {"--suppressPath", "", "", re_bool, Flags::SuppressPath, false},
127  {"--tempDir", "", "Specifies the temp directory", re_default, Flags::TempDir, false},
128  {"--timeout", "", "Specifies the maximum allowed time in seconds for running a simulation (0 disables)", re_number, Flags::Timeout, false},
129  {"--tolerance", "", "Specifies the relative tolerance", re_double, Flags::Tolerance, false},
130  {"--version", "-v", "Displays version information", re_void, Flags::Version, false},
131  {"--workingDir", "", "Specifies the working directory", re_default, Flags::WorkingDir, false}
132  };
133 
134  static oms_status_enu_t ClearAllOptions(const std::string& value);
135  static oms_status_enu_t FetchAllVars(const std::string& value);
136  static oms_status_enu_t Filename(const std::string& value);
137  static oms_status_enu_t Help(const std::string& value);
138  static oms_status_enu_t IgnoreInitialUnknowns(const std::string& value);
139  static oms_status_enu_t Intervals(const std::string& value);
140  static oms_status_enu_t LogFile(const std::string& value);
141  static oms_status_enu_t LogLevel(const std::string& value);
142  static oms_status_enu_t Mode(const std::string& value);
143  static oms_status_enu_t ProgressBar(const std::string& value);
144  static oms_status_enu_t ResultFile(const std::string& value);
145  static oms_status_enu_t SetInputDerivatives(const std::string& value);
146  static oms_status_enu_t Solver(const std::string& value);
147  static oms_status_enu_t StartTime(const std::string& value);
148  static oms_status_enu_t StopTime(const std::string& value);
149  static oms_status_enu_t SuppressPath(const std::string& value);
150  static oms_status_enu_t TempDir(const std::string& value);
151  static oms_status_enu_t Timeout(const std::string& value);
152  static oms_status_enu_t Tolerance(const std::string& value);
153  static oms_status_enu_t Version(const std::string& value);
154  static oms_status_enu_t WorkingDir(const std::string& value);
155  };
156 }
157 
158 #endif
oms_solver_enu_t
Definition: Types.h:84
const std::string desc
Definition: Flags.h:94
bool defaultModeIsCS
Definition: Flags.h:79
const std::string regex
Definition: Flags.h:95
const std::string name
Definition: Flags.h:92
static void SuppressPath(bool value)
Definition: Flags.h:72
static bool ProgressBar()
Definition: Flags.h:61
static oms_status_enu_t Filename(const std::string &value)
Definition: Flags.cpp:188
static bool InputDerivatives()
Definition: Flags.h:60
const std::string re_number
Definition: Flags.h:107
void setDefaults()
Definition: Flags.cpp:62
bool progressBar
Definition: Flags.h:77
static oms_solver_enu_t MasterAlgorithm()
Definition: Flags.h:69
const bool interrupt
Definition: Flags.h:97
static oms_solver_enu_t Solver()
Definition: Flags.h:68
const std::string abbr
Definition: Flags.h:93
static double StopTime()
Definition: Flags.h:64
double tolerance
Definition: Flags.h:84
static bool DefaultModeIsCS()
Definition: Flags.h:58
const std::string re_void
Definition: Flags.h:102
static Flags & GetInstance()
Definition: Flags.cpp:79
static oms_status_enu_t SetInputDerivatives(const std::string &value)
Definition: Flags.cpp:257
oms_status_enu_t
Definition: Types.h:43
Flags()
Definition: Flags.cpp:46
oms_solver_enu_t masterAlgorithm
Definition: Flags.h:86
bool suppressPath
Definition: Flags.h:76
bool ignoreInitialUnknowns
Definition: Flags.h:75
static oms_status_enu_t Mode(const std::string &value)
Definition: Flags.cpp:239
static oms_status_enu_t WorkingDir(const std::string &value)
Definition: Flags.cpp:316
unsigned int intervals
Definition: Flags.h:80
bool inputDerivatives
Definition: Flags.h:78
static oms_status_enu_t LogFile(const std::string &value)
Definition: Flags.cpp:227
static oms_status_enu_t Version(const std::string &value)
Definition: Flags.cpp:310
std::string resultFile
Definition: Flags.h:87
static std::string ResultFile()
Definition: Flags.h:67
double startTime
Definition: Flags.h:81
oms_status_enu_t(* fnc)(const std::string &value)
Definition: Flags.h:96
const std::string re_double
Definition: Flags.h:106
const std::string re_filename
Definition: Flags.h:108
const std::string re_mode
Definition: Flags.h:105
static oms_status_enu_t LogLevel(const std::string &value)
Definition: Flags.cpp:233
static double StartTime()
Definition: Flags.h:63
~Flags()
Definition: Flags.cpp:58
static unsigned int Intervals()
Definition: Flags.h:70
static oms_status_enu_t Help(const std::string &value)
Definition: Flags.cpp:194
double timeout
Definition: Flags.h:83
static oms_status_enu_t FetchAllVars(const std::string &value)
Definition: Flags.cpp:162
Definition: BusConnector.h:15
Definition: Flags.h:42
static double Tolerance()
Definition: Flags.h:66
static double Timeout()
Definition: Flags.h:65
static oms_status_enu_t ClearAllOptions(const std::string &value)
Definition: Flags.cpp:156
const std::vector< Flag > flags
Definition: Flags.h:110
oms_solver_enu_t solver
Definition: Flags.h:85
const std::string re_default
Definition: Flags.h:103
static oms_status_enu_t SetCommandLineOption(const std::string &cmd)
Definition: Flags.cpp:102
double stopTime
Definition: Flags.h:82
static bool SuppressPath()
Definition: Flags.h:62
Flags & operator=(Flags const &)
not implemented
Definition: Flags.h:90
static bool IgnoreInitialUnknowns()
Definition: Flags.h:59
const std::string re_bool
Definition: Flags.h:104
static oms_status_enu_t TempDir(const std::string &value)
Definition: Flags.cpp:292
std::map< std::string, unsigned int > lookup
Definition: Flags.h:100