Harmony
HARMONic stabilitY assessment of PE-penetrated power systems
Loading...
Searching...
No Matches
Stability_certificate.h
Go to the documentation of this file.
1#ifndef STABILITY_CERTIFICATE_H
2#define STABILITY_CERTIFICATE_H
3
9#include "../../Constants.h"
10#include "../Helper_Functions/Visualization.h"
11#include "Certificate_spec.h"
13
14#include <complex>
15#include <string>
16#include <vector>
17
18class Element;
20
23 std::vector<double> freq_Hz;
24 std::vector<double> passivity_index;
25 std::vector<double> shifted_passivity;
26 std::vector<double> max_phase_deg;
27 std::vector<double> nr_phase_deg;
28 std::vector<double> nr_zero_margin;
29 std::vector<double> small_gain;
30 std::vector<double> shortage_passivity;
31 std::vector<double> min_real_eig;
32 std::vector<double> dw_margin;
33 bool pass_passivity = false;
34 bool pass_phase = false;
35 bool pass_shifted = false;
36 bool pass_nr_phase = false;
37 bool pass_nr_zero = false;
38 bool pass_small_gain = false;
39 bool pass_dw = false;
40 bool pass_sector = false;
41 double worst_passivity = 0.0;
42 double worst_shifted = 0.0;
43 double worst_phase_deg = 0.0;
44 double worst_nr_phase_deg = 0.0;
46 double worst_small_gain = 0.0;
47 double worst_shortage = 0.0;
48 double worst_dw = 0.0;
49 double phase_limit_deg = 90.0;
50 double shift_delta = 0.0;
51 double gain_limit = 1.0;
52};
53
56 double P = 0.0;
57 double Q = 0.0;
58 bool certified = false;
59 double margin = 0.0;
60 double phase_deg = 0.0;
61 std::string note;
62};
63
65double passivityIndex(const Eigen::MatrixXcd& Y);
66
68double shiftedPassivityIndex(const Eigen::MatrixXcd& Y, double delta);
69
74double dwHermitianMargin(const Eigen::MatrixXcd& Y);
75
77double maxEigenPhaseDeg(const Eigen::MatrixXcd& Y);
78
80bool sweepPassesSpec(const CertificateSweep& sweep, const CertificateSpec& spec);
81
83Eigen::MatrixXcd extractAcDqBlock(const Eigen::MatrixXcd& Y);
84
86Eigen::MatrixXcd elementAdmittance(
87 Element& elem,
88 double freq_Hz,
89 bool ac_dq_block = true);
90
93 Element& elem,
94 const CertificateSpec& spec);
95
98 Element& elem,
99 double f_min,
100 double f_max,
101 int n_points,
102 bool ac_block = true,
103 double phase_limit_deg = 90.0);
104
109 StabilityEstimate& stability,
110 const std::string& converter_name,
111 const std::string& location,
112 const CertificateSpec& spec);
113
115 StabilityEstimate& stability,
116 const std::string& converter_name,
117 const std::string& location,
118 double f_min,
119 double f_max,
120 int n_points);
121
124
125void writeCertificateSweepCsv(const CertificateSweep& sweep, const std::string& path);
127 const std::vector<OperatingRegionSample>& samples,
128 const std::string& path);
129
130// ----- Paper-style ImPlot figures -----
131
133 const CertificateSweep& sweep,
134 const std::string& title = "Passivity index");
135
137 const CertificateSweep& sweep,
138 const std::string& title = "Device phase certificate");
139
141 const CertificateSweep& sweep,
142 const std::string& title = "Device gate certificate");
143
145 const std::vector<OperatingRegionSample>& samples,
146 const std::string& title = "Certified operating region (P,Q)");
147
149 const CertificateSweep& local,
150 const CertificateSweep& system_H,
151 const std::string& title = "Local vs system certificate");
152
154 const CertificateSweep& before,
155 const CertificateSweep& after,
156 const std::string& title = "Control tuning: passivity");
157
159 const Eigen::MatrixXcd& Y,
160 double freq_Hz,
161 const std::string& title = "DW-style Hermitian slice");
162
164 const Eigen::MatrixXcd& Y,
165 double freq_Hz,
166 double phase_limit_deg = 90.0,
167 const std::string& title = "Numerical range W(Y)");
168
170 const Eigen::MatrixXcd& Y,
171 double freq_Hz,
172 const CertificateSpec& spec = {},
173 const std::string& title = "DW shell (xz projection)");
174
176 const CertificateSweep& sweep,
177 const std::string& title = "Geometric certificates");
178
179#endif // STABILITY_CERTIFICATE_H
Shared thresholds and frequency-grid settings for device certificates.
Local geometric certificates on Y(jω): numerical range (small-phase), small-gain, excess/shortage pas...
void plot_certificate_numerical_range(const Eigen::MatrixXcd &Y, double freq_Hz, double phase_limit_deg=90.0, const std::string &title="Numerical range W(Y)")
Definition Stability_certificate.cpp:515
void plot_certificate_phase(const CertificateSweep &sweep, const std::string &title="Device phase certificate")
Definition Stability_certificate.cpp:331
double maxEigenPhaseDeg(const Eigen::MatrixXcd &Y)
Maximum |arg(λ)| over eigenvalues of Y, in degrees (heuristic).
Definition Stability_certificate.cpp:64
void writeCertificateSweepCsv(const CertificateSweep &sweep, const std::string &path)
Definition Stability_certificate.cpp:277
void plot_certificate_dw_slice(const Eigen::MatrixXcd &Y, double freq_Hz, const std::string &title="DW-style Hermitian slice")
Definition Stability_certificate.cpp:485
void finalizeCertificateSweep(CertificateSweep &sweep, const CertificateSpec &spec)
Aggregate pass/fail from a completed sweep + spec.
Definition Stability_certificate.cpp:94
void plot_certificate_local_vs_system(const CertificateSweep &local, const CertificateSweep &system_H, const std::string &title="Local vs system certificate")
Definition Stability_certificate.cpp:417
Eigen::MatrixXcd extractAcDqBlock(const Eigen::MatrixXcd &Y)
Extract AC dq 2×2 block from 2×2 or 3×3 Y.
Definition Stability_certificate.cpp:77
bool sweepPassesSpec(const CertificateSweep &sweep, const CertificateSpec &spec)
True if all enabled spec gates pass on a completed sweep.
Definition Stability_certificate.cpp:110
void plot_certificate_gate(const CertificateSweep &sweep, const std::string &title="Device gate certificate")
Definition Stability_certificate.cpp:351
CertificateSweep sweepReturnRatioCertificate(StabilityEstimate &stability, const std::string &converter_name, const std::string &location, const CertificateSpec &spec)
Sweep H = Y Z_eq and report Her(I+H) passivity-style margins.
Definition Stability_certificate.cpp:233
double dwHermitianMargin(const Eigen::MatrixXcd &Y)
Hermitian DW-slice margin (legacy): λ_min(Her Y).
Definition Stability_certificate.cpp:59
double shiftedPassivityIndex(const Eigen::MatrixXcd &Y, double delta)
Shifted passivity λ_min(Her(Y + δ I)).
Definition Stability_certificate.cpp:52
double passivityIndex(const Eigen::MatrixXcd &Y)
Hermitian passivity index λ_min((Y+Y*)/2).
Definition Stability_certificate.cpp:45
CertificateSweep sweepDeviceCertificate(Element &elem, const CertificateSpec &spec)
Sweep device Y and evaluate certificates per spec.
Definition Stability_certificate.cpp:198
void plot_certificate_passivity(const CertificateSweep &sweep, const std::string &title="Passivity index")
Definition Stability_certificate.cpp:309
void plot_certificate_tuning_compare(const CertificateSweep &before, const CertificateSweep &after, const std::string &title="Control tuning: passivity")
Definition Stability_certificate.cpp:458
void plot_certificate_geometric_sweep(const CertificateSweep &sweep, const std::string &title="Geometric certificates")
Definition Stability_certificate.cpp:588
Eigen::MatrixXcd elementAdmittance(Element &elem, double freq_Hz, bool ac_dq_block=true)
Numeric Y of an element at f (Hz), optionally AC dq block.
Definition Stability_certificate.cpp:86
void plot_certificate_operating_region(const std::vector< OperatingRegionSample > &samples, const std::string &title="Certified operating region (P,Q)")
Definition Stability_certificate.cpp:390
void writeOperatingRegionCsv(const std::vector< OperatingRegionSample > &samples, const std::string &path)
Definition Stability_certificate.cpp:295
void plot_certificate_dw_shell(const Eigen::MatrixXcd &Y, double freq_Hz, const CertificateSpec &spec={}, const std::string &title="DW shell (xz projection)")
Definition Stability_certificate.cpp:552
Base class for multi-phase network elements with Y-parameters and MNA stamping hooks.
Definition Element.h:29
Performs impedance-based stability assessment of network areas.
Definition Stability_estimate.h:30
Frequency-domain certificate evaluation settings.
Definition Certificate_spec.h:12
Frequency-domain certificate sweep for one device (or one H).
Definition Stability_certificate.h:22
double worst_nr_phase_deg
Definition Stability_certificate.h:44
std::vector< double > max_phase_deg
max |arg λ| (deg) — eigenphase heuristic
Definition Stability_certificate.h:26
bool pass_sector
Definition Stability_certificate.h:40
bool pass_dw
Definition Stability_certificate.h:39
std::vector< double > shortage_passivity
max(0, -ν)
Definition Stability_certificate.h:30
std::vector< double > freq_Hz
Definition Stability_certificate.h:23
std::vector< double > nr_phase_deg
numerical-range (small-phase) |arg W|
Definition Stability_certificate.h:27
std::vector< double > nr_zero_margin
>0 ⇒ 0 ∉ W(Y)
Definition Stability_certificate.h:28
double worst_phase_deg
Definition Stability_certificate.h:43
std::vector< double > passivity_index
λ_min(Her Y) or Her(I+H)
Definition Stability_certificate.h:24
bool pass_shifted
Definition Stability_certificate.h:35
bool pass_nr_zero
Definition Stability_certificate.h:37
std::vector< double > shifted_passivity
λ_min(Her(Y+δI))
Definition Stability_certificate.h:25
double worst_small_gain
Definition Stability_certificate.h:46
double gain_limit
Definition Stability_certificate.h:51
double shift_delta
Definition Stability_certificate.h:50
std::vector< double > dw_margin
NR zero-margin (DW-lite local screen)
Definition Stability_certificate.h:32
bool pass_passivity
Definition Stability_certificate.h:33
double phase_limit_deg
Definition Stability_certificate.h:49
std::vector< double > small_gain
σ_max(Y) or σ_max(H)
Definition Stability_certificate.h:29
std::vector< double > min_real_eig
min Re λ
Definition Stability_certificate.h:31
double worst_passivity
Definition Stability_certificate.h:41
double worst_nr_zero_margin
Definition Stability_certificate.h:45
double worst_dw
Definition Stability_certificate.h:48
bool pass_phase
Definition Stability_certificate.h:34
bool pass_nr_phase
Definition Stability_certificate.h:36
double worst_shortage
Definition Stability_certificate.h:47
double worst_shifted
Definition Stability_certificate.h:42
bool pass_small_gain
Definition Stability_certificate.h:38
One sample of a (P,Q) operating-region certificate.
Definition Stability_certificate.h:55
double phase_deg
Definition Stability_certificate.h:60
std::string note
Definition Stability_certificate.h:61
double P
Definition Stability_certificate.h:56
double Q
Definition Stability_certificate.h:57
bool certified
Definition Stability_certificate.h:58
double margin
Definition Stability_certificate.h:59