10#include "../../Include_control_blocks.h"
42 MMC(
const std::string& symbol,
const std::string& location,
43 double omega,
double activePower,
double reactivePower,
44 double angle,
double acVoltage,
double Pdc,
double dcVoltage,
45 double armInductance,
double armResistance,
double armCapacitance,
46 int numSubmodules,
double reactorInductance,
double reactorResistance,
55 MMC(
const std::string& symbol,
const std::string& location,
const std::vector<double>& converter_params);
64 MMC(
const std::string& symbol,
const std::string& location,
const std::vector<double>& converter_params,
const std::vector<double>& controller_params);
74 MMC(
const std::string& symbol,
const std::string& location,
const std::vector<double>& converter_params,
75 const std::vector<double>& controller_params,
const std::vector<double>& filter_params);
79 void init_Filter(
const std::vector<double>& converter_params);
80 void update_MMC(
double Vm,
double theta,
double Pac,
double Qac,
double Vdc,
double Pdc);
102 double mDd,
double mDq,
double mDZd,
double mDZq,
103 double mSd,
double mSq,
double mSz)
const;
115 std::map<std::string, double>& globalParams)
const override
123 data[
"xc"] = globalParams[
"omega"] *
L_reactor / globalParams[
"ACZbase"];
124 data[
"rc"] =
R_reactor / globalParams[
"ACZbase"];
125 data[
"P_g"] =
P / 1e6;
126 data[
"Q_g"] =
Q / 1e6;
127 data[
"Vtar"] =
V_dc / 1e3 / globalParams[
"DCbaseKV"];
132 if (
controls.count(
"active_power")) {
136 else if (
controls.count(
"dc_voltage")) {
150 else if (
controls.count(
"reactive_power")) {
165 void writeMNAmatrix(SymEngine::DenseMatrix&, std::unordered_map<Bus*, int>&,
int,
166 std::map<
Element*, std::vector<RCP<const Basic>>>&)
override;
171 const std::vector<MatrixXcd>& states,
int nKeep)
const override;
180 return n_plant_states_; }
187 const std::vector<Eigen::MatrixXcd>& states,
188 const Eigen::Vector2d& Vg_dq);
217 double L_eq = 0.0, R_eq = 0.0, m_1 = 1.0;
220 int number_of_states = 12;
223 double gfm_E_ref_ = 0.0;
225 bool gfm_scale_eq_residual_ =
false;
228 int n_plant_states_ = 12;
232 bool open_loop_modulation_ =
false;
233 double ol_vMDelta_d_ref_ = 0.0;
234 double ol_vMDelta_q_ref_ = 0.0;
235 double ol_vMSigma_z_ref_ = 0.0;
236 Eigen::VectorXd equilibrium_guess_;
238 void computeOpenLoopArmRefs(
239 double Id,
double Iq,
double Vdc,
double iSigma_z,
240 double& vMDelta_d,
double& vMDelta_q,
double& vMSigma_z)
const;
241 void initializeDelayStates(
242 Eigen::VectorXd& x0,
double Vdc,
243 double vMDelta_d,
double vMDelta_q,
double vMSigma_z)
const;
244 void seedPlantStateGuess(
245 Eigen::VectorXd& x0,
double Id,
double Iq,
double iSigma_z)
const;
Base class for power electronic converters with state-space models.
RCP< const Basic > omega
Angular frequency symbol ω.
Definition Symbolic_functions.cpp:10
Abstract controller with per-channel reference values.
Definition Controller.h:17
Abstract power converter with ABCD matrices, controllers, and filters.
Definition Converter.h:17
double R_reactor
Definition Converter.h:129
double Q
Definition Converter.h:119
double L_reactor
Definition Converter.h:128
double theta
Definition Converter.h:125
double P
Definition Converter.h:118
double V_dc
Definition Converter.h:127
std::map< std::string, Controller * > controls
Definition Converter.h:145
Base class for multi-phase network elements with Y-parameters and MNA stamping hooks.
Definition Element.h:29
std::string element_location
Definition Element.h:282
std::map< std::string, double > element_OPF_info
Definition Element.h:286
LTI filter with configurable time constant, damping, and bandwidth.
Definition Filter.h:17
Modular Multilevel Converter with arm dynamics and control loops.
Definition MMC.h:21
double last_vMSigma_z_ref_
Definition MMC.h:203
void stepControllers(double dt, const std::vector< Eigen::MatrixXcd > &states, const Eigen::Vector2d &Vg_dq)
Definition MMC.cpp:1884
Eigen::MatrixXcd mD_dqsym_
Definition MMC.h:193
int getNumberOfInternalStates() const override
Number of internal state variables for dynamic elements.
Definition MMC.h:173
virtual void printElementValues() override
Print MMC element and controller parameter values.
Definition MMC.cpp:1676
Eigen::MatrixXcd mS_dqsym_
Definition MMC.h:194
std::pair< double, double > getGfmDroops() const
Return current GFM droops (Kdroop_P, Kdroop_Q).
Definition MMC.cpp:423
Eigen::VectorXd x_ctrl_dqsym_
Definition MMC.h:192
double last_vMDelta_q_ref_
Definition MMC.h:200
int getNumberOfPlantStates() const override
Number of plant states exposed for simulation (may differ from internal states).
Definition MMC.h:178
virtual void computeABCD() override
Numerically compute the Jacobian matrices A and B using finite differences.
Definition MMC.cpp:968
virtual Eigen::MatrixXd computeStateDerivatives(const Eigen::VectorXd &x, const Eigen::VectorXd &u) override
Compute the state derivatives for the MMC system.
Definition MMC.cpp:455
void init_Filter(const std::vector< double > &converter_params)
Initialize the filter(s) in MMC using provided parameters.
Definition MMC.cpp:319
void update_MMC(double Vm, double theta, double Pac, double Qac, double Vdc, double Pdc)
Update MMC operating point and controller references.
Definition MMC.cpp:357
double last_vMDelta_d_ref_
Definition MMC.h:199
Eigen::MatrixXd computePlantJacobian(double w, double mDd, double mDq, double mDZd, double mDZq, double mSd, double mSq, double mSz) const
Exact 12×12 plant Jacobian (modulation treated as fixed parameters)
Definition MMC.cpp:1024
double last_vMSigma_q_ref_
Definition MMC.h:202
void init_Controller(const std::vector< double > &converter_params)
Initialize the controller(s) in MMC using provided parameters.
Definition MMC.cpp:199
virtual void solveEquilibrium() override
Solve for the steady-state operating point x using Newton-Raphson.
Definition MMC.cpp:1435
std::vector< RCP< const Basic > > getVirtualInputSymbols() const override
Return symbolic names for virtual inputs used in stamping.
Definition MMC.cpp:1712
double last_vMSigma_d_ref_
Definition MMC.h:201
void writeMNAmatrix(SymEngine::DenseMatrix &, std::unordered_map< Bus *, int > &, int, std::map< Element *, std::vector< RCP< const Basic > > > &) override
Stamp this element into the symbolic MNA matrix (override in derived classes).
Definition MMC.cpp:1722
std::vector< std::vector< complex< double > > > compute_y_parameters(double frequency) override
Compute the numerical admittance (Y) parameters for the MMC.
Definition MMC.cpp:1639
std::vector< MatrixXcd > simulateInputStep(const std::vector< MatrixXcd > &states, int nKeep) const override
Simulate a step response given input states (override in dynamic elements).
Definition MMC.cpp:1827
void computeABCD_analytical()
computeABCD variant: exact plant block + numerical controller block
Definition MMC.cpp:1284
void computePowerFlow(std::map< std::string, double > &data, std::map< std::string, double > &globalParams) const override
Compute branch power-flow quantities (override in derived classes).
Definition MMC.h:114
bool hasGfm() const
True when GFM outer-loop states are enabled.
Definition MMC.h:83
void setGfmDroops(double Kdroop_P, double Kdroop_Q)
Set GFM droops (Kdroop_P, Kdroop_Q); no-op if GFM disabled.
Definition MMC.cpp:431
bool dqsym_initialized_
Definition MMC.h:195
map_basic_basic getParameterSubstitutions() const override
Return parameter substitutions for symbolic evaluation.
Definition MMC.cpp:1865