DPsim
Loading...
Searching...
No Matches
Simulation.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2
3#pragma once
4
6#include <vector>
7
10#include <dpsim-models/Logger.h>
13#include <dpsim/Config.h>
14#include <dpsim/DataLogger.h>
15#include <dpsim/Event.h>
16#include <dpsim/Interface.h>
17#include <dpsim/Scheduler.h>
18#include <dpsim/Solver.h>
19
20#ifdef WITH_GRAPHVIZ
21#include <dpsim-models/Graph.h>
22#endif
23
24namespace DPsim {
26class CommandLineArgs;
27
32public:
33 typedef std::shared_ptr<Simulation> Ptr;
34
43
45
49
52
57
61
64
67
73
78
79protected:
88
90 std::chrono::time_point<std::chrono::steady_clock> mSimulationStartTimePoint;
92 std::chrono::time_point<std::chrono::steady_clock> mSimulationEndTimePoint;
94 std::chrono::duration<double> mSimulationCalculationTime;
95
96 // #### Logging ####
100 std::vector<Real> mStepTimes;
103
104 // #### Solver Settings ####
124
136
137 // #### Initialization ####
142
143 // #### Task dependencies und scheduling ####
145 std::shared_ptr<Scheduler> mScheduler;
150
152 std::vector<Interface::Ptr> mInterfaces;
153
160
163
165 void create();
167 template <typename VarType> void createSolvers();
169 template <typename VarType> void createMNASolver();
171 void prepSchedule();
172
175
176public:
179
182
185 CPS::Logger::Level logLevel = CPS::Logger::Level::info);
186
188 virtual ~Simulation() {}
189
190 // #### Simulation Settings ####
192 void setSystem(const CPS::SystemTopology &system) { mSystem = system; }
198 void setDomain(CPS::Domain domain = CPS::Domain::DP) { mDomain = domain; }
201 mSolverType = solverType;
202 }
203
205 mSolverBehaviour = behaviour;
206 }
207
211
216
217 void setMaxNumberOfIterations(int maxIterations) {
218 mMaxIterations = maxIterations;
219 }
220
224
225 void doSplitSubnets(Bool splitSubnets = true) {
226 **mSplitSubnets = splitSubnets;
227 }
228
231 mTearComponents = tearComponents;
232 }
233
234 void setScheduler(const std::shared_ptr<Scheduler> &scheduler) {
236 }
237
240 void
244
251
252 void doStateSpaceExtraction(Bool value = true) {
253 mStateSpaceExtraction = value;
254 }
255
258
259 // #### Initialization ####
266
267 void setPFKeepLastSolution(Bool value);
268
270
272
274
275 void setPFMaxIterations(CPS::UInt value);
276
278
279 void setPFSolverUseSparse(Bool value);
280
282
284
286
288
290
292
294
295 // #### Simulation Control ####
297 void initialize();
299 void start();
301 void stop();
303 Real next();
305 void run();
307 virtual Real step();
309 void sync() const;
311 void schedule();
312
314 void addEvent(Event::Ptr e) { mEvents.addEvent(e); }
317 mLoggers.push_back(logger);
318 }
319
320 void logStepTimes(String logName);
322 void checkForOverruns(String logName);
323
325 void logLUTimes();
326
329 eint->setLogger(mLog);
330 mInterfaces.push_back(eint);
331 }
332
333#ifdef WITH_GRAPHVIZ
335 CPS::Graph::Graph dependencyGraph();
336#endif
337
338 // #### Getter ####
339 String name() const { return **mName; }
340 Real time() const { return mTime; }
341 Real finalTime() const { return **mFinalTime; }
342 Int timeStepCount() const { return mTimeStepCount; }
343 Real timeStep() const { return **mTimeStep; }
345 std::shared_ptr<Scheduler> scheduler() { return mScheduler; }
346 std::vector<Real> &stepTimes() { return mStepTimes; }
352 getStateSpaceExtractor(UInt solverIndex = 0) const;
353
354 // #### Set component attributes during simulation ####
356 // void setIdObjAttr(const String &comp, const String &attr, Real value);
357 // void setIdObjAttr(const String &comp, const String &attr, Complex value);
358
359 // #### Get component attributes during simulation ####
361 const String &attr);
362
363 void logIdObjAttribute(const String &comp, const String &attr);
366};
367} // namespace DPsim
AttributePointer< AttributeBase > Ptr
Definition Attribute.h:122
AttributePointer< Attribute< T > > Ptr
Definition Attribute.h:250
Base class of objects having attributes to access member variables.
std::vector< Ptr > List
spdlog::level::level_enum Level
Definition Logger.h:33
std::shared_ptr< spdlog::logger > Log
Definition Logger.h:34
std::vector< Ptr > List
Definition Task.h:28
std::shared_ptr< DataLogger > Ptr
Definition DataLogger.h:41
std::vector< DataLoggerInterface::Ptr > List
std::shared_ptr< DataLoggerInterface > Ptr
std::shared_ptr< Event > Ptr
Definition Event.h:36
std::shared_ptr< Interface > Ptr
Definition Interface.h:22
std::unordered_map< CPS::Task::Ptr, std::deque< CPS::Task::Ptr > > Edges
Definition Scheduler.h:31
void setDirectLinearSolverImplementation(DirectLinearSolverImpl directImpl)
Definition Simulation.h:208
void doFrequencyParallelization(Bool value)
Compute phasors of different frequencies in parallel.
Definition Simulation.h:238
void logIdObjAttribute(const String &comp, const String &attr)
Bool mStateSpaceExtraction
Enable extraction of the MNA-coupled discrete-time state matrix.
Definition Simulation.h:123
void setSteadStIniAccLimit(Real v)
set steady state initialization accuracy limit
Definition Simulation.h:265
CPS::UInt getPFMaxIterations() const
std::chrono::duration< double > mSimulationCalculationTime
Measured calculation time for simulation.
Definition Simulation.h:94
void logLUTimes()
Write LU decomposition times measurements to log file.
void setSolverType(Solver::Type solverType=Solver::Type::MNA)
Definition Simulation.h:200
void setSystem(const CPS::SystemTopology &system)
Definition Simulation.h:192
String name() const
Definition Simulation.h:339
void sync() const
Synchronize simulation with remotes by exchanging intial state over interfaces.
void setFinalTime(Real finalTime)
Definition Simulation.h:196
CPS::IdentifiedObject::List mTearComponents
Definition Simulation.h:127
CPS::Logger::Level mLogLevel
Simulation log level.
Definition Simulation.h:98
void setPFSolverBaseVoltageLooseTolerance(Real tolerance)
std::shared_ptr< Scheduler > scheduler()
Definition Simulation.h:345
DirectLinearSolverConfiguration mDirectLinearSolverConfiguration
Definition Simulation.h:116
Bool mInitFromNodesAndTerminals
Definition Simulation.h:118
void setSystemMatrixRecomputationMode(Solver::SystemMatrixRecomputationMode mode)
Set the system-matrix recomputation mode.
Definition Simulation.h:241
Int timeStepCount() const
Definition Simulation.h:342
virtual Real step()
Solve system A * x = z for x and current time.
Scheduler::Edges mTaskInEdges
Task dependencies as incoming / outgoing edges.
Definition Simulation.h:149
const CPS::Attribute< Real >::Ptr mTimeStep
Simulation timestep.
Definition Simulation.h:42
void setSteadStIniTimeLimit(Real v)
set steady state initialization time limit
Definition Simulation.h:263
const CPS::Attribute< CPS::UInt >::Ptr mPFMaxIterations
Maximum number of Newton-Raphson iterations for the PF solver.
Definition Simulation.h:51
std::vector< Real > & stepTimes()
Definition Simulation.h:346
void setTimeStep(Real timeStep)
Definition Simulation.h:194
void setTearingComponents(CPS::IdentifiedObject::List tearComponents=CPS::IdentifiedObject::List())
Definition Simulation.h:229
void setPFKeepLastSolution(Bool value)
const CPS::Attribute< Bool >::Ptr mSteadyStateInit
Definition Simulation.h:77
const CPS::Attribute< Real >::Ptr mPFBaseVoltageStrictTolerance
Strict tolerance between authoritative base-voltage sources in a zone; default 0.01.
Definition Simulation.h:66
Real next()
Run until next time step.
void logStepTimes(String logName)
Write step time measurements to log file.
Real finalTime() const
Definition Simulation.h:341
void setDirectLinearSolverConfiguration(const DirectLinearSolverConfiguration &configuration)
Definition Simulation.h:212
Solver::List mSolvers
Definition Simulation.h:112
Bool getPFSolverEnforceReactiveLimits() const
void addLogger(DataLoggerInterface::Ptr logger)
Add a new data logger.
Definition Simulation.h:316
String mSolverPluginName
If there we use a solver plugin, this specifies its name (excluding .so)
Definition Simulation.h:38
void setMaxNumberOfIterations(int maxIterations)
Definition Simulation.h:217
void initialize()
Create solver instances etc.
const CPS::Attribute< Bool >::Ptr mPFKeepLastSolution
Definition Simulation.h:44
void doInitFromNodesAndTerminals(Bool f=true)
Definition Simulation.h:221
void setPFMaxIterations(CPS::UInt value)
void setPFBaseApparentPowerFallback(Real value)
Bool getPFSolverUseSparse() const
void setScheduler(const std::shared_ptr< Scheduler > &scheduler)
Set the scheduling method.
Definition Simulation.h:234
std::vector< Real > mStepTimes
(Real) time needed for the timesteps
Definition Simulation.h:100
void doSplitSubnets(Bool splitSubnets=true)
Definition Simulation.h:225
const CPS::Attribute< Real >::Ptr mFinalTime
Final time of the simulation.
Definition Simulation.h:40
void prepSchedule()
Prepare schedule for simulation.
void setSolverAndComponentBehaviour(Solver::Behaviour behaviour)
set solver and component to initialization or simulation behaviour
Definition Simulation.h:204
Int mTimeStepCount
Number of step which have been executed for this simulation.
Definition Simulation.h:83
const CPS::Attribute< Real >::Ptr mPFBaseApparentPowerFallback
Definition Simulation.h:48
Real mSteadStIniTimeLimit
steady state initialization time limit
Definition Simulation.h:139
void setDomain(CPS::Domain domain=CPS::Domain::DP)
Definition Simulation.h:198
Solver::SystemMatrixRecomputationMode mSystemMatrixRecomputationMode
Requested system-matrix recomputation mode.
Definition Simulation.h:120
Solver::Behaviour mSolverBehaviour
Definition Simulation.h:110
Real getPFBaseApparentPowerFallback() const
Solver::Type mSolverType
Definition Simulation.h:108
DirectLinearSolverImpl mDirectImpl
Definition Simulation.h:114
virtual ~Simulation()
Desctructor.
Definition Simulation.h:188
CPS::Task::List mTasks
List of all tasks to be scheduled.
Definition Simulation.h:147
const CPS::Attribute< Bool >::Ptr mSplitSubnets
Definition Simulation.h:72
std::shared_ptr< Scheduler > mScheduler
Scheduler used for task scheduling.
Definition Simulation.h:145
Bool getPFKeepLastSolution() const
void setLogStepTimes(Bool f)
Definition Simulation.h:257
std::vector< Interface::Ptr > mInterfaces
Vector of Interfaces.
Definition Simulation.h:152
void setPFSolverUseSparse(Bool value)
Bool mLogStepTimes
activate collection of step times
Definition Simulation.h:102
void create()
Helper function for constructors.
void setPFSolverEnforceReactiveLimits(Bool value)
CPS::SystemTopology mSystem
System list.
Definition Simulation.h:87
void checkForOverruns(String logName)
Check for overruns.
Real getPFSolverBaseVoltageLooseTolerance() const
Simulation(String name, CommandLineArgs &args)
Creates simulation with name and CommandLineArgs.
const CPS::Attribute< Bool >::Ptr mPFEnforceReactiveLimits
Definition Simulation.h:60
CPS::AttributeBase::Ptr getIdObjAttribute(const String &comp, const String &attr)
CHECK: Can these be deleted? getIdObjAttribute + "**attr =" should suffice.
Real timeStep() const
Definition Simulation.h:343
void addInterface(Interface::Ptr eint)
Definition Simulation.h:328
std::shared_ptr< Simulation > Ptr
Definition Simulation.h:33
void start()
Start simulation without advancing in time.
EventQueue mEvents
The simulation event queue.
Definition Simulation.h:85
void doSteadyStateInit(Bool f)
activate steady state initialization
Definition Simulation.h:261
DataLogger::List & loggers()
Definition Simulation.h:344
CPS::Domain mDomain
Definition Simulation.h:106
void addEvent(Event::Ptr e)
Schedule an event in the simulation.
Definition Simulation.h:314
void doStateSpaceExtraction(Bool value=true)
Enable extraction of the MNA-coupled discrete-time state matrix.
Definition Simulation.h:252
void schedule()
Create the schedule for the independent tasks.
const CPS::Attribute< Bool >::Ptr mPFSolverUseSparse
Definition Simulation.h:56
std::chrono::time_point< std::chrono::steady_clock > mSimulationStartTimePoint
Start time point to measure calculation time.
Definition Simulation.h:90
Scheduler::Edges mTaskOutEdges
Definition Simulation.h:149
Real mTime
Time variable that is incremented at every step.
Definition Simulation.h:81
Real mSteadStIniAccLimit
steady state initialization accuracy limit
Definition Simulation.h:141
const CPS::Attribute< Real >::Ptr mPFBaseVoltageLooseTolerance
Loose tolerance for a zone's Load base-voltage vs. its rating; default 0.1.
Definition Simulation.h:63
void createMNASolver()
Subroutine for MNA only because there are many MNA options.
void run()
Run simulation until total time is elapsed.
void setPFSolverBaseVoltageStrictTolerance(Real tolerance)
void logAttribute(String name, CPS::AttributeBase::Ptr attr)
CHECK: Can we store the attribute name / UID intrinsically inside the attribute?
DataLoggerInterface::List mLoggers
The data loggers.
Definition Simulation.h:162
const MNAStateSpaceExtractor & getStateSpaceExtractor(UInt solverIndex=0) const
void createSolvers()
Create solvers depending on simulation settings.
const CPS::Attribute< String >::Ptr mName
Simulation name.
Definition Simulation.h:36
Real getPFSolverBaseVoltageStrictTolerance() const
CPS::Logger::Log mLog
Simulation logger.
Definition Simulation.h:178
void stop()
Stop simulation including scheduler and interfaces.
std::chrono::time_point< std::chrono::steady_clock > mSimulationEndTimePoint
End time point to measure calculation time.
Definition Simulation.h:92
Real time() const
Definition Simulation.h:340
void doSystemMatrixRecomputation(Bool value)
Definition Simulation.h:246
std::vector< Ptr > List
Definition Solver.h:33
SystemMatrixRecomputationMode
System-matrix recomputation mode for MNA solvers.
Definition Solver.h:38
@ Enabled
Always enable system-matrix recomputation.
Definition Solver.h:42
@ Auto
Select the mode automatically based on the system topology.
Definition Solver.h:40
@ Disabled
Always disable system-matrix recomputation.
Definition Solver.h:44
unsigned int UInt
Definition Definitions.h:60
CPS::Real Real
Definition Definitions.h:18
CPS::String String
Definition Definitions.h:20
CPS::Int Int
Definition Definitions.h:22
CPS::Bool Bool
Definition Definitions.h:21
DirectLinearSolverImpl
CPS::UInt UInt
Definition Definitions.h:23
DataLogger::Ptr logger
Simulation data logger.
Definition Simulation.h:156