Harmony
HARMONic stabilitY assessment of PE-penetrated power systems
Loading...
Searching...
No Matches
DQsym.h
Go to the documentation of this file.
1#ifndef _DQSYM_H_
2#define _DQSYM_H_
3
13#include "../../Constants.h"
14#include "../../Bus.h"
15#include "../Helper_Functions/Helper_Functions.h"
16
17class Network; class SubNetwork; class Element;
18
25struct DSSState {
26 MatrixXcd Ads, Bds, Cds, Dds;
27 MatrixXcd x_old;
28 VectorXi swVec, swVecOld;
29 VectorXcd yswitch;
30 int nStates = 0, nInputs = 0, nOutputs = 0, nSwitches = 0;
31 bool initialized = false;
32};
33
37struct Config {
38 double dt = 0.0, t_start = 0.0, t_end = 0.0;
39 double f = 0.0, omega = 0.0;
40 int nKeep = 1;
41 Eigen::VectorXd swOnRes, swOffRes;
42 Eigen::VectorXi swType;
43 std::function<Eigen::VectorXi(int step, double t)> breakerFunction;
44 std::vector<Bus*> outputBuses;
45};
46
51 std::vector<double> time;
52 MatrixXi brkHistory;
53 std::vector<MatrixXd> DSSabcHist;
54};
55
64class DQsym {
65public:
67 DQsym() = default;
68
73 void initialize(Network* net);
74
81
83 void reset() { dssState_ = DSSState{}; hasRun_ = false; }
84
89 void exportCSV(const std::string& filename) const;
90
92 void plot() const;
93
98 const DQsymResult& getResult() const;
99
104 bool hasRun() const { return hasRun_; }
105
127 MatrixXcd DSSS(DSSState&, const MatrixXcd&, const MatrixXcd&,
128 const MatrixXcd&, const MatrixXcd&,
129 const VectorXd&, const VectorXd&, const VectorXi&, const VectorXi&,
130 const MatrixXcd&, const VectorXcd&, double dt = 2e-5, double f0 = 50.0);
131
147 void buildMatricesForState(const MatrixXcd&, const MatrixXcd&,
148 const MatrixXcd&, const MatrixXcd&,
149 const VectorXi&, const VectorXi&, const VectorXd&, const VectorXd&,
150 MatrixXcd&, MatrixXcd&, MatrixXcd&, MatrixXcd&);
151
152private:
153 DSSState dssState_;
154 bool hasRun_ = false;
155 DQsymResult result_;
156 Network* net_ = nullptr;
157 std::vector<std::string> ac_grid_names, dc_grid_names;
158 std::unordered_map<std::string, SubNetwork*> ac_grids, dc_grids;
159 std::unordered_map<std::string, Element*> converters;
160};
161
162#endif
Orchestrates phasor-domain dynamic simulation of an AC/DC network.
Definition DQsym.h:64
void reset()
Resets internal DSSS state so a fresh run can be started.
Definition DQsym.h:83
void exportCSV(const std::string &filename) const
Writes simulation results to a CSV file.
Definition DQsym.cpp:429
bool hasRun() const
Returns whether at least one simulation has completed.
Definition DQsym.h:104
void initialize(Network *net)
Loads network topology and area metadata for simulation.
Definition DQsym.cpp:12
MatrixXcd DSSS(DSSState &, const MatrixXcd &, const MatrixXcd &, const MatrixXcd &, const MatrixXcd &, const VectorXd &, const VectorXd &, const VectorXi &, const VectorXi &, const MatrixXcd &, const VectorXcd &, double dt=2e-5, double f0=50.0)
Advances the discrete-time phasor-domain state-space system one step at a time.
Definition DQsym.cpp:62
DQsymResult run(Config &cfg)
Runs the full DQsym time-domain simulation.
Definition DQsym.cpp:192
void plot() const
Opens an interactive plot of the most recent simulation results.
Definition DQsym.cpp:446
DQsym()=default
Default constructor.
const DQsymResult & getResult() const
Returns the result of the last completed simulation.
Definition DQsym.cpp:455
void buildMatricesForState(const MatrixXcd &, const MatrixXcd &, const MatrixXcd &, const MatrixXcd &, const VectorXi &, const VectorXi &, const VectorXd &, const VectorXd &, MatrixXcd &, MatrixXcd &, MatrixXcd &, MatrixXcd &)
Builds switch-modified discrete-time matrices for the current breaker state.
Definition DQsym.cpp:131
Base class for multi-phase network elements with Y-parameters and MNA stamping hooks.
Definition Element.h:29
Root network model holding buses, elements, and AC/DC grid hierarchy.
Definition network.h:36
Named sub-network that inherits Network topology APIs but acts as a non-owning view.
Definition SubNetwork.h:20
Simulation configuration for a DQsym run.
Definition DQsym.h:37
double t_start
Definition DQsym.h:38
std::function< Eigen::VectorXi(int step, double t)> breakerFunction
Definition DQsym.h:43
double omega
Definition DQsym.h:39
double f
Definition DQsym.h:39
double dt
Definition DQsym.h:38
Eigen::VectorXd swOffRes
Definition DQsym.h:41
Eigen::VectorXi swType
Definition DQsym.h:42
Eigen::VectorXd swOnRes
Definition DQsym.h:41
double t_end
Definition DQsym.h:38
std::vector< Bus * > outputBuses
Definition DQsym.h:44
int nKeep
Definition DQsym.h:40
Time-domain results produced by a DQsym simulation.
Definition DQsym.h:50
std::vector< double > time
Definition DQsym.h:51
std::vector< MatrixXd > DSSabcHist
Definition DQsym.h:53
MatrixXi brkHistory
Definition DQsym.h:52
Persistent state for the DSSS phasor-domain integrator.
Definition DQsym.h:25
MatrixXcd Cds
Definition DQsym.h:26
MatrixXcd x_old
Definition DQsym.h:27
int nSwitches
Definition DQsym.h:30
MatrixXcd Dds
Definition DQsym.h:26
int nOutputs
Definition DQsym.h:30
VectorXi swVecOld
Definition DQsym.h:28
MatrixXcd Bds
Definition DQsym.h:26
MatrixXcd Ads
Definition DQsym.h:26
int nStates
Definition DQsym.h:30
int nInputs
Definition DQsym.h:30
VectorXi swVec
Definition DQsym.h:28
VectorXcd yswitch
Definition DQsym.h:29
bool initialized
Definition DQsym.h:31