27#include <nlohmann/json.hpp>
28using json = nlohmann::json;
31namespace py = pybind11;
32using namespace pybind11::literals;
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)
46 .def_property_readonly(
"V_ref",
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)
58 .def_property_readonly(
"I_ref",
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)
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)
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)
88 "inductance"_a,
"initial_current"_a = 0.0)
91 .def_property_readonly(
"initial_current",
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)
101 "series_resistance"_a,
"series_inductance"_a,
102 "parallel_capacitance"_a = 0.0,
"parallel_conductance"_a = 0.0,
103 "initial_current"_a = 0.0)
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",
120 py::class_<CPS::EMT::SimNode, std::shared_ptr<CPS::EMT::SimNode>,
122 .def(py::init<std::string>())
123 .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>(
138 mEMT.def_submodule(
"dc",
"scalar electromagnetic-transient DC models");
139 addEMTDCComponents(mEMTDC);
141 py::module mEMTPh1 = mEMT.def_submodule(
142 "ph1",
"single phase electromagnetic-transient models");
145 mEMT.def_submodule(
"ph3",
"three phase electromagnetic-transient models");
151 std::shared_ptr<CPS::EMT::Ph1::CurrentSource>,
153 py::multiple_inheritance())
154 .def(py::init<std::string>())
155 .def(py::init<std::string, CPS::Logger::Level>())
157 "I_ref"_a,
"f_src"_a = -1)
165 std::shared_ptr<CPS::EMT::Ph1::VoltageSource>,
167 py::multiple_inheritance())
168 .def(py::init<std::string>())
169 .def(py::init<std::string, CPS::Logger::Level>())
171 "V_ref"_a,
"f_src"_a = -1)
178 py::class_<CPS::EMT::Ph1::Resistor, std::shared_ptr<CPS::EMT::Ph1::Resistor>,
180 py::multiple_inheritance())
181 .def(py::init<std::string>())
182 .def(py::init<std::string, CPS::Logger::Level>())
189 std::shared_ptr<CPS::EMT::Ph1::Capacitor>,
191 py::multiple_inheritance())
192 .def(py::init<std::string>())
193 .def(py::init<std::string, CPS::Logger::Level>())
199 py::class_<CPS::EMT::Ph1::Inductor, std::shared_ptr<CPS::EMT::Ph1::Inductor>,
201 py::multiple_inheritance())
202 .def(py::init<std::string>())
203 .def(py::init<std::string, CPS::Logger::Level>())
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)
215 "open_resistance"_a,
"closed_resistance"_a,
222 std::shared_ptr<CPS::EMT::Ph1::SSN::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",
239 std::shared_ptr<CPS::EMT::Ph1::SSNTypeI2T>,
241 py::multiple_inheritance())
242 .def(py::init<std::string>())
243 .def(py::init<std::string, CPS::Logger::Level>())
247 "initialState"_a,
"initialInput"_a,
"initialOldInput"_a,
248 "initCurr"_a,
"initVol"_a)
266 std::shared_ptr<CPS::EMT::Ph1::SSNTypeV2T>,
268 py::multiple_inheritance())
269 .def(py::init<std::string>())
270 .def(py::init<std::string, CPS::Logger::Level>())
274 "initialState"_a,
"initialInput"_a,
"initialOldInput"_a,
275 "initCurr"_a,
"initVol"_a)
295 std::shared_ptr<CPS::EMT::Ph3::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)
311 std::shared_ptr<CPS::EMT::Ph3::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>(
325 std::shared_ptr<CPS::EMT::Ph3::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)
340 py::class_<CPS::EMT::Ph3::Resistor, std::shared_ptr<CPS::EMT::Ph3::Resistor>,
342 py::multiple_inheritance())
343 .def(py::init<std::string>())
344 .def(py::init<std::string, CPS::Logger::Level>())
349 std::shared_ptr<CPS::EMT::Ph3::Capacitor>,
351 py::multiple_inheritance())
352 .def(py::init<std::string>())
353 .def(py::init<std::string, CPS::Logger::Level>())
357 py::class_<CPS::EMT::Ph3::Inductor, std::shared_ptr<CPS::EMT::Ph3::Inductor>,
359 py::multiple_inheritance())
360 .def(py::init<std::string>())
361 .def(py::init<std::string, CPS::Logger::Level>())
366 std::shared_ptr<CPS::EMT::Ph3::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)
377 py::class_<CPS::EMT::Ph3::PiLine, std::shared_ptr<CPS::EMT::Ph3::PiLine>,
379 py::multiple_inheritance())
380 .def(py::init<std::string, CPS::Logger::Level>(),
"name"_a,
381 "loglevel"_a = CPS::Logger::Level::off)
383 "series_resistance"_a,
"series_inductance"_a,
388 py::class_<CPS::EMT::Ph3::RXLoad, std::shared_ptr<CPS::EMT::Ph3::RXLoad>,
390 py::multiple_inheritance())
391 .def(py::init<std::string, CPS::Logger::Level>(),
"name"_a,
392 "loglevel"_a = CPS::Logger::Level::off)
394 "active_power"_a,
"reactive_power"_a,
"volt"_a,
396 "reactance_in_series"_a =
false)
399 py::class_<CPS::EMT::Ph3::Shunt, std::shared_ptr<CPS::EMT::Ph3::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",
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)
416 "open_resistance"_a,
"closed_resistance"_a,
424 std::shared_ptr<CPS::EMT::Ph3::SynchronGeneratorIdeal>,
426 py::multiple_inheritance())
427 .def(py::init<std::string, CPS::Logger::Level>(),
"name"_a,
428 "loglevel"_a = CPS::Logger::Level::off)
432 std::shared_ptr<CPS::EMT::Ph3::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,
454 .def(
"apply_parameters_from_json",
455 [](std::shared_ptr<CPS::EMT::Ph3::SynchronGeneratorDQTrapez> syngen,
457 DPsim::Utils::applySynchronousGeneratorParametersFromJson(
458 json::parse(json), syngen);
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);
467 std::shared_ptr<CPS::EMT::Ph3::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,
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)
498 std::shared_ptr<CPS::EMT::Ph3::ReducedOrderSynchronGeneratorVBR>,
500 mEMTPh3,
"ReducedOrderSynchronGeneratorVBR", py::multiple_inheritance());
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",
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)
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",
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)
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",
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)
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",
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)
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",
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)
591 std::shared_ptr<CPS::EMT::Ph3::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,
613 .def(
"apply_parameters_from_json",
614 [](std::shared_ptr<CPS::EMT::Ph3::SynchronGeneratorDQODE> syngen,
616 DPsim::Utils::applySynchronousGeneratorParametersFromJson(
617 json::parse(json), syngen);
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);
628 std::shared_ptr<CPS::EMT::Ph3::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,
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,
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)
661 std::shared_ptr<CPS::EMT::Ph3::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,
669 "with_resistive_losses"_a =
false)
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)
676 std::shared_ptr<CPS::EMT::Ph3::SeriesResistor>,
678 py::multiple_inheritance())
679 .def(py::init<std::string>())
680 .def(py::init<std::string, CPS::Logger::Level>())
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)
692 "open_resistance"_a,
"closed_resistance"_a,
700 std::shared_ptr<CPS::EMT::Ph3::SSN::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",
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",
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",
741 std::shared_ptr<CPS::EMT::Ph3::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)
756 py::class_<CPS::EMT::Ph3::GFL, std::shared_ptr<CPS::EMT::Ph3::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)
764 "sys_volt_nom"_a,
"p_ref"_a,
"q_ref"_a)
765 .def(
"set_controller_parameters",
767 "kp_power_ctrl"_a,
"ki_power_ctrl"_a,
"kp_curr_ctrl"_a,
768 "ki_curr_ctrl"_a,
"omega_cutoff"_a)
770 "lf"_a,
"cf"_a,
"rf"_a)
771 .def(
"set_initial_state_values",
773 "phi_d_init"_a,
"phi_q_init"_a,
"gamma_d_init"_a,
"gamma_q_init"_a)
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",
791 .def_property_readonly(
"pll_output",
793 .def_property_readonly(
796 .def_property_readonly(
799 .def_property_readonly(
803 py::class_<CPS::EMT::Ph3::SSN_GFL, std::shared_ptr<CPS::EMT::Ph3::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)
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)
816 .def(
"get_interface_voltage",
818 .def(
"get_interface_current",
824 .def_property_readonly(
"p_inst",
826 .def_property_readonly(
"q_inst",
828 .def_property_readonly(
"omega_pll",
832 std::shared_ptr<CPS::EMT::Ph3::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)
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)
845 .def(
"get_state_derivative",
849 .def(
"get_controller_state",
852 .def(
"get_network_state_names",
856 .def(
"get_interface_voltage",
858 .def(
"get_interface_current",
860 .def(
"get_converter_voltage_reference",
862 .def(
"get_delayed_converter_voltage",
878 .def(
"get_equivalent_conductance",
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",
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)
918 .def_property_readonly(
"p_inst",
920 .def_property_readonly(
"q_inst",
922 .def_property_readonly(
"omega_pll",
925 py::class_<CPS::EMT::Ph3::SSN_GFM, std::shared_ptr<CPS::EMT::Ph3::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)
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,
937 .def(
"set_numerical_linearization_parameters",
939 "relative_step"_a = 1e-6,
"absolute_step"_a = 1e-8)
940 .def(
"set_virtual_impedance",
942 "virtual_reactance"_a = 0.0)
943 .def(
"set_grid_current_feedforward",
945 .def(
"set_reactive_power_droop",
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",
969 .def_property_readonly(
"i_grid_d",
971 .def_property_readonly(
"i_grid_q",
975 .def_property_readonly(
"v_ref_d",
977 .def_property_readonly(
"v_ref_q",
981 std::shared_ptr<CPS::EMT::Ph3::SSN::Capacitor>,
983 py::multiple_inheritance())
984 .def(py::init<std::string>())
985 .def(py::init<std::string, CPS::Logger::Level>())
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)
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 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 current)
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)
void setParameters(Real voltage)
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 withControl(Bool controlOn)
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.
Controlled Ideal Voltage source model.
void setParameters(Matrix voltageRef)
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 > ¤tBreakpoints)
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 getControllerB() const
Matrix getNetworkB() const
Matrix getControllerD() const
Matrix getDelayedConverterVoltage() const
Matrix getConverterVoltageReference() const
Matrix getControllerC() const
Matrix getEquivalentConductance() const
Constant SSN Norton conductance G = mW.
Matrix getControllerF() const
Matrix getControllerA() const
Matrix getNetworkState() const
Matrix getNetworkD() const
Matrix getInterfaceVoltage() const
std::vector< String > getLocalStateNames() const override final
Matrix getControllerE() const
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 filter, PLL, power controller and current controller.
Matrix getControllerState() const
Matrix getStateDerivative() const
Matrix getNetworkA() const
Matrix getNetworkC() const
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...
EMT three-phase resistor.
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.
void withControl(Bool controlOn)
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)
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)
py::cpp_function createAttributeSetter(const std::string name)
CPS::Matrix zeroMatrix(int dim)