diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ffbbeba0..b908e7201 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Added `enable` and `disable` solver events that put a branch in or out of service. - `verify()` returns `Model::ConfigurationChecks` listing every configuration problem instead of an error count. - Added `Model::ParameterReader` +- Removed legacy PhasorDynamics component constructors in favor of constructors taking model data. ## v0.2 diff --git a/GridKit/Model/PhasorDynamics/Branch/Branch.hpp b/GridKit/Model/PhasorDynamics/Branch/Branch.hpp index 33160f6f5..9c40e9b35 100644 --- a/GridKit/Model/PhasorDynamics/Branch/Branch.hpp +++ b/GridKit/Model/PhasorDynamics/Branch/Branch.hpp @@ -54,15 +54,6 @@ namespace GridKit using MonitorT = Model::VariableMonitor; public: - Branch(BusT* bus1, BusT* bus2); - Branch(BusT* bus1, - BusT* bus2, - RealT R, - RealT X, - RealT G, - RealT B, - RealT tap = 1.0, - RealT phase = 0.0); Branch(BusT* bus1, BusT* bus2, const ModelDataT& data); virtual ~Branch(); @@ -192,7 +183,7 @@ namespace GridKit BusT* bus1_; BusT* bus2_; RealT R_{0.0}; - RealT X_{0.0}; + RealT X_{0.01}; RealT G_{0.0}; RealT B_{0.0}; RealT Gmag_{0.0}; diff --git a/GridKit/Model/PhasorDynamics/Branch/BranchImpl.hpp b/GridKit/Model/PhasorDynamics/Branch/BranchImpl.hpp index 0cd41a686..3925986bb 100644 --- a/GridKit/Model/PhasorDynamics/Branch/BranchImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Branch/BranchImpl.hpp @@ -26,60 +26,11 @@ namespace GridKit * Model size: * - Number of equations = 0 * - Number of internal variables = 0 - */ - template - Branch::Branch(BusT* bus1, BusT* bus2) - : bus1_(bus1), - bus2_(bus2), - R_(0.0), - X_(0.01), - G_(0.0), - B_(0.0), - tap_(1.0), - phase_(0.0), - bus1_id_(0), - bus2_id_(0) - { - size_ = 0; - setDerivedParams(); - } - - /** - * @brief Construct a new Branch * * @param bus1 - pointer to bus-1 * @param bus2 - pointer to bus-2 - * @param R - line series resistance - * @param X - line series reactance - * @param G - total line shunt conductance - * @param B - total line shunt susceptance - * @param tap - off-nominal tap magnitude on bus1 side - * @param phase - phase shift angle in radians + * @param data - branch parameters and monitored-variable selections */ - template - Branch::Branch(BusT* bus1, - BusT* bus2, - RealT R, - RealT X, - RealT G, - RealT B, - RealT tap, - RealT phase) - : bus1_(bus1), - bus2_(bus2), - R_(R), - X_(X), - G_(G), - B_(B), - tap_(tap), - phase_(phase), - bus1_id_(0), - bus2_id_(0) - { - size_ = 0; - setDerivedParams(); - } - template Branch::Branch(BusT* bus1, BusT* bus2, const ModelDataT& data) : bus1_(bus1), diff --git a/GridKit/Model/PhasorDynamics/Branch/README.md b/GridKit/Model/PhasorDynamics/Branch/README.md index c746520bb..27a34846e 100644 --- a/GridKit/Model/PhasorDynamics/Branch/README.md +++ b/GridKit/Model/PhasorDynamics/Branch/README.md @@ -29,7 +29,7 @@ Figure 1: Branch model. Symbol | Units | JSON | Description | Typical Value | Note -----------------|--------|---------|-----------------------------------------|---------------|----- $R$ | [p.u.] | `R` | Branch series resistance | | -$X$ | [p.u.] | `X` | Branch series reactance | | +$X$ | [p.u.] | `X` | Branch series reactance | 0.01 | Default when omitted $G$ | [p.u.] | `G` | Total line shunt conductance | 0.0 | $B$ | [p.u.] | `B` | Total line shunt susceptance | 0.0 | $G_\mathrm{mag}$ | [p.u.] | `Gmag` | Magnetizing shunt conductance at bus 1 | 0.0 | diff --git a/GridKit/Model/PhasorDynamics/Controller/REECB/Reecb.hpp b/GridKit/Model/PhasorDynamics/Controller/REECB/Reecb.hpp index 99e7a3b22..c17af79b4 100644 --- a/GridKit/Model/PhasorDynamics/Controller/REECB/Reecb.hpp +++ b/GridKit/Model/PhasorDynamics/Controller/REECB/Reecb.hpp @@ -111,7 +111,6 @@ namespace GridKit static constexpr RealT INITIALIZATION_TOLERANCE = static_cast(100.0) * std::numeric_limits::epsilon(); - Reecb(BusT* bus); Reecb(BusT* bus, const ModelDataT& data); ~Reecb(); diff --git a/GridKit/Model/PhasorDynamics/Controller/REECB/ReecbImpl.hpp b/GridKit/Model/PhasorDynamics/Controller/REECB/ReecbImpl.hpp index bec915f64..109245b7f 100644 --- a/GridKit/Model/PhasorDynamics/Controller/REECB/ReecbImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Controller/REECB/ReecbImpl.hpp @@ -48,19 +48,6 @@ namespace GridKit RealT vref{}; }; - /** - * @brief Construct an unconfigured REECB controller - * - * @param[in] bus Terminal bus measured by the controller. - */ - template - Reecb::Reecb(BusT* bus) - : bus_(bus) - { - size_ = static_cast(Utilities::enum_size()); - setDerivedParameters(); - } - /** * @brief Construct REECB from model data * diff --git a/GridKit/Model/PhasorDynamics/Controller/REPCA/Repca.hpp b/GridKit/Model/PhasorDynamics/Controller/REPCA/Repca.hpp index 79e3131ab..c26ebd238 100644 --- a/GridKit/Model/PhasorDynamics/Controller/REPCA/Repca.hpp +++ b/GridKit/Model/PhasorDynamics/Controller/REPCA/Repca.hpp @@ -116,7 +116,6 @@ namespace GridKit public: static constexpr RealT INITIALIZATION_TOLERANCE = static_cast(1.0e-12); - Repca(BusT* bus); Repca(BusT* bus, const ModelDataT& data); ~Repca(); diff --git a/GridKit/Model/PhasorDynamics/Controller/REPCA/RepcaImpl.hpp b/GridKit/Model/PhasorDynamics/Controller/REPCA/RepcaImpl.hpp index e61dc0d57..b3c9addff 100644 --- a/GridKit/Model/PhasorDynamics/Controller/REPCA/RepcaImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Controller/REPCA/RepcaImpl.hpp @@ -28,23 +28,6 @@ namespace GridKit /// Logger used for REPCA diagnostics. using Log = ::GridKit::Utilities::Logger; - /** - * @brief Construct REPCA with its documented parameter defaults - * - * The regulated bus is retained, the model is sized, and every - * parameter keeps its documented default. No monitor or signal - * connection is created. - * - * @param[in] bus Regulated bus measured by the controller. - */ - template - Repca::Repca(BusT* bus) - : bus_(bus) - { - size_ = static_cast(Utilities::enum_size()); - setDerivedParameters(); - } - /** * @brief Construct REPCA from model data * diff --git a/GridKit/Model/PhasorDynamics/Converter/REGCA/Regca.hpp b/GridKit/Model/PhasorDynamics/Converter/REGCA/Regca.hpp index e8224c632..9bff7553b 100644 --- a/GridKit/Model/PhasorDynamics/Converter/REGCA/Regca.hpp +++ b/GridKit/Model/PhasorDynamics/Converter/REGCA/Regca.hpp @@ -99,7 +99,6 @@ namespace GridKit using ExternalVariablesT = RegcaExternalVariables; public: - Regca(BusT* bus); Regca(BusT* bus, const ModelDataT& data); ~Regca(); diff --git a/GridKit/Model/PhasorDynamics/Converter/REGCA/RegcaImpl.hpp b/GridKit/Model/PhasorDynamics/Converter/REGCA/RegcaImpl.hpp index 43d5b6a14..669cef293 100644 --- a/GridKit/Model/PhasorDynamics/Converter/REGCA/RegcaImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Converter/REGCA/RegcaImpl.hpp @@ -27,18 +27,6 @@ namespace GridKit { using Log = ::GridKit::Utilities::Logger; - /** - * @brief Construct a sized but unconfigured REGCA converter. - * - * @param[in] bus Terminal bus the converter injects into. - */ - template - Regca::Regca(BusT* bus) - : bus_(bus) - { - size_ = static_cast(Utilities::enum_size()); - } - /** * @brief Construct a REGCA converter from model data. * diff --git a/GridKit/Model/PhasorDynamics/Exciter/ESDC1A/Esdc1a.hpp b/GridKit/Model/PhasorDynamics/Exciter/ESDC1A/Esdc1a.hpp index d27d59f5d..faf61e803 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/ESDC1A/Esdc1a.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/ESDC1A/Esdc1a.hpp @@ -94,7 +94,6 @@ namespace GridKit using ExternalVariablesT = Esdc1aExternalVariables; public: - Esdc1a(BusT* bus); Esdc1a(BusT* bus, const ModelDataT& data); ~Esdc1a(); diff --git a/GridKit/Model/PhasorDynamics/Exciter/ESDC1A/Esdc1aImpl.hpp b/GridKit/Model/PhasorDynamics/Exciter/ESDC1A/Esdc1aImpl.hpp index 086f11ae5..b2db0b6b3 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/ESDC1A/Esdc1aImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/ESDC1A/Esdc1aImpl.hpp @@ -29,23 +29,6 @@ namespace GridKit /// Logger used for ESDC1A diagnostics. using Log = ::GridKit::Utilities::Logger; - /** - * @brief Construct an ESDC1A exciter without parameters - * - * The model is sized but left unconfigured. Every parameter keeps its - * documented default, and no monitor is created. verify() rejects the - * model until an `efd` output node is assigned. - * - * @param[in] bus Terminal bus the exciter measures. - */ - template - Esdc1a::Esdc1a(BusT* bus) - : bus_(bus) - { - size_ = static_cast(Utilities::enum_size()); - setDerivedParameters(); - } - /** * @brief Construct an ESDC1A exciter from model data * diff --git a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1.hpp b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1.hpp index cf58a4da9..d8c9637da 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1.hpp @@ -82,7 +82,6 @@ namespace GridKit using MonitorT = Model::VariableMonitor; public: - Ieeet1(BusT* bus); Ieeet1(BusT* bus, const ModelDataT& data); ~Ieeet1(); diff --git a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Impl.hpp b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Impl.hpp index 798aa18e3..595ea4584 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Impl.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Impl.hpp @@ -28,15 +28,6 @@ namespace GridKit { using Log = ::GridKit::Utilities::Logger; - /** - * @brief Constructor for IEEET1 Exciter - */ - template - Ieeet1::Ieeet1(BusT* bus) - : Ieeet1(bus, ModelDataT{}) - { - } - /** * @brief Constructor for IEEET1 Exciter * diff --git a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPti.hpp b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPti.hpp index 0ce660283..4e696c874 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPti.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPti.hpp @@ -69,7 +69,6 @@ namespace GridKit using MonitorT = Model::VariableMonitor; public: - SexsPti(BusT* bus); SexsPti(BusT* bus, const ModelDataT& data); ~SexsPti(); diff --git a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiImpl.hpp b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiImpl.hpp index 579ec9f79..8da06d7a7 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiImpl.hpp @@ -25,13 +25,6 @@ namespace GridKit { using Log = ::GridKit::Utilities::Logger; - template - SexsPti::SexsPti(BusT* bus) - : bus_(bus) - { - size_ = 3; - } - template SexsPti::SexsPti(BusT* bus, const ModelDataT& data) : bus_(bus), diff --git a/GridKit/Model/PhasorDynamics/Governor/GASTPTI/GastPti.hpp b/GridKit/Model/PhasorDynamics/Governor/GASTPTI/GastPti.hpp index 1c0573bdc..1d988b7bd 100644 --- a/GridKit/Model/PhasorDynamics/Governor/GASTPTI/GastPti.hpp +++ b/GridKit/Model/PhasorDynamics/Governor/GASTPTI/GastPti.hpp @@ -83,8 +83,7 @@ namespace GridKit using SignalNodeSetT = SignalNodeSet; public: - GastPti(); - explicit GastPti(const ModelDataT& data); + GastPti(const ModelDataT& data); ~GastPti(); int setGridKitComponentID(IdxT component_id) override final; diff --git a/GridKit/Model/PhasorDynamics/Governor/GASTPTI/GastPtiImpl.hpp b/GridKit/Model/PhasorDynamics/Governor/GASTPTI/GastPtiImpl.hpp index d23637037..1508977af 100644 --- a/GridKit/Model/PhasorDynamics/Governor/GASTPTI/GastPtiImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Governor/GASTPTI/GastPtiImpl.hpp @@ -28,16 +28,6 @@ namespace GridKit /// Logger used for GASTPTI diagnostics. using Log = ::GridKit::Utilities::Logger; - /** - * @brief Construct an unconfigured GASTPTI governor - */ - template - GastPti::GastPti() - { - size_ = static_cast(Utilities::enum_size()); - setDerivedParameters(); - } - /** * @brief Construct a GASTPTI governor from model data * diff --git a/GridKit/Model/PhasorDynamics/Governor/HYGOV/Hygov.hpp b/GridKit/Model/PhasorDynamics/Governor/HYGOV/Hygov.hpp index 6566bce2d..db51a599d 100644 --- a/GridKit/Model/PhasorDynamics/Governor/HYGOV/Hygov.hpp +++ b/GridKit/Model/PhasorDynamics/Governor/HYGOV/Hygov.hpp @@ -94,8 +94,7 @@ namespace GridKit using ExternalVariablesT = HygovExternalVariables; public: - Hygov(); - explicit Hygov(const ModelDataT& data); + Hygov(const ModelDataT& data); ~Hygov(); int setGridKitComponentID(IdxT component_id) override final; diff --git a/GridKit/Model/PhasorDynamics/Governor/HYGOV/HygovImpl.hpp b/GridKit/Model/PhasorDynamics/Governor/HYGOV/HygovImpl.hpp index a5bd471af..59014614c 100644 --- a/GridKit/Model/PhasorDynamics/Governor/HYGOV/HygovImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Governor/HYGOV/HygovImpl.hpp @@ -27,15 +27,6 @@ namespace GridKit { using Log = ::GridKit::Utilities::Logger; - /** - * @brief Construct an unconfigured HYGOV governor - */ - template - Hygov::Hygov() - { - size_ = static_cast(Utilities::enum_size()); - } - /** * @brief Construct a HYGOV governor from model data * diff --git a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp index f9813545a..911fbac23 100644 --- a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp +++ b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp @@ -72,9 +72,7 @@ namespace GridKit using SignalPortsT = SignalPorts; public: - Tgov1(); - Tgov1(SignalNodeT*, SignalNodeT*); - Tgov1(const ModelDataT&); + Tgov1(const ModelDataT& data); ~Tgov1() = default; int setGridKitComponentID(IdxT) override final; diff --git a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Impl.hpp b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Impl.hpp index 06b400682..eca4f89d9 100644 --- a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Impl.hpp +++ b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Impl.hpp @@ -25,43 +25,6 @@ namespace GridKit { using Log = ::GridKit::Utilities::Logger; - /** - * @brief Constructs a Tgov1 governor model without setting its parameters - * - */ - template - Tgov1::Tgov1() - : Trate_(100.0) - { - size_ = 3; - setDerivedParams(); - } - - /** - * @brief Constructs a Tgov1 governor model from its parameters - * - * @param pmech $P_m$ internal variable signal node - * @param omega $\omega$ external variable signal node - */ - template - Tgov1::Tgov1(SignalNodeT* pmech, SignalNodeT* omega) - : Trate_(100.0), - R_(0.05), - Pvmin_(0), - Pvmax_(1), - T1_(HALF), - T2_(2.5), - T3_(7.5), - Dt_(0) - { - ports_.out.template port().connect(pmech); - ports_.in.template port().connect(omega); - - // 3 internal variables - size_ = 3; - setDerivedParams(); - } - /** * @brief Constructs a Tgov1 governor model from its parameters * diff --git a/GridKit/Model/PhasorDynamics/Load/LoadZ/LoadZ.hpp b/GridKit/Model/PhasorDynamics/Load/LoadZ/LoadZ.hpp index 4b6301971..5cc2aa7e0 100644 --- a/GridKit/Model/PhasorDynamics/Load/LoadZ/LoadZ.hpp +++ b/GridKit/Model/PhasorDynamics/Load/LoadZ/LoadZ.hpp @@ -44,8 +44,6 @@ namespace GridKit using MonitorT = Model::VariableMonitor; public: - LoadZ(BusT* bus); - LoadZ(BusT* bus, RealT R, RealT X); LoadZ(BusT* bus, const ModelDataT& data); virtual ~LoadZ(); diff --git a/GridKit/Model/PhasorDynamics/Load/LoadZ/LoadZImpl.hpp b/GridKit/Model/PhasorDynamics/Load/LoadZ/LoadZImpl.hpp index b3e24fc8a..b94572a10 100644 --- a/GridKit/Model/PhasorDynamics/Load/LoadZ/LoadZImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Load/LoadZ/LoadZImpl.hpp @@ -19,26 +19,6 @@ namespace GridKit * - Number of equations = 2 * - Number of independent variables = 2 */ - template - LoadZ::LoadZ(BusT* bus) - : bus_(bus) - { - size_ = 2; - setDerivedParams(); - } - - template - LoadZ::LoadZ(BusT* bus, - RealT R, - RealT X) - : bus_(bus), - R_(R), - X_(X) - { - size_ = 2; - setDerivedParams(); - } - template LoadZ::LoadZ(BusT* bus, const ModelDataT& data) diff --git a/GridKit/Model/PhasorDynamics/Load/LoadZIP/LoadZIP.hpp b/GridKit/Model/PhasorDynamics/Load/LoadZIP/LoadZIP.hpp index ce68272ca..c427a043d 100644 --- a/GridKit/Model/PhasorDynamics/Load/LoadZIP/LoadZIP.hpp +++ b/GridKit/Model/PhasorDynamics/Load/LoadZIP/LoadZIP.hpp @@ -44,8 +44,6 @@ namespace GridKit using MonitorT = Model::VariableMonitor; public: - LoadZIP(BusT* bus); - LoadZIP(BusT* bus, RealT Pnom, RealT Qnom, RealT alphaI, RealT alphaP); LoadZIP(BusT* bus, const ModelDataT& data); ~LoadZIP(); diff --git a/GridKit/Model/PhasorDynamics/Load/LoadZIP/LoadZIPImpl.hpp b/GridKit/Model/PhasorDynamics/Load/LoadZIP/LoadZIPImpl.hpp index 929cfb746..f4ad329a9 100644 --- a/GridKit/Model/PhasorDynamics/Load/LoadZIP/LoadZIPImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Load/LoadZIP/LoadZIPImpl.hpp @@ -16,26 +16,6 @@ namespace GridKit * - Number of equations = 2 * - Number of independent variables = 2 */ - template - LoadZIP::LoadZIP(BusT* bus) - : bus_(bus) - { - size_ = 2; - setDerivedParams(); - } - - template - LoadZIP::LoadZIP(BusT* bus, RealT Pnom, RealT Qnom, RealT alphaI, RealT alphaP) - : bus_(bus), - Pnom_(Pnom), - Qnom_(Qnom), - alphaI_(alphaI), - alphaP_(alphaP) - { - size_ = 2; - setDerivedParams(); - } - template LoadZIP::LoadZIP(BusT* bus, const ModelDataT& data) diff --git a/GridKit/Model/PhasorDynamics/SignalSource/ConstantSignalSource.hpp b/GridKit/Model/PhasorDynamics/SignalSource/ConstantSignalSource.hpp index 03ef83886..e22c7a997 100644 --- a/GridKit/Model/PhasorDynamics/SignalSource/ConstantSignalSource.hpp +++ b/GridKit/Model/PhasorDynamics/SignalSource/ConstantSignalSource.hpp @@ -40,7 +40,6 @@ namespace GridKit using SignalPortsT = SignalPorts; public: - ConstantSignalSource(); ConstantSignalSource(const ModelDataT& data); ~ConstantSignalSource(); diff --git a/GridKit/Model/PhasorDynamics/SignalSource/ConstantSignalSourceImpl.hpp b/GridKit/Model/PhasorDynamics/SignalSource/ConstantSignalSourceImpl.hpp index b87c77bbb..fb6fc2e55 100644 --- a/GridKit/Model/PhasorDynamics/SignalSource/ConstantSignalSourceImpl.hpp +++ b/GridKit/Model/PhasorDynamics/SignalSource/ConstantSignalSourceImpl.hpp @@ -11,15 +11,6 @@ namespace GridKit { using Log = ::GridKit::Utilities::Logger; - /** - * @brief Default construct with zero value - */ - template - ConstantSignalSource::ConstantSignalSource() - { - size_ = 0; - } - /** * @brief Construct with values from input data */ diff --git a/GridKit/Model/PhasorDynamics/SignalSource/FunctionSignalSource.hpp b/GridKit/Model/PhasorDynamics/SignalSource/FunctionSignalSource.hpp index 0aa9d1345..260c1b4b3 100644 --- a/GridKit/Model/PhasorDynamics/SignalSource/FunctionSignalSource.hpp +++ b/GridKit/Model/PhasorDynamics/SignalSource/FunctionSignalSource.hpp @@ -43,7 +43,6 @@ namespace GridKit using SignalPortsT = SignalPorts; public: - FunctionSignalSource(); FunctionSignalSource(const ModelDataT& data); ~FunctionSignalSource(); diff --git a/GridKit/Model/PhasorDynamics/SignalSource/FunctionSignalSourceImpl.hpp b/GridKit/Model/PhasorDynamics/SignalSource/FunctionSignalSourceImpl.hpp index e0efa0e5f..c305aa317 100644 --- a/GridKit/Model/PhasorDynamics/SignalSource/FunctionSignalSourceImpl.hpp +++ b/GridKit/Model/PhasorDynamics/SignalSource/FunctionSignalSourceImpl.hpp @@ -9,15 +9,6 @@ namespace GridKit { using Log = ::GridKit::Utilities::Logger; - /** - * @brief Default construct with zero value - */ - template - FunctionSignalSource::FunctionSignalSource() - { - size_ = 0; - } - /** * @brief Construct with values from input data */ diff --git a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/Ieeest.hpp b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/Ieeest.hpp index 49eaace41..87665090e 100644 --- a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/Ieeest.hpp +++ b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/Ieeest.hpp @@ -75,7 +75,6 @@ namespace GridKit using MonitorT = Model::VariableMonitor; public: - Ieeest(); Ieeest(const ModelDataT& data); ~Ieeest(); diff --git a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestImpl.hpp b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestImpl.hpp index 2bd419b98..193cc258d 100644 --- a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestImpl.hpp @@ -23,12 +23,6 @@ namespace GridKit { using Log = ::GridKit::Utilities::Logger; - template - Ieeest::Ieeest() - { - size_ = 12; - } - template Ieeest::Ieeest(const ModelDataT& data) : monitor_(std::make_unique(data)) diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROU/Genrou.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROU/Genrou.hpp index cd31bf29b..769b70d78 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROU/Genrou.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROU/Genrou.hpp @@ -87,37 +87,7 @@ namespace GridKit using MonitorT = Model::VariableMonitor; public: - Genrou(BusT* bus); - Genrou(BusT* bus, - SignalNodeT* omega, - SignalNodeT* pmech, - const ModelDataT& data); - Genrou(BusT* bus, - SignalNodeT* omega, - SignalNodeT* pmech, - SignalNodeT* efd, - const ModelDataT& data); - Genrou(BusT* bus, - const ModelDataT& data); - Genrou(BusT* bus, - RealT p0, - RealT q0, - RealT H, - RealT D, - RealT Ra, - RealT Tdop, - RealT Tdopp, - RealT Tqopp, - RealT Tqop, - RealT Xd, - RealT Xdp, - RealT Xdpp, - RealT Xq, - RealT Xqp, - RealT Xqpp, - RealT Xl, - RealT S10, - RealT S12); + Genrou(BusT* bus, const ModelDataT& data); ~Genrou(); int setGridKitComponentID(IdxT) override final; @@ -184,20 +154,20 @@ namespace GridKit RealT q0_{0.0}; /* Input parameters */ - RealT H_{0.0}; + RealT H_{3.0}; RealT D_{0.0}; RealT Ra_{0.0}; - RealT Tdop_{0.0}; - RealT Tdopp_{0.0}; - RealT Tqopp_{0.0}; - RealT Tqop_{0.0}; - RealT Xd_{0.0}; - RealT Xdp_{0.0}; - RealT Xdpp_{0.0}; - RealT Xq_{0.0}; - RealT Xqp_{0.0}; - RealT Xqpp_{0.0}; - RealT Xl_{0.0}; + RealT Tdop_{7.0}; + RealT Tdopp_{0.04}; + RealT Tqopp_{0.05}; + RealT Tqop_{0.75}; + RealT Xd_{2.1}; + RealT Xdp_{0.2}; + RealT Xdpp_{0.18}; + RealT Xq_{0.5}; + RealT Xqp_{0.5}; + RealT Xqpp_{0.18}; + RealT Xl_{0.15}; RealT S10_{0.0}; RealT S12_{0.0}; RealT mva_base_{100.0}; diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROU/GenrouImpl.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROU/GenrouImpl.hpp index cfad1a9ff..2505cb27e 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROU/GenrouImpl.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROU/GenrouImpl.hpp @@ -16,92 +16,6 @@ namespace GridKit { using Log = ::GridKit::Utilities::Logger; - /** - * @brief Constructor for a GENROU generator model with saturation - * - * 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(BusT* bus) - : bus_(bus), - bus_id_(0), - p0_(0.), - q0_(0.), - H_(3.), - D_(0.), - Ra_(0.), - Tdop_(7.), - Tdopp_(.04), - Tqopp_(.05), - Tqop_(.75), - Xd_(2.1), - Xdp_(0.2), - Xdpp_(0.18), - Xq_(.5), - Xqp_(.5), - Xqpp_(.18), - Xl_(.15), - S10_(0.), - S12_(0.), - mva_base_(100.) - { - size_ = 17; - setDerivedParams(); - } - - /** - * @brief Constructor for a GENROU generator model with saturation - */ - template - Genrou::Genrou(BusT* bus, - RealT p0, - RealT q0, - RealT H, - RealT D, - RealT Ra, - RealT Tdop, - RealT Tdopp, - RealT Tqopp, - RealT Tqop, - RealT Xd, - RealT Xdp, - RealT Xdpp, - RealT Xq, - RealT Xqp, - RealT Xqpp, - RealT Xl, - RealT S10, - RealT S12) - : bus_(bus), - bus_id_(0), - 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), - mva_base_(100.) - { - size_ = 17; - setDerivedParams(); - } - /** * @brief Constructor for a GENROU generator model with saturation */ @@ -118,41 +32,6 @@ namespace GridKit setDerivedParams(); } - /** - * @brief Constructor for a GENROU generator model with saturation - */ - template - Genrou::Genrou(BusT* bus, SignalNodeT* omega, SignalNodeT* pmech, const ModelDataT& data) - : bus_(bus), - monitor_(std::make_unique(data)) - { - ports_.in.template port().connect(pmech); - ports_.out.template port().connect(omega); - initializeParameters(data); - initializeMonitor(); - - size_ = 17; - setDerivedParams(); - } - - /** - * @brief Constructor for a GENROU generator model with saturation - */ - template - Genrou::Genrou(BusT* bus, SignalNodeT* omega, SignalNodeT* pmech, SignalNodeT* efd, const ModelDataT& data) - : bus_(bus), - monitor_(std::make_unique(data)) - { - ports_.in.template port().connect(pmech); - ports_.in.template port().connect(efd); - ports_.out.template port().connect(omega); - initializeParameters(data); - initializeMonitor(); - - size_ = 17; - setDerivedParams(); - } - template Genrou::~Genrou() { diff --git a/tests/IntegrationTests/PhasorDynamics/TenGen/Classical/TenGenClassical.cpp b/tests/IntegrationTests/PhasorDynamics/TenGen/Classical/TenGenClassical.cpp index 4fcb11846..d27c36e78 100644 --- a/tests/IntegrationTests/PhasorDynamics/TenGen/Classical/TenGenClassical.cpp +++ b/tests/IntegrationTests/PhasorDynamics/TenGen/Classical/TenGenClassical.cpp @@ -43,6 +43,27 @@ GridKit::PhasorDynamics::GenClassicalData genData(real_ty return data; } +/// Branch data with the given line and transformer parameters +GridKit::PhasorDynamics::BranchData branchData(const real_type R, + const real_type X, + const real_type G, + const real_type B, + const real_type tap = 1.0, + const real_type phase = 0.0) +{ + using Parameter = GridKit::PhasorDynamics::BranchParameters; + + GridKit::PhasorDynamics::BranchData data; + data.parameters[Parameter::R] = R; + data.parameters[Parameter::X] = X; + data.parameters[Parameter::G] = G; + data.parameters[Parameter::B] = B; + data.parameters[Parameter::tap] = tap; + data.parameters[Parameter::phase] = phase; + + return data; +} + int main() { using namespace GridKit::PhasorDynamics; @@ -68,15 +89,15 @@ int main() Bus bus9(0.938638861502395, 0.344901620288291); Bus bus10(0.937739191669114, 0.347340277548916); - Branch branch12(&bus1, &bus2, 0.001, 0.005, 0, 0); - Branch branch23(&bus2, &bus3, 0.001, 0.005, 0, 0); - Branch branch34(&bus3, &bus4, 0.001, 0.005, 0, 0); - Branch branch45(&bus4, &bus5, 0.001, 0.005, 0, 0); - Branch branch56(&bus5, &bus6, 0.001, 0.1, 0, 0); - Branch branch67(&bus6, &bus7, 0.001, 0.005, 0, 0); - Branch branch78(&bus7, &bus8, 0.001, 0.005, 0, 0); - Branch branch89(&bus8, &bus9, 0.001, 0.005, 0, 0); - Branch branch910(&bus9, &bus10, 0.001, 0.005, 0, 0); + Branch branch12(&bus1, &bus2, branchData(0.001, 0.005, 0, 0)); + Branch branch23(&bus2, &bus3, branchData(0.001, 0.005, 0, 0)); + Branch branch34(&bus3, &bus4, branchData(0.001, 0.005, 0, 0)); + Branch branch45(&bus4, &bus5, branchData(0.001, 0.005, 0, 0)); + Branch branch56(&bus5, &bus6, branchData(0.001, 0.1, 0, 0)); + Branch branch67(&bus6, &bus7, branchData(0.001, 0.005, 0, 0)); + Branch branch78(&bus7, &bus8, branchData(0.001, 0.005, 0, 0)); + Branch branch89(&bus8, &bus9, branchData(0.001, 0.005, 0, 0)); + Branch branch910(&bus9, &bus10, branchData(0.001, 0.005, 0, 0)); GenClassical gen2(&bus2, genData(0.5, -0.00442101)); GenClassical gen3(&bus3, genData(0.5, -0.02510812)); diff --git a/tests/IntegrationTests/PhasorDynamics/TenGen/Genrou/TenGenGenrou.cpp b/tests/IntegrationTests/PhasorDynamics/TenGen/Genrou/TenGenGenrou.cpp index 5bb6627b1..bdca1ab0a 100644 --- a/tests/IntegrationTests/PhasorDynamics/TenGen/Genrou/TenGenGenrou.cpp +++ b/tests/IntegrationTests/PhasorDynamics/TenGen/Genrou/TenGenGenrou.cpp @@ -26,6 +26,39 @@ using scalar_type = double; using real_type = double; using index_type = size_t; +/// Machine data shared by the example generators +GridKit::PhasorDynamics::GenrouData genData(real_type p0, real_type q0) +{ + using Parameter = GridKit::PhasorDynamics::GenrouParameters; + + GridKit::PhasorDynamics::GenrouData data; + data.parameters[Parameter::p0] = p0; + data.parameters[Parameter::q0] = q0; + + return data; +} + +/// Branch data with the given line and transformer parameters +GridKit::PhasorDynamics::BranchData branchData(const real_type R, + const real_type X, + const real_type G, + const real_type B, + const real_type tap = 1.0, + const real_type phase = 0.0) +{ + using Parameter = GridKit::PhasorDynamics::BranchParameters; + + GridKit::PhasorDynamics::BranchData data; + data.parameters[Parameter::R] = R; + data.parameters[Parameter::X] = X; + data.parameters[Parameter::G] = G; + data.parameters[Parameter::B] = B; + data.parameters[Parameter::tap] = tap; + data.parameters[Parameter::phase] = phase; + + return data; +} + int main() { using namespace GridKit::PhasorDynamics; @@ -51,25 +84,25 @@ int main() Bus bus9(0.938638861502395, 0.344901620288291); Bus bus10(0.937739191669114, 0.347340277548916); - Branch branch12(&bus1, &bus2, 0.001, 0.005, 0, 0); - Branch branch23(&bus2, &bus3, 0.001, 0.005, 0, 0); - Branch branch34(&bus3, &bus4, 0.001, 0.005, 0, 0); - Branch branch45(&bus4, &bus5, 0.001, 0.005, 0, 0); - Branch branch56(&bus5, &bus6, 0.001, 0.1, 0, 0); - Branch branch67(&bus6, &bus7, 0.001, 0.005, 0, 0); - Branch branch78(&bus7, &bus8, 0.001, 0.005, 0, 0); - Branch branch89(&bus8, &bus9, 0.001, 0.005, 0, 0); - Branch branch910(&bus9, &bus10, 0.001, 0.005, 0, 0); - - Genrou gen2(&bus2, 0.5, -0.00442101, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen3(&bus3, 0.5, -0.02510812, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen4(&bus4, 0.5, -0.04339553, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen5(&bus5, 0.5, -0.2334993, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen6(&bus6, 0.5, 0.69907194, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen7(&bus7, 0.5, -0.08318208, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen8(&bus8, 0.5, -0.09123614, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen9(&bus9, 0.5, -0.09662372, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen10(&bus10, 0.5, -0.09932297, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Branch branch12(&bus1, &bus2, branchData(0.001, 0.005, 0, 0)); + Branch branch23(&bus2, &bus3, branchData(0.001, 0.005, 0, 0)); + Branch branch34(&bus3, &bus4, branchData(0.001, 0.005, 0, 0)); + Branch branch45(&bus4, &bus5, branchData(0.001, 0.005, 0, 0)); + Branch branch56(&bus5, &bus6, branchData(0.001, 0.1, 0, 0)); + Branch branch67(&bus6, &bus7, branchData(0.001, 0.005, 0, 0)); + Branch branch78(&bus7, &bus8, branchData(0.001, 0.005, 0, 0)); + Branch branch89(&bus8, &bus9, branchData(0.001, 0.005, 0, 0)); + Branch branch910(&bus9, &bus10, branchData(0.001, 0.005, 0, 0)); + + Genrou gen2(&bus2, genData(0.5, -0.00442101)); + Genrou gen3(&bus3, genData(0.5, -0.02510812)); + Genrou gen4(&bus4, genData(0.5, -0.04339553)); + Genrou gen5(&bus5, genData(0.5, -0.2334993)); + Genrou gen6(&bus6, genData(0.5, 0.69907194)); + Genrou gen7(&bus7, genData(0.5, -0.08318208)); + Genrou gen8(&bus8, genData(0.5, -0.09123614)); + Genrou gen9(&bus9, genData(0.5, -0.09662372)); + Genrou gen10(&bus10, genData(0.5, -0.09932297)); /* Connect everything together */ SystemModel sys; diff --git a/tests/UnitTests/PhasorDynamics/BranchTests.hpp b/tests/UnitTests/PhasorDynamics/BranchTests.hpp index b26ff219c..2baf45536 100644 --- a/tests/UnitTests/PhasorDynamics/BranchTests.hpp +++ b/tests/UnitTests/PhasorDynamics/BranchTests.hpp @@ -38,7 +38,7 @@ namespace GridKit auto* bus2 = new PhasorDynamics::Bus(1.0, 0.1); PhasorDynamics::Component* branch = - new PhasorDynamics::Branch(bus1, bus2); + new PhasorDynamics::Branch(bus1, bus2, PhasorDynamics::BranchData{}); success *= (branch != nullptr); @@ -81,7 +81,7 @@ namespace GridKit bus2.initialize(); bus2.evaluateResidual(); - PhasorDynamics::Branch branch(&bus1, &bus2, R, X, G, B); + PhasorDynamics::Branch branch(&bus1, &bus2, branchData(R, X, G, B)); branch.allocate(); branch.evaluateResidual(); @@ -179,7 +179,7 @@ namespace GridKit bus2.Vr().setVariableNumber(2); bus2.Vi().setVariableNumber(3); - PhasorDynamics::Branch branch(&bus1, &bus2, R, X, G, B); + PhasorDynamics::Branch branch(&bus1, &bus2, branchData(R, X, G, B)); branch.allocate(); branch.evaluateResidual(); ///< Computes the residual and the Jacobian values by tracking ///< the dependencies @@ -222,14 +222,7 @@ namespace GridKit PhasorDynamics::BusInfinite bus1(Vr1, Vi1); PhasorDynamics::BusInfinite bus2(Vr2, Vi2); - PhasorDynamics::Branch branch(&bus1, - &bus2, - R, - X, - G, - B, - tap, - phase); + PhasorDynamics::Branch branch(&bus1, &bus2, branchData(R, X, G, B, tap, phase)); branch.allocate(); branch.evaluateResidual(); @@ -266,7 +259,7 @@ namespace GridKit bus2.setResidualIndex(i, i + 2); } - PhasorDynamics::Branch branch(&bus1, &bus2, 2.0, 4.0, 0.2, 1.2); + PhasorDynamics::Branch branch(&bus1, &bus2, branchData(2.0, 4.0, 0.2, 1.2)); branch.allocate(); branch.evaluateJacobian(); const IdxT nnz = branch.nnz(); @@ -335,7 +328,7 @@ namespace GridKit ref_bus2.allocate(); ref_bus2.initialize(); ref_bus2.evaluateResidual(); - PhasorDynamics::Branch ref_branch(&ref_bus1, &ref_bus2, R, X, G, B, tap, phase); + PhasorDynamics::Branch ref_branch(&ref_bus1, &ref_bus2, branchData(R, X, G, B, tap, phase)); PhasorDynamics::Bus test_bus1(Vr1, Vi1); PhasorDynamics::Bus test_bus2(Vr2, Vi2); @@ -345,7 +338,7 @@ namespace GridKit test_bus2.allocate(); test_bus2.initialize(); test_bus2.evaluateResidual(); - PhasorDynamics::Branch test_branch(&test_bus1, &test_bus2, 1.0, 1.0, 0.0, 0.0); + PhasorDynamics::Branch test_branch(&test_bus1, &test_bus2, branchData(1.0, 1.0, 0.0, 0.0)); test_branch.setR(R); test_branch.setX(X); @@ -373,7 +366,7 @@ namespace GridKit PhasorDynamics::Bus bus1(1.0, 0.0); PhasorDynamics::Bus bus2(1.0, 0.0); - PhasorDynamics::Branch valid_branch(&bus1, &bus2, 0.0, 0.1, 0.0, 0.0); + PhasorDynamics::Branch valid_branch(&bus1, &bus2, branchData(0.0, 0.1, 0.0, 0.0)); success *= (valid_branch.verify().passed()); const auto previous_verbosity = Log::verbosity(); @@ -381,17 +374,17 @@ namespace GridKit // Use EVERYTHING to inspect those diagnostics. Log::setVerbosity(Log::Verbosity::NONE); - PhasorDynamics::Branch zero_impedance_branch(&bus1, &bus2, 0.0, 0.0, 0.0, 0.0); + PhasorDynamics::Branch zero_impedance_branch(&bus1, &bus2, branchData(0.0, 0.0, 0.0, 0.0)); success *= (!zero_impedance_branch.verify().passed()); - PhasorDynamics::Branch zero_tap_branch(&bus1, &bus2, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0); + PhasorDynamics::Branch zero_tap_branch(&bus1, &bus2, branchData(0.0, 0.1, 0.0, 0.0, 0.0, 0.0)); success *= (!zero_tap_branch.verify().passed()); - PhasorDynamics::Branch negative_tap_branch(&bus1, &bus2, 0.0, 0.1, 0.0, 0.0, -1.0, 0.0); + PhasorDynamics::Branch negative_tap_branch(&bus1, &bus2, branchData(0.0, 0.1, 0.0, 0.0, -1.0, 0.0)); success *= (!negative_tap_branch.verify().passed()); const RealT nan = std::numeric_limits::quiet_NaN(); - PhasorDynamics::Branch nonfinite_branch(&bus1, &bus2, nan, 0.1, 0.0, 0.0); + PhasorDynamics::Branch nonfinite_branch(&bus1, &bus2, branchData(nan, 0.1, 0.0, 0.0)); success *= (!nonfinite_branch.verify().passed()); Log::setVerbosity(previous_verbosity); @@ -444,7 +437,7 @@ namespace GridKit ref_bus2.evaluateResidual(); PhasorDynamics::Branch data_branch(&data_bus1, &data_bus2, data); - PhasorDynamics::Branch ref_branch(&ref_bus1, &ref_bus2, R, X, G, B, 1.0, 0.0); + PhasorDynamics::Branch ref_branch(&ref_bus1, &ref_bus2, branchData(R, X, G, B, 1.0, 0.0)); data_branch.evaluateResidual(); ref_branch.evaluateResidual(); @@ -458,6 +451,25 @@ namespace GridKit } private: + static PhasorDynamics::BranchData branchData(const RealT R, + const RealT X, + const RealT G, + const RealT B, + const RealT tap = 1.0, + const RealT phase = 0.0) + { + using Parameter = PhasorDynamics::BranchParameters; + + PhasorDynamics::BranchData data; + data.parameters[Parameter::R] = R; + data.parameters[Parameter::X] = X; + data.parameters[Parameter::G] = G; + data.parameters[Parameter::B] = B; + data.parameters[Parameter::tap] = tap; + data.parameters[Parameter::phase] = phase; + return data; + } + std::vector analyticalJacobian(const RealT R, const RealT X, const RealT G, diff --git a/tests/UnitTests/PhasorDynamics/ComponentConnectionTests.hpp b/tests/UnitTests/PhasorDynamics/ComponentConnectionTests.hpp index 5cdb8db8b..d77d70504 100644 --- a/tests/UnitTests/PhasorDynamics/ComponentConnectionTests.hpp +++ b/tests/UnitTests/PhasorDynamics/ComponentConnectionTests.hpp @@ -59,7 +59,7 @@ namespace GridKit static_cast(1.0), static_cast(0.0)); PhasorDynamics::SignalNode efd; - PhasorDynamics::Genrou machine(&bus); + PhasorDynamics::Genrou machine(&bus, PhasorDynamics::GenrouData{}); PhasorDynamics::Exciter::Esdc1aData exciter_data; exciter_data.parameters[ExciterParams::Tr] = static_cast(0.02); @@ -107,7 +107,7 @@ namespace GridKit static_cast(1.0), static_cast(0.0)); PhasorDynamics::SignalNode pmech; - PhasorDynamics::Genrou machine(&bus); + PhasorDynamics::Genrou machine(&bus, PhasorDynamics::GenrouData{}); PhasorDynamics::Governor::HygovData governor_data; governor_data.parameters[GovernorParams::Trate] = static_cast(100.0); diff --git a/tests/UnitTests/PhasorDynamics/ControllerReecbTests.hpp b/tests/UnitTests/PhasorDynamics/ControllerReecbTests.hpp index 3c6e8ad66..a699e4de9 100644 --- a/tests/UnitTests/PhasorDynamics/ControllerReecbTests.hpp +++ b/tests/UnitTests/PhasorDynamics/ControllerReecbTests.hpp @@ -57,9 +57,8 @@ namespace GridKit PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::Controller::Reecb empty(&bus); + PhasorDynamics::Controller::Reecb empty(&bus, Data{}); success *= (empty.size() == static_cast(Utilities::enum_size())); - success *= (empty.getMonitor() == nullptr); const std::array()> row_order{{ Vars::VMEAS, diff --git a/tests/UnitTests/PhasorDynamics/ControllerRepcaTests.hpp b/tests/UnitTests/PhasorDynamics/ControllerRepcaTests.hpp index 04b63fadc..b4b202d02 100644 --- a/tests/UnitTests/PhasorDynamics/ControllerRepcaTests.hpp +++ b/tests/UnitTests/PhasorDynamics/ControllerRepcaTests.hpp @@ -54,9 +54,8 @@ namespace GridKit PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::Controller::Repca empty(&bus); + PhasorDynamics::Controller::Repca empty(&bus, Data{}); success *= (empty.size() == static_cast(Utilities::enum_size())); - success *= (empty.getMonitor() == nullptr); success *= (!empty.verify().passed()); Fixture configured(makeData()); diff --git a/tests/UnitTests/PhasorDynamics/ConverterRegcaTests.hpp b/tests/UnitTests/PhasorDynamics/ConverterRegcaTests.hpp index c00c3a3f2..435a447f8 100644 --- a/tests/UnitTests/PhasorDynamics/ConverterRegcaTests.hpp +++ b/tests/UnitTests/PhasorDynamics/ConverterRegcaTests.hpp @@ -49,9 +49,8 @@ namespace GridKit PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::Converter::Regca minimal(&bus); + PhasorDynamics::Converter::Regca minimal(&bus, Data{}); success *= (minimal.size() == static_cast(Utilities::enum_size())); - success *= (minimal.getMonitor() == nullptr); PhasorDynamics::Converter::Regca configured(&bus, makeData()); success *= (configured.size() == static_cast(Utilities::enum_size())); diff --git a/tests/UnitTests/PhasorDynamics/ExciterEsdc1aTests.hpp b/tests/UnitTests/PhasorDynamics/ExciterEsdc1aTests.hpp index 54901f2f3..629cdd3cb 100644 --- a/tests/UnitTests/PhasorDynamics/ExciterEsdc1aTests.hpp +++ b/tests/UnitTests/PhasorDynamics/ExciterEsdc1aTests.hpp @@ -56,9 +56,8 @@ namespace GridKit PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::Exciter::Esdc1a empty(&bus); + PhasorDynamics::Exciter::Esdc1a empty(&bus, Data{}); success *= (empty.size() == static_cast(Utilities::enum_size())); - success *= (empty.getMonitor() == nullptr); success *= (!empty.verify().passed()); Fixture configured(makeData()); diff --git a/tests/UnitTests/PhasorDynamics/GenrouTests.hpp b/tests/UnitTests/PhasorDynamics/GenrouTests.hpp index 178a68fce..9c4530565 100644 --- a/tests/UnitTests/PhasorDynamics/GenrouTests.hpp +++ b/tests/UnitTests/PhasorDynamics/GenrouTests.hpp @@ -70,7 +70,7 @@ namespace GridKit auto* bus = new PhasorDynamics::Bus(1.0, 0.0); PhasorDynamics::Component* machine = - new PhasorDynamics::Genrou(bus); + new PhasorDynamics::Genrou(bus, GenrouDataT{}); success *= (machine != nullptr); @@ -97,25 +97,7 @@ namespace GridKit TestStatus success = true; PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::Genrou gen(&bus, - 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::Genrou gen(&bus, makeGenrouData()); bus.allocate(); bus.initialize(); @@ -217,8 +199,30 @@ namespace GridKit ScalarT Vr1{1.0}; ///< Bus real voltage ScalarT Vi1{0}; ///< Bus imaginary voltage + using Parameter = typename GenrouDataT::Parameters; + + GenrouDataT data; + data.parameters[Parameter::p0] = p0; + data.parameters[Parameter::q0] = q0; + data.parameters[Parameter::H] = H; + data.parameters[Parameter::D] = D; + data.parameters[Parameter::Ra] = Ra; + data.parameters[Parameter::Tdop] = Tdop; + data.parameters[Parameter::Tdopp] = Tdopp; + data.parameters[Parameter::Tqopp] = Tqopp; + data.parameters[Parameter::Tqop] = Tqop; + data.parameters[Parameter::Xd] = Xd; + data.parameters[Parameter::Xdp] = Xdp; + data.parameters[Parameter::Xdpp] = Xdpp; + data.parameters[Parameter::Xq] = Xq; + data.parameters[Parameter::Xqp] = Xqp; + data.parameters[Parameter::Xqpp] = Xqpp; + data.parameters[Parameter::Xl] = Xl; + data.parameters[Parameter::S10] = S10; + data.parameters[Parameter::S12] = S12; + PhasorDynamics::Bus bus(Vr1, Vi1); - PhasorDynamics::Genrou gen(&bus, p0, q0, H, D, Ra, Tdop, Tdopp, Tqopp, Tqop, Xd, Xdp, Xdpp, Xq, Xqp, Xqpp, Xl, S10, S12); + PhasorDynamics::Genrou gen(&bus, data); // Answer key is available only in double precision. // Therefore, only double precision tests are done at this time. @@ -341,25 +345,7 @@ namespace GridKit DependencyTracking::Variable Vr1{1.0}; ///< Bus real voltage DependencyTracking::Variable Vi1{0.0}; ///< Bus imaginary voltage PhasorDynamics::Bus bus(Vr1, Vi1); - PhasorDynamics::Genrou gen(&bus, - 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::Genrou gen(&bus, makeGenrouData()); bus.allocate(); gen.allocate(); @@ -393,25 +379,7 @@ namespace GridKit ScalarT Vr1{1.0}; ///< Bus real voltage ScalarT Vi1{0.0}; ///< Bus imaginary voltage PhasorDynamics::Bus bus(Vr1, Vi1); - PhasorDynamics::Genrou gen(&bus, - 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::Genrou gen(&bus, makeGenrouData()); bus.allocate(); gen.allocate(); diff --git a/tests/UnitTests/PhasorDynamics/GovernorGastPtiTests.hpp b/tests/UnitTests/PhasorDynamics/GovernorGastPtiTests.hpp index 06aa286cf..5a4065ed5 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorGastPtiTests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorGastPtiTests.hpp @@ -53,9 +53,8 @@ namespace GridKit // Use EVERYTHING to inspect those diagnostics. Log::setVerbosity(Log::Verbosity::NONE); - PhasorDynamics::Governor::GastPti empty; + PhasorDynamics::Governor::GastPti empty(Data{}); success *= (empty.size() == static_cast(Utilities::enum_size())); - success *= (empty.getMonitor() == nullptr); success *= (!empty.verify().passed()); // required pmech assignment is absent PhasorDynamics::Governor::GastPti configured(makeData()); diff --git a/tests/UnitTests/PhasorDynamics/GovernorHygovTests.hpp b/tests/UnitTests/PhasorDynamics/GovernorHygovTests.hpp index 221fbfb0c..463a94d69 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorHygovTests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorHygovTests.hpp @@ -50,9 +50,8 @@ namespace GridKit { TestStatus success = true; - PhasorDynamics::Governor::Hygov empty; + PhasorDynamics::Governor::Hygov empty(Data{}); success *= (empty.size() == static_cast(Utilities::enum_size())); - success *= (empty.getMonitor() == nullptr); Fixture configured(makeData()); success *= (configured.hygov.size() == static_cast(Utilities::enum_size())); diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp index 26ffd2737..191d488f5 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -37,12 +37,10 @@ namespace GridKit { TestStatus success = true; - PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::SignalNode pmech; - PhasorDynamics::SignalNode omega; + PhasorDynamics::Bus bus(1.0, 0.0); PhasorDynamics::Governor::Tgov1* gov = - new PhasorDynamics::Governor::Tgov1(&pmech, &omega); + new PhasorDynamics::Governor::Tgov1(PhasorDynamics::Governor::Tgov1Data{}); success *= (gov != nullptr); @@ -99,8 +97,12 @@ namespace GridKit PhasorDynamics::Bus bus(busdata); PhasorDynamics::SignalNode pmech; PhasorDynamics::SignalNode omega; - PhasorDynamics::Genrou gen(&bus, &omega, &pmech, gendata); - PhasorDynamics::Governor::Tgov1 gov(&pmech, &omega); + PhasorDynamics::Genrou gen(&bus, gendata); + PhasorDynamics::Governor::Tgov1 gov(PhasorDynamics::Governor::Tgov1Data{}); + gen.getPorts().in.template port().connect(&pmech); + gen.getPorts().out.template port().connect(&omega); + gov.getPorts().out.template port().connect(&pmech); + gov.getPorts().in.template port().connect(&omega); // Test answer keys const std::vector res_answer = {static_cast(2.0) / static_cast(15.0), @@ -202,9 +204,13 @@ namespace GridKit PhasorDynamics::Bus bus(busdata); PhasorDynamics::SignalNode pmech; PhasorDynamics::SignalNode omega; - PhasorDynamics::Genrou gen(&bus, &omega, &pmech, gendata); + PhasorDynamics::Genrou gen(&bus, gendata); // Create governor to be tested - PhasorDynamics::Governor::Tgov1 gov(&pmech, &omega); + PhasorDynamics::Governor::Tgov1 gov(PhasorDynamics::Governor::Tgov1Data{}); + gen.getPorts().in.template port().connect(&pmech); + gen.getPorts().out.template port().connect(&omega); + gov.getPorts().out.template port().connect(&pmech); + gov.getPorts().in.template port().connect(&omega); bus.allocate(); gov.allocate(); @@ -304,9 +310,13 @@ namespace GridKit PhasorDynamics::Bus bus(busdata); PhasorDynamics::SignalNode pmech; PhasorDynamics::SignalNode omega; - PhasorDynamics::Genrou gen(&bus, &omega, &pmech, gendata); + PhasorDynamics::Genrou gen(&bus, gendata); // Create governor to be tested - PhasorDynamics::Governor::Tgov1 gov(&pmech, &omega); + PhasorDynamics::Governor::Tgov1 gov(PhasorDynamics::Governor::Tgov1Data{}); + gen.getPorts().in.template port().connect(&pmech); + gen.getPorts().out.template port().connect(&omega); + gov.getPorts().out.template port().connect(&pmech); + gov.getPorts().in.template port().connect(&omega); bus.allocate(); gov.allocate(); @@ -340,9 +350,13 @@ namespace GridKit PhasorDynamics::Bus bus(busdata); PhasorDynamics::SignalNode pmech; PhasorDynamics::SignalNode omega; - PhasorDynamics::Genrou gen(&bus, &omega, &pmech, gendata); + PhasorDynamics::Genrou gen(&bus, gendata); // Create governor to be tested - PhasorDynamics::Governor::Tgov1 gov(&pmech, &omega); + PhasorDynamics::Governor::Tgov1 gov(PhasorDynamics::Governor::Tgov1Data{}); + gen.getPorts().in.template port().connect(&pmech); + gen.getPorts().out.template port().connect(&omega); + gov.getPorts().out.template port().connect(&pmech); + gov.getPorts().in.template port().connect(&omega); bus.allocate(); gov.allocate(); diff --git a/tests/UnitTests/PhasorDynamics/LoadZIPTests.hpp b/tests/UnitTests/PhasorDynamics/LoadZIPTests.hpp index aa6723a87..fcf33dce7 100644 --- a/tests/UnitTests/PhasorDynamics/LoadZIPTests.hpp +++ b/tests/UnitTests/PhasorDynamics/LoadZIPTests.hpp @@ -37,7 +37,7 @@ namespace GridKit auto* bus = new PhasorDynamics::Bus(1.0, 0.0); PhasorDynamics::Component* load = - new PhasorDynamics::LoadZIP(bus); + new PhasorDynamics::LoadZIP(bus, DataT{}); success *= (load != nullptr); @@ -61,7 +61,7 @@ namespace GridKit TestStatus success = true; PhasorDynamics::BusInfinite bus(0.3, 0.4); - PhasorDynamics::LoadZIP load(&bus, 2.0, 0.5, 0.2, 0.4); + PhasorDynamics::LoadZIP load(&bus, loadZIPData(2.0, 0.5, 0.2, 0.4)); bus.allocate(); load.allocate(); @@ -89,7 +89,7 @@ namespace GridKit const RealT Qnom{0.5}; PhasorDynamics::BusInfinite bus(1.2, 0.9); - PhasorDynamics::LoadZIP load(&bus, Pnom, Qnom, 0.2, 0.4); + PhasorDynamics::LoadZIP load(&bus, loadZIPData(Pnom, Qnom, 0.2, 0.4)); bus.allocate(); load.allocate(); @@ -129,7 +129,7 @@ namespace GridKit TestStatus success = true; PhasorDynamics::BusInfinite bus(0.3, 0.4); - PhasorDynamics::LoadZIP load(&bus, 2.0, 0.5, 0.2, 0.4); + PhasorDynamics::LoadZIP load(&bus, loadZIPData(2.0, 0.5, 0.2, 0.4)); bus.allocate(); load.allocate(); @@ -222,7 +222,7 @@ namespace GridKit DependencyTracking::Variable Vi{0.4}; PhasorDynamics::Bus bus(Vr, Vi); - PhasorDynamics::LoadZIP load(&bus, Pnom, Qnom, alphaI, alphaP); + PhasorDynamics::LoadZIP load(&bus, loadZIPData(Pnom, Qnom, alphaI, alphaP)); bus.allocate(); load.allocate(); @@ -256,7 +256,7 @@ namespace GridKit ScalarT Vi{0.4}; PhasorDynamics::Bus bus(Vr, Vi); - PhasorDynamics::LoadZIP load(&bus, Pnom, Qnom, alphaI, alphaP); + PhasorDynamics::LoadZIP load(&bus, loadZIPData(Pnom, Qnom, alphaI, alphaP)); bus.allocate(); load.allocate(); @@ -312,6 +312,18 @@ namespace GridKit return data; } + + static DataT loadZIPData(const RealT Pnom, const RealT Qnom, const RealT alphaI, const RealT alphaP) + { + using Params = PhasorDynamics::LoadZIPParameters; + + DataT data; + data.parameters[Params::Pnom] = Pnom; + data.parameters[Params::Qnom] = Qnom; + data.parameters[Params::alphaI] = alphaI; + data.parameters[Params::alphaP] = alphaP; + return data; + } }; // class LoadZIPTests } // namespace Testing diff --git a/tests/UnitTests/PhasorDynamics/LoadZTests.hpp b/tests/UnitTests/PhasorDynamics/LoadZTests.hpp index 1ec92b853..8ad661f04 100644 --- a/tests/UnitTests/PhasorDynamics/LoadZTests.hpp +++ b/tests/UnitTests/PhasorDynamics/LoadZTests.hpp @@ -38,7 +38,7 @@ namespace GridKit auto* bus = new PhasorDynamics::Bus(1.0, 0.0); PhasorDynamics::Component* load = - new PhasorDynamics::LoadZ(bus); + new PhasorDynamics::LoadZ(bus, DataT{}); success *= (load != nullptr); @@ -71,7 +71,7 @@ namespace GridKit const ScalarT Ii{0.0}; ///< Solution imaginary current PhasorDynamics::BusInfinite bus(Vr, Vi); - PhasorDynamics::LoadZ load(&bus, R, X); + PhasorDynamics::LoadZ load(&bus, loadZData(R, X)); bus.allocate(); load.allocate(); @@ -99,7 +99,7 @@ namespace GridKit DependencyTracking::Variable Vi{20.0}; ///< Bus imaginary voltage PhasorDynamics::Bus bus(Vr, Vi); - PhasorDynamics::LoadZ load(&bus, R, X); + PhasorDynamics::LoadZ load(&bus, loadZData(R, X)); bus.allocate(); load.allocate(); @@ -181,7 +181,7 @@ namespace GridKit ScalarT Vi{20.0}; ///< Bus imaginary voltage PhasorDynamics::Bus bus(Vr, Vi); - PhasorDynamics::LoadZ load(&bus, R, X); + PhasorDynamics::LoadZ load(&bus, loadZData(R, X)); bus.allocate(); load.allocate(); @@ -239,6 +239,16 @@ namespace GridKit return data; } + static DataT loadZData(const RealT R, const RealT X) + { + using Params = PhasorDynamics::LoadZParameters; + + DataT data; + data.parameters[Params::R] = R; + data.parameters[Params::X] = X; + return data; + } + std::vector analyticalJacobian(const RealT R, const RealT X) { diff --git a/tests/UnitTests/PhasorDynamics/SystemSingleComponentTests.hpp b/tests/UnitTests/PhasorDynamics/SystemSingleComponentTests.hpp index aee34b8ff..a744fa6f9 100644 --- a/tests/UnitTests/PhasorDynamics/SystemSingleComponentTests.hpp +++ b/tests/UnitTests/PhasorDynamics/SystemSingleComponentTests.hpp @@ -35,7 +35,7 @@ namespace GridKit system->addBus(&bus1); system->addBus(&bus2); - PhasorDynamics::Branch branch(&bus1, &bus2); + PhasorDynamics::Branch branch(&bus1, &bus2, PhasorDynamics::BranchData{}); system->addComponent(&branch); success *= system->allocate() == 0; @@ -85,7 +85,7 @@ namespace GridKit // Suppress the expected time-constant-floor warning from the default parameters. // Use EVERYTHING to inspect the diagnostic. Log::setVerbosity(Log::Verbosity::NONE); - PhasorDynamics::Exciter::Ieeet1 exciter(&bus); + PhasorDynamics::Exciter::Ieeet1 exciter(&bus, PhasorDynamics::Exciter::Ieeet1Data{}); Log::setVerbosity(previous_verbosity); system->addComponent(&exciter); @@ -175,7 +175,7 @@ namespace GridKit PhasorDynamics::BusInfinite bus; system->addBus(&bus); - PhasorDynamics::LoadZ load(&bus); + PhasorDynamics::LoadZ load(&bus, PhasorDynamics::LoadZData{}); system->addComponent(&load); success *= system->allocate() == 0; @@ -199,7 +199,7 @@ namespace GridKit PhasorDynamics::BusInfinite bus(1.0, 0.0); system->addBus(&bus); - PhasorDynamics::LoadZIP load(&bus); + PhasorDynamics::LoadZIP load(&bus, PhasorDynamics::LoadZIPData{}); system->addComponent(&load); success *= system->allocate() == 0; @@ -365,7 +365,7 @@ namespace GridKit PhasorDynamics::BusInfinite bus; system->addBus(&bus); - PhasorDynamics::Genrou gen(&bus); + PhasorDynamics::Genrou gen(&bus, PhasorDynamics::GenrouData{}); system->addComponent(&gen); success *= system->allocate() == 0; @@ -412,7 +412,7 @@ namespace GridKit PhasorDynamics::SystemModel* system = new PhasorDynamics::SystemModel(); PhasorDynamics::SignalNode pmech; - PhasorDynamics::Governor::Tgov1 tgov1; + PhasorDynamics::Governor::Tgov1 tgov1(PhasorDynamics::Governor::Tgov1Data{}); tgov1.getPorts().out.template port().connect(&pmech); system->addComponent(&tgov1); diff --git a/tests/UnitTests/PhasorDynamics/SystemTests.hpp b/tests/UnitTests/PhasorDynamics/SystemTests.hpp index 4d9902c71..a5d67d422 100644 --- a/tests/UnitTests/PhasorDynamics/SystemTests.hpp +++ b/tests/UnitTests/PhasorDynamics/SystemTests.hpp @@ -38,6 +38,35 @@ namespace GridKit using ComponentT = PhasorDynamics::Component; using RealT = typename ComponentT::RealT; + static PhasorDynamics::BranchData branchData(const RealT R, + const RealT X, + const RealT G, + const RealT B, + const RealT tap = 1.0, + const RealT phase = 0.0) + { + using Parameter = PhasorDynamics::BranchParameters; + + PhasorDynamics::BranchData data; + data.parameters[Parameter::R] = R; + data.parameters[Parameter::X] = X; + data.parameters[Parameter::G] = G; + data.parameters[Parameter::B] = B; + data.parameters[Parameter::tap] = tap; + data.parameters[Parameter::phase] = phase; + return data; + } + + static PhasorDynamics::LoadZData loadZData(const RealT R, const RealT X) + { + using Params = PhasorDynamics::LoadZParameters; + + PhasorDynamics::LoadZData data; + data.parameters[Params::R] = R; + data.parameters[Params::X] = X; + return data; + } + class InitializationFailureComponent final : public ComponentT { public: @@ -206,7 +235,7 @@ namespace GridKit PhasorDynamics::Bus bus2(Vr2, Vi2); system.addBus(&bus2); - PhasorDynamics::Branch branch(&bus1, &bus2, R, X, G, B); + PhasorDynamics::Branch branch(&bus1, &bus2, branchData(R, X, G, B)); system.addComponent(&branch); system.allocate(); @@ -228,7 +257,7 @@ namespace GridKit PhasorDynamics::BusInfinite source(1.0, 0.0); PhasorDynamics::Bus bus(1.0, 0.0); - PhasorDynamics::Branch branch(&source, &bus, 0.1, 0.2, 0.0, 0.0); + PhasorDynamics::Branch branch(&source, &bus, branchData(0.1, 0.2, 0.0, 0.0)); PhasorDynamics::SystemModel system; system.addBus(&source); system.addBus(&bus); @@ -266,7 +295,7 @@ namespace GridKit PhasorDynamics::SystemModel system; PhasorDynamics::Bus bus1(1.0, 0.0); PhasorDynamics::Bus bus2(1.0, 0.0); - PhasorDynamics::LoadZ load(&bus1); + PhasorDynamics::LoadZ load(&bus1, PhasorDynamics::LoadZData{}); system.addBus(&bus1); system.addComponent(&load); @@ -290,7 +319,7 @@ namespace GridKit } #endif - PhasorDynamics::Branch branch(&bus1, &bus2); + PhasorDynamics::Branch branch(&bus1, &bus2, PhasorDynamics::BranchData{}); system.addComponent(&branch); success *= system.allocate() == 0; success *= system.evaluateJacobian() == 0; @@ -317,8 +346,8 @@ namespace GridKit PhasorDynamics::Bus bus1(1.0, 2.0); PhasorDynamics::BusInfinite infinite_bus; PhasorDynamics::Bus bus2(3.0, 4.0); - PhasorDynamics::Branch branch(&bus1, &bus2); - PhasorDynamics::LoadZ load(&bus2, 1.0, 1.0); + PhasorDynamics::Branch branch(&bus1, &bus2, PhasorDynamics::BranchData{}); + PhasorDynamics::LoadZ load(&bus2, loadZData(1.0, 1.0)); system.addBus(&bus1); system.addBus(&infinite_bus);