OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment.
Loading...
Searching...
No Matches
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#pragma once
33
34#include "OMSimulator/Types.h"
35
36#include <array>
37#include <map>
38#include <string>
39#include <vector>
40
41namespace oms
42{
43 class Flags
44 {
45 private:
46 Flags();
47 ~Flags();
48 void setDefaults();
49
50 // stop the compiler generating methods copying the object
51 Flags(Flags const &);
52 Flags &operator=(Flags const &);
53
54 public:
55 static Flags &GetInstance();
56
57 static oms_status_enu_t SetCommandLineOption(const std::string &cmd);
58
59 static bool AddParametersToCSV() { return GetInstance().FlagAddParametersToCSV.value == "true"; }
60 static bool DefaultModeIsCS() { return GetInstance().FlagMode.value == "cs"; }
61 static bool DeleteTempFiles() { return GetInstance().FlagDeleteTempFiles.value == "true"; }
63 static bool DumpAlgLoops() { return GetInstance().FlagDumpAlgLoops.value == "true"; }
64 static bool EmitEvents() { return GetInstance().FlagEmitEvents.value == "true"; }
66 static bool InputExtrapolation() { return GetInstance().FlagInputExtrapolation.value == "true"; }
67 static bool ProgressBar() { return GetInstance().FlagProgressBar.value == "true"; }
68 static bool RealTime() { return GetInstance().FlagRealTime.value == "true"; }
69 static bool SkipCSVHeader() { return GetInstance().FlagSkipCSVHeader.value == "true"; }
70 static bool SolverStats() { return GetInstance().FlagSolverStats.value == "true"; }
71 static bool StripRoot() { return GetInstance().FlagStripRoot.value == "true"; }
72 static bool SuppressPath() { return GetInstance().FlagSuppressPath.value == "true"; }
73 static bool WallTime() { return GetInstance().FlagWallTime.value == "true"; }
74 static bool ZeroNominal() { return GetInstance().FlagZeroNominal.value == "true"; }
75 static double InitialStepSize() { return atof(GetInstance().FlagInitialStepSize.value.c_str()); }
76 static double MaximumStepSize() { return atof(GetInstance().FlagStepSize.value.c_str()); }
77 static double MinimumStepSize() { return atof(GetInstance().FlagMinimumStepSize.value.c_str()); }
78 static double StartTime() { return atof(GetInstance().FlagStartTime.value.c_str()); }
79 static double StopTime() { return atof(GetInstance().FlagStopTime.value.c_str()); }
80 static double Timeout() { return atof(GetInstance().FlagTimeout.value.c_str()); }
81 static double Tolerance() { return atof(GetInstance().FlagTolerance.value.c_str()); }
82 static int CVODEMaxErrTestFails() { return atoi(GetInstance().FlagCVODEMaxErrTestFails.value.c_str()); }
83 static int CVODEMaxNLSFailures() { return atoi(GetInstance().FlagCVODEMaxNLSFailures.value.c_str()); }
84 static int CVODEMaxNLSIterations() { return atoi(GetInstance().FlagCVODEMaxNLSIterations.value.c_str()); }
85 static int CVODEMaxSteps() { return atoi(GetInstance().FlagCVODEMaxSteps.value.c_str()); }
86 static oms_alg_solver_enu_t AlgLoopSolver();
87 static oms_solver_enu_t MasterAlgorithm();
88 static oms_solver_enu_t Solver();
89 static std::string ResultFile() { return GetInstance().FlagResultFile.value; }
90 static unsigned int Intervals() { return atoi(GetInstance().FlagIntervals.value.c_str()); }
91 static unsigned int MaxEventIteration() { return atoi(GetInstance().FlagMaxEventIteration.value.c_str()); }
92 static unsigned int MaxLoopIteration() { return atoi(GetInstance().FlagMaxLoopIteration.value.c_str()); }
93 static unsigned int NumProcs() { return atoi(GetInstance().FlagNumProcs.value.c_str()); }
94
95 private:
96 std::map<std::string, unsigned int> lookup;
97 std::vector<std::string> files;
98
99 const std::string re_void = "";
100 const std::string re_default = ".+";
101 const std::string re_bool = "(true|false)";
102 const std::string re_mode = "(me|cs)";
103 const std::string re_double = "((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?";
104 const std::string re_number = "[[:digit:]]+";
105 const std::string re_filename = ".+(\\.fmu|\\.ssp|\\.lua)";
106 const std::string re_solver = "(euler|cvode)";
107
108 public:
109 struct Flag
110 {
111 const std::string name;
112 const std::string abbr;
113 std::string value;
114 const std::string defaultValue;
115 const std::string desc;
116 const std::string regex;
117 oms_status_enu_t (*action)(const std::string &value);
118 const bool interrupt;
119 const bool settings;
121 };
122
123 Flag FlagFilename{"", "", "", "", "FMU or SSP file to be loaded", re_filename, Flags::Filename, false, false, false};
124 Flag FlagAddParametersToCSV{"--addParametersToCSV", "", "", "false", "Export parameters to a .csv file", re_bool, nullptr, false, false, false};
125 Flag FlagAlgLoopSolver{"--algLoopSolver", "", "", "kinsol", "Specifies the loop solver method (fixedpoint, kinsol) used for algebraic loops spanning multiple components.", re_default, nullptr, false, false, false};
126 Flag FlagClearAllOptions{"--clearAllOptions", "", "", "", "Reset all flags to their default values", re_void, Flags::ClearAllOptions, false, false, false};
127 Flag FlagCVODEMaxErrTestFails{"--CVODEMaxErrTestFails", "", "", "100", "Maximum number of error test failures for CVODE", re_number, nullptr, false, false, false};
128 Flag FlagCVODEMaxNLSFailures{"--CVODEMaxNLSFailures", "", "", "100", "Maximum number of nonlinear convergence failures for CVODE", re_number, nullptr, false, false, false};
129 Flag FlagCVODEMaxNLSIterations{"--CVODEMaxNLSIterations", "", "", "5", "Maximum number of nonlinear solver iterations for CVODE", re_number, nullptr, false, false, false};
130 Flag FlagCVODEMaxSteps{"--CVODEMaxSteps", "", "", "1000", "Maximum number of steps for CVODE", re_number, nullptr, false, false, false};
131 Flag FlagDeleteTempFiles{"--deleteTempFiles", "", "", "true", "Delete temporary files as soon as they are no longer needed", re_bool, nullptr, false, false, false};
132 Flag FlagDirectionalDerivatives{"--directionalDerivatives", "", "", "true", "Use directional derivatives to calculate the Jacobian for algebraic loops", re_bool, nullptr, false, false, false};
133 Flag FlagDumpAlgLoops{"--dumpAlgLoops", "", "", "false", "Dump information for algebraic loops", re_bool, nullptr, false, false, false};
134 Flag FlagEmitEvents{"--emitEvents", "", "", "true", "Emit events during simulation", re_bool, nullptr, false, false, false};
135 Flag FlagHelp{"--help", "-h", "", "", "Display the help text", re_void, Flags::Help, true, false, false};
136 Flag FlagIgnoreInitialUnknowns{"--ignoreInitialUnknowns", "", "", "false", "Ignore initial unknowns from the modelDescription.xml", re_bool, nullptr, false, false, false};
137 Flag FlagInitialStepSize{"--initialStepSize", "", "", "1e-6", "Specify the initial step size", re_double, nullptr, false, false, false};
138 Flag FlagInputExtrapolation{"--inputExtrapolation", "", "", "false", "Enable input extrapolation using derivative information", re_bool, nullptr, false, false, false};
139 Flag FlagIntervals{"--intervals", "-i", "", "500", "Specify the number of communication points (arg > 1)", re_number, nullptr, false, false, false};
140 Flag FlagLogFile{"--logFile", "-l", "", "", "Specify the log file (stdout is used if no log file is specified)", re_default, nullptr, false, false, false};
141 Flag FlagLogLevel{"--logLevel", "", "", "0", "Set the log level (0: default, 1: debug, 2: debug+trace)", re_number, nullptr, false, false, false};
142 Flag FlagMasterAlgorithm{"--master", "", "", "ma", "Specify the master algorithm (ma)", re_default, nullptr, false, false, false};
143 Flag FlagMaxEventIteration{"--maxEventIteration", "", "", "100", "Specify the maximum number of iterations for handling a single event", re_number, nullptr, false, false, false};
144 Flag FlagMaxLoopIteration{"--maxLoopIteration", "", "", "10", "Specify the maximum number of iterations for solving algebraic loops between system-level components. Internal algebraic loops of components are not affected.", re_number, nullptr, false, false, false};
145 Flag FlagMinimumStepSize{"--minimumStepSize", "", "", "1e-12", "Specify the minimum step size", re_double, nullptr, false, false, false};
146 Flag FlagMode{"--mode", "-m", "", "me", "Force a certain FMI mode if the FMU provides both cs and me (cs, me)", re_mode, nullptr, false, false, false};
147 Flag FlagNumProcs{"--numProcs", "-n", "", "1", "Specify the maximum number of processors to use (0=auto, 1=default)", re_number, nullptr, false, false, false};
148 Flag FlagProgressBar{"--progressBar", "", "", "false", "Show a progress bar for the simulation progress in the terminal", re_bool, nullptr, false, false, false};
149 Flag FlagRealTime{"--realTime", "", "", "false", "Enable experimental feature for (soft) real-time co-simulation", re_bool, nullptr, false, false, false};
150 Flag FlagResultFile{"--resultFile", "-r", "", "<default>", "Specify the name of the output result file", re_default, nullptr, false, false, false};
151 Flag FlagSkipCSVHeader{"--skipCSVHeader", "", "", "true", "Skip exporting the CSV delimiter in the header", re_bool, nullptr, false, false, false};
152 Flag FlagSolver{"--solver", "", "", "cvode", "Specify the integration method (euler, cvode)", re_solver, nullptr, false, false, false};
153 Flag FlagSolverStats{"--solverStats", "", "", "false", "Add solver stats to the result file, e.g., step size; not supported for all solvers", re_bool, nullptr, false, false, false};
154 Flag FlagStartTime{"--startTime", "-s", "", "0", "Specify the start time", re_double, nullptr, false, false, false};
155 Flag FlagStepSize{"--stepSize", "", "", "1e-3", "Specify the (maximum) step size", re_double, nullptr, false, false, false};
156 Flag FlagStopTime{"--stopTime", "-t", "", "1", "Specify the stop time", re_double, nullptr, false, false, false};
157 Flag FlagStripRoot{"--stripRoot", "", "", "false", "Remove the root system prefix from all exported signals", re_bool, nullptr, false, false, false};
158 Flag FlagSuppressPath{"--suppressPath", "", "", "false", "Suppress path information in info messages; especially useful for testing", re_bool, nullptr, false, false, false};
159 Flag FlagTempDir{"--tempDir", "", "", ".", "Specify the temporary directory", re_default, nullptr, false, true, false};
160 Flag FlagTimeout{"--timeout", "", "", "0", "Specify the maximum allowed time in seconds for running a simulation (0 disables)", re_number, nullptr, false, false, false};
161 Flag FlagTolerance{"--tolerance", "", "", "1e-4", "Specify the relative tolerance", re_double, nullptr, false, false, false};
162 Flag FlagVersion{"--version", "-v", "", "", "Display version information", re_void, Flags::Version, false, false, false};
163 Flag FlagWallTime{"--wallTime", "", "", "false", "Add wall time information to the result file", re_bool, nullptr, false, false, false};
164 Flag FlagWorkingDir{"--workingDir", "", "", ".", "Specify the working directory", re_default, nullptr, false, true, false};
165 Flag FlagZeroNominal{"--zeroNominal", "", "", "false", "Accept FMUs with invalid nominal values and replace the invalid nominal values with 1.0", re_bool, nullptr, false, false, false};
166
167 private:
212
213 static oms_status_enu_t SetFlag(size_t flag_id, const std::string &value);
214
215 static oms_status_enu_t ClearAllOptions(const std::string &value);
216 static oms_status_enu_t Filename(const std::string &value);
217 static oms_status_enu_t Help(const std::string &value);
218 static oms_status_enu_t Version(const std::string &value);
219 };
220}
Definition Flags.h:44
Flags(Flags const &)
not implemented
static double MaximumStepSize()
Definition Flags.h:76
static bool DefaultModeIsCS()
Definition Flags.h:60
static oms_solver_enu_t MasterAlgorithm()
Definition Flags.cpp:317
Flag FlagMasterAlgorithm
Definition Flags.h:142
const std::string re_bool
Definition Flags.h:101
static unsigned int MaxEventIteration()
Definition Flags.h:91
static oms_status_enu_t Help(const std::string &value)
Definition Flags.cpp:249
Flag FlagWorkingDir
Definition Flags.h:164
static unsigned int Intervals()
Definition Flags.h:90
Flag FlagIntervals
Definition Flags.h:139
Flag FlagMaxLoopIteration
Definition Flags.h:144
const std::string re_default
Definition Flags.h:100
static double Tolerance()
Definition Flags.h:81
const std::string re_mode
Definition Flags.h:102
Flag FlagMaxEventIteration
Definition Flags.h:143
Flag FlagAddParametersToCSV
Definition Flags.h:124
static oms_status_enu_t Filename(const std::string &value)
Definition Flags.cpp:243
static bool WallTime()
Definition Flags.h:73
static int CVODEMaxNLSIterations()
Definition Flags.h:84
Flag FlagStopTime
Definition Flags.h:156
Flag FlagStartTime
Definition Flags.h:154
Flag FlagVersion
Definition Flags.h:162
static bool DumpAlgLoops()
Definition Flags.h:63
std::map< std::string, unsigned int > lookup
Definition Flags.h:96
Flag FlagAlgLoopSolver
Definition Flags.h:125
static int CVODEMaxErrTestFails()
Definition Flags.h:82
Flag FlagCVODEMaxSteps
Definition Flags.h:130
Flag FlagStepSize
Definition Flags.h:155
static bool RealTime()
Definition Flags.h:68
Flag FlagSolver
Definition Flags.h:152
static double StopTime()
Definition Flags.h:79
std::array< Flag *, 43 > flags
Definition Flags.h:168
static int CVODEMaxNLSFailures()
Definition Flags.h:83
static bool SuppressPath()
Definition Flags.h:72
static bool EmitEvents()
Definition Flags.h:64
static oms_alg_solver_enu_t AlgLoopSolver()
Definition Flags.cpp:306
const std::string re_filename
Definition Flags.h:105
static double Timeout()
Definition Flags.h:80
Flags & operator=(Flags const &)
not implemented
Flag FlagDirectionalDerivatives
Definition Flags.h:132
static oms_status_enu_t SetFlag(size_t flag_id, const std::string &value)
Definition Flags.cpp:145
static double InitialStepSize()
Definition Flags.h:75
static oms_solver_enu_t Solver()
Definition Flags.cpp:326
static int CVODEMaxSteps()
Definition Flags.h:85
Flag FlagProgressBar
Definition Flags.h:148
static bool SkipCSVHeader()
Definition Flags.h:69
Flag FlagStripRoot
Definition Flags.h:157
static bool ZeroNominal()
Definition Flags.h:74
Flag FlagLogLevel
Definition Flags.h:141
void setDefaults()
Definition Flags.cpp:120
static bool ProgressBar()
Definition Flags.h:67
Flag FlagWallTime
Definition Flags.h:163
Flag FlagLogFile
Definition Flags.h:140
static bool DeleteTempFiles()
Definition Flags.h:61
Flag FlagCVODEMaxNLSFailures
Definition Flags.h:128
static double StartTime()
Definition Flags.h:78
Flag FlagCVODEMaxErrTestFails
Definition Flags.h:127
static bool InputExtrapolation()
Definition Flags.h:66
static bool IgnoreInitialUnknowns()
Definition Flags.h:65
Flag FlagDumpAlgLoops
Definition Flags.h:133
static bool AddParametersToCSV()
Definition Flags.h:59
static Flags & GetInstance()
Definition Flags.cpp:62
static std::string ResultFile()
Definition Flags.h:89
Flag FlagTempDir
Definition Flags.h:159
Flag FlagEmitEvents
Definition Flags.h:134
Flag FlagDeleteTempFiles
Definition Flags.h:131
Flag FlagHelp
Definition Flags.h:135
static unsigned int MaxLoopIteration()
Definition Flags.h:92
const std::string re_solver
Definition Flags.h:106
Flag FlagSuppressPath
Definition Flags.h:158
static bool DirectionalDerivatives()
Definition Flags.h:62
static oms_status_enu_t ClearAllOptions(const std::string &value)
Definition Flags.cpp:237
Flag FlagTimeout
Definition Flags.h:160
const std::string re_void
Definition Flags.h:99
std::vector< std::string > files
Definition Flags.h:97
static bool SolverStats()
Definition Flags.h:70
static unsigned int NumProcs()
Definition Flags.h:93
static oms_status_enu_t SetCommandLineOption(const std::string &cmd)
Definition Flags.cpp:180
Flags()
Definition Flags.cpp:46
Flag FlagInputExtrapolation
Definition Flags.h:138
Flag FlagNumProcs
Definition Flags.h:147
Flag FlagZeroNominal
Definition Flags.h:165
Flag FlagClearAllOptions
Definition Flags.h:126
Flag FlagMode
Definition Flags.h:146
Flag FlagFilename
Definition Flags.h:123
const std::string re_number
Definition Flags.h:104
Flag FlagResultFile
Definition Flags.h:150
const std::string re_double
Definition Flags.h:103
Flag FlagRealTime
Definition Flags.h:149
Flag FlagSkipCSVHeader
Definition Flags.h:151
Flag FlagMinimumStepSize
Definition Flags.h:145
~Flags()
Definition Flags.cpp:58
Flag FlagSolverStats
Definition Flags.h:153
static bool StripRoot()
Definition Flags.h:71
Flag FlagInitialStepSize
Definition Flags.h:137
Flag FlagCVODEMaxNLSIterations
Definition Flags.h:129
static oms_status_enu_t Version(const std::string &value)
Definition Flags.cpp:288
Flag FlagTolerance
Definition Flags.h:161
static double MinimumStepSize()
Definition Flags.h:77
Flag FlagIgnoreInitialUnknowns
Definition Flags.h:136
Definition AlgLoop.h:45
Definition Flags.h:110
const std::string name
Definition Flags.h:111
bool explicitlySet
Definition Flags.h:120
const bool interrupt
Definition Flags.h:118
const std::string defaultValue
Definition Flags.h:114
const bool settings
Definition Flags.h:119
oms_status_enu_t(* action)(const std::string &value)
Definition Flags.h:117
const std::string abbr
Definition Flags.h:112
std::string value
Definition Flags.h:113
const std::string desc
Definition Flags.h:115
const std::string regex
Definition Flags.h:116