DPsim
Loading...
Searching...
No Matches
EMTComponents.cpp
Go to the documentation of this file.
1/* Copyright 2017-2021 Institute for Automation of Complex Power Systems,
2 * EONERC, RWTH Aachen University
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
7 *********************************************************************************/
8
9#include <DPsim.h>
22#include <dpsim/Simulation.h>
24#include <dpsim/pybind/Utils.h>
25
26#ifdef WITH_JSON
27#include <nlohmann/json.hpp>
28using json = nlohmann::json;
29#endif
30
31namespace py = pybind11;
32using namespace pybind11::literals;
33
34namespace {
35
36void addEMTDCComponents(py::module_ mEMTDC) {
37 py::class_<CPS::EMT::DC::VoltageSource,
38 std::shared_ptr<CPS::EMT::DC::VoltageSource>,
39 CPS::SimPowerComp<CPS::Real>>(mEMTDC, "VoltageSource",
40 py::multiple_inheritance())
41 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
42 "loglevel"_a = CPS::Logger::Level::off)
43 .def("set_parameters", &CPS::EMT::DC::VoltageSource::setParameters,
44 "voltage"_a)
46 .def_property_readonly("V_ref",
48
49 py::class_<CPS::EMT::DC::CurrentSource,
50 std::shared_ptr<CPS::EMT::DC::CurrentSource>,
51 CPS::SimPowerComp<CPS::Real>>(mEMTDC, "CurrentSource",
52 py::multiple_inheritance())
53 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
54 "loglevel"_a = CPS::Logger::Level::off)
55 .def("set_parameters", &CPS::EMT::DC::CurrentSource::setParameters,
56 "current"_a)
58 .def_property_readonly("I_ref",
60
61 py::class_<CPS::EMT::DC::Resistor, std::shared_ptr<CPS::EMT::DC::Resistor>,
62 CPS::SimPowerComp<CPS::Real>>(mEMTDC, "Resistor",
63 py::multiple_inheritance())
64 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
65 "loglevel"_a = CPS::Logger::Level::off)
66 .def("set_parameters", &CPS::EMT::DC::Resistor::setParameters,
67 "resistance"_a)
68 .def("connect", &CPS::EMT::DC::Resistor::connect)
69 .def_property_readonly("R", createAttributeGetter<CPS::Real>("R"));
70
71 py::class_<CPS::EMT::DC::Capacitor, std::shared_ptr<CPS::EMT::DC::Capacitor>,
72 CPS::SimPowerComp<CPS::Real>>(mEMTDC, "Capacitor",
73 py::multiple_inheritance())
74 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
75 "loglevel"_a = CPS::Logger::Level::off)
76 .def("set_parameters", &CPS::EMT::DC::Capacitor::setParameters,
77 "capacitance"_a)
78 .def("connect", &CPS::EMT::DC::Capacitor::connect)
79 .def_property_readonly("C", createAttributeGetter<CPS::Real>("C"))
80 .def_property_readonly("x", createAttributeGetter<CPS::Matrix>("x"));
81
82 py::class_<CPS::EMT::DC::Inductor, std::shared_ptr<CPS::EMT::DC::Inductor>,
83 CPS::SimPowerComp<CPS::Real>>(mEMTDC, "Inductor",
84 py::multiple_inheritance())
85 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
86 "loglevel"_a = CPS::Logger::Level::off)
87 .def("set_parameters", &CPS::EMT::DC::Inductor::setParameters,
88 "inductance"_a, "initial_current"_a = 0.0)
89 .def("connect", &CPS::EMT::DC::Inductor::connect)
90 .def_property_readonly("L", createAttributeGetter<CPS::Real>("L"))
91 .def_property_readonly("initial_current",
93 .def_property_readonly("x", createAttributeGetter<CPS::Matrix>("x"));
94
95 py::class_<CPS::EMT::DC::PiLine, std::shared_ptr<CPS::EMT::DC::PiLine>,
96 CPS::SimPowerComp<CPS::Real>>(mEMTDC, "PiLine",
97 py::multiple_inheritance())
98 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
99 "loglevel"_a = CPS::Logger::Level::off)
100 .def("set_parameters", &CPS::EMT::DC::PiLine::setParameters,
101 "series_resistance"_a, "series_inductance"_a,
102 "parallel_capacitance"_a = 0.0, "parallel_conductance"_a = 0.0,
103 "initial_current"_a = 0.0)
104 .def("connect", &CPS::EMT::DC::PiLine::connect)
105 .def_property_readonly("series_resistance",
107 .def_property_readonly("series_inductance",
109 .def_property_readonly("parallel_capacitance",
111 .def_property_readonly("parallel_conductance",
113 .def_property_readonly("initial_current",
115}
116
117} // namespace
118
119void addEMTComponents(py::module_ mEMT) {
120 py::class_<CPS::EMT::SimNode, std::shared_ptr<CPS::EMT::SimNode>,
121 CPS::TopologicalNode>(mEMT, "SimNode", py::module_local())
122 .def(py::init<std::string>())
123 .def(py::init<std::string, CPS::PhaseType>())
124 .def(py::init<std::string, CPS::PhaseType,
125 const std::vector<CPS::Complex>>())
126 .def("set_initial_voltage",
127 py::overload_cast<CPS::MatrixComp>(
129 .def("set_initial_voltage",
130 py::overload_cast<CPS::Complex>(
132 .def("set_initial_voltage",
133 py::overload_cast<CPS::Complex, int>(
135 .def_readonly_static("gnd", &CPS::EMT::SimNode::GND);
136
137 py::module_ mEMTDC =
138 mEMT.def_submodule("dc", "scalar electromagnetic-transient DC models");
139 addEMTDCComponents(mEMTDC);
140
141 py::module mEMTPh1 = mEMT.def_submodule(
142 "ph1", "single phase electromagnetic-transient models");
143 addEMTPh1Components(mEMTPh1);
144 py::module mEMTPh3 =
145 mEMT.def_submodule("ph3", "three phase electromagnetic-transient models");
146 addEMTPh3Components(mEMTPh3);
147}
148
149void addEMTPh1Components(py::module_ mEMTPh1) {
151 std::shared_ptr<CPS::EMT::Ph1::CurrentSource>,
152 CPS::SimPowerComp<CPS::Real>>(mEMTPh1, "CurrentSource",
153 py::multiple_inheritance())
154 .def(py::init<std::string>())
155 .def(py::init<std::string, CPS::Logger::Level>())
156 .def("set_parameters", &CPS::EMT::Ph1::CurrentSource::setParameters,
157 "I_ref"_a, "f_src"_a = -1)
159 .def_property("I_ref", createAttributeGetter<CPS::Complex>("I_ref"),
161 .def_property("f_src", createAttributeGetter<CPS::Real>("f_src"),
163
165 std::shared_ptr<CPS::EMT::Ph1::VoltageSource>,
166 CPS::SimPowerComp<CPS::Real>>(mEMTPh1, "VoltageSource",
167 py::multiple_inheritance())
168 .def(py::init<std::string>())
169 .def(py::init<std::string, CPS::Logger::Level>())
170 .def("set_parameters", &CPS::EMT::Ph1::VoltageSource::setParameters,
171 "V_ref"_a, "f_src"_a = -1)
173 .def_property("V_ref", createAttributeGetter<CPS::Complex>("V_ref"),
175 .def_property("f_src", createAttributeGetter<CPS::Real>("f_src"),
177
178 py::class_<CPS::EMT::Ph1::Resistor, std::shared_ptr<CPS::EMT::Ph1::Resistor>,
179 CPS::SimPowerComp<CPS::Real>>(mEMTPh1, "Resistor",
180 py::multiple_inheritance())
181 .def(py::init<std::string>())
182 .def(py::init<std::string, CPS::Logger::Level>())
183 .def("set_parameters", &CPS::EMT::Ph1::Resistor::setParameters, "R"_a)
184 .def("connect", &CPS::EMT::Ph1::Resistor::connect)
185 .def_property("R", createAttributeGetter<CPS::Real>("R"),
187
188 py::class_<CPS::EMT::Ph1::Capacitor,
189 std::shared_ptr<CPS::EMT::Ph1::Capacitor>,
190 CPS::SimPowerComp<CPS::Real>>(mEMTPh1, "Capacitor",
191 py::multiple_inheritance())
192 .def(py::init<std::string>())
193 .def(py::init<std::string, CPS::Logger::Level>())
194 .def("set_parameters", &CPS::EMT::Ph1::Capacitor::setParameters, "C"_a)
195 .def("connect", &CPS::EMT::Ph1::Capacitor::connect)
196 .def_property("C", createAttributeGetter<CPS::Real>("C"),
198
199 py::class_<CPS::EMT::Ph1::Inductor, std::shared_ptr<CPS::EMT::Ph1::Inductor>,
200 CPS::SimPowerComp<CPS::Real>>(mEMTPh1, "Inductor",
201 py::multiple_inheritance())
202 .def(py::init<std::string>())
203 .def(py::init<std::string, CPS::Logger::Level>())
204 .def("set_parameters", &CPS::EMT::Ph1::Inductor::setParameters, "L"_a)
205 .def("connect", &CPS::EMT::Ph1::Inductor::connect)
206 .def_property("L", createAttributeGetter<CPS::Real>("L"),
208
209 py::class_<CPS::EMT::Ph1::Switch, std::shared_ptr<CPS::EMT::Ph1::Switch>,
211 mEMTPh1, "Switch", py::multiple_inheritance())
212 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
213 "loglevel"_a = CPS::Logger::Level::off)
214 .def("set_parameters", &CPS::EMT::Ph1::Switch::setParameters,
215 "open_resistance"_a, "closed_resistance"_a,
216 "closed"_a = false) // cppcheck-suppress assignBoolToPointer
217 .def("open", &CPS::EMT::Ph1::Switch::open)
218 .def("close", &CPS::EMT::Ph1::Switch::close)
219 .def("connect", &CPS::EMT::Ph1::Switch::connect);
220
222 std::shared_ptr<CPS::EMT::Ph1::SSN::Full_Serial_RLC>,
223 CPS::SimPowerComp<CPS::Real>>(mEMTPh1, "Full_Serial_RLC",
224 py::multiple_inheritance())
225 .def(py::init<std::string>())
226 .def(py::init<std::string, CPS::Logger::Level>())
227 .def("set_parameters",
229 "C"_a)
231 .def_property("R", createAttributeGetter<CPS::Real>("R"),
233 .def_property("L", createAttributeGetter<CPS::Real>("L"),
235 .def_property("C", createAttributeGetter<CPS::Real>("C"),
237
238 py::class_<CPS::EMT::Ph1::SSNTypeI2T,
239 std::shared_ptr<CPS::EMT::Ph1::SSNTypeI2T>,
240 CPS::SimPowerComp<CPS::Real>>(mEMTPh1, "SSNTypeI2T",
241 py::multiple_inheritance())
242 .def(py::init<std::string>())
243 .def(py::init<std::string, CPS::Logger::Level>())
244 .def("set_parameters", &CPS::EMT::Ph1::SSNTypeI2T::setParameters, "A"_a,
245 "B"_a, "C"_a, "D"_a)
246 .def("manual_init", &CPS::EMT::Ph1::SSNTypeI2T::manualInit,
247 "initialState"_a, "initialInput"_a, "initialOldInput"_a,
248 "initCurr"_a, "initVol"_a)
249 .def("connect", &CPS::EMT::Ph1::SSNTypeI2T::connect)
250 .def_property("mA", createAttributeGetter<CPS::Matrix>("mA"),
252 .def_property("mB", createAttributeGetter<CPS::Matrix>("mB"),
254 .def_property("mC", createAttributeGetter<CPS::Matrix>("mC"),
256 .def_property("mD", createAttributeGetter<CPS::Matrix>("mD"),
258 .def_property("mdA", createAttributeGetter<CPS::Matrix>("mdA"),
260 .def_property("mdB", createAttributeGetter<CPS::Matrix>("mdB"),
262 .def_property("mdC", createAttributeGetter<CPS::Matrix>("mdC"),
264
265 py::class_<CPS::EMT::Ph1::SSNTypeV2T,
266 std::shared_ptr<CPS::EMT::Ph1::SSNTypeV2T>,
267 CPS::SimPowerComp<CPS::Real>>(mEMTPh1, "SSNTypeV2T",
268 py::multiple_inheritance())
269 .def(py::init<std::string>())
270 .def(py::init<std::string, CPS::Logger::Level>())
271 .def("set_parameters", &CPS::EMT::Ph1::SSNTypeV2T::setParameters, "A"_a,
272 "B"_a, "C"_a, "D"_a)
273 .def("manual_init", &CPS::EMT::Ph1::SSNTypeV2T::manualInit,
274 "initialState"_a, "initialInput"_a, "initialOldInput"_a,
275 "initCurr"_a, "initVol"_a)
276 .def("connect", &CPS::EMT::Ph1::SSNTypeV2T::connect)
277 .def_property("mA", createAttributeGetter<CPS::Matrix>("mA"),
279 .def_property("mB", createAttributeGetter<CPS::Matrix>("mB"),
281 .def_property("mC", createAttributeGetter<CPS::Matrix>("mC"),
283 .def_property("mD", createAttributeGetter<CPS::Matrix>("mD"),
285 .def_property("mdA", createAttributeGetter<CPS::Matrix>("mdA"),
287 .def_property("mdB", createAttributeGetter<CPS::Matrix>("mdB"),
289 .def_property("mdC", createAttributeGetter<CPS::Matrix>("mdC"),
291}
292
293void addEMTPh3Components(py::module_ mEMTPh3) {
295 std::shared_ptr<CPS::EMT::Ph3::VoltageSource>,
296 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "VoltageSource",
297 py::multiple_inheritance())
298 .def(py::init<std::string>())
299 .def(py::init<std::string, CPS::Logger::Level>())
300 .def("set_parameters",
301 py::overload_cast<CPS::MatrixComp, CPS::Real>(
303 "V_ref"_a, "f_src"_a = 50)
305 .def_property("V_ref", createAttributeGetter<CPS::MatrixComp>("V_ref"),
307 .def_property("f_src", createAttributeGetter<CPS::Real>("f_src"),
309
311 std::shared_ptr<CPS::EMT::Ph3::ControlledVoltageSource>,
312 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "ControlledVoltageSource",
313 py::multiple_inheritance())
314 .def(py::init<std::string>())
315 .def(py::init<std::string, CPS::Logger::Level>())
316 .def("set_parameters",
317 py::overload_cast<CPS::Matrix>(
319 "V_ref"_a)
321 .def_property("V_ref", createAttributeGetter<CPS::MatrixComp>("V_ref"),
323
325 std::shared_ptr<CPS::EMT::Ph3::CurrentSource>,
326 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "CurrentSource",
327 py::multiple_inheritance())
328 .def(py::init<std::string>())
329 .def(py::init<std::string, CPS::Logger::Level>())
330 .def("set_parameters",
331 py::overload_cast<CPS::MatrixComp, CPS::Real>(
333 "I_ref"_a, "f_src"_a = 50)
335 .def_property("I_ref", createAttributeGetter<CPS::MatrixComp>("I_ref"),
337 .def_property("f_src", createAttributeGetter<CPS::Real>("f_src"),
339
340 py::class_<CPS::EMT::Ph3::Resistor, std::shared_ptr<CPS::EMT::Ph3::Resistor>,
341 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "Resistor",
342 py::multiple_inheritance())
343 .def(py::init<std::string>())
344 .def(py::init<std::string, CPS::Logger::Level>())
345 .def("set_parameters", &CPS::EMT::Ph3::Resistor::setParameters, "R"_a)
346 .def("connect", &CPS::EMT::Ph3::Resistor::connect);
347
348 py::class_<CPS::EMT::Ph3::Capacitor,
349 std::shared_ptr<CPS::EMT::Ph3::Capacitor>,
350 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "Capacitor",
351 py::multiple_inheritance())
352 .def(py::init<std::string>())
353 .def(py::init<std::string, CPS::Logger::Level>())
354 .def("set_parameters", &CPS::EMT::Ph3::Capacitor::setParameters, "C"_a)
355 .def("connect", &CPS::EMT::Ph3::Capacitor::connect);
356
357 py::class_<CPS::EMT::Ph3::Inductor, std::shared_ptr<CPS::EMT::Ph3::Inductor>,
358 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "Inductor",
359 py::multiple_inheritance())
360 .def(py::init<std::string>())
361 .def(py::init<std::string, CPS::Logger::Level>())
362 .def("set_parameters", &CPS::EMT::Ph3::Inductor::setParameters, "L"_a)
363 .def("connect", &CPS::EMT::Ph3::Inductor::connect);
364
366 std::shared_ptr<CPS::EMT::Ph3::NetworkInjection>,
367 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "NetworkInjection",
368 py::multiple_inheritance())
369 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
370 "loglevel"_a = CPS::Logger::Level::off)
371 .def("set_parameters",
372 py::overload_cast<CPS::MatrixComp, CPS::Real>(
374 "V_ref"_a, "f_src"_a = 50)
376
377 py::class_<CPS::EMT::Ph3::PiLine, std::shared_ptr<CPS::EMT::Ph3::PiLine>,
378 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "PiLine",
379 py::multiple_inheritance())
380 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
381 "loglevel"_a = CPS::Logger::Level::off)
382 .def("set_parameters", &CPS::EMT::Ph3::PiLine::setParameters,
383 "series_resistance"_a, "series_inductance"_a,
384 "parallel_capacitance"_a = zeroMatrix(3),
385 "parallel_conductance"_a = zeroMatrix(3))
386 .def("connect", &CPS::EMT::Ph3::PiLine::connect);
387
388 py::class_<CPS::EMT::Ph3::RXLoad, std::shared_ptr<CPS::EMT::Ph3::RXLoad>,
389 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "RXLoad",
390 py::multiple_inheritance())
391 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
392 "loglevel"_a = CPS::Logger::Level::off)
393 .def("set_parameters", &CPS::EMT::Ph3::RXLoad::setParameters,
394 "active_power"_a, "reactive_power"_a, "volt"_a,
395 // cppcheck-suppress assignBoolToPointer
396 "reactance_in_series"_a = false)
397 .def("connect", &CPS::EMT::Ph3::RXLoad::connect);
398
399 py::class_<CPS::EMT::Ph3::Shunt, std::shared_ptr<CPS::EMT::Ph3::Shunt>,
400 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "Shunt",
401 py::multiple_inheritance())
402 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
403 "loglevel"_a = CPS::Logger::Level::off)
404 .def("set_parameters",
405 static_cast<void (CPS::EMT::Ph3::Shunt::*)(CPS::Real, CPS::Real)>(
407 "G"_a, "B"_a)
408 .def("connect", &CPS::EMT::Ph3::Shunt::connect);
409
410 py::class_<CPS::EMT::Ph3::Switch, std::shared_ptr<CPS::EMT::Ph3::Switch>,
412 mEMTPh3, "Switch", py::multiple_inheritance())
413 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
414 "loglevel"_a = CPS::Logger::Level::off)
415 .def("set_parameters", &CPS::EMT::Ph3::Switch::setParameters,
416 "open_resistance"_a, "closed_resistance"_a,
417 // cppcheck-suppress assignBoolToPointer
418 "closed"_a = false)
421 .def("connect", &CPS::EMT::Ph3::Switch::connect);
422
424 std::shared_ptr<CPS::EMT::Ph3::SynchronGeneratorIdeal>,
425 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "SynchronGeneratorIdeal",
426 py::multiple_inheritance())
427 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
428 "loglevel"_a = CPS::Logger::Level::off)
430
432 std::shared_ptr<CPS::EMT::Ph3::SynchronGeneratorDQTrapez>,
433 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "SynchronGeneratorDQTrapez",
434 py::multiple_inheritance())
435 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
436 "loglevel"_a = CPS::Logger::Level::off)
437 .def("set_parameters_operational_per_unit",
439 setParametersOperationalPerUnit,
440 "nom_power"_a, "nom_volt"_a, "nom_freq"_a, "pole_number"_a,
441 "nom_field_cur"_a, "Rs"_a, "Ld"_a, "Lq"_a, "Ld_t"_a, "Lq_t"_a,
442 "Ld_s"_a, "Lq_s"_a, "Ll"_a, "Td0_t"_a, "Tq0_t"_a, "Td0_s"_a,
443 "Tq0_s"_a, "inertia"_a)
444 .def("set_parameters_fundamental_per_unit",
446 setParametersFundamentalPerUnit,
447 "nom_power"_a, "nom_volt"_a, "nom_freq"_a, "pole_number"_a,
448 "nom_field_cur"_a, "Rs"_a, "Ll"_a, "Lmd"_a, "Lmq"_a, "Rfd"_a,
449 "Llfd"_a, "Rkd"_a, "Llkd"_a, "Rkq1"_a, "Llkq1"_a, "Rkq2"_a,
450 "Llkq2"_a, "inertia"_a, "init_active_power"_a,
451 "init_reactive_power"_a, "init_terminal_volt"_a, "init_volt_angle"_a,
452 "init_mech_power"_a)
453#ifdef WITH_JSON
454 .def("apply_parameters_from_json",
455 [](std::shared_ptr<CPS::EMT::Ph3::SynchronGeneratorDQTrapez> syngen,
456 const CPS::String json) {
457 DPsim::Utils::applySynchronousGeneratorParametersFromJson(
458 json::parse(json), syngen);
459 })
460#endif
461 .def("set_initial_values",
463 "init_active_power"_a, "init_reactive_power"_a,
464 "init_terminal_volt"_a, "init_volt_angle"_a, "init_mech_power"_a);
465
467 std::shared_ptr<CPS::EMT::Ph3::VSIVoltageControlVCO>,
468 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "VSIVoltageControlVCO",
469 py::multiple_inheritance())
470 .def(py::init<std::string>())
471 .def(py::init<std::string, CPS::Logger::Level>())
472 .def(py::init<std::string, std::string, CPS::Logger::Level, CPS::Bool>(),
473 "uid"_a, "name"_a, "log_level"_a = CPS::Logger::Level::off,
474 py::arg("with_trafo") = false)
475 .def("set_parameters",
477 "vd_ref"_a, "vq_ref"_a)
478 .def("set_controller_parameters",
480 "kp_voltage_ctrl"_a, "ki_voltage_ctrl"_a, "kp_curr_ctrl"_a,
481 "ki_curr_ctrl"_a, "omega_nominal"_a)
482 .def("set_transformer_parameters",
484 "nom_voltage_end1"_a, "nom_voltage_end2"_a, "rated_power"_a,
485 "ratio_abs"_a, "ratio_phase"_a, "resistance"_a, "inductance"_a,
486 "omega"_a)
487 .def("set_filter_parameters",
489 "cf"_a, "rf"_a, "rc"_a)
490 .def("set_initial_state_values",
492 "phi_d_init"_a, "phi_q_init"_a, "gamma_d_init"_a, "gamma_q_init"_a)
494 "control_on"_a)
496
498 std::shared_ptr<CPS::EMT::Ph3::ReducedOrderSynchronGeneratorVBR>,
500 mEMTPh3, "ReducedOrderSynchronGeneratorVBR", py::multiple_inheritance());
501
503 std::shared_ptr<CPS::EMT::Ph3::SynchronGenerator3OrderVBR>,
505 mEMTPh3, "SynchronGenerator3OrderVBR", py::multiple_inheritance())
506 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
507 "loglevel"_a = CPS::Logger::Level::off)
508 .def("set_operational_parameters_per_unit",
509 py::overload_cast<CPS::Real, CPS::Real, CPS::Real, CPS::Real,
511 CPS::Real>(
513 setOperationalParametersPerUnit),
514 "nom_power"_a, "nom_voltage"_a, "nom_frequency"_a, "H"_a, "Ld"_a,
515 "Lq"_a, "L0"_a, "Ld_t"_a, "Td0_t"_a)
517
519 std::shared_ptr<CPS::EMT::Ph3::SynchronGenerator4OrderVBR>,
521 mEMTPh3, "SynchronGenerator4OrderVBR", py::multiple_inheritance())
522 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
523 "loglevel"_a = CPS::Logger::Level::off)
524 .def("set_operational_parameters_per_unit",
525 py::overload_cast<CPS::Real, CPS::Real, CPS::Real, CPS::Real,
529 setOperationalParametersPerUnit),
530 "nom_power"_a, "nom_voltage"_a, "nom_frequency"_a, "H"_a, "Ld"_a,
531 "Lq"_a, "L0"_a, "Ld_t"_a, "Lq_t"_a, "Td0_t"_a, "Tq0_t"_a)
533
535 std::shared_ptr<CPS::EMT::Ph3::SynchronGenerator5OrderVBR>,
537 mEMTPh3, "SynchronGenerator5OrderVBR", py::multiple_inheritance())
538 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
539 "loglevel"_a = CPS::Logger::Level::off)
540 .def("set_operational_parameters_per_unit",
541 py::overload_cast<CPS::Real, CPS::Real, CPS::Real, CPS::Real,
546 setOperationalParametersPerUnit),
547 "nom_power"_a, "nom_voltage"_a, "nom_frequency"_a, "H"_a, "Ld"_a,
548 "Lq"_a, "L0"_a, "Ld_t"_a, "Lq_t"_a, "Td0_t"_a, "Tq0_t"_a, "Ld_s"_a,
549 "Lq_s"_a, "Td0_s"_a, "Tq0_s"_a, "Taa"_a)
551
553 std::shared_ptr<CPS::EMT::Ph3::SynchronGenerator6aOrderVBR>,
555 mEMTPh3, "SynchronGenerator6aOrderVBR", py::multiple_inheritance())
556 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
557 "loglevel"_a = CPS::Logger::Level::off)
558 .def("set_operational_parameters_per_unit",
559 py::overload_cast<CPS::Real, CPS::Real, CPS::Real, CPS::Real,
564 setOperationalParametersPerUnit),
565 "nom_power"_a, "nom_voltage"_a, "nom_frequency"_a, "H"_a, "Ld"_a,
566 "Lq"_a, "L0"_a, "Ld_t"_a, "Lq_t"_a, "Td0_t"_a, "Tq0_t"_a, "Ld_s"_a,
567 "Lq_s"_a, "Td0_s"_a, "Tq0_s"_a, "Taa"_a)
569
571 std::shared_ptr<CPS::EMT::Ph3::SynchronGenerator6bOrderVBR>,
573 mEMTPh3, "SynchronGenerator6bOrderVBR", py::multiple_inheritance())
574 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
575 "loglevel"_a = CPS::Logger::Level::off)
576 .def("set_operational_parameters_per_unit",
577 py::overload_cast<CPS::Real, CPS::Real, CPS::Real, CPS::Real,
582 setOperationalParametersPerUnit),
583 "nom_power"_a, "nom_voltage"_a, "nom_frequency"_a, "H"_a, "Ld"_a,
584 "Lq"_a, "L0"_a, "Ld_t"_a, "Lq_t"_a, "Td0_t"_a, "Tq0_t"_a, "Ld_s"_a,
585 "Lq_s"_a, "Td0_s"_a, "Tq0_s"_a, "Taa"_a = 0)
587
588#ifdef WITH_SUNDIALS
589
591 std::shared_ptr<CPS::EMT::Ph3::SynchronGeneratorDQODE>,
592 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "SynchronGeneratorDQODE",
593 py::multiple_inheritance())
594 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
595 "loglevel"_a = CPS::Logger::Level::off)
596 .def("set_parameters_operational_per_unit",
598 setParametersOperationalPerUnit,
599 "nom_power"_a, "nom_volt"_a, "nom_freq"_a, "pole_number"_a,
600 "nom_field_cur"_a, "Rs"_a, "Ld"_a, "Lq"_a, "Ld_t"_a, "Lq_t"_a,
601 "Ld_s"_a, "Lq_s"_a, "Ll"_a, "Td0_t"_a, "Tq0_t"_a, "Td0_s"_a,
602 "Tq0_s"_a, "inertia"_a)
603 .def("set_parameters_fundamental_per_unit",
605 setParametersFundamentalPerUnit,
606 "nom_power"_a, "nom_volt"_a, "nom_freq"_a, "pole_number"_a,
607 "nom_field_cur"_a, "Rs"_a, "Ll"_a, "Lmd"_a, "Lmq"_a, "Rfd"_a,
608 "Llfd"_a, "Rkd"_a, "Llkd"_a, "Rkq1"_a, "Llkq1"_a, "Rkq2"_a,
609 "Llkq2"_a, "inertia"_a, "init_active_power"_a,
610 "init_reactive_power"_a, "init_terminal_volt"_a, "init_volt_angle"_a,
611 "init_mech_power"_a)
612#ifdef WITH_JSON
613 .def("apply_parameters_from_json",
614 [](std::shared_ptr<CPS::EMT::Ph3::SynchronGeneratorDQODE> syngen,
615 const CPS::String json) {
616 DPsim::Utils::applySynchronousGeneratorParametersFromJson(
617 json::parse(json), syngen);
618 })
619#endif
620 .def("set_initial_values",
622 "init_active_power"_a, "init_reactive_power"_a,
623 "init_terminal_volt"_a, "init_volt_angle"_a, "init_mech_power"_a);
624
625#endif
626
628 std::shared_ptr<CPS::EMT::Ph3::AvVoltageSourceInverterDQ>,
629 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "AvVoltageSourceInverterDQ",
630 py::multiple_inheritance())
631 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
632 "loglevel"_a = CPS::Logger::Level::off)
633 .def(py::init<std::string, std::string, CPS::Logger::Level, CPS::Bool>(),
634 "uid"_a, "name"_a, "loglevel"_a = CPS::Logger::Level::off,
635 // cppcheck-suppress assignBoolToPointer
636 "with_trafo"_a = false)
637 .def("set_parameters",
639 "sys_omega"_a, "sys_volt_nom"_a, "p_ref"_a, "q_ref"_a)
640 .def("set_filter_parameters",
642 "Lf"_a, "Cf"_a, "Rf"_a, "Rc"_a)
643 .def("set_controller_parameters",
645 "Kp_pll"_a, "Ki_pll"_a, "Kp_power_ctrl"_a, "Ki_power_ctrl"_a,
646 "Kp_curr_ctrl"_a, "Ki_curr_ctrl"_a, "omega_cutoff"_a)
647 .def("set_transformer_parameters",
649 "nom_voltage_end_1"_a, "nom_voltage_end_2"_a, "rated_power"_a,
650 "ratio_abs"_a, "ratio_phase"_a, "resistance"_a, "inductance"_a,
651 "omega"_a)
652 .def("set_initial_state_values",
654 "p_init"_a, "q_init"_a, "phi_d_init"_a, "phi_q_init"_a,
655 "gamma_d_init"_a, "gamma_q_init"_a)
656 .def("with_control",
659
661 std::shared_ptr<CPS::EMT::Ph3::Transformer>,
662 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "Transformer",
663 py::multiple_inheritance())
664 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
665 "loglevel"_a = CPS::Logger::Level::off)
666 .def(py::init<std::string, std::string, CPS::Logger::Level, CPS::Bool>(),
667 "uid"_a, "name"_a, "loglevel"_a = CPS::Logger::Level::off,
668 // cppcheck-suppress assignBoolToPointer
669 "with_resistive_losses"_a = false)
670 .def("set_parameters", &CPS::EMT::Ph3::Transformer::setParameters,
671 "nom_voltage_end_1"_a, "nom_voltage_end_2"_a, "rated_power"_a,
672 "ratio_abs"_a, "ratio_phase"_a, "resistance"_a, "inductance"_a)
673 .def("connect", &CPS::EMT::Ph3::Transformer::connect);
674
676 std::shared_ptr<CPS::EMT::Ph3::SeriesResistor>,
677 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "SeriesResistor",
678 py::multiple_inheritance())
679 .def(py::init<std::string>())
680 .def(py::init<std::string, CPS::Logger::Level>())
681 .def("set_parameters", &CPS::EMT::Ph3::SeriesResistor::setParameters,
682 "R"_a)
684
686 std::shared_ptr<CPS::EMT::Ph3::SeriesSwitch>,
688 mEMTPh3, "SeriesSwitch", py::multiple_inheritance())
689 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
690 "loglevel"_a = CPS::Logger::Level::off)
691 .def("set_parameters", &CPS::EMT::Ph3::SeriesSwitch::setParameters,
692 "open_resistance"_a, "closed_resistance"_a,
693 // cppcheck-suppress assignBoolToPointer
694 "closed"_a = false)
697 .def("connect", &CPS::EMT::Ph3::SeriesSwitch::connect);
698
700 std::shared_ptr<CPS::EMT::Ph3::SSN::Full_Serial_RLC>,
701 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "Full_Serial_RLC",
702 py::multiple_inheritance())
703 .def(py::init<std::string>())
704 .def(py::init<std::string, CPS::Logger::Level>())
705 .def("set_parameters",
707 "C"_a)
709 .def_property("R", createAttributeGetter<CPS::Matrix>("R"),
711 .def_property("L", createAttributeGetter<CPS::Matrix>("L"),
713 .def_property("C", createAttributeGetter<CPS::Matrix>("C"),
715
717 std::shared_ptr<CPS::EMT::Ph3::GenericTwoTerminalVTypeSSN>,
719 mEMTPh3, "GenericTwoTerminalVTypeSSN", py::multiple_inheritance())
720 .def(py::init<std::string>())
721 .def(py::init<std::string, CPS::Logger::Level>())
722 .def("set_parameters",
724 "B"_a, "C"_a, "D"_a)
726 .def_property_readonly("x", createAttributeGetter<CPS::Matrix>("x"));
727
729 std::shared_ptr<CPS::EMT::Ph3::GenericTwoTerminalITypeSSN>,
731 mEMTPh3, "GenericTwoTerminalITypeSSN", py::multiple_inheritance())
732 .def(py::init<std::string>())
733 .def(py::init<std::string, CPS::Logger::Level>())
734 .def("set_parameters",
736 "B"_a, "C"_a, "D"_a)
738 .def_property_readonly("x", createAttributeGetter<CPS::Matrix>("x"));
739
741 std::shared_ptr<CPS::EMT::Ph3::PiecewiseLinearInductor>,
742 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "PiecewiseLinearInductor",
743 py::multiple_inheritance())
744 .def(py::init<std::string>())
745 .def(py::init<std::string, CPS::Logger::Level>())
746 .def("set_parameters",
748 "flux_breakpoints"_a, "current_breakpoints"_a)
750 .def_property_readonly("x", createAttributeGetter<CPS::Matrix>("x"));
751
752 // -----------------------------------------------------------------------
753 // Grid-following converter models
754 // -----------------------------------------------------------------------
755
756 py::class_<CPS::EMT::Ph3::GFL, std::shared_ptr<CPS::EMT::Ph3::GFL>,
757 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "GFL",
758 py::multiple_inheritance())
759 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
760 "loglevel"_a = CPS::Logger::Level::off)
761 .def(py::init<std::string, std::string, CPS::Logger::Level>(), "uid"_a,
762 "name"_a, "loglevel"_a = CPS::Logger::Level::off)
763 .def("set_parameters", &CPS::EMT::Ph3::GFL::setParameters, "sys_omega"_a,
764 "sys_volt_nom"_a, "p_ref"_a, "q_ref"_a)
765 .def("set_controller_parameters",
766 &CPS::EMT::Ph3::GFL::setControllerParameters, "kp_pll"_a, "ki_pll"_a,
767 "kp_power_ctrl"_a, "ki_power_ctrl"_a, "kp_curr_ctrl"_a,
768 "ki_curr_ctrl"_a, "omega_cutoff"_a)
769 .def("set_filter_parameters", &CPS::EMT::Ph3::GFL::setFilterParameters,
770 "lf"_a, "cf"_a, "rf"_a)
771 .def("set_initial_state_values",
772 &CPS::EMT::Ph3::GFL::setInitialStateValues, "p_init"_a, "q_init"_a,
773 "phi_d_init"_a, "phi_q_init"_a, "gamma_d_init"_a, "gamma_q_init"_a)
774 .def("with_control", &CPS::EMT::Ph3::GFL::withControl, "control_on"_a)
775 .def("connect", &CPS::EMT::Ph3::GFL::connect)
776 .def_property_readonly("vc_d", createAttributeGetter<CPS::Real>("vc_d"))
777 .def_property_readonly("vc_q", createAttributeGetter<CPS::Real>("vc_q"))
778 .def_property_readonly("igrid_d",
780 .def_property_readonly("igrid_q",
782 .def_property_readonly("p_inst",
784 .def_property_readonly("q_inst",
786 .def_property_readonly("omega_pll",
788 .def_property_readonly("vs_ref",
790 .def_property_readonly("vs", createAttributeGetter<CPS::Matrix>("vs"))
791 .def_property_readonly("pll_output",
793 .def_property_readonly(
794 "powerctrl_inputs",
795 createAttributeGetter<CPS::Matrix>("powerctrl_inputs"))
796 .def_property_readonly(
797 "powerctrl_states",
798 createAttributeGetter<CPS::Matrix>("powerctrl_states"))
799 .def_property_readonly(
800 "powerctrl_outputs",
801 createAttributeGetter<CPS::Matrix>("powerctrl_outputs"));
802
803 py::class_<CPS::EMT::Ph3::SSN_GFL, std::shared_ptr<CPS::EMT::Ph3::SSN_GFL>,
804 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "SSN_GFL",
805 py::multiple_inheritance())
806 .def(py::init<std::string, std::string, CPS::Logger::Level>(), "uid"_a,
807 "name"_a, "loglevel"_a = CPS::Logger::Level::off)
808 .def("set_parameters", &CPS::EMT::Ph3::SSN_GFL::setParameters, "lf"_a,
809 "cf"_a, "rf"_a, "rc"_a, "omega_n"_a, "kp_pll"_a, "ki_pll"_a,
810 "omega_cutoff"_a, "p_ref"_a, "q_ref"_a, "kp_power_ctrl"_a,
811 "ki_power_ctrl"_a, "kp_curr_ctrl"_a, "ki_curr_ctrl"_a)
812 .def("connect", &CPS::EMT::Ph3::SSN_GFL::connect)
813 .def("get_state_names", &CPS::EMT::Ph3::SSN_GFL::getLocalStateNames)
814 .def("get_state", &CPS::EMT::Ph3::SSN_GFL::getState)
815 .def("get_state_derivative", &CPS::EMT::Ph3::SSN_GFL::getStateDerivative)
816 .def("get_interface_voltage",
818 .def("get_interface_current",
820 .def_property_readonly("vc_d", createAttributeGetter<CPS::Real>("vc_d"))
821 .def_property_readonly("vc_q", createAttributeGetter<CPS::Real>("vc_q"))
822 .def_property_readonly("irc_d", createAttributeGetter<CPS::Real>("irc_d"))
823 .def_property_readonly("irc_q", createAttributeGetter<CPS::Real>("irc_q"))
824 .def_property_readonly("p_inst",
826 .def_property_readonly("q_inst",
828 .def_property_readonly("omega_pll",
830
832 std::shared_ptr<CPS::EMT::Ph3::SSN_GFL_Split>,
833 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "SSN_GFL_Split",
834 py::multiple_inheritance())
835 .def(py::init<std::string, std::string, CPS::Logger::Level>(), "uid"_a,
836 "name"_a, "loglevel"_a = CPS::Logger::Level::off)
837 .def("set_parameters", &CPS::EMT::Ph3::SSN_GFL_Split::setParameters,
838 "lf"_a, "cf"_a, "rf"_a, "rc"_a, "omega_n"_a, "kp_pll"_a, "ki_pll"_a,
839 "omega_cutoff"_a, "p_ref"_a, "q_ref"_a, "kp_power_ctrl"_a,
840 "ki_power_ctrl"_a, "kp_curr_ctrl"_a, "ki_curr_ctrl"_a)
842
843 // Combined controller + network state.
845 .def("get_state_derivative",
847
848 // Split state access.
849 .def("get_controller_state",
851 .def("get_network_state", &CPS::EMT::Ph3::SSN_GFL_Split::getNetworkState)
852 .def("get_network_state_names",
854
855 // Electrical interface / delayed forcing.
856 .def("get_interface_voltage",
858 .def("get_interface_current",
860 .def("get_converter_voltage_reference",
862 .def("get_delayed_converter_voltage",
864
865 // Controller affine model.
866 .def("get_controller_A", &CPS::EMT::Ph3::SSN_GFL_Split::getControllerA)
867 .def("get_controller_B", &CPS::EMT::Ph3::SSN_GFL_Split::getControllerB)
868 .def("get_controller_C", &CPS::EMT::Ph3::SSN_GFL_Split::getControllerC)
869 .def("get_controller_D", &CPS::EMT::Ph3::SSN_GFL_Split::getControllerD)
870 .def("get_controller_E", &CPS::EMT::Ph3::SSN_GFL_Split::getControllerE)
871 .def("get_controller_F", &CPS::EMT::Ph3::SSN_GFL_Split::getControllerF)
872
873 // Fixed electrical SSN plant.
874 .def("get_network_A", &CPS::EMT::Ph3::SSN_GFL_Split::getNetworkA)
875 .def("get_network_B", &CPS::EMT::Ph3::SSN_GFL_Split::getNetworkB)
876 .def("get_network_C", &CPS::EMT::Ph3::SSN_GFL_Split::getNetworkC)
877 .def("get_network_D", &CPS::EMT::Ph3::SSN_GFL_Split::getNetworkD)
878 .def("get_equivalent_conductance",
880
881 // Logged scalar quantities.
882 .def_property_readonly("vc_d", createAttributeGetter<CPS::Real>("vc_d"))
883 .def_property_readonly("vc_q", createAttributeGetter<CPS::Real>("vc_q"))
884 .def_property_readonly("irc_d", createAttributeGetter<CPS::Real>("irc_d"))
885 .def_property_readonly("irc_q", createAttributeGetter<CPS::Real>("irc_q"))
886 .def_property_readonly("p_inst",
888 .def_property_readonly("q_inst",
890 .def_property_readonly("omega_pll",
892 .def_property_readonly("vinv_ref_a",
894 .def_property_readonly("vinv_ref_b",
896 .def_property_readonly("vinv_ref_c",
898
900 std::shared_ptr<CPS::EMT::Ph3::AvVoltSourceInverterStateSpace>,
902 mEMTPh3, "AvVoltSourceInverterStateSpace", py::multiple_inheritance())
903 .def(py::init<std::string, CPS::Logger::Level>(), "name"_a,
904 "loglevel"_a = CPS::Logger::Level::off)
905 .def(py::init<std::string, std::string, CPS::Logger::Level>(), "uid"_a,
906 "name"_a, "loglevel"_a = CPS::Logger::Level::off)
907 .def("set_parameters",
909 "Lf"_a, "Cf"_a, "Rf"_a, "Rc"_a, "omega_n"_a, "Kp_pll"_a, "Ki_pll"_a,
910 "omega_cutoff"_a, "p_ref"_a, "q_ref"_a, "Kp_power_ctrl"_a,
911 "Ki_power_ctrl"_a, "Kp_curr_ctrl"_a, "Ki_curr_ctrl"_a)
913 .def_property_readonly("x", createAttributeGetter<CPS::Matrix>("x"))
914 .def_property_readonly("vc_d", createAttributeGetter<CPS::Real>("vc_d"))
915 .def_property_readonly("vc_q", createAttributeGetter<CPS::Real>("vc_q"))
916 .def_property_readonly("irc_d", createAttributeGetter<CPS::Real>("irc_d"))
917 .def_property_readonly("irc_q", createAttributeGetter<CPS::Real>("irc_q"))
918 .def_property_readonly("p_inst",
920 .def_property_readonly("q_inst",
922 .def_property_readonly("omega_pll",
924
925 py::class_<CPS::EMT::Ph3::SSN_GFM, std::shared_ptr<CPS::EMT::Ph3::SSN_GFM>,
926 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "SSN_GFM",
927 py::multiple_inheritance())
928 .def(py::init<std::string, std::string, CPS::Logger::Level>(), "uid"_a,
929 "name"_a, "log_level"_a = CPS::Logger::Level::off)
930 .def("set_parameters", &CPS::EMT::Ph3::SSN_GFM::setParameters, "lf"_a,
931 "cf"_a, "rf"_a, "rc"_a, "nominal_voltage"_a, "omega_nominal"_a,
932 "p_ref"_a, "q_ref"_a, "virtual_inertia"_a, "damping_coefficient"_a,
933 "voltage_droop_gain"_a, "reactive_integral_gain"_a, "kp_voltage"_a,
934 "ki_voltage"_a, "kp_current"_a, "ki_current"_a,
935 "active_damping_gain"_a, "power_filter_cutoff"_a,
936 "delay_bandwidth"_a)
937 .def("set_numerical_linearization_parameters",
939 "relative_step"_a = 1e-6, "absolute_step"_a = 1e-8)
940 .def("set_virtual_impedance",
941 &CPS::EMT::Ph3::SSN_GFM::setVirtualImpedance, "virtual_resistance"_a,
942 "virtual_reactance"_a = 0.0)
943 .def("set_grid_current_feedforward",
945 .def("set_reactive_power_droop",
947 "cutoff"_a)
948 .def("connect", &CPS::EMT::Ph3::SSN_GFM::connect)
949 .def("get_state_names", &CPS::EMT::Ph3::SSN_GFM::getLocalStateNames)
950 .def("get_state", &CPS::EMT::Ph3::SSN_GFM::getState)
951 .def("get_state_derivative", &CPS::EMT::Ph3::SSN_GFM::getStateDerivative)
952 .def("get_interface_voltage",
954 .def("get_interface_current",
956 .def_property_readonly("p_inst",
958 .def_property_readonly("q_inst",
960 .def_property_readonly("omega_gfm",
962 .def_property_readonly("theta_gfm",
964 .def_property_readonly(
965 "voltage_magnitude_gfm",
966 createAttributeGetter<CPS::Real>("voltage_magnitude_gfm"))
967 .def_property_readonly("vc_d", createAttributeGetter<CPS::Real>("vc_d"))
968 .def_property_readonly("vc_q", createAttributeGetter<CPS::Real>("vc_q"))
969 .def_property_readonly("i_grid_d",
971 .def_property_readonly("i_grid_q",
973 .def_property_readonly("if_d", createAttributeGetter<CPS::Real>("if_d"))
974 .def_property_readonly("if_q", createAttributeGetter<CPS::Real>("if_q"))
975 .def_property_readonly("v_ref_d",
977 .def_property_readonly("v_ref_q",
979
981 std::shared_ptr<CPS::EMT::Ph3::SSN::Capacitor>,
982 CPS::SimPowerComp<CPS::Real>>(mEMTPh3, "SSN_Capacitor",
983 py::multiple_inheritance())
984 .def(py::init<std::string>())
985 .def(py::init<std::string, CPS::Logger::Level>())
986 .def("set_parameters", &CPS::EMT::Ph3::SSN::Capacitor::setParameters,
987 "C"_a)
989 .def_property("C", createAttributeGetter<CPS::Matrix>("C"),
991
993 std::shared_ptr<CPS::EMT::Ph3::GenericFourTerminalVTypeSSN>,
995 mEMTPh3, "GenericFourTerminalVTypeSSN", py::multiple_inheritance())
996 .def(py::init<std::string>())
997 .def(py::init<std::string, CPS::Logger::Level>())
998 .def("set_parameters",
1000 "B"_a, "C"_a, "D"_a)
1002 .def_property_readonly("x", createAttributeGetter<CPS::Matrix>("x"));
1003}
void addEMTPh1Components(py::module_ mEMTPh1)
void addEMTPh3Components(py::module_ mEMTPh3)
void addEMTComponents(py::module_ mEMT)
void setParameters(Real capacitance)
Sets model specific parameters.
void setParameters(Real inductance)
Sets model specific parameters.
void setParameters(Real resistance)
Dynamic Phasor Three-Phase Switch.
void close()
Close switch.
void setParameters(Real openResistance, Real closedResistance, Bool closed=false)
void open()
Open switch.
void setParameters(Matrix capacitance)
Sets model specific parameters.
void setParameters(Matrix inductance)
Sets model specific parameters.
void setParameters(Matrix seriesResistance, Matrix seriesInductance, Matrix parallelCapacitance=Matrix::Zero(3, 3), Matrix parallelConductance=Matrix::Zero(3, 3)) const
void setParameters(Matrix resistance)
Sets model specific parameters.
Common base for three-phase switches.
void setParameters(Matrix openResistance, Matrix closedResistance, Bool closed=false)
void setInitialValues(Real initActivePower, Real initReactivePower, Real initTerminalVolt, Real initVoltAngle, Real initMechPower)
void setParameters(Real capacitance)
void setParameters(Real inductance, Real initialCurrent=0.0)
void setParameters(Real seriesResistance, Real seriesInductance, Real parallelCapacitance=0.0, Real parallelConductance=0.0, Real initialCurrent=0.0)
void setParameters(Real resistance)
Ideal current source model.
void setParameters(Complex currentRef, Real srcFreq=-1)
void setParameters(Real resistance, Real inductance, Real capacitance)
SSNTypeI2T Model for a one phase, two terminal I-type SSN component which can be represented using a ...
void setParameters(const Matrix A, const Matrix B, const Matrix C, const Matrix D)
void manualInit(Matrix initialState, Matrix initialInput, Matrix initialOldInput, Real initCurrent, Real initVoltage)
SSNTypeV2T Model for a one phase, two terminal V-type SSN component which can be represented using a ...
void manualInit(Matrix initialState, Matrix initialInput, Matrix initialOldInput, Real initCurrent, Real initVoltage)
void setParameters(const Matrix A, const Matrix B, const Matrix C, const Matrix D)
Ideal Voltage source model.
void setParameters(Complex voltageRef, Real srcFreq=-1)
void setParameters(Real lf, Real cf, Real rf, Real rc, Real omegaN, Real kpPLL, Real kiPLL, Real omegaCutoff, Real pRef, Real qRef, Real kpPowerCtrl, Real kiPowerCtrl, Real kpCurrCtrl, Real kiCurrCtrl)
void setControllerParameters(Real Kp_pll, Real Ki_pll, Real Kp_powerCtrl, Real Ki_powerCtrl, Real Kp_currCtrl, Real Ki_currCtrl, Real Omega_cutoff)
Setter for parameters of control loops.
void setTransformerParameters(Real nomVoltageEnd1, Real nomVoltageEnd2, Real ratedPower, Real ratioAbs, Real ratioPhase, Real resistance, Real inductance, Real omega)
Setter for parameters of transformer.
void setInitialStateValues(Real pInit, Real qInit, Real phi_dInit, Real phi_qInit, Real gamma_dInit, Real gamma_qInit)
Setter for initial values applied in controllers.
void setFilterParameters(Real Lf, Real Cf, Real Rf, Real Rc)
Setter for parameters of filter.
void setParameters(Real sysOmega, Real sysVoltNom, Real Pref, Real Qref)
Setter for gengit eral parameters of inverter.
Ideal current source model.
void setParameters(MatrixComp currentRef, Real srcFreq=50.0)
Setter for reference current.
void setInitialStateValues(Real pInit, Real qInit, Real phiDInit, Real phiQInit, Real gammaDInit, Real gammaQInit)
void setFilterParameters(Real lf, Real cf, Real rf)
Filter parameters. No Rc exists in this model.
void setControllerParameters(Real kpPLL, Real kiPLL, Real kpPowerCtrl, Real kiPowerCtrl, Real kpCurrCtrl, Real kiCurrCtrl, Real omegaCutoff)
Controller parameters.
void setParameters(Real sysOmega, Real sysVoltNom, Real pRef, Real qRef)
General operating parameters.
void withControl(Bool controlOn)
Concrete generic three-phase, two-terminal I-type SSN component.
Concrete generic three-phase, two-terminal V-type SSN component.
void setParameters(MatrixComp voltageRef, Real srcFreq=50.0)
Setter for reference voltage parameters.
Three-phase, two-terminal, piecewise-linear flux-state inductor.
void setParameters(const std::vector< Real > &fluxBreakpoints, const std::vector< Real > &currentBreakpoints)
void setParameters(Matrix activePower, Matrix reactivePower, Real volt, bool reactanceInSeries=false)
Base class for EMT VBR simplefied synchronous generator models.
void setParameters(Matrix capacitance)
void setParameters(const Matrix &resistance, const Matrix &inductance, const Matrix &capacitance)
Partitioned three-phase grid-following inverter.
Matrix getState() const
Combined state in the same logical order as the former monolithic GFL: 8 controller states followed b...
Matrix getEquivalentConductance() const
Constant SSN Norton conductance G = mW.
std::vector< String > getLocalStateNames() const override final
void setParameters(Real lf, Real cf, Real rf, Real rc, Real omegaN, Real kpPLL, Real kiPLL, Real omegaCutoff, Real pRef, Real qRef, Real kpPowerCtrl, Real kiPowerCtrl, Real kpCurrCtrl, Real kiCurrCtrl)
Configure the filter, PLL, power controller and current controller.
Matrix getInterfaceVoltage() const
std::vector< String > getLocalStateNames() const override final
Matrix getInterfaceCurrent() const
void setParameters(Real lf, Real cf, Real rf, Real rc, Real omegaN, Real kpPLL, Real kiPLL, Real omegaCutoff, Real pRef, Real qRef, Real kpPowerCtrl, Real kiPowerCtrl, Real kpCurrCtrl, Real kiCurrCtrl)
Configure the GFL filter, PLL, power loop and current loop.
Matrix getStateDerivative() const
void setNumericalLinearizationParameters(Real relativeStep, Real absoluteStep)
Configure finite-difference steps for local linearization.
Matrix getStateDerivative() const
Matrix getInterfaceCurrent() const
Matrix getInterfaceVoltage() const
void setReactivePowerDroop(Real droopGain, Real cutoff)
Opt-in proportional Q-V droop replacing the integral excitation. droopGain is Dq [V/var]; cutoff [rad...
void setParameters(Real lf, Real cf, Real rf, Real rc, Real nominalVoltage, Real omegaN, Real pRef, Real qRef, Real virtualInertia, Real dampingCoefficient, Real voltageDroopGain, Real reactiveIntegralGain, Real kpVoltage, Real kiVoltage, Real kpCurrent, Real kiCurrent, Real activeDampingGain, Real powerFilterCutoff, Real delayBandwidth)
Configure the GFM model.
std::vector< String > getLocalStateNames() const override final
void setGridCurrentFeedforward(Real scale)
Scale on the voltage-loop grid-current feedforward (default 1).
void setVirtualImpedance(Real virtualResistance, Real virtualReactance=0.0)
Opt-in virtual output impedance Zv = Rv + jXv, subtracted from the EMF reference across the filter cu...
void setParameters(Real conductance, Real susceptance)
Set shunt specific parameters.
void closeSwitch() override
void openSwitch() override
Voltage-Behind-Reactance (VBR) implementation of 3rd order synchronous generator model.
Voltage-Behind-Reactance (VBR) implementation of 4th order synchronous generator model.
Voltage-Behind-Reactance (VBR) implementation of 5th type 2 order synchronous generator model Ref: Mi...
Voltage-Behind-Reactance (VBR) implementation of 6th order synchronous generator model Marconato's mo...
Voltage-Behind-Reactance (VBR) implementation of 6th order synchronous generator model Anderson - Fou...
Ideal voltage source representing a synchronous generator.
Transformer that includes an inductance and resistance.
void setParameters(Real nomVoltageEnd1, Real nomVoltageEnd2, Real ratedPower, Real ratioAbs, Real ratioPhase, Matrix resistance, Matrix inductance)
Defines component parameters.
void setParameters(Real sysOmega, Real VdRef, Real VqRef)
Setter for general parameters of the component.
void setFilterParameters(Real Lf, Real Cf, Real Rf, Real Rc)
Setter for parameters of filter.
void setControllerParameters(Real Kp_voltageCtrl, Real Ki_voltageCtrl, Real Kp_currCtrl, Real Ki_currCtrl, Real Omega_nominal)
Setter for parameters of control loops.
void setInitialStateValues(Real phi_dInit, Real phi_qInit, Real gamma_dInit, Real gamma_qInit)
Setter for initial values applied in controllers.
void setTransformerParameters(Real nomVoltageEnd1, Real nomVoltageEnd2, Real ratedPower, Real ratioAbs, Real ratioPhase, Real resistance, Real inductance, Real omega)
Setter for parameters of transformer.
Ideal Voltage source model.
void setParameters(MatrixComp voltageRef, Real srcFreq=50.0)
Setter for reference voltage and frequency with a sine wave generator.
void setParameters(const Matrix &A, const Matrix &B, const Matrix &C, const Matrix &D)
static Ptr GND
Definition SimNode.h:35
Base class for all components that are transmitting power.
void connect(typename SimNode< Real >::List nodes)
void setInitialVoltage(MatrixComp voltage) const
py::cpp_function createAttributeGetter(const std::string name)
Definition Utils.h:27
py::cpp_function createAttributeSetter(const std::string name)
Definition Utils.h:20
std::string String
Definition Definitions.h:65
double Real
Definition Definitions.h:62
CPS::Matrix zeroMatrix(int dim)
Definition Utils.cpp:11