From c2e857c70a8c7d326372b668f65370ba2c0aca1c Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:19:35 -0500 Subject: [PATCH 01/89] init: test BusSignal compile [skip ci] --- buildsystem/spack/spack | 2 +- src/Model/PhasorDynamics/Bus/Bus.hpp | 11 ++ src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 10 ++ src/Model/PhasorDynamics/Bus/BusSignal.cpp | 114 ++++++++++++++++++ src/Model/PhasorDynamics/Bus/BusSignal.hpp | 101 ++++++++++++++++ src/Model/PhasorDynamics/Bus/CMakeLists.txt | 1 + src/Model/PhasorDynamics/BusBase.hpp | 3 + tests/UnitTests/PhasorDynamics/CMakeLists.txt | 6 +- 8 files changed, 244 insertions(+), 4 deletions(-) create mode 100644 src/Model/PhasorDynamics/Bus/BusSignal.cpp create mode 100644 src/Model/PhasorDynamics/Bus/BusSignal.hpp diff --git a/buildsystem/spack/spack b/buildsystem/spack/spack index ba17e3f5f..4c05697f7 160000 --- a/buildsystem/spack/spack +++ b/buildsystem/spack/spack @@ -1 +1 @@ -Subproject commit ba17e3f5fde40fd3012f41929712b2d877c8cf56 +Subproject commit 4c05697f7518269c4fd8bdb9d85cb4d124c60d01 diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index af5bc5d23..8c07b419d 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -51,6 +51,17 @@ namespace GridKit { return BusTypeT::DEFAULT; } + + // TODO Need to remove these + ScalarT& read() override + { + return y_[0]; + } + + void send(ScalarT& value) override + { + } + virtual ScalarT& Vr() override { diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index c361921f4..7fd48a773 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -50,6 +50,16 @@ namespace GridKit return BusTypeT::SLACK; } + // TODO Need to remove these + ScalarT& read() override + { + return y_[0]; + } + + void send(ScalarT& value) override + { + } + virtual ScalarT& Vr() override { return Vr_; diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.cpp b/src/Model/PhasorDynamics/Bus/BusSignal.cpp new file mode 100644 index 000000000..3d7dec021 --- /dev/null +++ b/src/Model/PhasorDynamics/Bus/BusSignal.cpp @@ -0,0 +1,114 @@ + +#include "BusSignal.hpp" + +#include +#include + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + + + template + BusSignal::BusSignal(const DataT& data) + : BusBase(data.bus_id) + { + size_ = 1; + } + + + template + int BusSignal::allocate() + { + // Temporary while we use std::vector in the code + size_t size = static_cast(size_); + + // Resize component model data + f_.resize(size); + y_.resize(size); + yp_.resize(size); + tag_.resize(size); + + fB_.resize(size); + yB_.resize(size); + ypB_.resize(size); + + return 0; + } + + template + int BusSignal::tagDifferentiable() + { + tag_[0] = false; + return 0; + } + + template + int BusSignal::initialize() + { + /// Possible since not being used it causes issue? + y_[0] = 0.0; + yp_[0] = 0.0; + + return 0; + } + + template + int BusSignal::evaluateResidual() + { + // One side of equality of signal. Reference component + // must add to this residual after this function has been called. + f_[0] = - y_[0]; + + return 0; + } + + template + int BusSignal::evaluateJacobian() + { + return 0; + } + + template + int BusSignal::initializeAdjoint() + { + // std::cout << "Initialize BusSignal..." << std::endl; + yB_[0] = 0.0; + ypB_[0] = 0.0; + + return 0; + } + + + template + int BusSignal::evaluateAdjointResidual() + { + fB_[0] = 0.0; + + return 0; + } + + template + int BusSignal::evaluateIntegrand() + { + return 0; + } + + + template + int BusSignal::evaluateAdjointIntegrand() + { + return 0; + } + + // Available template instantiations + template class BusSignal; + template class BusSignal; + template class BusSignal; + template class BusSignal; + + } // namespace PhasorDynamics +} // namespace GridKit \ No newline at end of file diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp new file mode 100644 index 000000000..7f3fd6ef2 --- /dev/null +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -0,0 +1,101 @@ + +#pragma once + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + + // TODO change base class so there is no Vr and Vi + + template + class BusSignal : public BusBase + { + using BusBase::size_; + using BusBase::y_; + using BusBase::yp_; + using BusBase::yB_; + using BusBase::ypB_; + using BusBase::f_; + using BusBase::fB_; + using BusBase::tag_; + + public: + + using real_type = typename BusBase::real_type; + using DataT = BusData; + + BusSignal(const DataT& data); + + ~BusSignal() + { + } + + virtual int allocate() override; + virtual int tagDifferentiable() override; + virtual int initialize() override; + virtual int evaluateResidual() override; + virtual int evaluateIntegrand() override; + virtual int evaluateJacobian() override; + virtual int initializeAdjoint() override; + virtual int evaluateAdjointIntegrand() override; + virtual int evaluateAdjointResidual() override; + + ScalarT& read() override + { + return y_[0]; + } + + // Not a hard write -> adds to equality constraint + void send(ScalarT& value) override + { + f_[0] += value; + } + + + // TODO remove jsut junk so it compiles + ScalarT& Vr() override + { + return y_[0]; + } + const ScalarT& Vr() const override + { + return y_[0]; + } + ScalarT& Vi() override + { + return y_[0]; + } + + const ScalarT& Vi() const override + { + return y_[0]; + } + + ScalarT& Ir() override + { + return y_[0]; + } + + const ScalarT& Ir() const override + { + return y_[0]; + } + + ScalarT& Ii() override + { + return y_[0]; + } + + const ScalarT& Ii() const override + { + return y_[0]; + } + + + }; + + } // namespace PhasorDynamics +} // namespace GridKit \ No newline at end of file diff --git a/src/Model/PhasorDynamics/Bus/CMakeLists.txt b/src/Model/PhasorDynamics/Bus/CMakeLists.txt index b11fe63ac..db8a5b85d 100644 --- a/src/Model/PhasorDynamics/Bus/CMakeLists.txt +++ b/src/Model/PhasorDynamics/Bus/CMakeLists.txt @@ -7,6 +7,7 @@ gridkit_add_library(phasor_dynamics_bus SOURCES Bus.cpp + BusSignal.cpp BusInfinite.cpp OUTPUT_NAME gridkit_phasor_dynamics_bus) diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 35a28d989..ca03aad9e 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -103,6 +103,9 @@ namespace GridKit msa = max_steps_; } + virtual ScalarT& read() = 0; + virtual void send(ScalarT& value) = 0; + virtual ScalarT& Vr() = 0; virtual const ScalarT& Vr() const = 0; virtual ScalarT& Vi() = 0; diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index 0b5fb0e33..ae0a9879f 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -11,7 +11,7 @@ add_executable(test_phasor_branch runBranchTests.cpp) target_link_libraries(test_phasor_branch GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_bus) -add_executable(test_case_format runCaseFormatTests.cpp) +#add_executable(test_case_format runCaseFormatTests.cpp) add_executable(test_phasor_load runLoadTests.cpp) target_link_libraries(test_phasor_load GRIDKIT::phasor_dynamics_load @@ -41,7 +41,7 @@ target_link_libraries(test_phasor_system GRIDKIT::phasor_dynamics_load add_test(NAME PhasorDynamicsBusTest COMMAND $) add_test(NAME PhasorDynamicsBranchTest COMMAND $) -add_test(NAME PhasorDynamicsCaseFormatTest COMMAND $) +#add_test(NAME PhasorDynamicsCaseFormatTest COMMAND $) add_test(NAME PhasorDynamicsGenrouTest COMMAND $) add_test(NAME PhasorDynamicsGovernorTgov1Test COMMAND $) add_test(NAME PhasorDynamicsGenClassicalTest COMMAND $) @@ -50,7 +50,7 @@ add_test(NAME PhasorDynamicsSystemTest COMMAND $ install(TARGETS test_phasor_bus test_phasor_branch - test_case_format +# test_case_format test_phasor_load test_phasor_genrou test_phasor_governortgov1 From 695154a1967b906e3f212bdcf0cafe16b24b0d6f Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:41:04 -0500 Subject: [PATCH 02/89] edit: source model class interaction with Signal [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 32 ++++ .../PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 36 ++--- .../PhasorDynamics/Governor/Tgov1/Tgov1.hpp | 17 +-- .../Governor/Tgov1/Tgov1Data.hpp | 4 + src/Model/PhasorDynamics/GovernorBase.hpp | 21 --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 140 ++++-------------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 35 +---- .../GENROUwS/GenrouData.hpp | 28 ++-- src/Model/PhasorDynamics/SystemModel.hpp | 36 ++++- 9 files changed, 140 insertions(+), 209 deletions(-) delete mode 100644 src/Model/PhasorDynamics/GovernorBase.hpp diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 9a72aad96..ebdbedd3c 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -46,6 +46,38 @@ namespace GridKit { } + // Adds the generic input signal to the component + void safeSend(bus_type* signal, ScalarT value) + { + if (signal) + { + signal->send(value); + } + + } + + void safeInit(bus_type* signal, ScalarT value) + { + if (signal) + { + signal->y()[0] = value; + } + + } + + ScalarT safeRead(bus_type* signal, ScalarT default_val) + { + if (signal) + { + return signal->read(); + } + else + { + return default_val; + } + + } + virtual IdxT size() override { return size_; diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 5a255d1e9..882bf07e9 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -12,7 +12,6 @@ #include #include -#include #define _USE_MATH_DEFINES @@ -30,8 +29,9 @@ namespace GridKit * @param data TGOV1 Data Object */ template - Tgov1::Tgov1(machine_type* machine, const model_data_type& data) - : machine_(machine), + Tgov1::Tgov1() + : pmech_(nullptr), + omega_(nullptr), R_(data.R), Pvmin_(data.Pvmin), Pvmax_(data.Pvmax), @@ -46,8 +46,9 @@ namespace GridKit } template - Tgov1::Tgov1(machine_type* machine) - : machine_(machine), + Tgov1::Tgov1() + : pmech_(nullptr), + omega_(nullptr), R_(0.05), Pvmin_(0), Pvmax_(1), @@ -88,7 +89,7 @@ namespace GridKit { // Initial mechanical = initial electric torque - ScalarT p0 = machine_->getTorque(); + ScalarT p0 = this->safeRead(pmech_, 1); // Input Variables (Parameter for now) pref_ = R_ * p0; @@ -170,8 +171,9 @@ namespace GridKit int Tgov1::evaluateResidual() { - // Input Variables - ScalarT omega = machine_->getSpeed(); + // Ext Variables + ScalarT omega0 = 0; + ScalarT omega = this->safeRead(omega_, omega0); // Read Internal Variables ScalarT ptx = y_[0]; // y0 - Ptx @@ -186,13 +188,14 @@ namespace GridKit ScalarT f = (-pv + (pref_ - omega) / R_) / T1_; ScalarT valv_ind = this->indicator(pv, f); - // Internal Differential Equations + // Equations f_[0] = -ptx_dot + pv - (ptx + T2_ * pv) / T3_; f_[1] = -pv_dot + valv_ind * f; - - // Internal Algebraic Equations f_[2] = -pmech + (ptx + T2_ * pv) / T3_ - (Dt_ * omega); + // Write External + this->safeSend(pmech_, pmech); + return 0; } @@ -266,17 +269,6 @@ namespace GridKit return 0; } - /** - * @brief The mechanical power output. - * @warning This is not yet accessed by anything. The Genrou class will - * need to access this instead of a constant Pmech. - * @return ScalarT - Mechanical output power value. - */ - template - ScalarT& Tgov1::Pmech() - { - return y_[2]; - } // Available template instantiations template class Tgov1; diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp index 321768225..7877e3207 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp @@ -9,7 +9,6 @@ #pragma once #include -#include // Forward declarations namespace GridKit @@ -23,7 +22,7 @@ namespace GridKit } // namespace Governor template - class Genrou; + class BusBase; } // namespace PhasorDynamics } // namespace GridKit @@ -54,13 +53,15 @@ namespace GridKit using Component::yp_; using Component::ypB_; - using machine_type = Genrou; using real_type = typename Component::real_type; using model_data_type = Tgov1Data; + using bus_type = BusBase; public: - Tgov1(machine_type* machine, const model_data_type& data); - Tgov1(machine_type* machine); + Tgov1(); + Tgov1(bus_type* pmech, + bus_type* omega, + const model_data_type& data); ~Tgov1() = default; int allocate() override; @@ -79,12 +80,10 @@ namespace GridKit { } - // Read Access to Pmech - ScalarT& Pmech() override; - private: // Associated Machine Model - machine_type* machine_; + bus_type* pmech_; + bus_type* omega_; // Input parameters real_type R_; diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp index 55a645033..e94ef3721 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp @@ -32,6 +32,10 @@ namespace GridKit RealT Pvmax{1.0}; ///< Max Valve Power RealT Pvmin{0.0}; ///< Min Valve Power RealT Dt{0.0}; ///< + + IdxT signal_pmech; ///< Unique ID of the bus providing the pmech signal + IdxT signal_speed; ///< Unique ID of the bus providing the speed signal + }; } // namespace Governor } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/GovernorBase.hpp b/src/Model/PhasorDynamics/GovernorBase.hpp deleted file mode 100644 index 04d85a5f7..000000000 --- a/src/Model/PhasorDynamics/GovernorBase.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include - -namespace GridKit -{ - namespace PhasorDynamics - { - /*! - * @brief GovernorBase model implementation base class. - * - */ - template - class GovernorBase - { - public: - virtual ScalarT& Pmech() = 0; - }; - - } // namespace PhasorDynamics -} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 042196423..7b0883181 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -14,7 +14,7 @@ #include #include -#include // <- TODO: Temporary, to be removed. +#include #include #define _USE_MATH_DEFINES @@ -23,21 +23,14 @@ namespace GridKit { namespace PhasorDynamics { - /*! - * @brief Constructor for a pi-model branch - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ + template Genrou::Genrou(bus_type* bus, IdxT unit_id) : bus_(bus), + pmech_(nullptr), + omega_(nullptr), busID_(0), unit_id_(unit_id), - gov_(nullptr), // <- TODO: Temporary, to be removed. p0_(0.), q0_(0.), H_(3.), @@ -65,68 +58,21 @@ namespace GridKit (void) unit_id_; } - /*! - * @brief Constructor for a pi-model branch - * - */ - template - Genrou::Genrou(bus_type* bus, - IdxT unit_id, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12) - : bus_(bus), - busID_(0), - unit_id_(unit_id), - gov_(nullptr), // <- TODO: Temporary, to be removed. - p0_(p0), - q0_(q0), - H_(H), - D_(D), - Ra_(Ra), - Tdop_(Tdop), - Tdopp_(Tdopp), - Tqopp_(Tqopp), - Tqop_(Tqop), - Xd_(Xd), - Xdp_(Xdp), - Xdpp_(Xdpp), - Xq_(Xq), - Xqp_(Xqp), - Xqpp_(Xqpp), - Xl_(Xl), - S10_(S10), - S12_(S12) - { - size_ = 20; - setDerivedParams(); - } - /*! * @brief Constructor for the GENROU generator with saturation. * */ template - Genrou::Genrou(bus_type* bus, const model_data_type& data) + Genrou::Genrou( + bus_type* bus, + bus_type* pmech, + bus_type* omega, + const model_data_type& data) : bus_(bus), + pmech_(pmech), + omega_(omega), busID_(0), unit_id_(1), - gov_(nullptr), // <- TODO: Temporary, to be removed. p0_(data.p0), q0_(data.q0), H_(data.H), @@ -150,17 +96,6 @@ namespace GridKit setDerivedParams(); } - // /** - // * @brief Destroy the Genrou - // * - // * @tparam ScalarT - // * @tparam IdxT - // */ - // template - // Genrou::~Genrou() - // { - // // std::cout << "Destroy Genrou..." << std::endl; - // } /*! * @brief allocate method computes sparsity pattern of the Jacobian. @@ -239,12 +174,17 @@ namespace GridKit y_[19] = B_ * (vd * sin(delta) + vq * cos(delta)) + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ - // Set Setpoint mechanical power, which may or may not be used - pmech_set_ = Te; for (IdxT i = 0; i < size_; ++i) yp_[static_cast(i)] = 0.0; + + // Initialize External Inputs + // To do make this from init function + pmech_set_ = Te; + this->safeInit(pmech_, Te); + + return 0; } @@ -269,6 +209,13 @@ namespace GridKit template int Genrou::evaluateResidual() { + + // Inputs + ScalarT vr = Vr(); + ScalarT vi = Vi(); + ScalarT pmech = this->safeRead(pmech_, pmech_set_); + + /* Read variables */ ScalarT delta = y_[0]; ScalarT omega = y_[1]; @@ -290,17 +237,6 @@ namespace GridKit ScalarT efd = y_[17]; ScalarT inr = y_[18]; ScalarT ini = y_[19]; - ScalarT vr = Vr(); - ScalarT vi = Vi(); - ScalarT pmech; - if (gov_) - { - pmech = gov_->Pmech(); - } - else - { - pmech = pmech_set_; - } /* Read derivatives */ ScalarT delta_dot = yp_[0]; @@ -342,6 +278,9 @@ namespace GridKit Ir() += inr - Vr() * G_ + Vi() * B_; Ii() += ini - Vr() * B_ - Vi() * G_; + // Outputs + this->safeSend(omega_, omega); + return 0; } @@ -416,30 +355,7 @@ namespace GridKit return 0; } - /** - * @brief Access generator relative speed - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - ScalarT Genrou::getSpeed() - { - return y_[1]; - } - template - ScalarT Genrou::getTorque() - { - return y_[12]; - } - - template - void Genrou::setgovenor(gov_type* gov) - { - gov_ = gov; - } template void Genrou::setDerivedParams() diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 428e4dfb5..bfde3a97a 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -18,9 +18,6 @@ namespace GridKit template class BusBase; - template - class GovernorBase; // <- TODO: Temporary, to be removed. - template struct GenrouData; } // namespace PhasorDynamics @@ -50,33 +47,15 @@ namespace GridKit using Component::ypB_; using real_type = typename Component::real_type; - using gov_type = GovernorBase; using bus_type = BusBase; using model_data_type = GenrouData; public: Genrou(bus_type* bus, IdxT unit_id); - Genrou(bus_type* bus, const model_data_type& data); Genrou(bus_type* bus, - IdxT unit_id, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12); + bus_type* pmech_, + bus_type* omega_, + const model_data_type& data); ~Genrou() = default; int allocate() override; @@ -95,13 +74,7 @@ namespace GridKit { } - // Temporary access functions for governor - // Should be abstracted - ScalarT getSpeed(); - ScalarT getTorque(); - // Temporary set governor function until SignalBus implemented - void setgovenor(gov_type* gov); private: void setDerivedParams(); @@ -129,6 +102,8 @@ namespace GridKit private: /* Identification */ bus_type* bus_; + bus_type* pmech_; + bus_type* omega_; const int busID_; IdxT unit_id_; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp index f7836f87f..0ceec8d0e 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp @@ -32,26 +32,26 @@ namespace GridKit { RealT p0{0.0}; ///< Initial active power RealT q0{0.0}; ///< Initial reactive power - RealT H{0.0}; ///< Rotor inertia + RealT H{3.0}; ///< Rotor inertia RealT D{0.0}; ///< Damping coefficient RealT Ra{0.0}; ///< Winding resistance - RealT Tdop{0.0}; ///< Open circuit direct axis transient time - RealT Tdopp{0.0}; ///< Open circuit direct axis sub-transient time - RealT Tqop{0.0}; ///< Open circuit quadrature axis transient - RealT Tqopp{0.0}; ///< Open circuit quadrature axis sub-transient time - RealT Xd{0.0}; ///< Direct axis synchronous reactance - RealT Xdp{0.0}; ///< Direct axis transient reactance - RealT Xdpp{0.0}; ///< Direct axis sub-transient reactance - RealT Xq{0.0}; ///< Quadrature axis synchronous reactance - RealT Xqp{0.0}; ///< Quadrature axis transient reactance - RealT Xqpp{0.0}; ///< Quadrature axis sub-transient reactance - RealT Xl{0.0}; ///< Stator leakage reactance + RealT Tdop{7.0}; ///< Open circuit direct axis transient time + RealT Tdopp{0.04}; ///< Open circuit direct axis sub-transient time + RealT Tqop{0.75}; ///< Open circuit quadrature axis transient + RealT Tqopp{0.05}; ///< Open circuit quadrature axis sub-transient time + RealT Xd{2.1}; ///< Direct axis synchronous reactance + RealT Xdp{0.2}; ///< Direct axis transient reactance + RealT Xdpp{0.18}; ///< Direct axis sub-transient reactance + RealT Xq{0.5}; ///< Quadrature axis synchronous reactance + RealT Xqp{0.5}; ///< Quadrature axis transient reactance + RealT Xqpp{0.18}; ///< Quadrature axis sub-transient reactance + RealT Xl{0.15}; ///< Stator leakage reactance RealT S10{0.0}; ///< Saturation factor at 1.0 pu flux RealT S12{0.0}; ///< Saturation factor at 1.2 pu flux IdxT bus_id{0}; ///< Unique ID of the connecting bus - std::optional exciter_signal; ///< Unique ID of the bus providing the exciter signal - std::optional governor_signal; ///< Unique ID of the bus providing the governor signal + IdxT signal_pmech{0}; ///< Unique ID of the bus providing the pmech signal + IdxT signal_speed{0}; ///< Unique ID of the bus providing the speed signal std::optional freq_base; ///< Override for the system-wide base frequency std::optional va_base; ///< Override for the system-wide power base diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index b8bfbf415..94f9ea9ff 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -15,6 +15,7 @@ #include #include #include +#include namespace GridKit { @@ -115,10 +116,43 @@ namespace GridKit // Add generators for (const auto& gendata : data.genrou) { - auto* gen = new Genrou(getBus(gendata.bus_id), gendata); + + // Simplify this block + Genrou* gen; + if (gendata.signal_pmech > 0) + { + gen = new Genrou( + getBus(gendata.bus_id), + getBus(gendata.signal_pmech), + getBus(gendata.signal_speed), + gendata); + } + else + { + gen = new Genrou( + getBus(gendata.bus_id), + nullptr, + nullptr, + gendata); + } + /* Need to add signals to gendata class */ + addComponent(gen); } + // Add governors + for (const auto& govdata : data.gov) + { + + /* Need to add signals to gendata class */ + auto* gov = new Governor::Tgov1( + getBus(govdata.signal_pmech), + getBus(govdata.signal_speed), + govdata); + + addComponent(gov); + } + // Add faults for (const auto& faultdata : data.bus_fault) { From 5c16ba1e7c4301bf2ff6ae152583115a9bc64f83 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:45:59 -0500 Subject: [PATCH 03/89] add: example TwoBusTgov1 new interface [skip ci] --- .../Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 76 +++++-------------- src/Model/PhasorDynamics/Component.hpp | 3 +- 2 files changed, 23 insertions(+), 56 deletions(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 177964547..56ba9e4d8 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -59,6 +59,16 @@ int main() data.bus[1].Vr0 = 1.0; data.bus[1].Vi0 = 0.0; + // Pmech Signal Bus + data.bus[2].bus_id = 2; + data.bus[2].bus_type = BusData::BusType::SIGNAL; + + // Speed Signal Bus + data.bus[3].bus_id = 3; + data.bus[3].bus_type = BusData::BusType::SIGNAL; + + + // Set branch data data.branch.resize(1); @@ -76,68 +86,24 @@ int main() data.bus_fault[0].X = 1e-3; data.bus_fault[0].status = false; - // - // Instantiate system model - // - - SystemModel sys(data); - // Set generator data data.genrou.resize(1); - data.genrou[0].p0 = 1.; data.genrou[0].q0 = 0.05013; - data.genrou[0].H = 3.; - data.genrou[0].D = 0.; - data.genrou[0].Ra = 0.; - data.genrou[0].Tdop = 7.; - data.genrou[0].Tdopp = .04; - data.genrou[0].Tqopp = .05; - data.genrou[0].Tqop = .75; - data.genrou[0].Xd = 2.1; - data.genrou[0].Xdp = 0.2; - data.genrou[0].Xdpp = 0.18; - data.genrou[0].Xq = 0.5; - data.genrou[0].Xqp = 0.5; - data.genrou[0].Xqpp = 0.18; - data.genrou[0].Xl = 0.15; - data.genrou[0].S10 = 0.; - data.genrou[0].S12 = 0.; + data.genrou[0].signal_pmech = 2; + data.genrou[0].signal_speed = 3; + // Governor data.gov.resize(1); + data.gov[0].signal_speed = 3; + data.gov[0].signal_pmech = 2; // Signal Bus ID + + // + // Instantiate system model + // + + SystemModel sys(data); - // Set Gov data (Default PW values) - data.gov[0].R = 0.05; - data.gov[0].Pvmin = 0; - data.gov[0].Pvmax = 1.0; - data.gov[0].T1 = 0.5; - data.gov[0].T2 = 2.5; - data.gov[0].T3 = 7.5; - data.gov[0].Dt = 0; - - // Manual add gen & gov components - // This is a hack since SignalBus not implemented - - // Create Pointers first - Genrou* gen; - Governor::Tgov1* gov; - - // Instatiate Genrou & add to system model - gen = new Genrou( - sys.getBus(0), - data.genrou[0]); - - // Instatiate GovernorTgov1 & add to system model - gov = new Governor::Tgov1( - gen, - data.gov[0]); - gen->setgovenor(gov); - - // Add Generator and Governor to System - sys.addComponent(gen); - sys.addComponent(gov); - - sys.allocate(); // Get access to the fault auto* fault = sys.getBusFault(0); diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index ebdbedd3c..ccd8b1704 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -19,7 +19,8 @@ namespace GridKit { public: using real_type = typename Model::Evaluator::real_type; - + using bus_type = BusBase; + Component() : size_(0), size_quad_(0), From 4ca42dacf42af74130b288b840692630d056a192 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:49:41 -0500 Subject: [PATCH 04/89] rem: old syntax [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 2 ++ src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt | 2 -- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index ccd8b1704..b5b188dbf 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -5,6 +5,8 @@ #include #include +#include "BusBase.hpp" + namespace GridKit { namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt index fae3999ec..542384444 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt +++ b/src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt @@ -7,7 +7,5 @@ gridkit_add_library(phasor_dynamics_governortgov1 SOURCES Tgov1.cpp - LINK_LIBRARIES - GRIDKIT::phasor_dynamics_genrou OUTPUT_NAME gridkit_phasor_dynamics_governortgov1) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp index 7877e3207..af4abf49b 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp @@ -35,7 +35,7 @@ namespace GridKit { template - class Tgov1 : public Component, public GovernorBase + class Tgov1 : public Component { using Component::alpha_; using Component::f_; From 16cb12cdbfb14c522b13eb9bf2907a1b4f4e4655 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:52:11 -0500 Subject: [PATCH 05/89] add: correct constructor [skip ci] --- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 882bf07e9..bcc9099eb 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -29,9 +29,12 @@ namespace GridKit * @param data TGOV1 Data Object */ template - Tgov1::Tgov1() - : pmech_(nullptr), - omega_(nullptr), + Tgov1::Tgov1( + bus_type* pmech, + bus_type* omega, + const model_data_type& data) + : pmech_(pmech), + omega_(omega), R_(data.R), Pvmin_(data.Pvmin), Pvmax_(data.Pvmax), @@ -44,7 +47,6 @@ namespace GridKit // 3 Internal Variables size_ = 3; } - template Tgov1::Tgov1() : pmech_(nullptr), From 9e5311fa25db5fe8f3f6b5e2cb57fda6426ee562 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:55:59 -0500 Subject: [PATCH 06/89] minor: type name [skip ci] --- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index bfde3a97a..5143a5dd4 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -107,9 +107,6 @@ namespace GridKit const int busID_; IdxT unit_id_; - // Governor Pointer - gov_type* gov_; - /* Initial terminal conditions */ ScalarT p0_; ScalarT q0_; From 284b379c46d5a9101aa3611f1641b187dff9a760 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:59:36 -0500 Subject: [PATCH 07/89] cmake: reflect changes in SystemModel [skip ci] --- .../Tiny/TwoBus/Basic/CMakeLists.txt | 1 + .../PhasorDynamics/GovernorTgov1Tests.hpp | 35 ++----------------- 2 files changed, 4 insertions(+), 32 deletions(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Basic/CMakeLists.txt b/examples/PhasorDynamics/Tiny/TwoBus/Basic/CMakeLists.txt index 38309c95b..42d9a2573 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Basic/CMakeLists.txt +++ b/examples/PhasorDynamics/Tiny/TwoBus/Basic/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(TwoBusBasic GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS TwoBusBasic RUNTIME DESTINATION bin) diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp index 479141082..ffa73bf1b 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -27,13 +27,8 @@ namespace GridKit { TestStatus success = true; - auto* bus = new PhasorDynamics::Bus(1.0, 0.0); - - PhasorDynamics::Genrou* machine = - new PhasorDynamics::Genrou(bus, 1); - PhasorDynamics::Governor::Tgov1* gov = - new PhasorDynamics::Governor::Tgov1(machine); + new PhasorDynamics::Governor::Tgov1(); success *= (gov != nullptr); @@ -41,11 +36,6 @@ namespace GridKit { delete gov; } - if (machine) - { - delete machine; - } - delete bus; return success.report(__func__); } @@ -64,27 +54,8 @@ namespace GridKit TestStatus success = true; PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::Genrou gen(&bus, - 1, - 1, - 0.05013, - 3, - 0, - 0, - 7, - 0.04, - 0.05, - 0.75, - 2.1, - 0.2, - 0.18, - 0.5, - 0.5, - 0.18, - 0.15, - 0, - 0); - PhasorDynamics::Governor::Tgov1 gov(&gen); + PhasorDynamics::Genrou gen(&bus,1); + PhasorDynamics::Governor::Tgov1 gov; bus.allocate(); bus.initialize(); From 207d681a8dff237d76955f39e2c31297dddbd256 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:01:15 -0500 Subject: [PATCH 08/89] append: BusFactory [skip ci] --- src/Model/PhasorDynamics/Bus/BusData.hpp | 1 + src/Model/PhasorDynamics/Bus/BusFactory.hpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/Model/PhasorDynamics/Bus/BusData.hpp b/src/Model/PhasorDynamics/Bus/BusData.hpp index fb06b19d0..6f58722c8 100644 --- a/src/Model/PhasorDynamics/Bus/BusData.hpp +++ b/src/Model/PhasorDynamics/Bus/BusData.hpp @@ -45,6 +45,7 @@ namespace GridKit INVALID, DEFAULT, SLACK, + SIGNAL }; BusType bus_type{BusType::INVALID}; ///< The kind of bus this data is for diff --git a/src/Model/PhasorDynamics/Bus/BusFactory.hpp b/src/Model/PhasorDynamics/Bus/BusFactory.hpp index 84c6e26cc..13375cd64 100644 --- a/src/Model/PhasorDynamics/Bus/BusFactory.hpp +++ b/src/Model/PhasorDynamics/Bus/BusFactory.hpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace GridKit { @@ -31,6 +32,9 @@ namespace GridKit case BusTypeT::SLACK: bus = new BusInfinite(data); break; + case BusTypeT::SIGNAL: + bus = new BusSignal(data); + break; default: // Throw exception std::cout << "Bus type " << static_cast(data.bus_type) << " unrecognized.\n"; From 52d22c35f7159ff47c1314242b570933553dfcf6 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:05:00 -0500 Subject: [PATCH 09/89] cmake: more gov link [skip ci] --- examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt | 1 + examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt | 1 + examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt b/examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt index 74cd09e7f..9e455288e 100644 --- a/examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt +++ b/examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(TenGenClassical GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_gen_classical + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS TenGenClassical RUNTIME DESTINATION bin) diff --git a/examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt b/examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt index c5c3e6e45..9aced7a2b 100644 --- a/examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt +++ b/examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(TenGenGenrou GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS TenGenGenrou RUNTIME DESTINATION bin) diff --git a/examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt b/examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt index ec4287860..e0c13f635 100644 --- a/examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt +++ b/examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(ThreeBusBasic GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS ThreeBusBasic RUNTIME DESTINATION bin) From 2090fddfb9f6bb49d39d8c4190d0e25533a9eaba Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:14:59 -0500 Subject: [PATCH 10/89] edit: back support tengen [skip ci] --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 49 +++++++++++++++++++ .../SynchronousMachine/GENROUwS/Genrou.hpp | 20 ++++++++ 2 files changed, 69 insertions(+) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 7b0883181..d3751ee5d 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -96,6 +96,55 @@ namespace GridKit setDerivedParams(); } + template + Genrou::Genrou(bus_type* bus, + IdxT unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12) + : bus_(bus), + pmech_(nullptr), + omega_(nullptr), + busID_(0), + unit_id_(unit_id), + p0_(p0), + q0_(q0), + H_(H), + D_(D), + Ra_(Ra), + Tdop_(Tdop), + Tdopp_(Tdopp), + Tqopp_(Tqopp), + Tqop_(Tqop), + Xd_(Xd), + Xdp_(Xdp), + Xdpp_(Xdpp), + Xq_(Xq), + Xqp_(Xqp), + Xqpp_(Xqpp), + Xl_(Xl), + S10_(S10), + S12_(S12) + { + size_ = 20; + setDerivedParams(); + } + /*! * @brief allocate method computes sparsity pattern of the Jacobian. diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 5143a5dd4..74266484b 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -56,6 +56,26 @@ namespace GridKit bus_type* pmech_, bus_type* omega_, const model_data_type& data); + Genrou(bus_type* bus, + IdxT unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12); ~Genrou() = default; int allocate() override; From 4bcd715549e9d4b4dce537770cc032f7dd83b39d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:17:03 -0500 Subject: [PATCH 11/89] add: gov link to sys [skip ci] --- tests/UnitTests/PhasorDynamics/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index ae0a9879f..619342d53 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -36,6 +36,7 @@ add_executable(test_phasor_system runSystemTests.cpp) target_link_libraries(test_phasor_system GRIDKIT::phasor_dynamics_load GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_bus) From 533ecdb2b61f824f9925d6b18dfa1a209fa4457e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:25:53 -0500 Subject: [PATCH 12/89] edit: safe funcs pass by ref [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 6 +++--- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index b5b188dbf..ad74ef441 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -50,7 +50,7 @@ namespace GridKit } // Adds the generic input signal to the component - void safeSend(bus_type* signal, ScalarT value) + void safeSend(bus_type* signal, ScalarT& value) { if (signal) { @@ -59,7 +59,7 @@ namespace GridKit } - void safeInit(bus_type* signal, ScalarT value) + void safeInit(bus_type* signal, ScalarT& value) { if (signal) { @@ -68,7 +68,7 @@ namespace GridKit } - ScalarT safeRead(bus_type* signal, ScalarT default_val) + ScalarT safeRead(bus_type* signal, ScalarT& default_val) { if (signal) { diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index bcc9099eb..780103432 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -91,7 +91,8 @@ namespace GridKit { // Initial mechanical = initial electric torque - ScalarT p0 = this->safeRead(pmech_, 1); + ScalarT pdef = 1; + ScalarT p0 = this->safeRead(pmech_, pdef); // Input Variables (Parameter for now) pref_ = R_ * p0; From e707b12685439e24db94b5474530c82d6cbd13e7 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 12:48:19 -0500 Subject: [PATCH 13/89] syntax: readability [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.cpp | 1 + src/Model/PhasorDynamics/Bus/BusSignal.hpp | 36 ++++++++++++++++++++-- src/Model/PhasorDynamics/Component.hpp | 26 ++++++++++++++-- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.cpp b/src/Model/PhasorDynamics/Bus/BusSignal.cpp index 3d7dec021..f144ab991 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.cpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.cpp @@ -17,6 +17,7 @@ namespace GridKit : BusBase(data.bus_id) { size_ = 1; + is_initialized_ = false; } diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 7f3fd6ef2..5726e8d27 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -43,12 +43,41 @@ namespace GridKit virtual int evaluateAdjointIntegrand() override; virtual int evaluateAdjointResidual() override; - ScalarT& read() override + + /** + * @brief A one-time initialization function + * that can be called by any. + * + * @return state value of signal + */ + void initial_value(ScalarT& value) + { + if(is_initialized_) + { + std::cout << "ERROR!"; + } + else{ + y_[0] = value; + is_initialized_ = true; + } + } + + /** + * @brief A read only accessor to the signal state + * + * @return state value of signal + */ + const ScalarT& read() override { return y_[0]; } - // Not a hard write -> adds to equality constraint + /** + * @brief A write operation only available + * to the source signal + * + * @param value The value of the signal + */ void send(ScalarT& value) override { f_[0] += value; @@ -93,7 +122,10 @@ namespace GridKit { return y_[0]; } + + private: + bool is_initialized_; }; diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index ad74ef441..7c1318f25 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -49,7 +49,13 @@ namespace GridKit { } - // Adds the generic input signal to the component + /** + * @brief A helper function to easily init + * a signal value wiithout needing to check if initialized + * + * @param signal The signal bus object pointer + * @param value The value to send to the equality constraint + */ void safeSend(bus_type* signal, ScalarT& value) { if (signal) @@ -59,15 +65,31 @@ namespace GridKit } + /** + * @brief A helper function to easily init + * a signal value wiithout needing to check if initialized + * + * This is implemented + * in such a way that any component can call + * this function and write + */ void safeInit(bus_type* signal, ScalarT& value) { if (signal) { - signal->y()[0] = value; + signal->initial_value(value); } } + /** + * @brief A helper function to easily read + * the state of the signal without checking nullptr + * + * + * @param signal The signal bus object pointer + * @param default_val The value to return if no signal + */ ScalarT safeRead(bus_type* signal, ScalarT& default_val) { if (signal) From befccef8d855797c19c8ff9c39cb348dcd09c259 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 12:51:57 -0500 Subject: [PATCH 14/89] read: const modifier preference [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 2 +- src/Model/PhasorDynamics/BusBase.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index 8c07b419d..07643e8e4 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -53,7 +53,7 @@ namespace GridKit } // TODO Need to remove these - ScalarT& read() override + const ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 7fd48a773..9215e2681 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -51,7 +51,7 @@ namespace GridKit } // TODO Need to remove these - ScalarT& read() override + const ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index ca03aad9e..53b534a57 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -103,7 +103,7 @@ namespace GridKit msa = max_steps_; } - virtual ScalarT& read() = 0; + virtual const ScalarT& read() = 0; virtual void send(ScalarT& value) = 0; virtual ScalarT& Vr() = 0; From 4264ea41c53d94ae107086c0fa1232b046c71975 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 12:55:13 -0500 Subject: [PATCH 15/89] add: initial value function to BusBase [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 4 ++++ src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 4 ++++ src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- src/Model/PhasorDynamics/BusBase.hpp | 1 + 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index 07643e8e4..8be35d95a 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -51,6 +51,10 @@ namespace GridKit { return BusTypeT::DEFAULT; } + + void initial_value(ScalarT& value) override + { + } // TODO Need to remove these const ScalarT& read() override diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 9215e2681..225719898 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -50,6 +50,10 @@ namespace GridKit return BusTypeT::SLACK; } + void initial_value(ScalarT& value) override + { + } + // TODO Need to remove these const ScalarT& read() override { diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 5726e8d27..187938993 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -50,7 +50,7 @@ namespace GridKit * * @return state value of signal */ - void initial_value(ScalarT& value) + void initial_value(ScalarT& value) override { if(is_initialized_) { diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 53b534a57..753a297dd 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -103,6 +103,7 @@ namespace GridKit msa = max_steps_; } + virtual void initial_value(ScalarT& value) = 0; virtual const ScalarT& read() = 0; virtual void send(ScalarT& value) = 0; From 8b06e217b5c3e20490cd154e689186a1ac7a79e2 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 12:59:07 -0500 Subject: [PATCH 16/89] edit: default not init [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.cpp | 1 - src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.cpp b/src/Model/PhasorDynamics/Bus/BusSignal.cpp index f144ab991..3d7dec021 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.cpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.cpp @@ -17,7 +17,6 @@ namespace GridKit : BusBase(data.bus_id) { size_ = 1; - is_initialized_ = false; } diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 187938993..2aa0b7ee2 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -125,7 +125,7 @@ namespace GridKit private: - bool is_initialized_; + bool is_initialized_{false}; }; From 4388cd549d0ca3d874d21671350c6ed2866131fa Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 14:34:14 -0500 Subject: [PATCH 17/89] rem: consnt, odd behavior [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- src/Model/PhasorDynamics/BusBase.hpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index 8be35d95a..8781e08e1 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -57,7 +57,7 @@ namespace GridKit } // TODO Need to remove these - const ScalarT& read() override + ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 225719898..8cce85dd0 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -55,7 +55,7 @@ namespace GridKit } // TODO Need to remove these - const ScalarT& read() override + ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 2aa0b7ee2..60f60ade4 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -67,7 +67,7 @@ namespace GridKit * * @return state value of signal */ - const ScalarT& read() override + ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 753a297dd..e2f6ce60a 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -104,7 +104,7 @@ namespace GridKit } virtual void initial_value(ScalarT& value) = 0; - virtual const ScalarT& read() = 0; + virtual ScalarT& read() = 0; virtual void send(ScalarT& value) = 0; virtual ScalarT& Vr() = 0; From b4d1ef5ece7eaafc7e12d17b90bdced89faf553d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 14:38:26 -0500 Subject: [PATCH 18/89] fix: resize bus vec [skip ci] --- .../PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 56ba9e4d8..a63dcbbbd 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -47,7 +47,7 @@ int main() SystemModelData data; // Set bus data - data.bus.resize(2); + data.bus.resize(4); data.bus[0].bus_id = 0; data.bus[0].bus_type = BusData::BusType::DEFAULT; @@ -60,13 +60,12 @@ int main() data.bus[1].Vi0 = 0.0; // Pmech Signal Bus - data.bus[2].bus_id = 2; + data.bus[2].bus_id = 2; data.bus[2].bus_type = BusData::BusType::SIGNAL; // Speed Signal Bus - data.bus[3].bus_id = 3; - data.bus[3].bus_type = BusData::BusType::SIGNAL; - + data.bus[3].bus_id = 3; + data.bus[3].bus_type = BusData::BusType::SIGNAL; // Set branch data From db5283d9c9f2d8ecad82853c1fcf8da268b20044 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 14:50:19 -0500 Subject: [PATCH 19/89] misc ref errors [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 7c1318f25..60c68c2dd 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -56,7 +56,7 @@ namespace GridKit * @param signal The signal bus object pointer * @param value The value to send to the equality constraint */ - void safeSend(bus_type* signal, ScalarT& value) + void safeSend(bus_type* signal, ScalarT value) { if (signal) { @@ -73,7 +73,7 @@ namespace GridKit * in such a way that any component can call * this function and write */ - void safeInit(bus_type* signal, ScalarT& value) + void safeInit(bus_type* signal, ScalarT value) { if (signal) { @@ -90,7 +90,7 @@ namespace GridKit * @param signal The signal bus object pointer * @param default_val The value to return if no signal */ - ScalarT safeRead(bus_type* signal, ScalarT& default_val) + ScalarT safeRead(bus_type* signal, ScalarT default_val) { if (signal) { From 075608ec998ec7f3bc75a271c6c47b4669b87341 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 15:03:29 -0500 Subject: [PATCH 20/89] edit: init fixes [skip ci] --- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 6 ++++-- .../SynchronousMachine/GENROUwS/Genrou.cpp | 12 +++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 780103432..6a38ad5c7 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -41,7 +41,8 @@ namespace GridKit T1_(data.T1), T2_(data.T2), T3_(data.T3), - Dt_(data.Dt) + Dt_(data.Dt), + pref_(0), { // 3 Internal Variables @@ -57,7 +58,8 @@ namespace GridKit T1_(0.5), T2_(2.5), T3_(7.5), - Dt_(0) + Dt_(0), + pref_(0), { // 3 Internal Variables diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index d3751ee5d..f38f5a3f8 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -48,7 +48,9 @@ namespace GridKit Xqpp_(.18), Xl_(.15), S10_(0.), - S12_(0.) + S12_(0.), + pmech_set_(0), + efd_set_(0) { size_ = 20; setDerivedParams(); @@ -90,7 +92,9 @@ namespace GridKit Xqpp_(data.Xqpp), Xl_(data.Xl), S10_(data.S10), - S12_(data.S12) + S12_(data.S12), + pmech_set_(0), + efd_set_(0) { size_ = 20; setDerivedParams(); @@ -139,7 +143,9 @@ namespace GridKit Xqpp_(Xqpp), Xl_(Xl), S10_(S10), - S12_(S12) + S12_(S12), + pmech_set_(0), + efd_set_(0) { size_ = 20; setDerivedParams(); From 965fd6f47f8b311c344e7d9a463d51578f56f768 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 15:04:27 -0500 Subject: [PATCH 21/89] edit: constructor error [skip ci] --- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 6a38ad5c7..5db4dd4a9 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -42,7 +42,7 @@ namespace GridKit T2_(data.T2), T3_(data.T3), Dt_(data.Dt), - pref_(0), + pref_(0) { // 3 Internal Variables @@ -59,7 +59,7 @@ namespace GridKit T2_(2.5), T3_(7.5), Dt_(0), - pref_(0), + pref_(0) { // 3 Internal Variables From f52f352e16afef03cddd41643fe2bd34d2b964c9 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 15:08:54 -0500 Subject: [PATCH 22/89] edit: type consistancny [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 60f60ade4..505e526f3 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -50,7 +50,7 @@ namespace GridKit * * @return state value of signal */ - void initial_value(ScalarT& value) override + void initial_value(ScalarT value) override { if(is_initialized_) { From 90ef74ff41d06524911b49d01ac9fb7dfa7c714e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 15:10:20 -0500 Subject: [PATCH 23/89] edit: busbase make change too [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 2 +- src/Model/PhasorDynamics/BusBase.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index 8781e08e1..b02092bbc 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -52,7 +52,7 @@ namespace GridKit return BusTypeT::DEFAULT; } - void initial_value(ScalarT& value) override + void initial_value(ScalarT value) override { } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 8cce85dd0..9823f10a1 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -50,7 +50,7 @@ namespace GridKit return BusTypeT::SLACK; } - void initial_value(ScalarT& value) override + void initial_value(ScalarT value) override { } diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index e2f6ce60a..9af638e36 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -103,7 +103,7 @@ namespace GridKit msa = max_steps_; } - virtual void initial_value(ScalarT& value) = 0; + virtual void initial_value(ScalarT value) = 0; virtual ScalarT& read() = 0; virtual void send(ScalarT& value) = 0; From 4cce9bf22679b8db13dc546f9b27520711c3d13f Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:23:39 -0500 Subject: [PATCH 24/89] rem: initialization check [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 505e526f3..6a6bbb61b 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -52,14 +52,16 @@ namespace GridKit */ void initial_value(ScalarT value) override { - if(is_initialized_) - { - std::cout << "ERROR!"; - } - else{ - y_[0] = value; - is_initialized_ = true; - } + + y_[0] = value; + //if(is_initialized_) + //{ + // std::cout << "ERROR!"; + //} + //else{ + // y_[0] = value; + // is_initialized_ = true; + //} } /** @@ -125,7 +127,7 @@ namespace GridKit private: - bool is_initialized_{false}; + //bool is_initialized_{false}; }; From 1aab2f26fa75ebf1f3f70849c7442282ec29a055 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:26:46 -0500 Subject: [PATCH 25/89] misc edit [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 6a6bbb61b..67eda5b35 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -69,7 +69,7 @@ namespace GridKit * * @return state value of signal */ - ScalarT& read() override + ScalarT read() override { return y_[0]; } From c564e0ebfeb0102d0ea3f94815be1cad9ca23828 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:31:14 -0500 Subject: [PATCH 26/89] edit: type hell [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 67eda5b35..6a6bbb61b 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -69,7 +69,7 @@ namespace GridKit * * @return state value of signal */ - ScalarT read() override + ScalarT& read() override { return y_[0]; } From c598da86ca8ca934c7853b43cbc694c0664f3592 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:35:40 -0500 Subject: [PATCH 27/89] edit: init omega and change index [skip ci] --- examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 2 +- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index a63dcbbbd..49af4fbbf 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -142,7 +142,7 @@ int main() { std::vector& y_val = sys.y(); - output.push_back(OutputData{t, y_val[0], y_val[1], y_val[3]}); + output.push_back(OutputData{t, y_val[0], y_val[1], y_val[5]}); }; // Set up simulation diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index f38f5a3f8..d58ba970a 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -238,6 +238,7 @@ namespace GridKit // To do make this from init function pmech_set_ = Te; this->safeInit(pmech_, Te); + this->safeInit(omega_, omega); return 0; From ee375accac22925583d13157033ae0ef064d7832 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:56:10 -0500 Subject: [PATCH 28/89] edit: no funcs [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 1 - src/Model/PhasorDynamics/Component.hpp | 16 ------------ .../SynchronousMachine/GENROUwS/Genrou.cpp | 26 ++++++++++++++----- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 6a6bbb61b..3fdf43838 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -125,7 +125,6 @@ namespace GridKit return y_[0]; } - private: //bool is_initialized_{false}; diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 60c68c2dd..a0793ac60 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -65,22 +65,6 @@ namespace GridKit } - /** - * @brief A helper function to easily init - * a signal value wiithout needing to check if initialized - * - * This is implemented - * in such a way that any component can call - * this function and write - */ - void safeInit(bus_type* signal, ScalarT value) - { - if (signal) - { - signal->initial_value(value); - } - - } /** * @brief A helper function to easily read diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index d58ba970a..c6f09cecb 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -175,9 +175,12 @@ namespace GridKit template int Genrou::initialize() { - /* Initialization tricks -- assuming NO saturation */ + ScalarT vr = Vr(); ScalarT vi = Vi(); + + /* Initialization tricks -- assuming NO saturation */ + ScalarT p = p0_; ScalarT q = q0_; ScalarT vm2 = vr * vr + vi * vi; @@ -237,8 +240,10 @@ namespace GridKit // Initialize External Inputs // To do make this from init function pmech_set_ = Te; - this->safeInit(pmech_, Te); - this->safeInit(omega_, omega); + if (pmech_) + { + pmech_->initial_value(Te); + } return 0; @@ -269,8 +274,18 @@ namespace GridKit // Inputs ScalarT vr = Vr(); ScalarT vi = Vi(); - ScalarT pmech = this->safeRead(pmech_, pmech_set_); + ScalarT pmech = pmech_set_; + if (pmech_) + { + pmech = pmech_->read(); + } + + // Outputs + if (omega_) + { + omega_->send(y[1]); + } /* Read variables */ ScalarT delta = y_[0]; @@ -334,8 +349,7 @@ namespace GridKit Ir() += inr - Vr() * G_ + Vi() * B_; Ii() += ini - Vr() * B_ - Vi() * G_; - // Outputs - this->safeSend(omega_, omega); + return 0; } From fcc39781ace170a47a7a4010d6643833a33ad321 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:57:06 -0500 Subject: [PATCH 29/89] edit: syntax [skip ci] --- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index c6f09cecb..b0eca3c6f 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -284,7 +284,7 @@ namespace GridKit // Outputs if (omega_) { - omega_->send(y[1]); + omega_->send(y_[1]); } /* Read variables */ From f4d316cde56b809c03cb96af8f79b47860d3996a Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 11:47:58 -0500 Subject: [PATCH 30/89] fix: rookie allocation mistake [skip ci] --- examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 49af4fbbf..6994869bf 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -103,6 +103,8 @@ int main() SystemModel sys(data); + sys.allocate(); + // Get access to the fault auto* fault = sys.getBusFault(0); From d8ff539f2f121de545a5f01f9c35a1178f444828 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:02:52 -0500 Subject: [PATCH 31/89] chore: variable names [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 10 ++--- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 8 ++-- .../PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 21 +++++----- .../PhasorDynamics/Governor/Tgov1/Tgov1.hpp | 8 ++-- .../SynchronousMachine/GENROUwS/Genrou.cpp | 40 +++++++++---------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 9 +++-- 6 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index b02092bbc..0c48d7ce7 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -52,17 +52,17 @@ namespace GridKit return BusTypeT::DEFAULT; } - void initial_value(ScalarT value) override + // TODO remove, uneeded + void initial_value(ScalarT) override { } - - // TODO Need to remove these + // TODO remove, uneeded ScalarT& read() override { return y_[0]; } - - void send(ScalarT& value) override + // TODO remove, uneeded + void send(ScalarT&) override { } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 9823f10a1..2b6ba7b5a 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -50,17 +50,19 @@ namespace GridKit return BusTypeT::SLACK; } - void initial_value(ScalarT value) override + // TODO remove, uneeded + void initial_value(ScalarT) override { } - // TODO Need to remove these + // TODO remove, uneeded ScalarT& read() override { return y_[0]; } - void send(ScalarT& value) override + // TODO remove, uneeded + void send(ScalarT&) override { } diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 5db4dd4a9..24412c2cc 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -25,16 +25,17 @@ namespace GridKit /*! * @brief Constructor for Governor * - * @param machine Generator Object + * @param pmech Bus signal pointer + * @param omega Bus signal pointer * @param data TGOV1 Data Object */ template Tgov1::Tgov1( - bus_type* pmech, - bus_type* omega, + bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data) - : pmech_(pmech), - omega_(omega), + : pmech_signal_(pmech), + omega_signal_(omega), R_(data.R), Pvmin_(data.Pvmin), Pvmax_(data.Pvmax), @@ -50,8 +51,8 @@ namespace GridKit } template Tgov1::Tgov1() - : pmech_(nullptr), - omega_(nullptr), + : pmech_signal_(nullptr), + omega_signal_(nullptr), R_(0.05), Pvmin_(0), Pvmax_(1), @@ -94,7 +95,7 @@ namespace GridKit // Initial mechanical = initial electric torque ScalarT pdef = 1; - ScalarT p0 = this->safeRead(pmech_, pdef); + ScalarT p0 = this->safeRead(pmech_signal_, pdef); // Input Variables (Parameter for now) pref_ = R_ * p0; @@ -178,7 +179,7 @@ namespace GridKit // Ext Variables ScalarT omega0 = 0; - ScalarT omega = this->safeRead(omega_, omega0); + ScalarT omega = this->safeRead(omega_signal_, omega0); // Read Internal Variables ScalarT ptx = y_[0]; // y0 - Ptx @@ -199,7 +200,7 @@ namespace GridKit f_[2] = -pmech + (ptx + T2_ * pv) / T3_ - (Dt_ * omega); // Write External - this->safeSend(pmech_, pmech); + this->safeSend(pmech_signal_, pmech); return 0; } diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp index af4abf49b..716735e88 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp @@ -59,8 +59,8 @@ namespace GridKit public: Tgov1(); - Tgov1(bus_type* pmech, - bus_type* omega, + Tgov1(bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data); ~Tgov1() = default; @@ -82,8 +82,8 @@ namespace GridKit private: // Associated Machine Model - bus_type* pmech_; - bus_type* omega_; + bus_type* pmech_signal_; + bus_type* omega_signal_; // Input parameters real_type R_; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index b0eca3c6f..1a969df9b 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -27,8 +27,8 @@ namespace GridKit template Genrou::Genrou(bus_type* bus, IdxT unit_id) : bus_(bus), - pmech_(nullptr), - omega_(nullptr), + pmech_signal_(nullptr), + omega_signal_(nullptr), busID_(0), unit_id_(unit_id), p0_(0.), @@ -67,12 +67,12 @@ namespace GridKit template Genrou::Genrou( bus_type* bus, - bus_type* pmech, - bus_type* omega, + bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data) : bus_(bus), - pmech_(pmech), - omega_(omega), + pmech_signal_(pmech_signal), + omega_signal_(omega_signal), busID_(0), unit_id_(1), p0_(data.p0), @@ -122,8 +122,8 @@ namespace GridKit real_type S10, real_type S12) : bus_(bus), - pmech_(nullptr), - omega_(nullptr), + pmech_signal_(nullptr), + omega_signal_(nullptr), busID_(0), unit_id_(unit_id), p0_(p0), @@ -240,9 +240,14 @@ namespace GridKit // Initialize External Inputs // To do make this from init function pmech_set_ = Te; - if (pmech_) + if (pmech_signal_) { - pmech_->initial_value(Te); + pmech_signal_->initial_value(Te); + } + + if (omega_signal_) + { + omega_signal_->initial_value(omega); } @@ -274,18 +279,11 @@ namespace GridKit // Inputs ScalarT vr = Vr(); ScalarT vi = Vi(); - - ScalarT pmech = pmech_set_; - if (pmech_) - { - pmech = pmech_->read(); - } + ScalarT pmech = safeRead(pmech_signal_, pmech_set_); // Outputs - if (omega_) - { - omega_->send(y_[1]); - } + safeSend(omega_signal_, y_[1]); + /* Read variables */ ScalarT delta = y_[0]; @@ -349,8 +347,6 @@ namespace GridKit Ir() += inr - Vr() * G_ + Vi() * B_; Ii() += ini - Vr() * B_ - Vi() * G_; - - return 0; } diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 74266484b..c7ca5a90a 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -53,8 +53,8 @@ namespace GridKit public: Genrou(bus_type* bus, IdxT unit_id); Genrou(bus_type* bus, - bus_type* pmech_, - bus_type* omega_, + bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data); Genrou(bus_type* bus, IdxT unit_id, @@ -122,8 +122,9 @@ namespace GridKit private: /* Identification */ bus_type* bus_; - bus_type* pmech_; - bus_type* omega_; + bus_type* pmech_signal_; + bus_type* omega_signal_; + const int busID_; IdxT unit_id_; From a880257b438703dec2620f6e9dc4c1eb1648840a Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:04:08 -0500 Subject: [PATCH 32/89] minor: incorrect constructor init [skip ci] --- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 24412c2cc..e313f6efb 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -34,8 +34,8 @@ namespace GridKit bus_type* pmech_signal, bus_type* omega_signal, const model_data_type& data) - : pmech_signal_(pmech), - omega_signal_(omega), + : pmech_signal_(pmech_signal), + omega_signal_(omega_signal), R_(data.R), Pvmin_(data.Pvmin), Pvmax_(data.Pvmax), From d042463e92d85f7464adf4a8c387eb0e4383cd97 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:07:34 -0500 Subject: [PATCH 33/89] fix: this pointer in genrou [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 1 - .../SynchronousMachine/GENROUwS/Genrou.cpp | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index a0793ac60..ddf8e2576 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -65,7 +65,6 @@ namespace GridKit } - /** * @brief A helper function to easily read * the state of the signal without checking nullptr diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 1a969df9b..c3154abf7 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -208,12 +208,12 @@ namespace GridKit ScalarT ksat; ScalarT psipp; - y_[0] = delta; //= 0.55399038; - y_[1] = omega; // = 0; - y_[2] = Eqp; // = 0.995472581; - y_[3] = psidp; // = 0.971299567; - y_[4] = psiqp; // = 0.306880069; - y_[5] = Edp; // = 0; + y_[0] = delta; + y_[1] = omega; + y_[2] = Eqp; + y_[3] = psidp; + y_[4] = psiqp; + y_[5] = Edp; y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; @@ -268,7 +268,7 @@ namespace GridKit } /** - * \brief Residual contribution of the branch is pushed to the + * @brief Residual contribution of the branch is pushed to the * two terminal buses. * */ @@ -279,10 +279,10 @@ namespace GridKit // Inputs ScalarT vr = Vr(); ScalarT vi = Vi(); - ScalarT pmech = safeRead(pmech_signal_, pmech_set_); + ScalarT pmech = this->safeRead(pmech_signal_, pmech_set_); // Outputs - safeSend(omega_signal_, y_[1]); + this->safeSend(omega_signal_, y_[1]); /* Read variables */ From c37fb4674d9c45c5058491b1ceaa31dde741d98b Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:17:51 -0500 Subject: [PATCH 34/89] chore: pre rebase commit [skip ci] --- examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 1 + src/Model/PhasorDynamics/SystemModel.hpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 6994869bf..80aacdb6e 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -144,6 +144,7 @@ int main() { std::vector& y_val = sys.y(); + // Note Omega of gen is at state index 5! (Each added signal shifted by 1) output.push_back(OutputData{t, y_val[0], y_val[1], y_val[5]}); }; diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 94f9ea9ff..1acdb1fc5 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -117,7 +117,9 @@ namespace GridKit for (const auto& gendata : data.genrou) { - // Simplify this block + // PR NOTE: + // Can we make getBus return nullptr if none exists? + // I don't know if it will break things Genrou* gen; if (gendata.signal_pmech > 0) { From 9a076142a3da276cedb1a8b02bbf998a78c172b6 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:19:35 -0500 Subject: [PATCH 35/89] init: test BusSignal compile [skip ci] --- buildsystem/spack/spack | 2 +- src/Model/PhasorDynamics/Bus/Bus.hpp | 11 ++ src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 10 ++ src/Model/PhasorDynamics/Bus/BusSignal.cpp | 114 ++++++++++++++++++ src/Model/PhasorDynamics/Bus/BusSignal.hpp | 101 ++++++++++++++++ src/Model/PhasorDynamics/Bus/CMakeLists.txt | 1 + src/Model/PhasorDynamics/BusBase.hpp | 3 + tests/UnitTests/PhasorDynamics/CMakeLists.txt | 6 +- 8 files changed, 244 insertions(+), 4 deletions(-) create mode 100644 src/Model/PhasorDynamics/Bus/BusSignal.cpp create mode 100644 src/Model/PhasorDynamics/Bus/BusSignal.hpp diff --git a/buildsystem/spack/spack b/buildsystem/spack/spack index ba17e3f5f..4c05697f7 160000 --- a/buildsystem/spack/spack +++ b/buildsystem/spack/spack @@ -1 +1 @@ -Subproject commit ba17e3f5fde40fd3012f41929712b2d877c8cf56 +Subproject commit 4c05697f7518269c4fd8bdb9d85cb4d124c60d01 diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index f61eaf6bd..aff71cc43 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -44,6 +44,17 @@ namespace GridKit { return BusTypeT::DEFAULT; } + + // TODO Need to remove these + ScalarT& read() override + { + return y_[0]; + } + + void send(ScalarT& value) override + { + } + virtual ScalarT& Vr() override { diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 8e7e81d80..a4d5d7138 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -42,6 +42,16 @@ namespace GridKit return BusTypeT::SLACK; } + // TODO Need to remove these + ScalarT& read() override + { + return y_[0]; + } + + void send(ScalarT& value) override + { + } + virtual ScalarT& Vr() override { return Vr_; diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.cpp b/src/Model/PhasorDynamics/Bus/BusSignal.cpp new file mode 100644 index 000000000..3d7dec021 --- /dev/null +++ b/src/Model/PhasorDynamics/Bus/BusSignal.cpp @@ -0,0 +1,114 @@ + +#include "BusSignal.hpp" + +#include +#include + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + + + template + BusSignal::BusSignal(const DataT& data) + : BusBase(data.bus_id) + { + size_ = 1; + } + + + template + int BusSignal::allocate() + { + // Temporary while we use std::vector in the code + size_t size = static_cast(size_); + + // Resize component model data + f_.resize(size); + y_.resize(size); + yp_.resize(size); + tag_.resize(size); + + fB_.resize(size); + yB_.resize(size); + ypB_.resize(size); + + return 0; + } + + template + int BusSignal::tagDifferentiable() + { + tag_[0] = false; + return 0; + } + + template + int BusSignal::initialize() + { + /// Possible since not being used it causes issue? + y_[0] = 0.0; + yp_[0] = 0.0; + + return 0; + } + + template + int BusSignal::evaluateResidual() + { + // One side of equality of signal. Reference component + // must add to this residual after this function has been called. + f_[0] = - y_[0]; + + return 0; + } + + template + int BusSignal::evaluateJacobian() + { + return 0; + } + + template + int BusSignal::initializeAdjoint() + { + // std::cout << "Initialize BusSignal..." << std::endl; + yB_[0] = 0.0; + ypB_[0] = 0.0; + + return 0; + } + + + template + int BusSignal::evaluateAdjointResidual() + { + fB_[0] = 0.0; + + return 0; + } + + template + int BusSignal::evaluateIntegrand() + { + return 0; + } + + + template + int BusSignal::evaluateAdjointIntegrand() + { + return 0; + } + + // Available template instantiations + template class BusSignal; + template class BusSignal; + template class BusSignal; + template class BusSignal; + + } // namespace PhasorDynamics +} // namespace GridKit \ No newline at end of file diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp new file mode 100644 index 000000000..7f3fd6ef2 --- /dev/null +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -0,0 +1,101 @@ + +#pragma once + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + + // TODO change base class so there is no Vr and Vi + + template + class BusSignal : public BusBase + { + using BusBase::size_; + using BusBase::y_; + using BusBase::yp_; + using BusBase::yB_; + using BusBase::ypB_; + using BusBase::f_; + using BusBase::fB_; + using BusBase::tag_; + + public: + + using real_type = typename BusBase::real_type; + using DataT = BusData; + + BusSignal(const DataT& data); + + ~BusSignal() + { + } + + virtual int allocate() override; + virtual int tagDifferentiable() override; + virtual int initialize() override; + virtual int evaluateResidual() override; + virtual int evaluateIntegrand() override; + virtual int evaluateJacobian() override; + virtual int initializeAdjoint() override; + virtual int evaluateAdjointIntegrand() override; + virtual int evaluateAdjointResidual() override; + + ScalarT& read() override + { + return y_[0]; + } + + // Not a hard write -> adds to equality constraint + void send(ScalarT& value) override + { + f_[0] += value; + } + + + // TODO remove jsut junk so it compiles + ScalarT& Vr() override + { + return y_[0]; + } + const ScalarT& Vr() const override + { + return y_[0]; + } + ScalarT& Vi() override + { + return y_[0]; + } + + const ScalarT& Vi() const override + { + return y_[0]; + } + + ScalarT& Ir() override + { + return y_[0]; + } + + const ScalarT& Ir() const override + { + return y_[0]; + } + + ScalarT& Ii() override + { + return y_[0]; + } + + const ScalarT& Ii() const override + { + return y_[0]; + } + + + }; + + } // namespace PhasorDynamics +} // namespace GridKit \ No newline at end of file diff --git a/src/Model/PhasorDynamics/Bus/CMakeLists.txt b/src/Model/PhasorDynamics/Bus/CMakeLists.txt index b11fe63ac..db8a5b85d 100644 --- a/src/Model/PhasorDynamics/Bus/CMakeLists.txt +++ b/src/Model/PhasorDynamics/Bus/CMakeLists.txt @@ -7,6 +7,7 @@ gridkit_add_library(phasor_dynamics_bus SOURCES Bus.cpp + BusSignal.cpp BusInfinite.cpp OUTPUT_NAME gridkit_phasor_dynamics_bus) diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 0f2ca0945..adb0522a6 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -72,6 +72,9 @@ namespace GridKit msa = max_steps_; } + virtual ScalarT& read() = 0; + virtual void send(ScalarT& value) = 0; + virtual ScalarT& Vr() = 0; virtual const ScalarT& Vr() const = 0; virtual ScalarT& Vi() = 0; diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index 0b5fb0e33..ae0a9879f 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -11,7 +11,7 @@ add_executable(test_phasor_branch runBranchTests.cpp) target_link_libraries(test_phasor_branch GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_bus) -add_executable(test_case_format runCaseFormatTests.cpp) +#add_executable(test_case_format runCaseFormatTests.cpp) add_executable(test_phasor_load runLoadTests.cpp) target_link_libraries(test_phasor_load GRIDKIT::phasor_dynamics_load @@ -41,7 +41,7 @@ target_link_libraries(test_phasor_system GRIDKIT::phasor_dynamics_load add_test(NAME PhasorDynamicsBusTest COMMAND $) add_test(NAME PhasorDynamicsBranchTest COMMAND $) -add_test(NAME PhasorDynamicsCaseFormatTest COMMAND $) +#add_test(NAME PhasorDynamicsCaseFormatTest COMMAND $) add_test(NAME PhasorDynamicsGenrouTest COMMAND $) add_test(NAME PhasorDynamicsGovernorTgov1Test COMMAND $) add_test(NAME PhasorDynamicsGenClassicalTest COMMAND $) @@ -50,7 +50,7 @@ add_test(NAME PhasorDynamicsSystemTest COMMAND $ install(TARGETS test_phasor_bus test_phasor_branch - test_case_format +# test_case_format test_phasor_load test_phasor_genrou test_phasor_governortgov1 From 4aa2eb4b356f5caca7816b7a7a25c6c321f92dbf Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:41:04 -0500 Subject: [PATCH 36/89] edit: source model class interaction with Signal [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 32 ++++ .../PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 36 ++--- .../PhasorDynamics/Governor/Tgov1/Tgov1.hpp | 17 +-- .../Governor/Tgov1/Tgov1Data.hpp | 4 + src/Model/PhasorDynamics/GovernorBase.hpp | 21 --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 140 ++++-------------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 35 +---- .../GENROUwS/GenrouData.hpp | 28 ++-- src/Model/PhasorDynamics/SystemModel.hpp | 36 ++++- 9 files changed, 140 insertions(+), 209 deletions(-) delete mode 100644 src/Model/PhasorDynamics/GovernorBase.hpp diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 7d7d1a1fe..9e3d3aeab 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -26,6 +26,38 @@ namespace GridKit { } + // Adds the generic input signal to the component + void safeSend(bus_type* signal, ScalarT value) + { + if (signal) + { + signal->send(value); + } + + } + + void safeInit(bus_type* signal, ScalarT value) + { + if (signal) + { + signal->y()[0] = value; + } + + } + + ScalarT safeRead(bus_type* signal, ScalarT default_val) + { + if (signal) + { + return signal->read(); + } + else + { + return default_val; + } + + } + virtual IdxT size() override { return size_; diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index af140c130..7446bbd4e 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -12,7 +12,6 @@ #include #include -#include #define _USE_MATH_DEFINES @@ -30,8 +29,9 @@ namespace GridKit * @param data TGOV1 Data Object */ template - Tgov1::Tgov1(machine_type* machine, const model_data_type& data) - : machine_(machine), + Tgov1::Tgov1() + : pmech_(nullptr), + omega_(nullptr), R_(data.R), Pvmin_(data.Pvmin), Pvmax_(data.Pvmax), @@ -46,8 +46,9 @@ namespace GridKit } template - Tgov1::Tgov1(machine_type* machine) - : machine_(machine), + Tgov1::Tgov1() + : pmech_(nullptr), + omega_(nullptr), R_(0.05), Pvmin_(0), Pvmax_(1), @@ -85,7 +86,7 @@ namespace GridKit { // Initial mechanical = initial electric torque - ScalarT p0 = machine_->getTorque(); + ScalarT p0 = this->safeRead(pmech_, 1); // Input Variables (Parameter for now) pref_ = R_ * p0; @@ -167,8 +168,9 @@ namespace GridKit int Tgov1::evaluateResidual() { - // Input Variables - ScalarT omega = machine_->getSpeed(); + // Ext Variables + ScalarT omega0 = 0; + ScalarT omega = this->safeRead(omega_, omega0); // Read Internal Variables ScalarT ptx = y_[0]; // y0 - Ptx @@ -183,13 +185,14 @@ namespace GridKit ScalarT f = (-pv + (pref_ - omega) / R_) / T1_; ScalarT valv_ind = this->indicator(pv, f); - // Internal Differential Equations + // Equations f_[0] = -ptx_dot + pv - (ptx + T2_ * pv) / T3_; f_[1] = -pv_dot + valv_ind * f; - - // Internal Algebraic Equations f_[2] = -pmech + (ptx + T2_ * pv) / T3_ - (Dt_ * omega); + // Write External + this->safeSend(pmech_, pmech); + return 0; } @@ -207,17 +210,6 @@ namespace GridKit return 0; } - /** - * @brief The mechanical power output. - * @warning This is not yet accessed by anything. The Genrou class will - * need to access this instead of a constant Pmech. - * @return ScalarT - Mechanical output power value. - */ - template - ScalarT& Tgov1::Pmech() - { - return y_[2]; - } // Available template instantiations template class Tgov1; diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp index 2383775ba..174d0ca0f 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp @@ -9,7 +9,6 @@ #pragma once #include -#include // Forward declarations namespace GridKit @@ -23,7 +22,7 @@ namespace GridKit } // namespace Governor template - class Genrou; + class BusBase; } // namespace PhasorDynamics } // namespace GridKit @@ -47,13 +46,15 @@ namespace GridKit using Component::y_; using Component::yp_; - using machine_type = Genrou; using real_type = typename Component::real_type; using model_data_type = Tgov1Data; + using bus_type = BusBase; public: - Tgov1(machine_type* machine, const model_data_type& data); - Tgov1(machine_type* machine); + Tgov1(); + Tgov1(bus_type* pmech, + bus_type* omega, + const model_data_type& data); ~Tgov1() = default; int allocate() override; @@ -68,12 +69,10 @@ namespace GridKit { } - // Read Access to Pmech - ScalarT& Pmech() override; - private: // Associated Machine Model - machine_type* machine_; + bus_type* pmech_; + bus_type* omega_; // Input parameters real_type R_; diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp index 55a645033..e94ef3721 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp @@ -32,6 +32,10 @@ namespace GridKit RealT Pvmax{1.0}; ///< Max Valve Power RealT Pvmin{0.0}; ///< Min Valve Power RealT Dt{0.0}; ///< + + IdxT signal_pmech; ///< Unique ID of the bus providing the pmech signal + IdxT signal_speed; ///< Unique ID of the bus providing the speed signal + }; } // namespace Governor } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/GovernorBase.hpp b/src/Model/PhasorDynamics/GovernorBase.hpp deleted file mode 100644 index 04d85a5f7..000000000 --- a/src/Model/PhasorDynamics/GovernorBase.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include - -namespace GridKit -{ - namespace PhasorDynamics - { - /*! - * @brief GovernorBase model implementation base class. - * - */ - template - class GovernorBase - { - public: - virtual ScalarT& Pmech() = 0; - }; - - } // namespace PhasorDynamics -} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 3bc8891e4..94a01c7d2 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -14,7 +14,7 @@ #include #include -#include // <- TODO: Temporary, to be removed. +#include #include #define _USE_MATH_DEFINES @@ -23,21 +23,14 @@ namespace GridKit { namespace PhasorDynamics { - /*! - * @brief Constructor for a pi-model branch - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ + template Genrou::Genrou(bus_type* bus, IdxT unit_id) : bus_(bus), + pmech_(nullptr), + omega_(nullptr), busID_(0), unit_id_(unit_id), - gov_(nullptr), // <- TODO: Temporary, to be removed. p0_(0.), q0_(0.), H_(3.), @@ -65,68 +58,21 @@ namespace GridKit (void) unit_id_; } - /*! - * @brief Constructor for a pi-model branch - * - */ - template - Genrou::Genrou(bus_type* bus, - IdxT unit_id, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12) - : bus_(bus), - busID_(0), - unit_id_(unit_id), - gov_(nullptr), // <- TODO: Temporary, to be removed. - p0_(p0), - q0_(q0), - H_(H), - D_(D), - Ra_(Ra), - Tdop_(Tdop), - Tdopp_(Tdopp), - Tqopp_(Tqopp), - Tqop_(Tqop), - Xd_(Xd), - Xdp_(Xdp), - Xdpp_(Xdpp), - Xq_(Xq), - Xqp_(Xqp), - Xqpp_(Xqpp), - Xl_(Xl), - S10_(S10), - S12_(S12) - { - size_ = 20; - setDerivedParams(); - } - /*! * @brief Constructor for the GENROU generator with saturation. * */ template - Genrou::Genrou(bus_type* bus, const model_data_type& data) + Genrou::Genrou( + bus_type* bus, + bus_type* pmech, + bus_type* omega, + const model_data_type& data) : bus_(bus), + pmech_(pmech), + omega_(omega), busID_(0), unit_id_(1), - gov_(nullptr), // <- TODO: Temporary, to be removed. p0_(data.p0), q0_(data.q0), H_(data.H), @@ -150,17 +96,6 @@ namespace GridKit setDerivedParams(); } - // /** - // * @brief Destroy the Genrou - // * - // * @tparam ScalarT - // * @tparam IdxT - // */ - // template - // Genrou::~Genrou() - // { - // // std::cout << "Destroy Genrou..." << std::endl; - // } /*! * @brief allocate method computes sparsity pattern of the Jacobian. @@ -236,12 +171,17 @@ namespace GridKit y_[19] = B_ * (vd * sin(delta) + vq * cos(delta)) + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ - // Set Setpoint mechanical power, which may or may not be used - pmech_set_ = Te; for (IdxT i = 0; i < size_; ++i) yp_[static_cast(i)] = 0.0; + + // Initialize External Inputs + // To do make this from init function + pmech_set_ = Te; + this->safeInit(pmech_, Te); + + return 0; } @@ -266,6 +206,13 @@ namespace GridKit template int Genrou::evaluateResidual() { + + // Inputs + ScalarT vr = Vr(); + ScalarT vi = Vi(); + ScalarT pmech = this->safeRead(pmech_, pmech_set_); + + /* Read variables */ ScalarT delta = y_[0]; ScalarT omega = y_[1]; @@ -287,17 +234,6 @@ namespace GridKit ScalarT efd = y_[17]; ScalarT inr = y_[18]; ScalarT ini = y_[19]; - ScalarT vr = Vr(); - ScalarT vi = Vi(); - ScalarT pmech; - if (gov_) - { - pmech = gov_->Pmech(); - } - else - { - pmech = pmech_set_; - } /* Read derivatives */ ScalarT delta_dot = yp_[0]; @@ -339,6 +275,9 @@ namespace GridKit Ir() += inr - Vr() * G_ + Vi() * B_; Ii() += ini - Vr() * B_ - Vi() * G_; + // Outputs + this->safeSend(omega_, omega); + return 0; } @@ -357,30 +296,7 @@ namespace GridKit return 0; } - /** - * @brief Access generator relative speed - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - ScalarT Genrou::getSpeed() - { - return y_[1]; - } - template - ScalarT Genrou::getTorque() - { - return y_[12]; - } - - template - void Genrou::setgovenor(gov_type* gov) - { - gov_ = gov; - } template void Genrou::setDerivedParams() diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index ffeed60af..65cc913d8 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -18,9 +18,6 @@ namespace GridKit template class BusBase; - template - class GovernorBase; // <- TODO: Temporary, to be removed. - template struct GenrouData; } // namespace PhasorDynamics @@ -44,33 +41,15 @@ namespace GridKit using Component::yp_; using real_type = typename Component::real_type; - using gov_type = GovernorBase; using bus_type = BusBase; using model_data_type = GenrouData; public: Genrou(bus_type* bus, IdxT unit_id); - Genrou(bus_type* bus, const model_data_type& data); Genrou(bus_type* bus, - IdxT unit_id, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12); + bus_type* pmech_, + bus_type* omega_, + const model_data_type& data); ~Genrou() = default; int allocate() override; @@ -85,13 +64,7 @@ namespace GridKit { } - // Temporary access functions for governor - // Should be abstracted - ScalarT getSpeed(); - ScalarT getTorque(); - // Temporary set governor function until SignalBus implemented - void setgovenor(gov_type* gov); private: void setDerivedParams(); @@ -119,6 +92,8 @@ namespace GridKit private: /* Identification */ bus_type* bus_; + bus_type* pmech_; + bus_type* omega_; const int busID_; IdxT unit_id_; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp index f7836f87f..0ceec8d0e 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp @@ -32,26 +32,26 @@ namespace GridKit { RealT p0{0.0}; ///< Initial active power RealT q0{0.0}; ///< Initial reactive power - RealT H{0.0}; ///< Rotor inertia + RealT H{3.0}; ///< Rotor inertia RealT D{0.0}; ///< Damping coefficient RealT Ra{0.0}; ///< Winding resistance - RealT Tdop{0.0}; ///< Open circuit direct axis transient time - RealT Tdopp{0.0}; ///< Open circuit direct axis sub-transient time - RealT Tqop{0.0}; ///< Open circuit quadrature axis transient - RealT Tqopp{0.0}; ///< Open circuit quadrature axis sub-transient time - RealT Xd{0.0}; ///< Direct axis synchronous reactance - RealT Xdp{0.0}; ///< Direct axis transient reactance - RealT Xdpp{0.0}; ///< Direct axis sub-transient reactance - RealT Xq{0.0}; ///< Quadrature axis synchronous reactance - RealT Xqp{0.0}; ///< Quadrature axis transient reactance - RealT Xqpp{0.0}; ///< Quadrature axis sub-transient reactance - RealT Xl{0.0}; ///< Stator leakage reactance + RealT Tdop{7.0}; ///< Open circuit direct axis transient time + RealT Tdopp{0.04}; ///< Open circuit direct axis sub-transient time + RealT Tqop{0.75}; ///< Open circuit quadrature axis transient + RealT Tqopp{0.05}; ///< Open circuit quadrature axis sub-transient time + RealT Xd{2.1}; ///< Direct axis synchronous reactance + RealT Xdp{0.2}; ///< Direct axis transient reactance + RealT Xdpp{0.18}; ///< Direct axis sub-transient reactance + RealT Xq{0.5}; ///< Quadrature axis synchronous reactance + RealT Xqp{0.5}; ///< Quadrature axis transient reactance + RealT Xqpp{0.18}; ///< Quadrature axis sub-transient reactance + RealT Xl{0.15}; ///< Stator leakage reactance RealT S10{0.0}; ///< Saturation factor at 1.0 pu flux RealT S12{0.0}; ///< Saturation factor at 1.2 pu flux IdxT bus_id{0}; ///< Unique ID of the connecting bus - std::optional exciter_signal; ///< Unique ID of the bus providing the exciter signal - std::optional governor_signal; ///< Unique ID of the bus providing the governor signal + IdxT signal_pmech{0}; ///< Unique ID of the bus providing the pmech signal + IdxT signal_speed{0}; ///< Unique ID of the bus providing the speed signal std::optional freq_base; ///< Override for the system-wide base frequency std::optional va_base; ///< Override for the system-wide power base diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 7072b4169..c8820dc75 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -15,6 +15,7 @@ #include #include #include +#include namespace GridKit { @@ -105,10 +106,43 @@ namespace GridKit // Add generators for (const auto& gendata : data.genrou) { - auto* gen = new Genrou(getBus(gendata.bus_id), gendata); + + // Simplify this block + Genrou* gen; + if (gendata.signal_pmech > 0) + { + gen = new Genrou( + getBus(gendata.bus_id), + getBus(gendata.signal_pmech), + getBus(gendata.signal_speed), + gendata); + } + else + { + gen = new Genrou( + getBus(gendata.bus_id), + nullptr, + nullptr, + gendata); + } + /* Need to add signals to gendata class */ + addComponent(gen); } + // Add governors + for (const auto& govdata : data.gov) + { + + /* Need to add signals to gendata class */ + auto* gov = new Governor::Tgov1( + getBus(govdata.signal_pmech), + getBus(govdata.signal_speed), + govdata); + + addComponent(gov); + } + // Add faults for (const auto& faultdata : data.bus_fault) { From 846e920de297c53a45d18a26bc2f9b77c18e6ca6 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:45:59 -0500 Subject: [PATCH 37/89] add: example TwoBusTgov1 new interface [skip ci] --- .../Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 76 +++++-------------- src/Model/PhasorDynamics/Component.hpp | 3 +- 2 files changed, 23 insertions(+), 56 deletions(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 177964547..56ba9e4d8 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -59,6 +59,16 @@ int main() data.bus[1].Vr0 = 1.0; data.bus[1].Vi0 = 0.0; + // Pmech Signal Bus + data.bus[2].bus_id = 2; + data.bus[2].bus_type = BusData::BusType::SIGNAL; + + // Speed Signal Bus + data.bus[3].bus_id = 3; + data.bus[3].bus_type = BusData::BusType::SIGNAL; + + + // Set branch data data.branch.resize(1); @@ -76,68 +86,24 @@ int main() data.bus_fault[0].X = 1e-3; data.bus_fault[0].status = false; - // - // Instantiate system model - // - - SystemModel sys(data); - // Set generator data data.genrou.resize(1); - data.genrou[0].p0 = 1.; data.genrou[0].q0 = 0.05013; - data.genrou[0].H = 3.; - data.genrou[0].D = 0.; - data.genrou[0].Ra = 0.; - data.genrou[0].Tdop = 7.; - data.genrou[0].Tdopp = .04; - data.genrou[0].Tqopp = .05; - data.genrou[0].Tqop = .75; - data.genrou[0].Xd = 2.1; - data.genrou[0].Xdp = 0.2; - data.genrou[0].Xdpp = 0.18; - data.genrou[0].Xq = 0.5; - data.genrou[0].Xqp = 0.5; - data.genrou[0].Xqpp = 0.18; - data.genrou[0].Xl = 0.15; - data.genrou[0].S10 = 0.; - data.genrou[0].S12 = 0.; + data.genrou[0].signal_pmech = 2; + data.genrou[0].signal_speed = 3; + // Governor data.gov.resize(1); + data.gov[0].signal_speed = 3; + data.gov[0].signal_pmech = 2; // Signal Bus ID + + // + // Instantiate system model + // + + SystemModel sys(data); - // Set Gov data (Default PW values) - data.gov[0].R = 0.05; - data.gov[0].Pvmin = 0; - data.gov[0].Pvmax = 1.0; - data.gov[0].T1 = 0.5; - data.gov[0].T2 = 2.5; - data.gov[0].T3 = 7.5; - data.gov[0].Dt = 0; - - // Manual add gen & gov components - // This is a hack since SignalBus not implemented - - // Create Pointers first - Genrou* gen; - Governor::Tgov1* gov; - - // Instatiate Genrou & add to system model - gen = new Genrou( - sys.getBus(0), - data.genrou[0]); - - // Instatiate GovernorTgov1 & add to system model - gov = new Governor::Tgov1( - gen, - data.gov[0]); - gen->setgovenor(gov); - - // Add Generator and Governor to System - sys.addComponent(gen); - sys.addComponent(gov); - - sys.allocate(); // Get access to the fault auto* fault = sys.getBusFault(0); diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 9e3d3aeab..6365493b6 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -20,7 +20,8 @@ namespace GridKit { public: using real_type = typename Model::Evaluator::real_type; - + using bus_type = BusBase; + Component() : size_(0) { From fc0ddeac59857020c54ff4cc61ef6b6ca9af1046 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:49:41 -0500 Subject: [PATCH 38/89] rem: old syntax [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 2 ++ src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt | 2 -- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 6365493b6..da5c2845e 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -6,6 +6,8 @@ #include #include +#include "BusBase.hpp" + namespace GridKit { namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt index fae3999ec..542384444 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt +++ b/src/Model/PhasorDynamics/Governor/Tgov1/CMakeLists.txt @@ -7,7 +7,5 @@ gridkit_add_library(phasor_dynamics_governortgov1 SOURCES Tgov1.cpp - LINK_LIBRARIES - GRIDKIT::phasor_dynamics_genrou OUTPUT_NAME gridkit_phasor_dynamics_governortgov1) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp index 174d0ca0f..ed56c3164 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp @@ -35,7 +35,7 @@ namespace GridKit { template - class Tgov1 : public Component, public GovernorBase + class Tgov1 : public Component { using Component::alpha_; using Component::f_; From 38571bbd8b36546a59f49b7bc470ddaf6c4f2832 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:52:11 -0500 Subject: [PATCH 39/89] add: correct constructor [skip ci] --- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 7446bbd4e..987e58568 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -29,9 +29,12 @@ namespace GridKit * @param data TGOV1 Data Object */ template - Tgov1::Tgov1() - : pmech_(nullptr), - omega_(nullptr), + Tgov1::Tgov1( + bus_type* pmech, + bus_type* omega, + const model_data_type& data) + : pmech_(pmech), + omega_(omega), R_(data.R), Pvmin_(data.Pvmin), Pvmax_(data.Pvmax), @@ -44,7 +47,6 @@ namespace GridKit // 3 Internal Variables size_ = 3; } - template Tgov1::Tgov1() : pmech_(nullptr), From 8db804dc13104511eac17003dd8ebab5c07f4644 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:55:59 -0500 Subject: [PATCH 40/89] minor: type name [skip ci] --- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 65cc913d8..0a90fbfbe 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -97,9 +97,6 @@ namespace GridKit const int busID_; IdxT unit_id_; - // Governor Pointer - gov_type* gov_; - /* Initial terminal conditions */ ScalarT p0_; ScalarT q0_; From c710e83979b755a029cd6c53daad61a0e63346b1 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 07:59:36 -0500 Subject: [PATCH 41/89] cmake: reflect changes in SystemModel [skip ci] --- .../Tiny/TwoBus/Basic/CMakeLists.txt | 1 + .../PhasorDynamics/GovernorTgov1Tests.hpp | 35 ++----------------- 2 files changed, 4 insertions(+), 32 deletions(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Basic/CMakeLists.txt b/examples/PhasorDynamics/Tiny/TwoBus/Basic/CMakeLists.txt index 38309c95b..42d9a2573 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Basic/CMakeLists.txt +++ b/examples/PhasorDynamics/Tiny/TwoBus/Basic/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(TwoBusBasic GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS TwoBusBasic RUNTIME DESTINATION bin) diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp index 479141082..ffa73bf1b 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -27,13 +27,8 @@ namespace GridKit { TestStatus success = true; - auto* bus = new PhasorDynamics::Bus(1.0, 0.0); - - PhasorDynamics::Genrou* machine = - new PhasorDynamics::Genrou(bus, 1); - PhasorDynamics::Governor::Tgov1* gov = - new PhasorDynamics::Governor::Tgov1(machine); + new PhasorDynamics::Governor::Tgov1(); success *= (gov != nullptr); @@ -41,11 +36,6 @@ namespace GridKit { delete gov; } - if (machine) - { - delete machine; - } - delete bus; return success.report(__func__); } @@ -64,27 +54,8 @@ namespace GridKit TestStatus success = true; PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::Genrou gen(&bus, - 1, - 1, - 0.05013, - 3, - 0, - 0, - 7, - 0.04, - 0.05, - 0.75, - 2.1, - 0.2, - 0.18, - 0.5, - 0.5, - 0.18, - 0.15, - 0, - 0); - PhasorDynamics::Governor::Tgov1 gov(&gen); + PhasorDynamics::Genrou gen(&bus,1); + PhasorDynamics::Governor::Tgov1 gov; bus.allocate(); bus.initialize(); From f56cff56672b17b092a501c230ec8d6aa216280a Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:01:15 -0500 Subject: [PATCH 42/89] append: BusFactory [skip ci] --- src/Model/PhasorDynamics/Bus/BusData.hpp | 1 + src/Model/PhasorDynamics/Bus/BusFactory.hpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/Model/PhasorDynamics/Bus/BusData.hpp b/src/Model/PhasorDynamics/Bus/BusData.hpp index fb06b19d0..6f58722c8 100644 --- a/src/Model/PhasorDynamics/Bus/BusData.hpp +++ b/src/Model/PhasorDynamics/Bus/BusData.hpp @@ -45,6 +45,7 @@ namespace GridKit INVALID, DEFAULT, SLACK, + SIGNAL }; BusType bus_type{BusType::INVALID}; ///< The kind of bus this data is for diff --git a/src/Model/PhasorDynamics/Bus/BusFactory.hpp b/src/Model/PhasorDynamics/Bus/BusFactory.hpp index 84c6e26cc..13375cd64 100644 --- a/src/Model/PhasorDynamics/Bus/BusFactory.hpp +++ b/src/Model/PhasorDynamics/Bus/BusFactory.hpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace GridKit { @@ -31,6 +32,9 @@ namespace GridKit case BusTypeT::SLACK: bus = new BusInfinite(data); break; + case BusTypeT::SIGNAL: + bus = new BusSignal(data); + break; default: // Throw exception std::cout << "Bus type " << static_cast(data.bus_type) << " unrecognized.\n"; From b1a3892ba771ee8b12ec83c0d00434d9ffbc0e3f Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:05:00 -0500 Subject: [PATCH 43/89] cmake: more gov link [skip ci] --- examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt | 1 + examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt | 1 + examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt b/examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt index 74cd09e7f..9e455288e 100644 --- a/examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt +++ b/examples/PhasorDynamics/Small/TenGen/Classical/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(TenGenClassical GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_gen_classical + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS TenGenClassical RUNTIME DESTINATION bin) diff --git a/examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt b/examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt index c5c3e6e45..9aced7a2b 100644 --- a/examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt +++ b/examples/PhasorDynamics/Small/TenGen/Genrou/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(TenGenGenrou GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS TenGenGenrou RUNTIME DESTINATION bin) diff --git a/examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt b/examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt index ec4287860..e0c13f635 100644 --- a/examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt +++ b/examples/PhasorDynamics/Tiny/ThreeBus/Basic/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(ThreeBusBasic GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS ThreeBusBasic RUNTIME DESTINATION bin) From c9e700d6761723154a8822cd6a14712a515ffb8d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:14:59 -0500 Subject: [PATCH 44/89] edit: back support tengen [skip ci] --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 49 +++++++++++++++++++ .../SynchronousMachine/GENROUwS/Genrou.hpp | 20 ++++++++ 2 files changed, 69 insertions(+) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 94a01c7d2..c5014e3d9 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -96,6 +96,55 @@ namespace GridKit setDerivedParams(); } + template + Genrou::Genrou(bus_type* bus, + IdxT unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12) + : bus_(bus), + pmech_(nullptr), + omega_(nullptr), + busID_(0), + unit_id_(unit_id), + p0_(p0), + q0_(q0), + H_(H), + D_(D), + Ra_(Ra), + Tdop_(Tdop), + Tdopp_(Tdopp), + Tqopp_(Tqopp), + Tqop_(Tqop), + Xd_(Xd), + Xdp_(Xdp), + Xdpp_(Xdpp), + Xq_(Xq), + Xqp_(Xqp), + Xqpp_(Xqpp), + Xl_(Xl), + S10_(S10), + S12_(S12) + { + size_ = 20; + setDerivedParams(); + } + /*! * @brief allocate method computes sparsity pattern of the Jacobian. diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 0a90fbfbe..b4116d9e7 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -50,6 +50,26 @@ namespace GridKit bus_type* pmech_, bus_type* omega_, const model_data_type& data); + Genrou(bus_type* bus, + IdxT unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12); ~Genrou() = default; int allocate() override; From e40b3a23acf6bb1a2b391b2065ebbfc330f4dd2d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:17:03 -0500 Subject: [PATCH 45/89] add: gov link to sys [skip ci] --- tests/UnitTests/PhasorDynamics/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index ae0a9879f..619342d53 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -36,6 +36,7 @@ add_executable(test_phasor_system runSystemTests.cpp) target_link_libraries(test_phasor_system GRIDKIT::phasor_dynamics_load GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_bus) From 7e69b3f94586d5bde73f213a0b081817db0244ba Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 08:25:53 -0500 Subject: [PATCH 46/89] edit: safe funcs pass by ref [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 6 +++--- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index da5c2845e..31de4b083 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -30,7 +30,7 @@ namespace GridKit } // Adds the generic input signal to the component - void safeSend(bus_type* signal, ScalarT value) + void safeSend(bus_type* signal, ScalarT& value) { if (signal) { @@ -39,7 +39,7 @@ namespace GridKit } - void safeInit(bus_type* signal, ScalarT value) + void safeInit(bus_type* signal, ScalarT& value) { if (signal) { @@ -48,7 +48,7 @@ namespace GridKit } - ScalarT safeRead(bus_type* signal, ScalarT default_val) + ScalarT safeRead(bus_type* signal, ScalarT& default_val) { if (signal) { diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 987e58568..10ca5eeaa 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -88,7 +88,8 @@ namespace GridKit { // Initial mechanical = initial electric torque - ScalarT p0 = this->safeRead(pmech_, 1); + ScalarT pdef = 1; + ScalarT p0 = this->safeRead(pmech_, pdef); // Input Variables (Parameter for now) pref_ = R_ * p0; From 937733936029d0ffcbe63e57e4ee975af92f0770 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 12:48:19 -0500 Subject: [PATCH 47/89] syntax: readability [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.cpp | 1 + src/Model/PhasorDynamics/Bus/BusSignal.hpp | 36 ++++++++++++++++++++-- src/Model/PhasorDynamics/Component.hpp | 26 ++++++++++++++-- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.cpp b/src/Model/PhasorDynamics/Bus/BusSignal.cpp index 3d7dec021..f144ab991 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.cpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.cpp @@ -17,6 +17,7 @@ namespace GridKit : BusBase(data.bus_id) { size_ = 1; + is_initialized_ = false; } diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 7f3fd6ef2..5726e8d27 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -43,12 +43,41 @@ namespace GridKit virtual int evaluateAdjointIntegrand() override; virtual int evaluateAdjointResidual() override; - ScalarT& read() override + + /** + * @brief A one-time initialization function + * that can be called by any. + * + * @return state value of signal + */ + void initial_value(ScalarT& value) + { + if(is_initialized_) + { + std::cout << "ERROR!"; + } + else{ + y_[0] = value; + is_initialized_ = true; + } + } + + /** + * @brief A read only accessor to the signal state + * + * @return state value of signal + */ + const ScalarT& read() override { return y_[0]; } - // Not a hard write -> adds to equality constraint + /** + * @brief A write operation only available + * to the source signal + * + * @param value The value of the signal + */ void send(ScalarT& value) override { f_[0] += value; @@ -93,7 +122,10 @@ namespace GridKit { return y_[0]; } + + private: + bool is_initialized_; }; diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 31de4b083..518c37505 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -29,7 +29,13 @@ namespace GridKit { } - // Adds the generic input signal to the component + /** + * @brief A helper function to easily init + * a signal value wiithout needing to check if initialized + * + * @param signal The signal bus object pointer + * @param value The value to send to the equality constraint + */ void safeSend(bus_type* signal, ScalarT& value) { if (signal) @@ -39,15 +45,31 @@ namespace GridKit } + /** + * @brief A helper function to easily init + * a signal value wiithout needing to check if initialized + * + * This is implemented + * in such a way that any component can call + * this function and write + */ void safeInit(bus_type* signal, ScalarT& value) { if (signal) { - signal->y()[0] = value; + signal->initial_value(value); } } + /** + * @brief A helper function to easily read + * the state of the signal without checking nullptr + * + * + * @param signal The signal bus object pointer + * @param default_val The value to return if no signal + */ ScalarT safeRead(bus_type* signal, ScalarT& default_val) { if (signal) From a8bc70cb607eba1aeda9c0b2c0af4e087ba03a05 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 12:51:57 -0500 Subject: [PATCH 48/89] read: const modifier preference [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 2 +- src/Model/PhasorDynamics/BusBase.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index aff71cc43..d0f649a38 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -46,7 +46,7 @@ namespace GridKit } // TODO Need to remove these - ScalarT& read() override + const ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index a4d5d7138..1b1875c66 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -43,7 +43,7 @@ namespace GridKit } // TODO Need to remove these - ScalarT& read() override + const ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index adb0522a6..b8806c725 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -72,7 +72,7 @@ namespace GridKit msa = max_steps_; } - virtual ScalarT& read() = 0; + virtual const ScalarT& read() = 0; virtual void send(ScalarT& value) = 0; virtual ScalarT& Vr() = 0; From bbff21855f7aa81457b7c79cf1292d41a2c8aac6 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 12:55:13 -0500 Subject: [PATCH 49/89] add: initial value function to BusBase [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 4 ++++ src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 4 ++++ src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- src/Model/PhasorDynamics/BusBase.hpp | 1 + 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index d0f649a38..52c064ed6 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -44,6 +44,10 @@ namespace GridKit { return BusTypeT::DEFAULT; } + + void initial_value(ScalarT& value) override + { + } // TODO Need to remove these const ScalarT& read() override diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 1b1875c66..f5522baa1 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -42,6 +42,10 @@ namespace GridKit return BusTypeT::SLACK; } + void initial_value(ScalarT& value) override + { + } + // TODO Need to remove these const ScalarT& read() override { diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 5726e8d27..187938993 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -50,7 +50,7 @@ namespace GridKit * * @return state value of signal */ - void initial_value(ScalarT& value) + void initial_value(ScalarT& value) override { if(is_initialized_) { diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index b8806c725..ab03677fb 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -72,6 +72,7 @@ namespace GridKit msa = max_steps_; } + virtual void initial_value(ScalarT& value) = 0; virtual const ScalarT& read() = 0; virtual void send(ScalarT& value) = 0; From 0f575c2adce3556c1ef2bff8df1214f5a62e5f2e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 12:59:07 -0500 Subject: [PATCH 50/89] edit: default not init [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.cpp | 1 - src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.cpp b/src/Model/PhasorDynamics/Bus/BusSignal.cpp index f144ab991..3d7dec021 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.cpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.cpp @@ -17,7 +17,6 @@ namespace GridKit : BusBase(data.bus_id) { size_ = 1; - is_initialized_ = false; } diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 187938993..2aa0b7ee2 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -125,7 +125,7 @@ namespace GridKit private: - bool is_initialized_; + bool is_initialized_{false}; }; From 09f5e2c01fbdbcc77d49a8ac093ecf8ac3a743f5 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 14:34:14 -0500 Subject: [PATCH 51/89] rem: consnt, odd behavior [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- src/Model/PhasorDynamics/BusBase.hpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index 52c064ed6..e9a4e392b 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -50,7 +50,7 @@ namespace GridKit } // TODO Need to remove these - const ScalarT& read() override + ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index f5522baa1..a9a6a9512 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -47,7 +47,7 @@ namespace GridKit } // TODO Need to remove these - const ScalarT& read() override + ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 2aa0b7ee2..60f60ade4 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -67,7 +67,7 @@ namespace GridKit * * @return state value of signal */ - const ScalarT& read() override + ScalarT& read() override { return y_[0]; } diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index ab03677fb..7dab3f767 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -73,7 +73,7 @@ namespace GridKit } virtual void initial_value(ScalarT& value) = 0; - virtual const ScalarT& read() = 0; + virtual ScalarT& read() = 0; virtual void send(ScalarT& value) = 0; virtual ScalarT& Vr() = 0; From e6cfbc27cf13a1b170a0bbff29ad0cbb0ae9a136 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 14:38:26 -0500 Subject: [PATCH 52/89] fix: resize bus vec [skip ci] --- .../PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 56ba9e4d8..a63dcbbbd 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -47,7 +47,7 @@ int main() SystemModelData data; // Set bus data - data.bus.resize(2); + data.bus.resize(4); data.bus[0].bus_id = 0; data.bus[0].bus_type = BusData::BusType::DEFAULT; @@ -60,13 +60,12 @@ int main() data.bus[1].Vi0 = 0.0; // Pmech Signal Bus - data.bus[2].bus_id = 2; + data.bus[2].bus_id = 2; data.bus[2].bus_type = BusData::BusType::SIGNAL; // Speed Signal Bus - data.bus[3].bus_id = 3; - data.bus[3].bus_type = BusData::BusType::SIGNAL; - + data.bus[3].bus_id = 3; + data.bus[3].bus_type = BusData::BusType::SIGNAL; // Set branch data From 24cc333ffb22a1a7679b4f1b1b0c1d4bb53889c4 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 14:50:19 -0500 Subject: [PATCH 53/89] misc ref errors [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 518c37505..98f4e8b64 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -36,7 +36,7 @@ namespace GridKit * @param signal The signal bus object pointer * @param value The value to send to the equality constraint */ - void safeSend(bus_type* signal, ScalarT& value) + void safeSend(bus_type* signal, ScalarT value) { if (signal) { @@ -53,7 +53,7 @@ namespace GridKit * in such a way that any component can call * this function and write */ - void safeInit(bus_type* signal, ScalarT& value) + void safeInit(bus_type* signal, ScalarT value) { if (signal) { @@ -70,7 +70,7 @@ namespace GridKit * @param signal The signal bus object pointer * @param default_val The value to return if no signal */ - ScalarT safeRead(bus_type* signal, ScalarT& default_val) + ScalarT safeRead(bus_type* signal, ScalarT default_val) { if (signal) { From de6cce59be32b6f5d1a42e8648addcc605c2f8b7 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 15:03:29 -0500 Subject: [PATCH 54/89] edit: init fixes [skip ci] --- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 6 ++++-- .../SynchronousMachine/GENROUwS/Genrou.cpp | 12 +++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 10ca5eeaa..496eb6599 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -41,7 +41,8 @@ namespace GridKit T1_(data.T1), T2_(data.T2), T3_(data.T3), - Dt_(data.Dt) + Dt_(data.Dt), + pref_(0), { // 3 Internal Variables @@ -57,7 +58,8 @@ namespace GridKit T1_(0.5), T2_(2.5), T3_(7.5), - Dt_(0) + Dt_(0), + pref_(0), { // 3 Internal Variables diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index c5014e3d9..20047ae7d 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -48,7 +48,9 @@ namespace GridKit Xqpp_(.18), Xl_(.15), S10_(0.), - S12_(0.) + S12_(0.), + pmech_set_(0), + efd_set_(0) { size_ = 20; setDerivedParams(); @@ -90,7 +92,9 @@ namespace GridKit Xqpp_(data.Xqpp), Xl_(data.Xl), S10_(data.S10), - S12_(data.S12) + S12_(data.S12), + pmech_set_(0), + efd_set_(0) { size_ = 20; setDerivedParams(); @@ -139,7 +143,9 @@ namespace GridKit Xqpp_(Xqpp), Xl_(Xl), S10_(S10), - S12_(S12) + S12_(S12), + pmech_set_(0), + efd_set_(0) { size_ = 20; setDerivedParams(); From 82a348ff70438280fbce6b9dacf3a265de61a913 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 15:04:27 -0500 Subject: [PATCH 55/89] edit: constructor error [skip ci] --- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 496eb6599..d8ce50e3c 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -42,7 +42,7 @@ namespace GridKit T2_(data.T2), T3_(data.T3), Dt_(data.Dt), - pref_(0), + pref_(0) { // 3 Internal Variables @@ -59,7 +59,7 @@ namespace GridKit T2_(2.5), T3_(7.5), Dt_(0), - pref_(0), + pref_(0) { // 3 Internal Variables From 833c77cee75ea94fa5abb0b71cde906647b1eb6e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 15:08:54 -0500 Subject: [PATCH 56/89] edit: type consistancny [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 60f60ade4..505e526f3 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -50,7 +50,7 @@ namespace GridKit * * @return state value of signal */ - void initial_value(ScalarT& value) override + void initial_value(ScalarT value) override { if(is_initialized_) { From 890a9afdf5042b48af0c68ac7f1c1d42c04c78ae Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 15:10:20 -0500 Subject: [PATCH 57/89] edit: busbase make change too [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 2 +- src/Model/PhasorDynamics/BusBase.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index e9a4e392b..22269bb4d 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -45,7 +45,7 @@ namespace GridKit return BusTypeT::DEFAULT; } - void initial_value(ScalarT& value) override + void initial_value(ScalarT value) override { } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index a9a6a9512..10ead4609 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -42,7 +42,7 @@ namespace GridKit return BusTypeT::SLACK; } - void initial_value(ScalarT& value) override + void initial_value(ScalarT value) override { } diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 7dab3f767..41cc682b2 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -72,7 +72,7 @@ namespace GridKit msa = max_steps_; } - virtual void initial_value(ScalarT& value) = 0; + virtual void initial_value(ScalarT value) = 0; virtual ScalarT& read() = 0; virtual void send(ScalarT& value) = 0; From 6e08355ab8cc5dcce52c0eb0b4cb713f4e2b314d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:23:39 -0500 Subject: [PATCH 58/89] rem: initialization check [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 505e526f3..6a6bbb61b 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -52,14 +52,16 @@ namespace GridKit */ void initial_value(ScalarT value) override { - if(is_initialized_) - { - std::cout << "ERROR!"; - } - else{ - y_[0] = value; - is_initialized_ = true; - } + + y_[0] = value; + //if(is_initialized_) + //{ + // std::cout << "ERROR!"; + //} + //else{ + // y_[0] = value; + // is_initialized_ = true; + //} } /** @@ -125,7 +127,7 @@ namespace GridKit private: - bool is_initialized_{false}; + //bool is_initialized_{false}; }; From bcfb9342ac2eb5d23377884eed4aa56c909ae3d2 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:26:46 -0500 Subject: [PATCH 59/89] misc edit [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 6a6bbb61b..67eda5b35 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -69,7 +69,7 @@ namespace GridKit * * @return state value of signal */ - ScalarT& read() override + ScalarT read() override { return y_[0]; } From 63dfc21296c76d56f9f5539aad0924dd0e58e93e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:31:14 -0500 Subject: [PATCH 60/89] edit: type hell [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 67eda5b35..6a6bbb61b 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -69,7 +69,7 @@ namespace GridKit * * @return state value of signal */ - ScalarT read() override + ScalarT& read() override { return y_[0]; } From f8320313923b292b42d09a578dba7cd05efab196 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:35:40 -0500 Subject: [PATCH 61/89] edit: init omega and change index [skip ci] --- examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 2 +- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index a63dcbbbd..49af4fbbf 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -142,7 +142,7 @@ int main() { std::vector& y_val = sys.y(); - output.push_back(OutputData{t, y_val[0], y_val[1], y_val[3]}); + output.push_back(OutputData{t, y_val[0], y_val[1], y_val[5]}); }; // Set up simulation diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 20047ae7d..9d456f521 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -235,6 +235,7 @@ namespace GridKit // To do make this from init function pmech_set_ = Te; this->safeInit(pmech_, Te); + this->safeInit(omega_, omega); return 0; From 3ef028128a65ca4522b857796c31ef332cc77b3f Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:56:10 -0500 Subject: [PATCH 62/89] edit: no funcs [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 1 - src/Model/PhasorDynamics/Component.hpp | 16 ------------ .../SynchronousMachine/GENROUwS/Genrou.cpp | 26 ++++++++++++++----- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 6a6bbb61b..3fdf43838 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -125,7 +125,6 @@ namespace GridKit return y_[0]; } - private: //bool is_initialized_{false}; diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 98f4e8b64..8f7d4f87c 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -45,22 +45,6 @@ namespace GridKit } - /** - * @brief A helper function to easily init - * a signal value wiithout needing to check if initialized - * - * This is implemented - * in such a way that any component can call - * this function and write - */ - void safeInit(bus_type* signal, ScalarT value) - { - if (signal) - { - signal->initial_value(value); - } - - } /** * @brief A helper function to easily read diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 9d456f521..8ff8ada4d 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -172,9 +172,12 @@ namespace GridKit template int Genrou::initialize() { - /* Initialization tricks -- assuming NO saturation */ + ScalarT vr = Vr(); ScalarT vi = Vi(); + + /* Initialization tricks -- assuming NO saturation */ + ScalarT p = p0_; ScalarT q = q0_; ScalarT vm2 = vr * vr + vi * vi; @@ -234,8 +237,10 @@ namespace GridKit // Initialize External Inputs // To do make this from init function pmech_set_ = Te; - this->safeInit(pmech_, Te); - this->safeInit(omega_, omega); + if (pmech_) + { + pmech_->initial_value(Te); + } return 0; @@ -266,8 +271,18 @@ namespace GridKit // Inputs ScalarT vr = Vr(); ScalarT vi = Vi(); - ScalarT pmech = this->safeRead(pmech_, pmech_set_); + ScalarT pmech = pmech_set_; + if (pmech_) + { + pmech = pmech_->read(); + } + + // Outputs + if (omega_) + { + omega_->send(y[1]); + } /* Read variables */ ScalarT delta = y_[0]; @@ -331,8 +346,7 @@ namespace GridKit Ir() += inr - Vr() * G_ + Vi() * B_; Ii() += ini - Vr() * B_ - Vi() * G_; - // Outputs - this->safeSend(omega_, omega); + return 0; } From a11dc67505e68177b3fa7c279d1d6168e4ae6abc Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 3 Jul 2025 16:57:06 -0500 Subject: [PATCH 63/89] edit: syntax [skip ci] --- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 8ff8ada4d..136bf6b71 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -281,7 +281,7 @@ namespace GridKit // Outputs if (omega_) { - omega_->send(y[1]); + omega_->send(y_[1]); } /* Read variables */ From c263fa805a8e3603e5cee4d3f9fa3334ce6f7cb1 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 11:47:58 -0500 Subject: [PATCH 64/89] fix: rookie allocation mistake [skip ci] --- examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 49af4fbbf..6994869bf 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -103,6 +103,8 @@ int main() SystemModel sys(data); + sys.allocate(); + // Get access to the fault auto* fault = sys.getBusFault(0); From 30462245dac1d9be8a07c9312ac62c64f955bb5a Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:02:52 -0500 Subject: [PATCH 65/89] chore: variable names [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 10 ++--- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 8 ++-- .../PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 21 +++++----- .../PhasorDynamics/Governor/Tgov1/Tgov1.hpp | 8 ++-- .../SynchronousMachine/GENROUwS/Genrou.cpp | 40 +++++++++---------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 9 +++-- 6 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index 22269bb4d..4d8194c66 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -45,17 +45,17 @@ namespace GridKit return BusTypeT::DEFAULT; } - void initial_value(ScalarT value) override + // TODO remove, uneeded + void initial_value(ScalarT) override { } - - // TODO Need to remove these + // TODO remove, uneeded ScalarT& read() override { return y_[0]; } - - void send(ScalarT& value) override + // TODO remove, uneeded + void send(ScalarT&) override { } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 10ead4609..7ccc5c495 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -42,17 +42,19 @@ namespace GridKit return BusTypeT::SLACK; } - void initial_value(ScalarT value) override + // TODO remove, uneeded + void initial_value(ScalarT) override { } - // TODO Need to remove these + // TODO remove, uneeded ScalarT& read() override { return y_[0]; } - void send(ScalarT& value) override + // TODO remove, uneeded + void send(ScalarT&) override { } diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index d8ce50e3c..d3d076494 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -25,16 +25,17 @@ namespace GridKit /*! * @brief Constructor for Governor * - * @param machine Generator Object + * @param pmech Bus signal pointer + * @param omega Bus signal pointer * @param data TGOV1 Data Object */ template Tgov1::Tgov1( - bus_type* pmech, - bus_type* omega, + bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data) - : pmech_(pmech), - omega_(omega), + : pmech_signal_(pmech), + omega_signal_(omega), R_(data.R), Pvmin_(data.Pvmin), Pvmax_(data.Pvmax), @@ -50,8 +51,8 @@ namespace GridKit } template Tgov1::Tgov1() - : pmech_(nullptr), - omega_(nullptr), + : pmech_signal_(nullptr), + omega_signal_(nullptr), R_(0.05), Pvmin_(0), Pvmax_(1), @@ -91,7 +92,7 @@ namespace GridKit // Initial mechanical = initial electric torque ScalarT pdef = 1; - ScalarT p0 = this->safeRead(pmech_, pdef); + ScalarT p0 = this->safeRead(pmech_signal_, pdef); // Input Variables (Parameter for now) pref_ = R_ * p0; @@ -175,7 +176,7 @@ namespace GridKit // Ext Variables ScalarT omega0 = 0; - ScalarT omega = this->safeRead(omega_, omega0); + ScalarT omega = this->safeRead(omega_signal_, omega0); // Read Internal Variables ScalarT ptx = y_[0]; // y0 - Ptx @@ -196,7 +197,7 @@ namespace GridKit f_[2] = -pmech + (ptx + T2_ * pv) / T3_ - (Dt_ * omega); // Write External - this->safeSend(pmech_, pmech); + this->safeSend(pmech_signal_, pmech); return 0; } diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp index ed56c3164..1d53346ef 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp @@ -52,8 +52,8 @@ namespace GridKit public: Tgov1(); - Tgov1(bus_type* pmech, - bus_type* omega, + Tgov1(bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data); ~Tgov1() = default; @@ -71,8 +71,8 @@ namespace GridKit private: // Associated Machine Model - bus_type* pmech_; - bus_type* omega_; + bus_type* pmech_signal_; + bus_type* omega_signal_; // Input parameters real_type R_; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 136bf6b71..8f5e2e0c9 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -27,8 +27,8 @@ namespace GridKit template Genrou::Genrou(bus_type* bus, IdxT unit_id) : bus_(bus), - pmech_(nullptr), - omega_(nullptr), + pmech_signal_(nullptr), + omega_signal_(nullptr), busID_(0), unit_id_(unit_id), p0_(0.), @@ -67,12 +67,12 @@ namespace GridKit template Genrou::Genrou( bus_type* bus, - bus_type* pmech, - bus_type* omega, + bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data) : bus_(bus), - pmech_(pmech), - omega_(omega), + pmech_signal_(pmech_signal), + omega_signal_(omega_signal), busID_(0), unit_id_(1), p0_(data.p0), @@ -122,8 +122,8 @@ namespace GridKit real_type S10, real_type S12) : bus_(bus), - pmech_(nullptr), - omega_(nullptr), + pmech_signal_(nullptr), + omega_signal_(nullptr), busID_(0), unit_id_(unit_id), p0_(p0), @@ -237,9 +237,14 @@ namespace GridKit // Initialize External Inputs // To do make this from init function pmech_set_ = Te; - if (pmech_) + if (pmech_signal_) { - pmech_->initial_value(Te); + pmech_signal_->initial_value(Te); + } + + if (omega_signal_) + { + omega_signal_->initial_value(omega); } @@ -271,18 +276,11 @@ namespace GridKit // Inputs ScalarT vr = Vr(); ScalarT vi = Vi(); - - ScalarT pmech = pmech_set_; - if (pmech_) - { - pmech = pmech_->read(); - } + ScalarT pmech = safeRead(pmech_signal_, pmech_set_); // Outputs - if (omega_) - { - omega_->send(y_[1]); - } + safeSend(omega_signal_, y_[1]); + /* Read variables */ ScalarT delta = y_[0]; @@ -346,8 +344,6 @@ namespace GridKit Ir() += inr - Vr() * G_ + Vi() * B_; Ii() += ini - Vr() * B_ - Vi() * G_; - - return 0; } diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index b4116d9e7..93febfa9c 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -47,8 +47,8 @@ namespace GridKit public: Genrou(bus_type* bus, IdxT unit_id); Genrou(bus_type* bus, - bus_type* pmech_, - bus_type* omega_, + bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data); Genrou(bus_type* bus, IdxT unit_id, @@ -112,8 +112,9 @@ namespace GridKit private: /* Identification */ bus_type* bus_; - bus_type* pmech_; - bus_type* omega_; + bus_type* pmech_signal_; + bus_type* omega_signal_; + const int busID_; IdxT unit_id_; From 32922c9492b12c938369685630f638a0f46697e0 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:04:08 -0500 Subject: [PATCH 66/89] minor: incorrect constructor init [skip ci] --- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index d3d076494..0dc1c3467 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -34,8 +34,8 @@ namespace GridKit bus_type* pmech_signal, bus_type* omega_signal, const model_data_type& data) - : pmech_signal_(pmech), - omega_signal_(omega), + : pmech_signal_(pmech_signal), + omega_signal_(omega_signal), R_(data.R), Pvmin_(data.Pvmin), Pvmax_(data.Pvmax), From b24a8a662f87b6f7459824de4bbe918fe76fde8e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:07:34 -0500 Subject: [PATCH 67/89] fix: this pointer in genrou [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 1 - .../SynchronousMachine/GENROUwS/Genrou.cpp | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 8f7d4f87c..3051339a0 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -45,7 +45,6 @@ namespace GridKit } - /** * @brief A helper function to easily read * the state of the signal without checking nullptr diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 8f5e2e0c9..28011192c 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -205,12 +205,12 @@ namespace GridKit ScalarT ksat; ScalarT psipp; - y_[0] = delta; //= 0.55399038; - y_[1] = omega; // = 0; - y_[2] = Eqp; // = 0.995472581; - y_[3] = psidp; // = 0.971299567; - y_[4] = psiqp; // = 0.306880069; - y_[5] = Edp; // = 0; + y_[0] = delta; + y_[1] = omega; + y_[2] = Eqp; + y_[3] = psidp; + y_[4] = psiqp; + y_[5] = Edp; y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; @@ -265,7 +265,7 @@ namespace GridKit } /** - * \brief Residual contribution of the branch is pushed to the + * @brief Residual contribution of the branch is pushed to the * two terminal buses. * */ @@ -276,10 +276,10 @@ namespace GridKit // Inputs ScalarT vr = Vr(); ScalarT vi = Vi(); - ScalarT pmech = safeRead(pmech_signal_, pmech_set_); + ScalarT pmech = this->safeRead(pmech_signal_, pmech_set_); // Outputs - safeSend(omega_signal_, y_[1]); + this->safeSend(omega_signal_, y_[1]); /* Read variables */ From 18163ca6e65d8989790a487fb8832eb3a27bbbbc Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:17:51 -0500 Subject: [PATCH 68/89] chore: pre rebase commit [skip ci] --- examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 1 + src/Model/PhasorDynamics/SystemModel.hpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 6994869bf..80aacdb6e 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -144,6 +144,7 @@ int main() { std::vector& y_val = sys.y(); + // Note Omega of gen is at state index 5! (Each added signal shifted by 1) output.push_back(OutputData{t, y_val[0], y_val[1], y_val[5]}); }; diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index c8820dc75..b010398bb 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -107,7 +107,9 @@ namespace GridKit for (const auto& gendata : data.genrou) { - // Simplify this block + // PR NOTE: + // Can we make getBus return nullptr if none exists? + // I don't know if it will break things Genrou* gen; if (gendata.signal_pmech > 0) { From b647cb9ead980092a9e77ba43399d61f8dec82e8 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:31:45 -0500 Subject: [PATCH 69/89] edit: post rebase safeInit and check [skip ci] --- src/Model/PhasorDynamics/Component.hpp | 25 ++----------------- .../SynchronousMachine/GENROUwS/Genrou.cpp | 13 ++-------- 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 7636c945b..46a0c2570 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -36,32 +36,11 @@ namespace GridKit * @param signal The signal bus object pointer * @param value The value to send to the equality constraint */ - void safeSend(bus_type* signal, ScalarT value) + void safeInit(bus_type* signal, ScalarT value) { if (signal) { - signal->send(value); - } - - } - - /** - * @brief A helper function to easily read - * the state of the signal without checking nullptr - * - * - * @param signal The signal bus object pointer - * @param default_val The value to return if no signal - */ - ScalarT safeRead(bus_type* signal, ScalarT default_val) - { - if (signal) - { - return signal->read(); - } - else - { - return default_val; + signal->initial_value(value); } } diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 28011192c..4871702f1 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -4,7 +4,6 @@ * @author Slaven Peles (peless@ornl.gov) * @brief Definition of a GENROU generator model. * - * */ #define _USE_MATH_DEFINES @@ -237,16 +236,8 @@ namespace GridKit // Initialize External Inputs // To do make this from init function pmech_set_ = Te; - if (pmech_signal_) - { - pmech_signal_->initial_value(Te); - } - - if (omega_signal_) - { - omega_signal_->initial_value(omega); - } - + this->safeInit(pmech_signal_, Te); + this->safeInit(omega_signal_, omega); return 0; } From b59024a40d1063d49a66dba0bfb46c8efdd8cf2c Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:50:35 -0500 Subject: [PATCH 70/89] edit: remove adjoint items from BusSignal after Rebase [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.cpp | 32 ---------------------- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 4 --- 2 files changed, 36 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.cpp b/src/Model/PhasorDynamics/Bus/BusSignal.cpp index 3d7dec021..1c8945c2c 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.cpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.cpp @@ -72,38 +72,6 @@ namespace GridKit return 0; } - template - int BusSignal::initializeAdjoint() - { - // std::cout << "Initialize BusSignal..." << std::endl; - yB_[0] = 0.0; - ypB_[0] = 0.0; - - return 0; - } - - - template - int BusSignal::evaluateAdjointResidual() - { - fB_[0] = 0.0; - - return 0; - } - - template - int BusSignal::evaluateIntegrand() - { - return 0; - } - - - template - int BusSignal::evaluateAdjointIntegrand() - { - return 0; - } - // Available template instantiations template class BusSignal; template class BusSignal; diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 3fdf43838..cee6ffa18 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -39,11 +39,7 @@ namespace GridKit virtual int evaluateResidual() override; virtual int evaluateIntegrand() override; virtual int evaluateJacobian() override; - virtual int initializeAdjoint() override; - virtual int evaluateAdjointIntegrand() override; - virtual int evaluateAdjointResidual() override; - /** * @brief A one-time initialization function * that can be called by any. From 085e3d272c8784e36be71150850d3a41f1edb9e8 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 4 Jul 2025 12:56:27 -0500 Subject: [PATCH 71/89] rem: evalInteg from BusSig header [skip ci] --- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index cee6ffa18..1ded4847e 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -37,7 +37,6 @@ namespace GridKit virtual int tagDifferentiable() override; virtual int initialize() override; virtual int evaluateResidual() override; - virtual int evaluateIntegrand() override; virtual int evaluateJacobian() override; /** From 4429415be4089e8661e7de0763fa04e361ca855b Mon Sep 17 00:00:00 2001 From: lukelowry Date: Thu, 10 Jul 2025 19:47:11 +0000 Subject: [PATCH 72/89] Apply pre-commmit fixes --- .../Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 18 +- src/Model/PhasorDynamics/Bus/Bus.hpp | 3 +- src/Model/PhasorDynamics/Bus/BusSignal.cpp | 8 +- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 40 +- src/Model/PhasorDynamics/BusBase.hpp | 6 +- src/Model/PhasorDynamics/Component.hpp | 18 +- .../PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 16 +- .../PhasorDynamics/Governor/Tgov1/Tgov1.hpp | 4 +- .../Governor/Tgov1/Tgov1Data.hpp | 1 - .../SynchronousMachine/GENROUwS/Genrou.cpp | 474 +++++++++--------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 12 +- src/Model/PhasorDynamics/SystemModel.hpp | 12 +- .../PhasorDynamics/GovernorTgov1Tests.hpp | 2 +- 13 files changed, 298 insertions(+), 316 deletions(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index debd4234f..95d639e6d 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -63,13 +63,12 @@ int main() // Pmech Signal Bus data.bus[2].bus_id = 2; - data.bus[2].bus_type = BusData::BusType::SIGNAL; + data.bus[2].bus_type = BusData::BusType::SIGNAL; // Speed Signal Bus data.bus[3].bus_id = 3; data.bus[3].bus_type = BusData::BusType::SIGNAL; - // Set branch data data.branch.resize(1); @@ -89,16 +88,16 @@ int main() // Set generator data data.genrou.resize(1); - data.genrou[0].p0 = 1.; - data.genrou[0].q0 = 0.05013; - data.genrou[0].signal_pmech = 2; - data.genrou[0].signal_speed = 3; + data.genrou[0].p0 = 1.; + data.genrou[0].q0 = 0.05013; + data.genrou[0].signal_pmech = 2; + data.genrou[0].signal_speed = 3; // Governor data.gov.resize(1); - data.gov[0].signal_speed = 3; - data.gov[0].signal_pmech = 2; // Signal Bus ID - + data.gov[0].signal_speed = 3; + data.gov[0].signal_pmech = 2; // Signal Bus ID + // // Instantiate system model // @@ -162,7 +161,6 @@ int main() sys.allocate(); - // Get access to the fault auto* fault = sys.getBusFault(0); diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index 4d8194c66..e89a3092f 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -49,17 +49,18 @@ namespace GridKit void initial_value(ScalarT) override { } + // TODO remove, uneeded ScalarT& read() override { return y_[0]; } + // TODO remove, uneeded void send(ScalarT&) override { } - virtual ScalarT& Vr() override { return y_[0]; diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.cpp b/src/Model/PhasorDynamics/Bus/BusSignal.cpp index 1c8945c2c..2d0cd95ae 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.cpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.cpp @@ -11,15 +11,13 @@ namespace GridKit namespace PhasorDynamics { - template BusSignal::BusSignal(const DataT& data) - : BusBase(data.bus_id) + : BusBase(data.bus_id) { size_ = 1; } - template int BusSignal::allocate() { @@ -61,7 +59,7 @@ namespace GridKit { // One side of equality of signal. Reference component // must add to this residual after this function has been called. - f_[0] = - y_[0]; + f_[0] = -y_[0]; return 0; } @@ -79,4 +77,4 @@ namespace GridKit template class BusSignal; } // namespace PhasorDynamics -} // namespace GridKit \ No newline at end of file +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 1ded4847e..9f1054e2c 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -7,7 +7,7 @@ namespace GridKit { namespace PhasorDynamics { - + // TODO change base class so there is no Vr and Vi template @@ -23,12 +23,11 @@ namespace GridKit using BusBase::tag_; public: - using real_type = typename BusBase::real_type; using DataT = BusData; BusSignal(const DataT& data); - + ~BusSignal() { } @@ -39,29 +38,29 @@ namespace GridKit virtual int evaluateResidual() override; virtual int evaluateJacobian() override; - /** + /** * @brief A one-time initialization function * that can be called by any. - * + * * @return state value of signal */ void initial_value(ScalarT value) override { y_[0] = value; - //if(is_initialized_) + // if(is_initialized_) //{ - // std::cout << "ERROR!"; - //} - //else{ - // y_[0] = value; - // is_initialized_ = true; - //} + // std::cout << "ERROR!"; + // } + // else{ + // y_[0] = value; + // is_initialized_ = true; + // } } - /** + /** * @brief A read only accessor to the signal state - * + * * @return state value of signal */ ScalarT& read() override @@ -69,10 +68,10 @@ namespace GridKit return y_[0]; } - /** + /** * @brief A write operation only available * to the source signal - * + * * @param value The value of the signal */ void send(ScalarT& value) override @@ -80,16 +79,17 @@ namespace GridKit f_[0] += value; } - // TODO remove jsut junk so it compiles ScalarT& Vr() override { return y_[0]; } + const ScalarT& Vr() const override { return y_[0]; } + ScalarT& Vi() override { return y_[0]; @@ -119,11 +119,9 @@ namespace GridKit { return y_[0]; } - - - //bool is_initialized_{false}; + // bool is_initialized_{false}; }; } // namespace PhasorDynamics -} // namespace GridKit \ No newline at end of file +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 41cc682b2..87e5d395e 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -72,9 +72,9 @@ namespace GridKit msa = max_steps_; } - virtual void initial_value(ScalarT value) = 0; - virtual ScalarT& read() = 0; - virtual void send(ScalarT& value) = 0; + virtual void initial_value(ScalarT value) = 0; + virtual ScalarT& read() = 0; + virtual void send(ScalarT& value) = 0; virtual ScalarT& Vr() = 0; virtual const ScalarT& Vr() const = 0; diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index 46a0c2570..cabb9b09c 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -3,11 +3,10 @@ #include #include +#include "BusBase.hpp" #include #include -#include "BusBase.hpp" - namespace GridKit { namespace PhasorDynamics @@ -23,7 +22,7 @@ namespace GridKit public: using real_type = typename Model::Evaluator::real_type; using bus_type = BusBase; - + Component() : size_(0) { @@ -32,7 +31,7 @@ namespace GridKit /** * @brief A helper function to easily init * a signal value wiithout needing to check if initialized - * + * * @param signal The signal bus object pointer * @param value The value to send to the equality constraint */ @@ -42,13 +41,12 @@ namespace GridKit { signal->initial_value(value); } - } /** * @brief A helper function to easily init * a signal value wiithout needing to check if initialized - * + * * @param signal The signal bus object pointer * @param value The value to send to the equality constraint */ @@ -58,14 +56,13 @@ namespace GridKit { signal->send(value); } - } /** * @brief A helper function to easily read * the state of the signal without checking nullptr - * - * + * + * * @param signal The signal bus object pointer * @param default_val The value to return if no signal */ @@ -75,11 +72,10 @@ namespace GridKit { return signal->read(); } - else + else { return default_val; } - } virtual IdxT size() override diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index 0dc1c3467..a392edf44 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -31,10 +31,10 @@ namespace GridKit */ template Tgov1::Tgov1( - bus_type* pmech_signal, - bus_type* omega_signal, - const model_data_type& data) - : pmech_signal_(pmech_signal), + bus_type* pmech_signal, + bus_type* omega_signal, + const model_data_type& data) + : pmech_signal_(pmech_signal), omega_signal_(omega_signal), R_(data.R), Pvmin_(data.Pvmin), @@ -49,9 +49,10 @@ namespace GridKit // 3 Internal Variables size_ = 3; } + template Tgov1::Tgov1() - : pmech_signal_(nullptr), + : pmech_signal_(nullptr), omega_signal_(nullptr), R_(0.05), Pvmin_(0), @@ -92,7 +93,7 @@ namespace GridKit // Initial mechanical = initial electric torque ScalarT pdef = 1; - ScalarT p0 = this->safeRead(pmech_signal_, pdef); + ScalarT p0 = this->safeRead(pmech_signal_, pdef); // Input Variables (Parameter for now) pref_ = R_ * p0; @@ -176,7 +177,7 @@ namespace GridKit // Ext Variables ScalarT omega0 = 0; - ScalarT omega = this->safeRead(omega_signal_, omega0); + ScalarT omega = this->safeRead(omega_signal_, omega0); // Read Internal Variables ScalarT ptx = y_[0]; // y0 - Ptx @@ -216,7 +217,6 @@ namespace GridKit return 0; } - // Available template instantiations template class Tgov1; template class Tgov1; diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp index 1d53346ef..fa5275864 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp @@ -52,8 +52,8 @@ namespace GridKit public: Tgov1(); - Tgov1(bus_type* pmech_signal, - bus_type* omega_signal, + Tgov1(bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data); ~Tgov1() = default; diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp index e94ef3721..f271fcb04 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp @@ -35,7 +35,6 @@ namespace GridKit IdxT signal_pmech; ///< Unique ID of the bus providing the pmech signal IdxT signal_speed; ///< Unique ID of the bus providing the speed signal - }; } // namespace Governor } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 379e9bc16..42d8b1a29 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -22,7 +22,7 @@ namespace GridKit { namespace PhasorDynamics { - + template Genrou::Genrou(bus_type* bus, IdxT unit_id) : bus_(bus), @@ -61,10 +61,10 @@ namespace GridKit */ template Genrou::Genrou( - bus_type* bus, - bus_type* pmech_signal, - bus_type* omega_signal, - const model_data_type& data) + bus_type* bus, + bus_type* pmech_signal, + bus_type* omega_signal, + const model_data_type& data) : bus_(bus), pmech_signal_(pmech_signal), omega_signal_(omega_signal), @@ -248,252 +248,246 @@ namespace GridKit busID_ = data.ports.at(model_data_type::Ports::bus); } - S12_(S12), - pmech_set_(0), - efd_set_(0) - { - size_ = 20; - setDerivedParams(); - } - - - /*! - * @brief allocate method computes sparsity pattern of the Jacobian. - */ - template - int Genrou::allocate() - { - f_.resize(static_cast(size_)); - y_.resize(static_cast(size_)); - yp_.resize(static_cast(size_)); - tag_.resize(static_cast(size_)); - return 0; - } - - /** - * Initialization of the branch model - * - */ - template - int Genrou::initialize() - { - - ScalarT vr = Vr(); - ScalarT vi = Vi(); - - /* Initialization tricks -- assuming NO saturation */ - - ScalarT p = p0_; - ScalarT q = q0_; - ScalarT vm2 = vr * vr + vi * vi; - ScalarT Er = vr + (Ra_ * p * vr + Ra_ * q * vi - Xq_ * p * vi + Xq_ * q * vr) / vm2; - ScalarT Ei = vi + (Ra_ * p * vi - Ra_ * q * vr + Xq_ * p * vr + Xq_ * q * vi) / vm2; - ScalarT delta = atan2(Ei, Er); - ScalarT omega = 0; - ScalarT ir = (p * vr + q * vi) / vm2; - ScalarT ii = (p * vi - q * vr) / vm2; - ScalarT id = ir * sin(delta) - ii * cos(delta); - ScalarT iq = ir * cos(delta) + ii * sin(delta); - ScalarT vd = vr * sin(delta) - vi * cos(delta) + id * Ra_ - iq * Xqpp_; - ScalarT vq = vr * cos(delta) + vi * sin(delta) + id * Xqpp_ - iq * Ra_; - ScalarT psiqpp = -vd / (1 + omega); - ScalarT psidpp = vq / (1 + omega); - ScalarT Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; - ScalarT psiqp = -(-(Xqp_ - Xl_) * iq + psiqpp * (Xqp_ - Xl_) / (Xqpp_ - Xl_)) - / (1 + (Xqp_ - Xqpp_) / (Xqpp_ - Xl_)); - ScalarT Edp = psiqp - (Xqp_ - Xl_) * iq; - ScalarT psidp = -((Xdp_ - Xl_) * id - psidpp * (Xdp_ - Xl_) / (Xdpp_ - Xl_)) - / (1 + (Xdp_ - Xdpp_) / (Xdpp_ - Xl_)); - ScalarT Eqp = psidp + (Xdp_ - Xl_) * id; - - /* Now we have the state variables, solve for alg. variables */ - ScalarT ksat; - ScalarT psipp; - - y_[0] = delta; - y_[1] = omega; - y_[2] = Eqp; - y_[3] = psidp; - y_[4] = psiqp; - y_[5] = Edp; - - y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; - y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; - y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); - y_[9] = ksat = SB_ * pow(psipp - SA_, 2); - y_[10] = vd = -psiqpp * (1 + omega); - y_[11] = vq = psidpp * (1 + omega); - y_[12] = Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; - y_[13] = id; - y_[14] = iq; - y_[15] = ir; - y_[16] = ii; - y_[17] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; - y_[18] = G_ * (vd * sin(delta) + vq * cos(delta)) - - B_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, real */ - y_[19] = B_ * (vd * sin(delta) + vq * cos(delta)) - + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ - - - for (IdxT i = 0; i < size_; ++i) - yp_[static_cast(i)] = 0.0; - - - // Initialize External Inputs - // To do make this from init function - pmech_set_ = Te; - this->safeInit(pmech_signal_, Te); - this->safeInit(omega_signal_, omega); - - return 0; - } + S12_(S12), + pmech_set_(0), + efd_set_(0) + { + size_ = 20; + setDerivedParams(); + } - /** - * \brief Identify differential variables. - */ - template - int Genrou::tagDifferentiable() - { - for (IdxT i = 0; i < size_; ++i) + /*! + * @brief allocate method computes sparsity pattern of the Jacobian. + */ + template + int Genrou::allocate() { - tag_[static_cast(i)] = i < 6; + f_.resize(static_cast(size_)); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + tag_.resize(static_cast(size_)); + return 0; } - return 0; - } - /** - * @brief Residual contribution of the branch is pushed to the - * two terminal buses. - * - */ - template - int Genrou::evaluateResidual() - { + /** + * Initialization of the branch model + * + */ + template + int Genrou::initialize() + { - // Inputs - ScalarT vr = Vr(); - ScalarT vi = Vi(); - ScalarT pmech = this->safeRead(pmech_signal_, pmech_set_); - - // Outputs - this->safeSend(omega_signal_, y_[1]); - - - /* Read variables */ - ScalarT delta = y_[0]; - ScalarT omega = y_[1]; - ScalarT Eqp = y_[2]; - ScalarT psidp = y_[3]; - ScalarT psiqp = y_[4]; - ScalarT Edp = y_[5]; - ScalarT psiqpp = y_[6]; - ScalarT psidpp = y_[7]; - ScalarT psipp = y_[8]; - ScalarT ksat = y_[9]; - ScalarT vd = y_[10]; - ScalarT vq = y_[11]; - ScalarT telec = y_[12]; - ScalarT id = y_[13]; - ScalarT iq = y_[14]; - ScalarT ir = y_[15]; - ScalarT ii = y_[16]; - ScalarT efd = y_[17]; - ScalarT inr = y_[18]; - ScalarT ini = y_[19]; - - /* Read derivatives */ - ScalarT delta_dot = yp_[0]; - ScalarT omega_dot = yp_[1]; - ScalarT Eqp_dot = yp_[2]; - ScalarT psidp_dot = yp_[3]; - ScalarT psiqp_dot = yp_[4]; - ScalarT Edp_dot = yp_[5]; - - /* 6 Genrou differential equations */ - f_[0] = delta_dot - omega * (2 * M_PI * 60); - f_[1] = omega_dot - (1 / (2 * H_)) * ((pmech - D_ * omega) / (1 + omega) - telec); - f_[2] = Eqp_dot - (1 / Tdop_) * (efd - (Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat)); - f_[3] = psidp_dot - (1 / Tdopp_) * (Eqp - psidp - Xd2_ * id); - f_[4] = psiqp_dot - (1 / Tqopp_) * (Edp - psiqp + Xq2_ * iq); - f_[5] = Edp_dot - (1 / Tqop_) * (-Edp + Xqd_ * psiqpp * ksat + Xq1_ * (iq - Xq3_ * (Edp + iq * Xq2_ - psiqp))); - - /* 11 Genrou algebraic equations */ - f_[6] = psiqpp - (-psiqp * Xq4_ - Edp * Xq5_); - f_[7] = psidpp - (psidp * Xd4_ + Eqp * Xd5_); - f_[8] = psipp - sqrt(pow(psidpp, 2.0) + pow(psiqpp, 2.0)); - f_[9] = ksat - SB_ * pow(psipp - SA_, 2.0); - f_[10] = vd + psiqpp * (1 + omega); - f_[11] = vq - psidpp * (1 + omega); - f_[12] = telec - ((psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id); - f_[13] = id - (ir * sin(delta) - ii * cos(delta)); - f_[14] = iq - (ir * cos(delta) + ii * sin(delta)); - f_[15] = ir + G_ * vr - B_ * vi - inr; - f_[16] = ii + B_ * vr + G_ * vi - ini; - - /* 2 Genrou control inputs are set to constant for this example */ - f_[17] = efd - efd_set_; - - /* 2 Genrou current source definitions */ - f_[18] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); - f_[19] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); - - /* Current balance */ - Ir() += inr - Vr() * G_ + Vi() * B_; - Ii() += ini - Vr() * B_ - Vi() * G_; - - return 0; - } + ScalarT vr = Vr(); + ScalarT vi = Vi(); + + /* Initialization tricks -- assuming NO saturation */ + + ScalarT p = p0_; + ScalarT q = q0_; + ScalarT vm2 = vr * vr + vi * vi; + ScalarT Er = vr + (Ra_ * p * vr + Ra_ * q * vi - Xq_ * p * vi + Xq_ * q * vr) / vm2; + ScalarT Ei = vi + (Ra_ * p * vi - Ra_ * q * vr + Xq_ * p * vr + Xq_ * q * vi) / vm2; + ScalarT delta = atan2(Ei, Er); + ScalarT omega = 0; + ScalarT ir = (p * vr + q * vi) / vm2; + ScalarT ii = (p * vi - q * vr) / vm2; + ScalarT id = ir * sin(delta) - ii * cos(delta); + ScalarT iq = ir * cos(delta) + ii * sin(delta); + ScalarT vd = vr * sin(delta) - vi * cos(delta) + id * Ra_ - iq * Xqpp_; + ScalarT vq = vr * cos(delta) + vi * sin(delta) + id * Xqpp_ - iq * Ra_; + ScalarT psiqpp = -vd / (1 + omega); + ScalarT psidpp = vq / (1 + omega); + ScalarT Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; + ScalarT psiqp = -(-(Xqp_ - Xl_) * iq + psiqpp * (Xqp_ - Xl_) / (Xqpp_ - Xl_)) + / (1 + (Xqp_ - Xqpp_) / (Xqpp_ - Xl_)); + ScalarT Edp = psiqp - (Xqp_ - Xl_) * iq; + ScalarT psidp = -((Xdp_ - Xl_) * id - psidpp * (Xdp_ - Xl_) / (Xdpp_ - Xl_)) + / (1 + (Xdp_ - Xdpp_) / (Xdpp_ - Xl_)); + ScalarT Eqp = psidp + (Xdp_ - Xl_) * id; + + /* Now we have the state variables, solve for alg. variables */ + ScalarT ksat; + ScalarT psipp; + + y_[0] = delta; + y_[1] = omega; + y_[2] = Eqp; + y_[3] = psidp; + y_[4] = psiqp; + y_[5] = Edp; + + y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; + y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; + y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); + y_[9] = ksat = SB_ * pow(psipp - SA_, 2); + y_[10] = vd = -psiqpp * (1 + omega); + y_[11] = vq = psidpp * (1 + omega); + y_[12] = Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; + y_[13] = id; + y_[14] = iq; + y_[15] = ir; + y_[16] = ii; + y_[17] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; + y_[18] = G_ * (vd * sin(delta) + vq * cos(delta)) + - B_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, real */ + y_[19] = B_ * (vd * sin(delta) + vq * cos(delta)) + + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ + + for (IdxT i = 0; i < size_; ++i) + yp_[static_cast(i)] = 0.0; + + // Initialize External Inputs + // To do make this from init function + pmech_set_ = Te; + this->safeInit(pmech_signal_, Te); + this->safeInit(omega_signal_, omega); + + return 0; + } - /** - * @brief Jacobian evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::evaluateJacobian() - { - std::cout << "Evaluate Jacobian for Genrou..." << std::endl; - std::cout << "Jacobian evaluation not implemented!" << std::endl; - return 0; - } + /** + * \brief Identify differential variables. + */ + template + int Genrou::tagDifferentiable() + { + for (IdxT i = 0; i < size_; ++i) + { + tag_[static_cast(i)] = i < 6; + } + return 0; + } + /** + * @brief Residual contribution of the branch is pushed to the + * two terminal buses. + * + */ + template + int Genrou::evaluateResidual() + { + // Inputs + ScalarT vr = Vr(); + ScalarT vi = Vi(); + ScalarT pmech = this->safeRead(pmech_signal_, pmech_set_); + + // Outputs + this->safeSend(omega_signal_, y_[1]); + + /* Read variables */ + ScalarT delta = y_[0]; + ScalarT omega = y_[1]; + ScalarT Eqp = y_[2]; + ScalarT psidp = y_[3]; + ScalarT psiqp = y_[4]; + ScalarT Edp = y_[5]; + ScalarT psiqpp = y_[6]; + ScalarT psidpp = y_[7]; + ScalarT psipp = y_[8]; + ScalarT ksat = y_[9]; + ScalarT vd = y_[10]; + ScalarT vq = y_[11]; + ScalarT telec = y_[12]; + ScalarT id = y_[13]; + ScalarT iq = y_[14]; + ScalarT ir = y_[15]; + ScalarT ii = y_[16]; + ScalarT efd = y_[17]; + ScalarT inr = y_[18]; + ScalarT ini = y_[19]; + + /* Read derivatives */ + ScalarT delta_dot = yp_[0]; + ScalarT omega_dot = yp_[1]; + ScalarT Eqp_dot = yp_[2]; + ScalarT psidp_dot = yp_[3]; + ScalarT psiqp_dot = yp_[4]; + ScalarT Edp_dot = yp_[5]; + + /* 6 Genrou differential equations */ + f_[0] = delta_dot - omega * (2 * M_PI * 60); + f_[1] = omega_dot - (1 / (2 * H_)) * ((pmech - D_ * omega) / (1 + omega) - telec); + f_[2] = Eqp_dot - (1 / Tdop_) * (efd - (Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat)); + f_[3] = psidp_dot - (1 / Tdopp_) * (Eqp - psidp - Xd2_ * id); + f_[4] = psiqp_dot - (1 / Tqopp_) * (Edp - psiqp + Xq2_ * iq); + f_[5] = Edp_dot - (1 / Tqop_) * (-Edp + Xqd_ * psiqpp * ksat + Xq1_ * (iq - Xq3_ * (Edp + iq * Xq2_ - psiqp))); + + /* 11 Genrou algebraic equations */ + f_[6] = psiqpp - (-psiqp * Xq4_ - Edp * Xq5_); + f_[7] = psidpp - (psidp * Xd4_ + Eqp * Xd5_); + f_[8] = psipp - sqrt(pow(psidpp, 2.0) + pow(psiqpp, 2.0)); + f_[9] = ksat - SB_ * pow(psipp - SA_, 2.0); + f_[10] = vd + psiqpp * (1 + omega); + f_[11] = vq - psidpp * (1 + omega); + f_[12] = telec - ((psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id); + f_[13] = id - (ir * sin(delta) - ii * cos(delta)); + f_[14] = iq - (ir * cos(delta) + ii * sin(delta)); + f_[15] = ir + G_ * vr - B_ * vi - inr; + f_[16] = ii + B_ * vr + G_ * vi - ini; + + /* 2 Genrou control inputs are set to constant for this example */ + f_[17] = efd - efd_set_; + + /* 2 Genrou current source definitions */ + f_[18] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); + f_[19] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); + + /* Current balance */ + Ir() += inr - Vr() * G_ + Vi() * B_; + Ii() += ini - Vr() * B_ - Vi() * G_; + + return 0; + } - template - void Genrou::setDerivedParams() - { - SA_ = 0; - SB_ = 0; - if (S12_ != 0) + /** + * @brief Jacobian evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::evaluateJacobian() { - real_type s112 = sqrt(S10_ / S12_); + std::cout << "Evaluate Jacobian for Genrou..." << std::endl; + std::cout << "Jacobian evaluation not implemented!" << std::endl; + return 0; + } - SA_ = (1.2 * s112 + 1) / (s112 + 1); - SB_ = (1.2 * s112 - 1) / (s112 - 1); - if (SB_ < SA_) - SA_ = SB_; - SB_ = S12_ / pow(SA_ - 1.2, 2); + template + void Genrou::setDerivedParams() + { + SA_ = 0; + SB_ = 0; + if (S12_ != 0) + { + real_type s112 = sqrt(S10_ / S12_); + + SA_ = (1.2 * s112 + 1) / (s112 + 1); + SB_ = (1.2 * s112 - 1) / (s112 - 1); + if (SB_ < SA_) + SA_ = SB_; + SB_ = S12_ / pow(SA_ - 1.2, 2); + } + Xd1_ = Xd_ - Xdp_; + Xd2_ = Xdp_ - Xl_; + Xd3_ = (Xdp_ - Xdpp_) / (Xd2_ * Xd2_); + Xd4_ = (Xdp_ - Xdpp_) / Xd2_; + Xd5_ = (Xdpp_ - Xl_) / Xd2_; + Xq1_ = Xq_ - Xqp_; + Xq2_ = Xqp_ - Xl_; + Xq3_ = (Xqp_ - Xqpp_) / (Xq2_ * Xq2_); + Xq4_ = (Xqp_ - Xqpp_) / Xq2_; + Xq5_ = (Xqpp_ - Xl_) / Xq2_; + Xqd_ = (Xq_ - Xl_) / (Xd_ - Xl_); + G_ = Ra_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); + B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); } - Xd1_ = Xd_ - Xdp_; - Xd2_ = Xdp_ - Xl_; - Xd3_ = (Xdp_ - Xdpp_) / (Xd2_ * Xd2_); - Xd4_ = (Xdp_ - Xdpp_) / Xd2_; - Xd5_ = (Xdpp_ - Xl_) / Xd2_; - Xq1_ = Xq_ - Xqp_; - Xq2_ = Xqp_ - Xl_; - Xq3_ = (Xqp_ - Xqpp_) / (Xq2_ * Xq2_); - Xq4_ = (Xqp_ - Xqpp_) / Xq2_; - Xq5_ = (Xqpp_ - Xl_) / Xq2_; - Xqd_ = (Xq_ - Xl_) / (Xd_ - Xl_); - G_ = Ra_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); - B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); - } - // Available template instantiations - template class Genrou; - template class Genrou; + // Available template instantiations + template class Genrou; + template class Genrou; - } // namespace PhasorDynamics -} // namespace GridKit + } // namespace PhasorDynamics + } // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index b050cbaa8..c10af7945 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -46,9 +46,9 @@ namespace GridKit public: Genrou(bus_type* bus, IdxT unit_id); - Genrou(bus_type* bus, - bus_type* pmech_signal, - bus_type* omega_signal, + Genrou(bus_type* bus, + bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data); Genrou(bus_type* bus, IdxT unit_id, @@ -84,8 +84,6 @@ namespace GridKit { } - - private: void setDerivedParams(); @@ -115,8 +113,8 @@ namespace GridKit bus_type* pmech_signal_; bus_type* omega_signal_; - IdxT busID_{0}; - IdxT unit_id_; //< @todo this should be removed + IdxT busID_{0}; + IdxT unit_id_; //< @todo this should be removed /* Initial terminal conditions */ ScalarT p0_{0.0}; diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 2860029f4..c5caae160 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -13,9 +13,9 @@ #include #include #include +#include #include #include -#include #include namespace GridKit @@ -148,13 +148,13 @@ namespace GridKit // Add governors for (const auto& govdata : data.gov) { - + /* Need to add signals to gendata class */ auto* gov = new Governor::Tgov1( - getBus(govdata.signal_pmech), - getBus(govdata.signal_speed), - govdata); - + getBus(govdata.signal_pmech), + getBus(govdata.signal_speed), + govdata); + addComponent(gov); } diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp index ffa73bf1b..651586231 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -54,7 +54,7 @@ namespace GridKit TestStatus success = true; PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::Genrou gen(&bus,1); + PhasorDynamics::Genrou gen(&bus, 1); PhasorDynamics::Governor::Tgov1 gov; bus.allocate(); From 9588581d0af72dc7194145d8794881b00bbe1bff Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 14:59:36 -0500 Subject: [PATCH 73/89] misc rebase fixes [skip ci] --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 15 ++++++--------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 1 + 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 42d8b1a29..d6878d2f0 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -139,6 +139,8 @@ namespace GridKit Xl_(Xl), S10_(S10), S12_(S12) + pmech_set_(0), + efd_set_(0) { size_ = 20; setDerivedParams(); @@ -150,8 +152,7 @@ namespace GridKit template Genrou::Genrou(bus_type* bus, const model_data_type& data) : bus_(bus), - unit_id_(1), - gov_(nullptr) // <- TODO: Temporary, to be removed. + unit_id_(1) { if (data.parameters.contains(model_data_type::Parameters::p0)) { @@ -248,13 +249,9 @@ namespace GridKit busID_ = data.ports.at(model_data_type::Ports::bus); } - S12_(S12), - pmech_set_(0), - efd_set_(0) - { - size_ = 20; - setDerivedParams(); - } + size_ = 20; + setDerivedParams(); + } /*! * @brief allocate method computes sparsity pattern of the Jacobian. diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index c10af7945..445a7db74 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -70,6 +70,7 @@ namespace GridKit real_type Xl, real_type S10, real_type S12); + Genrou(bus_type* bus, const model_data_type& data); ~Genrou() = default; int allocate() override; From b67c6b635370af179d223094bf3d7dcc27115a9a Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:05:18 -0500 Subject: [PATCH 74/89] genrou fixing after rebase [skip ci] --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 95 +------------------ .../SynchronousMachine/GENROUwS/Genrou.hpp | 21 ---- 2 files changed, 5 insertions(+), 111 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index d6878d2f0..8707689ee 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -55,103 +55,18 @@ namespace GridKit setDerivedParams(); } - /*! - * @brief Constructor for the GENROU generator with saturation. - * + /** + * @brief Constructor for a GENROU generator model with saturation */ template Genrou::Genrou( - bus_type* bus, - bus_type* pmech_signal, - bus_type* omega_signal, + bus_type* bus, + bus_type* pmech_signal, + bus_type* omega_signal, const model_data_type& data) : bus_(bus), pmech_signal_(pmech_signal), omega_signal_(omega_signal), - busID_(0), - unit_id_(1), - p0_(data.p0), - q0_(data.q0), - H_(data.H), - D_(data.D), - Ra_(data.Ra), - Tdop_(data.Tdop), - Tdopp_(data.Tdopp), - Tqopp_(data.Tqopp), - Tqop_(data.Tqop), - Xd_(data.Xd), - Xdp_(data.Xdp), - Xdpp_(data.Xdpp), - Xq_(data.Xq), - Xqp_(data.Xqp), - Xqpp_(data.Xqpp), - Xl_(data.Xl), - S10_(data.S10), - S12_(data.S12), - pmech_set_(0), - efd_set_(0) - { - size_ = 20; - setDerivedParams(); - } - - template - Genrou::Genrou(bus_type* bus, - IdxT unit_id, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12) - : bus_(bus), - pmech_signal_(nullptr), - omega_signal_(nullptr), - busID_(0), - unit_id_(unit_id), - p0_(p0), - q0_(q0), - H_(H), - D_(D), - Ra_(Ra), - Tdop_(Tdop), - Tdopp_(Tdopp), - Tqopp_(Tqopp), - Tqop_(Tqop), - Xd_(Xd), - Xdp_(Xdp), - Xdpp_(Xdpp), - Xq_(Xq), - Xqp_(Xqp), - Xqpp_(Xqpp), - Xl_(Xl), - S10_(S10), - S12_(S12) - pmech_set_(0), - efd_set_(0) - { - size_ = 20; - setDerivedParams(); - } - - /** - * @brief Constructor for a GENROU generator model with saturation - */ - template - Genrou::Genrou(bus_type* bus, const model_data_type& data) - : bus_(bus), unit_id_(1) { if (data.parameters.contains(model_data_type::Parameters::p0)) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 445a7db74..7c8b70fed 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -50,27 +50,6 @@ namespace GridKit bus_type* pmech_signal, bus_type* omega_signal, const model_data_type& data); - Genrou(bus_type* bus, - IdxT unit_id, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12); - Genrou(bus_type* bus, const model_data_type& data); ~Genrou() = default; int allocate() override; From fabe772b7fdc887b638df3ec13f0f2a8a49b096d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:14:23 -0500 Subject: [PATCH 75/89] change implementation to GenrouPort style [skip ci] --- .../SynchronousMachine/GENROUwS/GenrouData.hpp | 2 ++ src/Model/PhasorDynamics/SystemModel.hpp | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp index 8e70c77c8..170939f99 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp @@ -39,6 +39,8 @@ namespace GridKit enum class GenrouPorts { bus, ///< Unique ID of the connecting bus + pmech_signal, ///< Unique ID of the governor Pmech signal. + speed_signal, ///< Unique ID of the speed signal of the machine. exciter_signal, ///< Unique ID of the bus providing the exciter signal governor_signal, ///< Unique ID of the bus providing the governor signal }; diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index c5caae160..9ce6785e4 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -129,7 +129,19 @@ namespace GridKit { bus_index = gendata.ports.at(GenrouData::Ports::bus); } - auto* gen = new Genrou(getBus(bus_index), gendata); + if (gendata.ports.contains(GenrouData::Ports::pmech_signal)) + { + pmech_index = gendata.ports.at(GenrouData::Ports::pmech_signal); + } + if (gendata.ports.contains(GenrouData::Ports::speed_signal)) + { + pmech_index = gendata.ports.at(GenrouData::Ports::speed_signal); + } + auto* gen = new Genrou( + getBus(bus_index), + getBus(pmech_indx), + getBus(speed_index), + gendata); addComponent(gen); } From ae33c2be4442e2a49190e385a69b9d2d83546524 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:18:16 -0500 Subject: [PATCH 76/89] correct genrou sys model [skip ci] --- src/Model/PhasorDynamics/SystemModel.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 9ce6785e4..76f9923fd 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -125,6 +125,8 @@ namespace GridKit for (const auto& gendata : data.genrou) { IdxT bus_index = 0; + IdxT pmech_index = 0; + IdxT speed_index = 0; if (gendata.ports.contains(GenrouData::Ports::bus)) { bus_index = gendata.ports.at(GenrouData::Ports::bus); @@ -135,11 +137,11 @@ namespace GridKit } if (gendata.ports.contains(GenrouData::Ports::speed_signal)) { - pmech_index = gendata.ports.at(GenrouData::Ports::speed_signal); + speed_index = gendata.ports.at(GenrouData::Ports::speed_signal); } auto* gen = new Genrou( getBus(bus_index), - getBus(pmech_indx), + getBus(pmech_index), getBus(speed_index), gendata); addComponent(gen); From 89163c243912becf8b3948f415ed92099cc8a285 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:24:37 -0500 Subject: [PATCH 77/89] correct the Tgov1 example [skip ci] --- .../Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 50 ++++--------------- 1 file changed, 9 insertions(+), 41 deletions(-) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 95d639e6d..16f1e9466 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -63,11 +63,11 @@ int main() // Pmech Signal Bus data.bus[2].bus_id = 2; - data.bus[2].bus_type = BusData::BusType::SIGNAL; + data.bus[2].bus_type = BusType::SIGNAL; // Speed Signal Bus data.bus[3].bus_id = 3; - data.bus[3].bus_type = BusData::BusType::SIGNAL; + data.bus[3].bus_type = BusType::SIGNAL; // Set branch data data.branch.resize(1); @@ -86,27 +86,12 @@ int main() data.bus_fault[0].parameters[BusFaultParameters::X] = 1e-3; data.bus_fault[0].parameters[BusFaultParameters::state0] = false; - // Set generator data - data.genrou.resize(1); - data.genrou[0].p0 = 1.; - data.genrou[0].q0 = 0.05013; - data.genrou[0].signal_pmech = 2; - data.genrou[0].signal_speed = 3; - - // Governor - data.gov.resize(1); - data.gov[0].signal_speed = 3; - data.gov[0].signal_pmech = 2; // Signal Bus ID - - // - // Instantiate system model - // - - SystemModel sys(data); // Set generator data data.genrou.resize(1); + data.genrou[0].ports[GenrouPorts::pmech_signal] = 2; + data.genrou[0].ports[GenrouPorts::speed_signal] = 3; data.genrou[0].parameters[GenrouParameters::p0] = 1.; data.genrou[0].parameters[GenrouParameters::q0] = 0.05013; data.genrou[0].parameters[GenrouParameters::H] = 3.; @@ -126,9 +111,11 @@ int main() data.genrou[0].parameters[GenrouParameters::S10] = 0.; data.genrou[0].parameters[GenrouParameters::S12] = 0.; + // Governor TODO use new data structure data.gov.resize(1); - // Set Gov data (Default PW values) + data.gov[0].signal_speed = 3; + data.gov[0].signal_pmech = 2; data.gov[0].R = 0.05; data.gov[0].Pvmin = 0; data.gov[0].Pvmax = 1.0; @@ -137,27 +124,8 @@ int main() data.gov[0].T3 = 7.5; data.gov[0].Dt = 0; - // Manual add gen & gov components - // This is a hack since SignalBus not implemented - - // Create Pointers first - Genrou* gen; - Governor::Tgov1* gov; - - // Instatiate Genrou & add to system model - gen = new Genrou( - sys.getBus(0), - data.genrou[0]); - - // Instatiate GovernorTgov1 & add to system model - gov = new Governor::Tgov1( - gen, - data.gov[0]); - gen->setgovenor(gov); - - // Add Generator and Governor to System - sys.addComponent(gen); - sys.addComponent(gov); + // Instantiate system model + SystemModel sys(data); sys.allocate(); From ab4f7cc405da08e49a1714e24c2483852bf44074 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:26:30 -0500 Subject: [PATCH 78/89] update cmake from gov sys impl [skip ci] --- examples/PhasorDynamics/Tiny/ThreeBus/Classical/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/PhasorDynamics/Tiny/ThreeBus/Classical/CMakeLists.txt b/examples/PhasorDynamics/Tiny/ThreeBus/Classical/CMakeLists.txt index cd07bce3a..015609bb5 100644 --- a/examples/PhasorDynamics/Tiny/ThreeBus/Classical/CMakeLists.txt +++ b/examples/PhasorDynamics/Tiny/ThreeBus/Classical/CMakeLists.txt @@ -10,6 +10,7 @@ target_link_libraries(ThreeBusClassical GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou GRIDKIT::phasor_dynamics_gen_classical + GRIDKIT::phasor_dynamics_governortgov1 GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS ThreeBusClassical RUNTIME DESTINATION bin) From 3a823645b569666d7cf90c1f6065bc86104e1141 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:33:54 -0500 Subject: [PATCH 79/89] readd: legacy support TenGen example [skip ci] --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 48 +++++++++++++++++++ .../SynchronousMachine/GENROUwS/Genrou.hpp | 22 +++++++++ 2 files changed, 70 insertions(+) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 8707689ee..9cf08c2c9 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -168,6 +168,54 @@ namespace GridKit setDerivedParams(); } + template + Genrou::Genrou(bus_type* bus, + IdxT unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12) + : bus_(bus), + pmech_signal_(nullptr), + omega_signal_(nullptr), + busID_(0), + unit_id_(unit_id), + p0_(p0), + q0_(q0), + H_(H), + D_(D), + Ra_(Ra), + Tdop_(Tdop), + Tdopp_(Tdopp), + Tqopp_(Tqopp), + Tqop_(Tqop), + Xd_(Xd), + Xdp_(Xdp), + Xdpp_(Xdpp), + Xq_(Xq), + Xqp_(Xqp), + Xqpp_(Xqpp), + Xl_(Xl), + S10_(S10), + S12_(S12) + { + size_ = 20; + setDerivedParams(); + } /*! * @brief allocate method computes sparsity pattern of the Jacobian. */ diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 7c8b70fed..9c257fdb2 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -50,6 +50,28 @@ namespace GridKit bus_type* pmech_signal, bus_type* omega_signal, const model_data_type& data); + + // TODO remove, becoming hard to manage + Genrou(bus_type* bus, + IdxT unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12); ~Genrou() = default; int allocate() override; From 2c63f683b077e22244125529551a66364b83ae57 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:37:45 -0500 Subject: [PATCH 80/89] comment out known magic_enum bug [skip ci] --- tests/UnitTests/Utilities/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/UnitTests/Utilities/CMakeLists.txt b/tests/UnitTests/Utilities/CMakeLists.txt index d67e4f916..ff1fc5efb 100644 --- a/tests/UnitTests/Utilities/CMakeLists.txt +++ b/tests/UnitTests/Utilities/CMakeLists.txt @@ -1,6 +1,6 @@ -add_executable(test_case_format runCaseFormatTests.cpp) -target_include_directories(test_case_format PRIVATE ${THIRD_PARTY_DIR}/nlohmann-json/single_include ${THIRD_PARTY_DIR}/magic-enum/include) +#add_executable(test_case_format runCaseFormatTests.cpp) +#target_include_directories(test_case_format PRIVATE ${THIRD_PARTY_DIR}/nlohmann-json/single_include ${THIRD_PARTY_DIR}/magic-enum/include) -add_test(NAME UtilitiesCaseFormatTest COMMAND $) +#add_test(NAME UtilitiesCaseFormatTest COMMAND $) -install(TARGETS test_case_format) +#install(TARGETS test_case_format) From 73b1001f8afe7ba35ab1d0767c0d854981c6e0ae Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:43:21 -0500 Subject: [PATCH 81/89] Sys level handle genrou without gov [skip ci] --- src/Model/PhasorDynamics/SystemModel.hpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 76f9923fd..238229f76 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -127,22 +127,30 @@ namespace GridKit IdxT bus_index = 0; IdxT pmech_index = 0; IdxT speed_index = 0; + + bus_type* genrou_bus = nullptr; + bus_type* pmech_bus = nullptr; + bus_type* speed_bus = nullptr; + if (gendata.ports.contains(GenrouData::Ports::bus)) { bus_index = gendata.ports.at(GenrouData::Ports::bus); + genrou_bus = getBus(bus_index); } if (gendata.ports.contains(GenrouData::Ports::pmech_signal)) { pmech_index = gendata.ports.at(GenrouData::Ports::pmech_signal); + pmech_bus = getBus(pmech_index); } if (gendata.ports.contains(GenrouData::Ports::speed_signal)) { speed_index = gendata.ports.at(GenrouData::Ports::speed_signal); + speed_bus = getBus(speed_index); } auto* gen = new Genrou( - getBus(bus_index), - getBus(pmech_index), - getBus(speed_index), + genrou_bus, + pmech_bus, + speed_bus, gendata); addComponent(gen); } From 3b40ee676b5cb51a958b7ab5070bd7a490e90129 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:51:06 -0500 Subject: [PATCH 82/89] edit: temporary sys model safe implementation [skip ci] --- src/Model/PhasorDynamics/SystemModel.hpp | 37 +++++++++++++----------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 238229f76..334f6b314 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -128,31 +128,34 @@ namespace GridKit IdxT pmech_index = 0; IdxT speed_index = 0; - bus_type* genrou_bus = nullptr; - bus_type* pmech_bus = nullptr; - bus_type* speed_bus = nullptr; + bool has_pmech_signal = gendata.ports.contains(GenrouData::Ports::pmech_signal); + bool has_speed_signal = gendata.ports.contains(GenrouData::Ports::speed_signal); if (gendata.ports.contains(GenrouData::Ports::bus)) { + bus_index = gendata.ports.at(GenrouData::Ports::bus); - genrou_bus = getBus(bus_index); + + auto* gen = new Genrou( + getBus(bus_index), + nullptr, + nullptr, + gendata); + addComponent(gen); } - if (gendata.ports.contains(GenrouData::Ports::pmech_signal)) + if (has_pmech_signal & has_speed_signal) { + + bus_index = gendata.ports.at(GenrouData::Ports::bus); pmech_index = gendata.ports.at(GenrouData::Ports::pmech_signal); - pmech_bus = getBus(pmech_index); - } - if (gendata.ports.contains(GenrouData::Ports::speed_signal)) - { speed_index = gendata.ports.at(GenrouData::Ports::speed_signal); - speed_bus = getBus(speed_index); - } - auto* gen = new Genrou( - genrou_bus, - pmech_bus, - speed_bus, - gendata); - addComponent(gen); + + auto* gen = new Genrou( + getBus(bus_index), + getBus(pmech_index), + getBus(speed_index), + gendata); + addComponent(gen); } // Add classical generators From ac4d8d0bbeaeefa32f5879f57f982b2c02304260 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:52:34 -0500 Subject: [PATCH 83/89] minor: syntax error [skip ci] --- src/Model/PhasorDynamics/SystemModel.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 334f6b314..d713b6aff 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -133,7 +133,7 @@ namespace GridKit if (gendata.ports.contains(GenrouData::Ports::bus)) { - + bus_index = gendata.ports.at(GenrouData::Ports::bus); auto* gen = new Genrou( @@ -156,6 +156,7 @@ namespace GridKit getBus(speed_index), gendata); addComponent(gen); + } } // Add classical generators From 298b545a39ca022bc18e13cfe7f1d74bea53bbe6 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 15:57:25 -0500 Subject: [PATCH 84/89] incorrect boolean logic in sys model [skip ci] --- src/Model/PhasorDynamics/SystemModel.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index d713b6aff..92587526e 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -128,10 +128,11 @@ namespace GridKit IdxT pmech_index = 0; IdxT speed_index = 0; + bool has_bus = gendata.ports.contains(GenrouData::Ports::bus); bool has_pmech_signal = gendata.ports.contains(GenrouData::Ports::pmech_signal); bool has_speed_signal = gendata.ports.contains(GenrouData::Ports::speed_signal); - if (gendata.ports.contains(GenrouData::Ports::bus)) + if (has_bus && !has_pmech_signal && !has_speed_signal) { bus_index = gendata.ports.at(GenrouData::Ports::bus); @@ -143,7 +144,7 @@ namespace GridKit gendata); addComponent(gen); } - if (has_pmech_signal & has_speed_signal) + if (has_bus && has_pmech_signal && has_speed_signal) { bus_index = gendata.ports.at(GenrouData::Ports::bus); From c5495c23eee2d36d2e749f83cd072d93286870a3 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 16:04:00 -0500 Subject: [PATCH 85/89] edit: system model bug [skip ci] --- src/Model/PhasorDynamics/SystemModel.hpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 92587526e..3069b7184 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -132,19 +132,9 @@ namespace GridKit bool has_pmech_signal = gendata.ports.contains(GenrouData::Ports::pmech_signal); bool has_speed_signal = gendata.ports.contains(GenrouData::Ports::speed_signal); - if (has_bus && !has_pmech_signal && !has_speed_signal) - { + // has_bus && !has_pmech_signal && !has_speed_signal - bus_index = gendata.ports.at(GenrouData::Ports::bus); - - auto* gen = new Genrou( - getBus(bus_index), - nullptr, - nullptr, - gendata); - addComponent(gen); - } - if (has_bus && has_pmech_signal && has_speed_signal) + if (has_pmech_signal) { bus_index = gendata.ports.at(GenrouData::Ports::bus); @@ -158,6 +148,16 @@ namespace GridKit gendata); addComponent(gen); } + else{ + bus_index = gendata.ports.at(GenrouData::Ports::bus); + + auto* gen = new Genrou( + getBus(bus_index), + nullptr, + nullptr, + gendata); + addComponent(gen); + } } // Add classical generators From 1213a9b840643b4c0980d6c785eac453808fa624 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 16:11:07 -0500 Subject: [PATCH 86/89] debug: output of genrou [skip ci] --- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 4 +++- src/Model/PhasorDynamics/SystemModel.hpp | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 9cf08c2c9..48f76a72f 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -67,7 +67,9 @@ namespace GridKit : bus_(bus), pmech_signal_(pmech_signal), omega_signal_(omega_signal), - unit_id_(1) + unit_id_(1), + pmech_set_(0), + efd_set_(0) { if (data.parameters.contains(model_data_type::Parameters::p0)) { diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 3069b7184..5ad70524c 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -133,6 +133,9 @@ namespace GridKit bool has_speed_signal = gendata.ports.contains(GenrouData::Ports::speed_signal); // has_bus && !has_pmech_signal && !has_speed_signal + std::cout << "has bus " << has_bus + << " has pmech " << has_pmech_signal + << " has speed " << has_speed_signal; if (has_pmech_signal) { From 25b2c42f01bb0b7c9779b2bc09e96b164f37f10c Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 16:17:04 -0500 Subject: [PATCH 87/89] bug fixed: bus was not set in any example for new data struct [skip ci] --- examples/PhasorDynamics/Tiny/TwoBus/Basic/TwoBusBasic.cpp | 1 + examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Basic/TwoBusBasic.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Basic/TwoBusBasic.cpp index 1d614ccfb..196a1a61d 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Basic/TwoBusBasic.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Basic/TwoBusBasic.cpp @@ -72,6 +72,7 @@ int main() // Set generator data data.genrou.resize(1); + data.genrou[0].ports[GenrouPorts::bus] = data.bus[0].bus_id; data.genrou[0].parameters[GenrouParameters::p0] = 1.; data.genrou[0].parameters[GenrouParameters::q0] = 0.05013; data.genrou[0].parameters[GenrouParameters::H] = 3.; diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index 16f1e9466..31cbb2bbb 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -90,6 +90,7 @@ int main() // Set generator data data.genrou.resize(1); + data.genrou[0].ports[GenrouPorts::bus] = data.bus[0].bus_id; data.genrou[0].ports[GenrouPorts::pmech_signal] = 2; data.genrou[0].ports[GenrouPorts::speed_signal] = 3; data.genrou[0].parameters[GenrouParameters::p0] = 1.; From 5afcb8e07e207915db1df853c0e2661645b5de88 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 16:20:15 -0500 Subject: [PATCH 88/89] clean: pre rebase with modified implementation before further changes [skip ci] --- src/Model/PhasorDynamics/SystemModel.hpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 5ad70524c..95f6001b2 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -132,12 +132,7 @@ namespace GridKit bool has_pmech_signal = gendata.ports.contains(GenrouData::Ports::pmech_signal); bool has_speed_signal = gendata.ports.contains(GenrouData::Ports::speed_signal); - // has_bus && !has_pmech_signal && !has_speed_signal - std::cout << "has bus " << has_bus - << " has pmech " << has_pmech_signal - << " has speed " << has_speed_signal; - - if (has_pmech_signal) + if (has_bus && has_pmech_signal && has_speed_signal) { bus_index = gendata.ports.at(GenrouData::Ports::bus); From 8e95f1a010432f6b47585aebb482d9cb7f47b4ce Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 10 Jul 2025 16:24:56 -0500 Subject: [PATCH 89/89] rename: bussignal send to write and safeWrite [skip ci] --- src/Model/PhasorDynamics/Bus/Bus.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 2 +- src/Model/PhasorDynamics/Bus/BusSignal.hpp | 2 +- src/Model/PhasorDynamics/BusBase.hpp | 2 +- src/Model/PhasorDynamics/Component.hpp | 4 ++-- src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp | 2 +- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index e89a3092f..ac5e159d0 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -57,7 +57,7 @@ namespace GridKit } // TODO remove, uneeded - void send(ScalarT&) override + void write(ScalarT&) override { } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 7ccc5c495..e4f2c8bd2 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -54,7 +54,7 @@ namespace GridKit } // TODO remove, uneeded - void send(ScalarT&) override + void write(ScalarT&) override { } diff --git a/src/Model/PhasorDynamics/Bus/BusSignal.hpp b/src/Model/PhasorDynamics/Bus/BusSignal.hpp index 9f1054e2c..730d1a9a5 100644 --- a/src/Model/PhasorDynamics/Bus/BusSignal.hpp +++ b/src/Model/PhasorDynamics/Bus/BusSignal.hpp @@ -74,7 +74,7 @@ namespace GridKit * * @param value The value of the signal */ - void send(ScalarT& value) override + void write(ScalarT& value) override { f_[0] += value; } diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 87e5d395e..7f3b0c8dd 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -74,7 +74,7 @@ namespace GridKit virtual void initial_value(ScalarT value) = 0; virtual ScalarT& read() = 0; - virtual void send(ScalarT& value) = 0; + virtual void write(ScalarT& value) = 0; virtual ScalarT& Vr() = 0; virtual const ScalarT& Vr() const = 0; diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index cabb9b09c..206db4c87 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -50,11 +50,11 @@ namespace GridKit * @param signal The signal bus object pointer * @param value The value to send to the equality constraint */ - void safeSend(bus_type* signal, ScalarT value) + void safeWrite(bus_type* signal, ScalarT value) { if (signal) { - signal->send(value); + signal->write(value); } } diff --git a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp index a392edf44..4658438ad 100644 --- a/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp +++ b/src/Model/PhasorDynamics/Governor/Tgov1/Tgov1.cpp @@ -198,7 +198,7 @@ namespace GridKit f_[2] = -pmech + (ptx + T2_ * pv) / T3_ - (Dt_ * omega); // Write External - this->safeSend(pmech_signal_, pmech); + this->safeWrite(pmech_signal_, pmech); return 0; } diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 48f76a72f..94b654de7 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -335,7 +335,7 @@ namespace GridKit ScalarT pmech = this->safeRead(pmech_signal_, pmech_set_); // Outputs - this->safeSend(omega_signal_, y_[1]); + this->safeWrite(omega_signal_, y_[1]); /* Read variables */ ScalarT delta = y_[0];