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);
93 double mDd,
double mDq,
double mDZd,
double mDZq,
94 double mSd,
double mSq,
double mSz)
const;
106 std::map<std::string, double>& globalParams)
const override
114 data[
"xc"] = globalParams[
"omega"] *
L_reactor / globalParams[
"ACZbase"];
115 data[
"rc"] =
R_reactor / globalParams[
"ACZbase"];
116 data[
"P_g"] =
P / 1e6;
117 data[
"Q_g"] =
Q / 1e6;
118 data[
"Vtar"] =
V_dc / 1e3 / globalParams[
"DCbaseKV"];
123 if (
controls.count(
"active_power")) {
127 else if (
controls.count(
"dc_voltage")) {
141 else if (
controls.count(
"reactive_power")) {
156 void writeMNAmatrix(SymEngine::DenseMatrix&, std::unordered_map<Bus*, int>&,
int,
157 std::map<
Element*, std::vector<RCP<const Basic>>>&)
override;
162 const std::vector<MatrixXcd>& states,
int nKeep)
const override;
171 return n_plant_states_; }
178 const std::vector<Eigen::MatrixXcd>& states,
179 const Eigen::Vector2d& Vg_dq);
208 double L_eq = 0.0, R_eq = 0.0, m_1 = 1.0;
211 int number_of_states = 12;
215 int n_plant_states_ = 12;
219 bool open_loop_modulation_ =
false;
220 double ol_vMDelta_d_ref_ = 0.0;
221 double ol_vMDelta_q_ref_ = 0.0;
222 double ol_vMSigma_z_ref_ = 0.0;
223 Eigen::VectorXd equilibrium_guess_;
225 void computeOpenLoopArmRefs(
226 double Id,
double Iq,
double Vdc,
double iSigma_z,
227 double& vMDelta_d,
double& vMDelta_q,
double& vMSigma_z)
const;
228 void initializeDelayStates(
229 Eigen::VectorXd& x0,
double Vdc,
230 double vMDelta_d,
double vMDelta_q,
double vMSigma_z)
const;
231 void seedPlantStateGuess(
232 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:194
void stepControllers(double dt, const std::vector< Eigen::MatrixXcd > &states, const Eigen::Vector2d &Vg_dq)
Definition MMC.cpp:1699
Eigen::MatrixXcd mD_dqsym_
Definition MMC.h:184
int getNumberOfInternalStates() const override
Number of internal state variables for dynamic elements.
Definition MMC.h:164
virtual void printElementValues() override
Print MMC element and controller parameter values.
Definition MMC.cpp:1491
Eigen::MatrixXcd mS_dqsym_
Definition MMC.h:185
Eigen::VectorXd x_ctrl_dqsym_
Definition MMC.h:183
double last_vMDelta_q_ref_
Definition MMC.h:191
int getNumberOfPlantStates() const override
Number of plant states exposed for simulation (may differ from internal states).
Definition MMC.h:169
virtual void computeABCD() override
Numerically compute the Jacobian matrices A and B using finite differences.
Definition MMC.cpp:856
virtual Eigen::MatrixXd computeStateDerivatives(const Eigen::VectorXd &x, const Eigen::VectorXd &u) override
Compute the state derivatives for the MMC system.
Definition MMC.cpp:405
void init_Filter(const std::vector< double > &converter_params)
Initialize the filter(s) in MMC using provided parameters.
Definition MMC.cpp:301
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:339
double last_vMDelta_d_ref_
Definition MMC.h:190
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:912
double last_vMSigma_q_ref_
Definition MMC.h:193
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:1323
std::vector< RCP< const Basic > > getVirtualInputSymbols() const override
Return symbolic names for virtual inputs used in stamping.
Definition MMC.cpp:1527
double last_vMSigma_d_ref_
Definition MMC.h:192
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:1537
std::vector< std::vector< complex< double > > > compute_y_parameters(double frequency) override
Compute the numerical admittance (Y) parameters for the MMC.
Definition MMC.cpp:1454
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:1642
void computeABCD_analytical()
computeABCD variant: exact plant block + numerical controller block
Definition MMC.cpp:1172
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:105
bool dqsym_initialized_
Definition MMC.h:186
map_basic_basic getParameterSubstitutions() const override
Return parameter substitutions for symbolic evaluation.
Definition MMC.cpp:1680