diff --git a/GridKit/Model/PhasorDynamics/Branch/BranchData.hpp b/GridKit/Model/PhasorDynamics/Branch/BranchData.hpp index 6bfabc5d8..ff87d7889 100644 --- a/GridKit/Model/PhasorDynamics/Branch/BranchData.hpp +++ b/GridKit/Model/PhasorDynamics/Branch/BranchData.hpp @@ -23,11 +23,24 @@ namespace GridKit phase, ///< Phase shift angle in radians }; - /// Ports for a branch - enum class BranchPorts + /// Terminals for a branch + enum class BranchTerminals : size_t { bus1, ///< Unique ID of bus 1 bus2, ///< Unique ID of bus 2 + SIZE + }; + + /// Input ports supported for a branch + enum class BranchInputPorts : size_t + { + SIZE + }; + + /// Output ports supported for a branch + enum class BranchOutputPorts : size_t + { + SIZE }; /// Variables able to be monitored for a branch @@ -57,13 +70,17 @@ namespace GridKit struct BranchData : public ComponentData { BranchData() = default; using Parameters = BranchParameters; - using Ports = BranchPorts; + using Terminals = BranchTerminals; + using InputPorts = BranchInputPorts; + using OutputPorts = BranchOutputPorts; using MonitorableVariables = BranchMonitorableVariables; }; } // namespace PhasorDynamics diff --git a/GridKit/Model/PhasorDynamics/Branch/BranchImpl.hpp b/GridKit/Model/PhasorDynamics/Branch/BranchImpl.hpp index 1fe3977f0..6b40e717d 100644 --- a/GridKit/Model/PhasorDynamics/Branch/BranchImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Branch/BranchImpl.hpp @@ -310,21 +310,24 @@ namespace GridKit template void Branch::initializeParameters(const ModelDataT& data) { - readRealParameter(data, ModelDataT::Parameters::R, R_); - readRealParameter(data, ModelDataT::Parameters::X, X_); - readRealParameter(data, ModelDataT::Parameters::G, G_); - readRealParameter(data, ModelDataT::Parameters::B, B_); - readRealParameter(data, ModelDataT::Parameters::tap, tap_); - readRealParameter(data, ModelDataT::Parameters::phase, phase_); - - if (data.ports.contains(ModelDataT::Ports::bus1)) + using Parameter = typename ModelDataT::Parameters; + using Terminal = typename ModelDataT::Terminals; + + readRealParameter(data, Parameter::R, R_); + readRealParameter(data, Parameter::X, X_); + readRealParameter(data, Parameter::G, G_); + readRealParameter(data, Parameter::B, B_); + readRealParameter(data, Parameter::tap, tap_); + readRealParameter(data, Parameter::phase, phase_); + + if (data.terminals.contains(Terminal::bus1)) { - bus1_id_ = data.ports.at(ModelDataT::Ports::bus1); + bus1_id_ = data.terminals.at(Terminal::bus1); } - if (data.ports.contains(ModelDataT::Ports::bus2)) + if (data.terminals.contains(Terminal::bus2)) { - bus2_id_ = data.ports.at(ModelDataT::Ports::bus2); + bus2_id_ = data.terminals.at(Terminal::bus2); } } diff --git a/GridKit/Model/PhasorDynamics/BusFault/BusFaultData.hpp b/GridKit/Model/PhasorDynamics/BusFault/BusFaultData.hpp index c4042f990..c5134e9fe 100644 --- a/GridKit/Model/PhasorDynamics/BusFault/BusFaultData.hpp +++ b/GridKit/Model/PhasorDynamics/BusFault/BusFaultData.hpp @@ -20,11 +20,24 @@ namespace GridKit X, ///< Short to ground reactance }; - /// Ports supported for a bus fault - enum class BusFaultPorts + /// Terminals supported for a bus fault + enum class BusFaultTerminals : size_t + { + bus, ///< Unique ID of the bus where the fault occurs + SIZE + }; + + /// Input ports supported for a bus fault + enum class BusFaultInputPorts : size_t { - bus, ///< Unique ID of the bus where the fault occurs control_signal, ///< Unique ID of the bus providing a control signal + SIZE + }; + + /// Output ports supported for a bus fault + enum class BusFaultOutputPorts : size_t + { + SIZE }; /// Variables able to be monitored for a bus fault @@ -47,13 +60,17 @@ namespace GridKit struct BusFaultData : public ComponentData { BusFaultData() = default; using Parameters = BusFaultParameters; - using Ports = BusFaultPorts; + using Terminals = BusFaultTerminals; + using InputPorts = BusFaultInputPorts; + using OutputPorts = BusFaultOutputPorts; using MonitorableVariables = BusFaultMonitorableVariables; }; } // namespace PhasorDynamics diff --git a/GridKit/Model/PhasorDynamics/BusFault/BusFaultImpl.hpp b/GridKit/Model/PhasorDynamics/BusFault/BusFaultImpl.hpp index 8c1212d4a..4624c55c5 100644 --- a/GridKit/Model/PhasorDynamics/BusFault/BusFaultImpl.hpp +++ b/GridKit/Model/PhasorDynamics/BusFault/BusFaultImpl.hpp @@ -57,24 +57,27 @@ namespace GridKit : bus_(bus), monitor_(std::make_unique(data)) { - if (data.parameters.contains(ModelDataT::Parameters::R)) + using Parameter = typename ModelDataT::Parameters; + using Terminal = typename ModelDataT::Terminals; + + if (data.parameters.contains(Parameter::R)) { - R_ = std::get(data.parameters.at(ModelDataT::Parameters::R)); + R_ = std::get(data.parameters.at(Parameter::R)); } - if (data.parameters.contains(ModelDataT::Parameters::X)) + if (data.parameters.contains(Parameter::X)) { - X_ = std::get(data.parameters.at(ModelDataT::Parameters::X)); + X_ = std::get(data.parameters.at(Parameter::X)); } - if (data.parameters.contains(ModelDataT::Parameters::state0)) + if (data.parameters.contains(Parameter::state0)) { - status_ = std::get(data.parameters.at(ModelDataT::Parameters::state0)); + status_ = std::get(data.parameters.at(Parameter::state0)); } - if (data.ports.contains(ModelDataT::Ports::bus)) + if (data.terminals.contains(Terminal::bus)) { - bus_id_ = data.ports.at(ModelDataT::Ports::bus); + bus_id_ = data.terminals.at(Terminal::bus); } using Variable = typename ModelDataT::MonitorableVariables; diff --git a/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapter.hpp b/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapter.hpp index e5960d0ef..7152a7387 100644 --- a/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapter.hpp +++ b/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapter.hpp @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include @@ -16,9 +17,6 @@ namespace GridKit { namespace PhasorDynamics { - template - struct BusToSignalAdapterData; - template class BusBase; @@ -35,8 +33,8 @@ namespace GridKit * @brief Internal variables of a `BusToSignalAdapter` * * @note Technically these are not owned by this component, but they must - * be classified as internal so that they can be written to signal nodes - * in `ComponentSignals` + * remain model variables so the adapter can bind its output ports to bus + * voltage storage. */ enum class BusToSignalAdapterInternalVariables : size_t { @@ -82,8 +80,8 @@ namespace GridKit auto getSignals() -> ComponentSignals& + BusToSignalAdapterInputPorts, + BusToSignalAdapterOutputPorts>& { return signals_; } @@ -99,7 +97,7 @@ namespace GridKit BusT* bus_; /// Component signal extension - ComponentSignals signals_; + ComponentSignals signals_; }; } // namespace PhasorDynamics diff --git a/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapterData.hpp b/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapterData.hpp index 3657c1d50..614a5e140 100644 --- a/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapterData.hpp +++ b/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapterData.hpp @@ -24,15 +24,32 @@ namespace GridKit }; /** - * @brief BusToSignalAdapter ports + * @brief BusToSignalAdapter terminals */ - enum class BusToSignalAdapterPorts + enum class BusToSignalAdapterTerminals : size_t { bus, - vr, - vi, + SIZE + }; + + /** + * @brief BusToSignalAdapter input ports + */ + enum class BusToSignalAdapterInputPorts : size_t + { ir, ii, + SIZE + }; + + /** + * @brief BusToSignalAdapter output ports + */ + enum class BusToSignalAdapterOutputPorts : size_t + { + vr, + vi, + SIZE }; /** @@ -54,13 +71,17 @@ namespace GridKit : public ComponentData { BusToSignalAdapterData() = default; using Parameters = BusToSignalAdapterParameters; - using Ports = BusToSignalAdapterPorts; + using Terminals = BusToSignalAdapterTerminals; + using InputPorts = BusToSignalAdapterInputPorts; + using OutputPorts = BusToSignalAdapterOutputPorts; using MonitorableVariables = BusToSignalAdapterMonitorableVariables; }; diff --git a/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapterImpl.hpp b/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapterImpl.hpp index 9d678de82..b3f749adc 100644 --- a/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapterImpl.hpp +++ b/GridKit/Model/PhasorDynamics/BusToSignalAdapter/BusToSignalAdapterImpl.hpp @@ -52,19 +52,19 @@ namespace GridKit template int BusToSignalAdapter::allocate() { - static constexpr auto VREAL = BusToSignalAdapterInternalVariables::VREAL; - static constexpr auto VIMAG = BusToSignalAdapterInternalVariables::VIMAG; + static constexpr auto VR = BusToSignalAdapterOutputPorts::vr; + static constexpr auto VI = BusToSignalAdapterOutputPorts::vi; // vr_index_ and vi_index_ are both set to INVALID_INDEX. This component // simply passes voltage from bus to output signal, so indices are // ignored. - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { - signals_.template getSignalNode()->set(&bus_->Vr(), &vr_index_); + signals_.template getSignalNode()->set(&bus_->Vr(), &vr_index_); } - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { - signals_.template getSignalNode()->set(&bus_->Vi(), &vi_index_); + signals_.template getSignalNode()->set(&bus_->Vi(), &vi_index_); } return 0; @@ -76,23 +76,23 @@ namespace GridKit template int BusToSignalAdapter::verify() const { - static constexpr auto IREAL = BusToSignalAdapterExternalVariables::IREAL; - static constexpr auto IIMAG = BusToSignalAdapterExternalVariables::IIMAG; + static constexpr auto IR = BusToSignalAdapterInputPorts::ir; + static constexpr auto II = BusToSignalAdapterInputPorts::ii; int ret = 0; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - if (!signals_.template isLinked()) + if (!signals_.template isLinked()) { Log::error() << "BusToSignalAdapter: Ir signal attached with no linked source\n"; ret += 1; } } - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - if (!signals_.template isLinked()) + if (!signals_.template isLinked()) { Log::error() << "BusToSignalAdapter: Ii signal attached with no linked source\n"; ret += 1; @@ -126,16 +126,16 @@ namespace GridKit template int BusToSignalAdapter::evaluateResidual() { - static constexpr auto IREAL = BusToSignalAdapterExternalVariables::IREAL; - static constexpr auto IIMAG = BusToSignalAdapterExternalVariables::IIMAG; + static constexpr auto IR = BusToSignalAdapterInputPorts::ir; + static constexpr auto II = BusToSignalAdapterInputPorts::ii; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - bus_->Ir() += signals_.template readExternalVariable(); + bus_->Ir() += signals_.template readExternalVariable(); } - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - bus_->Ii() += signals_.template readExternalVariable(); + bus_->Ii() += signals_.template readExternalVariable(); } return 0; diff --git a/GridKit/Model/PhasorDynamics/ComponentData.hpp b/GridKit/Model/PhasorDynamics/ComponentData.hpp index 9e15f0eb8..bed94ff2c 100644 --- a/GridKit/Model/PhasorDynamics/ComponentData.hpp +++ b/GridKit/Model/PhasorDynamics/ComponentData.hpp @@ -20,10 +20,14 @@ namespace GridKit template requires std::is_enum_v - && std::is_enum_v + && std::is_enum_v + && std::is_enum_v + && std::is_enum_v && std::is_enum_v struct ComponentData { @@ -38,8 +42,14 @@ namespace GridKit /// Mapping of parameters to parameter values std::map> parameters; - /// Mapping of ports to port values - std::map ports; + /// Mapping of terminal attachments to bus identifiers + std::map terminals; + + /// Mapping of signal input ports to signal identifiers + std::map input_ports; + + /// Mapping of signal output ports to signal identifiers + std::map output_ports; /// Set of variables being monitored std::set monitored_variables; diff --git a/GridKit/Model/PhasorDynamics/ComponentDataJSONParser.hpp b/GridKit/Model/PhasorDynamics/ComponentDataJSONParser.hpp index 90b00de50..c9785d12a 100644 --- a/GridKit/Model/PhasorDynamics/ComponentDataJSONParser.hpp +++ b/GridKit/Model/PhasorDynamics/ComponentDataJSONParser.hpp @@ -1,7 +1,8 @@ #pragma once #include -#include +#include +#include #include #include @@ -20,12 +21,23 @@ namespace GridKit template requires std::is_enum_v - && std::is_enum_v + && std::is_enum_v + && std::is_enum_v + && std::is_enum_v && std::is_enum_v - void from_json(const json& j, ComponentData& c) + void from_json(const json& j, + ComponentData& c) { j.at("class").get_to(c.device_class); @@ -72,19 +84,37 @@ namespace GridKit } } + // WARNING --- TEMPORARY --- : the C++ model data is + // intentionally split into terminals, input ports, and output ports. + // This backward-compatible flat JSON "ports" parsing SHOULD NOT become + // the supported design; it only avoids changing every tracked case in + // this PR. The JSON schema should be split once the ingress changes are merged for (auto& raw_port : j.at("ports").items()) { - auto key = magic_enum::enum_cast(raw_port.key()); - if (key.has_value()) + auto terminal = magic_enum::enum_cast(raw_port.key()); + if (terminal.has_value() && terminal.value() != Terminals::SIZE) { - raw_port.value().get_to(c.ports[key.value()]); + raw_port.value().get_to(c.terminals[terminal.value()]); + continue; } - else + + auto input_port = magic_enum::enum_cast(raw_port.key()); + if (input_port.has_value() && input_port.value() != InputPorts::SIZE) { - Log::error() << "\n\tInvalid port mapping: \"" << raw_port.key() - << "\" has no value." << error_context.str() - << std::endl; + raw_port.value().get_to(c.input_ports[input_port.value()]); + continue; } + + auto output_port = magic_enum::enum_cast(raw_port.key()); + if (output_port.has_value() && output_port.value() != OutputPorts::SIZE) + { + raw_port.value().get_to(c.output_ports[output_port.value()]); + continue; + } + + Log::error() << "\n\tInvalid port mapping: \"" << raw_port.key() + << "\" has no value." << error_context.str() + << std::endl; } if (j.contains("mon")) diff --git a/GridKit/Model/PhasorDynamics/ComponentSignals.hpp b/GridKit/Model/PhasorDynamics/ComponentSignals.hpp index 827181346..f34be2faf 100644 --- a/GridKit/Model/PhasorDynamics/ComponentSignals.hpp +++ b/GridKit/Model/PhasorDynamics/ComponentSignals.hpp @@ -11,20 +11,6 @@ namespace GridKit { namespace PhasorDynamics { - /// Dummy `Variables` type for components with no variables - enum class NoVariables : size_t - { - MAXIMUM - }; - - /// Concept requiring an enum to have a `MAXIMUM` variant and that it have - /// the underlying type of `size_t`. This does not ensure the variant is - /// the actual maximum - template - concept EnumHasMaximumValueAndIsSizeT = std::is_enum_v - && std::is_same_v, size_t> - && requires { T::MAXIMUM; }; - /// Extension object for `Component`s adding methods and member variables /// related to signal bus management /// @@ -33,19 +19,11 @@ namespace GridKit /// /// @tparam scalar_type Scalar value type /// @tparam index_type Index type - /// @tparam InternalVariables An enumeration satisfying - /// `EnumHasMaximumValueAndIsSizeT` enumerating internal variables - /// for the component - /// @tparam ExternalVariables An enumeration satisfying - /// `EnumHasMaximumValueAndIsSizeT` enumerating external variables - /// for the component - /// @invariant InternalVariables::MAXIMUM is the greatest attainable - /// integer value of the enum - /// @invariant ExternalVariables::MAXIMUM is the greatest attainable - /// integer value of the enum - template - requires EnumHasMaximumValueAndIsSizeT - && EnumHasMaximumValueAndIsSizeT + /// @tparam InputPorts An enumeration of signal input ports + /// @tparam OutputPorts An enumeration of signal output ports + template + requires std::is_enum_v + && std::is_enum_v class ComponentSignals { public: @@ -54,15 +32,15 @@ namespace GridKit /// Index type using IdxT = index_type; - /// Attaches a signal node to an external variable on this component + /// Attaches a signal node to an input port on this component /// - /// @tparam variable The external variable to attach the provided + /// @tparam port The input port to attach the provided /// signal to /// @param[in] node The signal node to attach /// @pre The provided pointer to a signal node is not `nullptr` /// @post The provided signal node is attached to the indicated - /// external variable - template + /// input port + template auto attachSignalNode(SignalNode* node) { #ifndef NDEBUG @@ -72,124 +50,120 @@ namespace GridKit } #endif - static_assert(variable < ExternalVariables::MAXIMUM); - external_variable_signals_[static_cast(variable)] = node; + static_assert(port < InputPorts::SIZE); + input_port_signals_[static_cast(port)] = node; } - /// Check if a signal node has been attached to an external variable + /// Check if a signal node has been attached to an input port /// - /// @tparam variable The external variable to check - template + /// @tparam port The input port to check + template auto isAttached() const -> bool { - static_assert(variable < ExternalVariables::MAXIMUM); - return static_cast(external_variable_signals_[static_cast(variable)]); + static_assert(port < InputPorts::SIZE); + return static_cast(input_port_signals_[static_cast(port)]); } - /// Check if a signal node has been assigned to an internal variable + /// Check if a signal node has been assigned to an output port /// - /// @tparam variable The internal variable to check - template + /// @tparam port The output port to check + template auto isAssigned() const -> bool { - static_assert(variable < InternalVariables::MAXIMUM); - return static_cast(internal_variable_signals_[static_cast(variable)]); + static_assert(port < OutputPorts::SIZE); + return static_cast(output_port_signals_[static_cast(port)]); } /// Check if a signal node has been "set" /// - /// @tparam variable The external variable to check - template + /// @tparam port The input port to check + template auto isLinked() const -> bool { - static_assert(variable < ExternalVariables::MAXIMUM); - return external_variable_signals_[static_cast(variable)].value()->linked(); + static_assert(port < InputPorts::SIZE); + return input_port_signals_[static_cast(port)].value()->linked(); } - /// Returns a signal node for an internal signal variable to be - /// attached to an external variable on another component + /// Returns a signal node for an output port to be attached to an input + /// port on another component /// - /// @tparam variable The internal variable to get the assigned + /// @tparam port The output port to get the assigned /// signal node of - /// @pre A signal node has been assigned to the requested internal - /// variable - template + /// @pre A signal node has been assigned to the requested output port + template auto getSignalNode() -> SignalNode* { - static_assert(variable < InternalVariables::MAXIMUM); - if (!internal_variable_signals_[static_cast(variable)]) + static_assert(port < OutputPorts::SIZE); + if (!output_port_signals_[static_cast(port)]) { - throw std::logic_error("A signal node has not been assigned to this internal variable"); + throw std::logic_error("A signal node has not been assigned to this output port"); } - return *internal_variable_signals_[static_cast(variable)]; + return *output_port_signals_[static_cast(port)]; } - /// Returns the value of the specified external variable + /// Returns the value of the specified input port /// - /// @tparam variable The external variable to read from - /// @pre A signal node has been assigned to the requested external - /// variable - template + /// @tparam port The input port to read from + /// @pre A signal node has been attached to the requested input port + template auto readExternalVariable() const -> ScalarT { - static_assert(variable < ExternalVariables::MAXIMUM); - if (!external_variable_signals_[static_cast(variable)]) + static_assert(port < InputPorts::SIZE); + if (!input_port_signals_[static_cast(port)]) { - throw std::logic_error("A signal node has not been assigned to this external variable"); + throw std::logic_error("A signal node has not been attached to this input port"); } - return (*external_variable_signals_[static_cast(variable)])->read(); + return (*input_port_signals_[static_cast(port)])->read(); } - /// Returns the global index of the specified external variable + /// Returns the global index of the specified input port /// - /// @tparam variable The external variable to read from - /// @pre A signal node has been assigned to the requested external - /// variable - template + /// @tparam port The input port to read from + /// @pre A signal node has been attached to the requested input port + template auto readExternalVariableIndex() const -> IdxT { - static_assert(variable < ExternalVariables::MAXIMUM); - if (!external_variable_signals_[static_cast(variable)]) + static_assert(port < InputPorts::SIZE); + if (!input_port_signals_[static_cast(port)]) { - throw std::logic_error("A signal node has not been assigned to this external variable"); + throw std::logic_error("A signal node has not been attached to this input port"); } - return (*external_variable_signals_[static_cast(variable)])->getVariableIndex(); + return (*input_port_signals_[static_cast(port)])->getVariableIndex(); } - /// Writes a value to the specified external variable + /// Writes a value to the specified input port /// /// @warning This method should be used only in component initialization /// methods. Use only if you know what you are doing. /// - /// @tparam variable The external variable to write to + /// @tparam port The input port to write to /// @param[in] value The value to write to the signal node - /// @pre A signal node has been assigned to the requested external - /// variable - /// @post The signal node of the corresponding external variable has + /// @pre A signal node has been attached to the requested input port + /// @post The signal node of the corresponding input port has /// the given value written to it - template + template auto writeExternalVariable(ScalarT value) { - static_assert(variable < ExternalVariables::MAXIMUM); - if (!external_variable_signals_[static_cast(variable)]) + static_assert(port < InputPorts::SIZE); + if (!input_port_signals_[static_cast(port)]) { - throw std::logic_error("A signal node has not been assigned to this external variable"); + throw std::logic_error("A signal node has not been attached to this input port"); } - (*external_variable_signals_[static_cast(variable)])->init(value); + (*input_port_signals_[static_cast(port)])->init(value); } - /// Assigns a signal node to an internal variable on this component + /// Assigns a signal node to an output port on this component /// - /// @tparam variable The internal variable to assign the signal node to + /// @tparam port The output port to assign the signal node to /// @param[in] node The signal node to assign /// @pre The provided pointer to a signal node is not `nullptr` /// @post The provided signal node is assigned to the indicated - /// internal variable - template + /// output port + template auto assignSignalNode(SignalNode* node) { #ifndef NDEBUG @@ -199,22 +173,21 @@ namespace GridKit } #endif - static_assert(variable < InternalVariables::MAXIMUM); - internal_variable_signals_[static_cast(variable)] = node; + static_assert(port < OutputPorts::SIZE); + output_port_signals_[static_cast(port)] = node; } private: - /// Internal variables which may have a signal associated with them for - /// use elsewhere + /// Input ports which may have a signal attached from elsewhere std::array*>, - static_cast(InternalVariables::MAXIMUM)> - internal_variable_signals_{}; + static_cast(InputPorts::SIZE)> + input_port_signals_{}; - /// External variables which may have a signal associated with them for - /// use internally + /// Output ports which may have a signal associated with them for use + /// elsewhere std::array*>, - static_cast(ExternalVariables::MAXIMUM)> - external_variable_signals_{}; + static_cast(OutputPorts::SIZE)> + output_port_signals_{}; }; } // namespace PhasorDynamics } // namespace GridKit diff --git a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1.hpp b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1.hpp index add41ad66..4829f335a 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1.hpp @@ -11,6 +11,7 @@ #include #include +#include #include // Forward declarations @@ -18,12 +19,6 @@ namespace GridKit { namespace PhasorDynamics { - namespace Exciter - { - template - struct Ieeet1Data; - } // namespace Exciter - template class BusBase; @@ -114,8 +109,8 @@ namespace GridKit auto getSignals() -> ComponentSignals& + Ieeet1InputPorts, + Ieeet1OutputPorts>& { return signals_; } @@ -160,7 +155,7 @@ namespace GridKit ScalarT Ec_{0}; // "Compensated" terminal measurment, currently unused /// Component signal extension - ComponentSignals signals_; + ComponentSignals signals_; /// Variable monitor std::unique_ptr monitor_; diff --git a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Data.hpp b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Data.hpp index 0fdfe9874..2b79473a4 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Data.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Data.hpp @@ -34,13 +34,26 @@ namespace GridKit Ispdlim ///< Speed limit flag indicator }; - /// Ports for a IEEET1 Exciter model - enum class Ieeet1Ports + /// Terminals for a IEEET1 Exciter model + enum class Ieeet1Terminals : size_t + { + bus, ///< Unique ID of the terminal bus + SIZE + }; + + /// Input ports for a IEEET1 Exciter model + enum class Ieeet1InputPorts : size_t { - bus, ///< Unique ID of the terminal bus speed, ///< Unique ID of the generator speed signal - efd, ///< Unique ID of the output efd signal vs, ///< Unique ID of the stabilizer output signal (optional) + SIZE + }; + + /// Output ports for a IEEET1 Exciter model + enum class Ieeet1OutputPorts : size_t + { + efd, ///< Unique ID of the output efd signal + SIZE }; /// Variables able to be monitored for a IEEET1 Exciter model @@ -62,13 +75,17 @@ namespace GridKit struct Ieeet1Data : public ComponentData { Ieeet1Data() = default; using Parameters = Ieeet1Parameters; - using Ports = Ieeet1Ports; + using Terminals = Ieeet1Terminals; + using InputPorts = Ieeet1InputPorts; + using OutputPorts = Ieeet1OutputPorts; using MonitorableVariables = Ieeet1MonitorableVariables; }; } // namespace Exciter diff --git a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Impl.hpp b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Impl.hpp index c055ad6b4..43b21e844 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Impl.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/IEEET1/Ieeet1Impl.hpp @@ -137,9 +137,9 @@ namespace GridKit } // Set output signals - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { - signals_.template getSignalNode()->set(&y_[7], &(this->getVariableIndex(7))); + signals_.template getSignalNode()->set(&y_[7], &(this->getVariableIndex(7))); } return 0; @@ -151,8 +151,8 @@ namespace GridKit template int Ieeet1::verify() const { - static constexpr auto OMEGA = Ieeet1ExternalVariables::OMEGA; - static constexpr auto VS = Ieeet1ExternalVariables::VS; + static constexpr auto OMEGA = Ieeet1InputPorts::speed; + static constexpr auto VS = Ieeet1InputPorts::vs; int ret = 0; @@ -203,20 +203,20 @@ namespace GridKit // TODO: Build protections in system initialization call to // ensure Efd is initialized externally before the exciter initializes // other variables. - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { efd0 = y_[7]; ///<- generator needs to be initialized first } ScalarT omega{0}; ScalarT vs{0}; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - omega = signals_.template readExternalVariable(); + omega = signals_.template readExternalVariable(); } - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - vs = signals_.template readExternalVariable(); + vs = signals_.template readExternalVariable(); } // Terminal Voltage @@ -350,19 +350,19 @@ namespace GridKit // external signals into a generic inputs_ vector // at the same time as the internal state values y_ // are recieved from IDA. - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - ws_[0] = signals_.template readExternalVariable(); - ws_indices_[0] = signals_.template readExternalVariableIndex(); + ws_[0] = signals_.template readExternalVariable(); + ws_indices_[0] = signals_.template readExternalVariableIndex(); } // VS signal (stabilizer output, optional) ws_[1] = 0.0; ws_indices_[1] = INVALID_INDEX; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - ws_[1] = signals_.template readExternalVariable(); - ws_indices_[1] = signals_.template readExternalVariableIndex(); + ws_[1] = signals_.template readExternalVariable(); + ws_indices_[1] = signals_.template readExternalVariableIndex(); } // Bus voltages @@ -381,62 +381,63 @@ namespace GridKit template void Ieeet1::initModelParams(const ModelDataT& data) { + using Parameter = typename ModelDataT::Parameters; - if (data.parameters.contains(ModelDataT::Parameters::Tr)) + if (data.parameters.contains(Parameter::Tr)) { - Tr_ = std::get(data.parameters.at(ModelDataT::Parameters::Tr)); + Tr_ = std::get(data.parameters.at(Parameter::Tr)); } - if (data.parameters.contains(ModelDataT::Parameters::Ka)) + if (data.parameters.contains(Parameter::Ka)) { - Ka_ = std::get(data.parameters.at(ModelDataT::Parameters::Ka)); + Ka_ = std::get(data.parameters.at(Parameter::Ka)); } - if (data.parameters.contains(ModelDataT::Parameters::Ta)) + if (data.parameters.contains(Parameter::Ta)) { - Ta_ = std::get(data.parameters.at(ModelDataT::Parameters::Ta)); + Ta_ = std::get(data.parameters.at(Parameter::Ta)); } - if (data.parameters.contains(ModelDataT::Parameters::Ke)) + if (data.parameters.contains(Parameter::Ke)) { - Ke_ = std::get(data.parameters.at(ModelDataT::Parameters::Ke)); + Ke_ = std::get(data.parameters.at(Parameter::Ke)); } - if (data.parameters.contains(ModelDataT::Parameters::Te)) + if (data.parameters.contains(Parameter::Te)) { - Te_ = std::get(data.parameters.at(ModelDataT::Parameters::Te)); + Te_ = std::get(data.parameters.at(Parameter::Te)); } - if (data.parameters.contains(ModelDataT::Parameters::Kf)) + if (data.parameters.contains(Parameter::Kf)) { - Kf_ = std::get(data.parameters.at(ModelDataT::Parameters::Kf)); + Kf_ = std::get(data.parameters.at(Parameter::Kf)); } - if (data.parameters.contains(ModelDataT::Parameters::Tf)) + if (data.parameters.contains(Parameter::Tf)) { - Tf_ = std::get(data.parameters.at(ModelDataT::Parameters::Tf)); + Tf_ = std::get(data.parameters.at(Parameter::Tf)); } - if (data.parameters.contains(ModelDataT::Parameters::Vrmin)) + if (data.parameters.contains(Parameter::Vrmin)) { - Vrmin_ = std::get(data.parameters.at(ModelDataT::Parameters::Vrmin)); + Vrmin_ = std::get(data.parameters.at(Parameter::Vrmin)); } - if (data.parameters.contains(ModelDataT::Parameters::Vrmax)) + if (data.parameters.contains(Parameter::Vrmax)) { - Vrmax_ = std::get(data.parameters.at(ModelDataT::Parameters::Vrmax)); + Vrmax_ = std::get(data.parameters.at(Parameter::Vrmax)); } - if (data.parameters.contains(ModelDataT::Parameters::E1)) + if (data.parameters.contains(Parameter::E1)) { - E1_ = std::get(data.parameters.at(ModelDataT::Parameters::E1)); + E1_ = std::get(data.parameters.at(Parameter::E1)); } - if (data.parameters.contains(ModelDataT::Parameters::E2)) + if (data.parameters.contains(Parameter::E2)) { - E2_ = std::get(data.parameters.at(ModelDataT::Parameters::E2)); + E2_ = std::get(data.parameters.at(Parameter::E2)); } - if (data.parameters.contains(ModelDataT::Parameters::Se1)) + if (data.parameters.contains(Parameter::Se1)) { - Se1_ = std::get(data.parameters.at(ModelDataT::Parameters::Se1)); + Se1_ = std::get(data.parameters.at(Parameter::Se1)); } - if (data.parameters.contains(ModelDataT::Parameters::Se2)) + if (data.parameters.contains(Parameter::Se2)) { - Se2_ = std::get(data.parameters.at(ModelDataT::Parameters::Se2)); + Se2_ = std::get(data.parameters.at(Parameter::Se2)); } - if (data.parameters.contains(ModelDataT::Parameters::Ispdlim)) + if (data.parameters.contains(Parameter::Ispdlim)) { - Ispdlim_ = std::get(data.parameters.at(ModelDataT::Parameters::Ispdlim)); + Ispdlim_ = std::get(data.parameters.at(Parameter::Ispdlim)); } // Derived Parameters diff --git a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPti.hpp b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPti.hpp index 56f5667d0..34ac06e27 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPti.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPti.hpp @@ -8,18 +8,13 @@ #include #include +#include #include namespace GridKit { namespace PhasorDynamics { - namespace Exciter - { - template - struct SexsPtiData; - } // namespace Exciter - template class BusBase; @@ -95,8 +90,8 @@ namespace GridKit auto getSignals() -> ComponentSignals& + SexsPtiInputPorts, + SexsPtiOutputPorts>& { return signals_; } @@ -122,7 +117,7 @@ namespace GridKit ScalarT vOEL_{0}; ScalarT vUEL_{0}; - ComponentSignals signals_; + ComponentSignals signals_; std::unique_ptr monitor_; diff --git a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiData.hpp b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiData.hpp index a22bd5be8..0c3be7dbb 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiData.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiData.hpp @@ -25,12 +25,25 @@ namespace GridKit Efdmin ///< Minimum excitation output }; - /// Ports for the SEXS-PTI exciter model. - enum class SexsPtiPorts + /// Terminals for the SEXS-PTI exciter model. + enum class SexsPtiTerminals : size_t { bus, ///< Unique ID of the terminal bus + SIZE + }; + + /// Input ports for the SEXS-PTI exciter model. + enum class SexsPtiInputPorts : size_t + { + vs, ///< Unique ID of the optional stabilizer output signal + SIZE + }; + + /// Output ports for the SEXS-PTI exciter model. + enum class SexsPtiOutputPorts : size_t + { efd, ///< Unique ID of the output efd signal - vs ///< Unique ID of the optional stabilizer output signal + SIZE }; /// Monitorable variables for the SEXS-PTI exciter model. @@ -43,13 +56,17 @@ namespace GridKit struct SexsPtiData : public ComponentData { SexsPtiData() = default; using Parameters = SexsPtiParameters; - using Ports = SexsPtiPorts; + using Terminals = SexsPtiTerminals; + using InputPorts = SexsPtiInputPorts; + using OutputPorts = SexsPtiOutputPorts; using MonitorableVariables = SexsPtiMonitorableVariables; }; diff --git a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiImpl.hpp b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiImpl.hpp index e0de70fea..beedc11a4 100644 --- a/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Exciter/SEXS-PTI/SexsPtiImpl.hpp @@ -78,9 +78,9 @@ namespace GridKit this->setResidualIndex(j, j); } - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { - signals_.template getSignalNode()->set( + signals_.template getSignalNode()->set( &y_[1], &(this->getVariableIndex(1))); } @@ -123,15 +123,15 @@ namespace GridKit ret += 1; } - if (!signals_.template isAssigned()) + if (!signals_.template isAssigned()) { Log::error() << "SexsPti: required EFD signal is not assigned\n"; ret += 1; } - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - if (!signals_.template isLinked()) + if (!signals_.template isLinked()) { Log::error() << "SexsPti: VS signal attached with no linked source\n"; ret += 1; @@ -145,7 +145,7 @@ namespace GridKit int SexsPti::initialize() { ScalarT efd0{0.0}; - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { efd0 = y_[1]; } @@ -213,10 +213,10 @@ namespace GridKit { ws_[0] = 0.0; ws_indices_[0] = INVALID_INDEX; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - ws_[0] = signals_.template readExternalVariable(); - ws_indices_[0] = signals_.template readExternalVariableIndex(); + ws_[0] = signals_.template readExternalVariable(); + ws_indices_[0] = signals_.template readExternalVariableIndex(); } wb_[0] = bus_->Vr(); diff --git a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp index f8ceb7207..1f3df18e1 100644 --- a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp +++ b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1.hpp @@ -11,18 +11,13 @@ #include #include +#include // Forward declarations namespace GridKit { namespace PhasorDynamics { - namespace Governor - { - template - struct Tgov1Data; - } // namespace Governor - template class Genrou; @@ -102,8 +97,8 @@ namespace GridKit auto getSignals() -> ComponentSignals& + Tgov1InputPorts, + Tgov1OutputPorts>& { return signals_; } @@ -125,7 +120,7 @@ namespace GridKit ScalarT pref_{0}; /// Component signal extension - ComponentSignals signals_; + ComponentSignals signals_; // Parameter initialization function void initializeParameters(const ModelDataT& data); diff --git a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp index 91a19e20d..6625c311b 100644 --- a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp +++ b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Data.hpp @@ -32,13 +32,35 @@ namespace GridKit }; /** - * @brief Placeholder enum for TGOV1 ports. + * @brief Temporary TGOV1 terminal keys. + * + * NOTE: The TGOV1 bus terminal is accepted only so existing flat JSON + * cases continue to parse without case-file churn. TGOV1 does not use + * this bus terminal, and it should be removed when the JSON port format + * is updated. */ - enum class Tgov1Ports + enum class Tgov1Terminals : size_t { bus, + SIZE, + }; + + /** + * @brief TGOV1 input ports. + */ + enum class Tgov1InputPorts : size_t + { speed, + SIZE, + }; + + /** + * @brief TGOV1 output ports. + */ + enum class Tgov1OutputPorts : size_t + { pmech, + SIZE, }; /** @@ -59,13 +81,17 @@ namespace GridKit struct Tgov1Data : public ComponentData { Tgov1Data() = default; using Parameters = Tgov1Parameters; - using Ports = Tgov1Ports; + using Terminals = Tgov1Terminals; + using InputPorts = Tgov1InputPorts; + using OutputPorts = Tgov1OutputPorts; using MonitorableVariables = Tgov1MonitorableVariables; }; diff --git a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Impl.hpp b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Impl.hpp index 29c4b07bd..01e42d28b 100644 --- a/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Impl.hpp +++ b/GridKit/Model/PhasorDynamics/Governor/Tgov1/Tgov1Impl.hpp @@ -52,8 +52,8 @@ namespace GridKit T3_(7.5), Dt_(0) { - signals_.template assignSignalNode(pmech); - signals_.template attachSignalNode(omega); + signals_.template assignSignalNode(pmech); + signals_.template attachSignalNode(omega); // 3 internal variables size_ = 3; @@ -82,39 +82,40 @@ namespace GridKit template void Tgov1::initializeParameters(const ModelDataT& data) { - if (data.parameters.contains(ModelDataT::Parameters::R)) + using Parameter = typename ModelDataT::Parameters; + if (data.parameters.contains(Parameter::R)) { - R_ = std::get(data.parameters.at(ModelDataT::Parameters::R)); + R_ = std::get(data.parameters.at(Parameter::R)); } - if (data.parameters.contains(ModelDataT::Parameters::Pvmin)) + if (data.parameters.contains(Parameter::Pvmin)) { - Pvmin_ = std::get(data.parameters.at(ModelDataT::Parameters::Pvmin)); + Pvmin_ = std::get(data.parameters.at(Parameter::Pvmin)); } - if (data.parameters.contains(ModelDataT::Parameters::Pvmax)) + if (data.parameters.contains(Parameter::Pvmax)) { - Pvmax_ = std::get(data.parameters.at(ModelDataT::Parameters::Pvmax)); + Pvmax_ = std::get(data.parameters.at(Parameter::Pvmax)); } - if (data.parameters.contains(ModelDataT::Parameters::T1)) + if (data.parameters.contains(Parameter::T1)) { - T1_ = std::get(data.parameters.at(ModelDataT::Parameters::T1)); + T1_ = std::get(data.parameters.at(Parameter::T1)); } - if (data.parameters.contains(ModelDataT::Parameters::T2)) + if (data.parameters.contains(Parameter::T2)) { - T2_ = std::get(data.parameters.at(ModelDataT::Parameters::T2)); + T2_ = std::get(data.parameters.at(Parameter::T2)); } - if (data.parameters.contains(ModelDataT::Parameters::T3)) + if (data.parameters.contains(Parameter::T3)) { - T3_ = std::get(data.parameters.at(ModelDataT::Parameters::T3)); + T3_ = std::get(data.parameters.at(Parameter::T3)); } - if (data.parameters.contains(ModelDataT::Parameters::Dt)) + if (data.parameters.contains(Parameter::Dt)) { - Dt_ = std::get(data.parameters.at(ModelDataT::Parameters::Dt)); + Dt_ = std::get(data.parameters.at(Parameter::Dt)); } } @@ -157,9 +158,9 @@ namespace GridKit } // Set output signals - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { - signals_.template getSignalNode()->set(&y_[2], &(this->getVariableIndex(2))); + signals_.template getSignalNode()->set(&y_[2], &(this->getVariableIndex(2))); } return 0; @@ -171,7 +172,7 @@ namespace GridKit template int Tgov1::verify() const { - static constexpr auto DELTAOMEGA = Tgov1ExternalVariables::DELTAOMEGA; + static constexpr auto DELTAOMEGA = Tgov1InputPorts::speed; int ret = 0; @@ -197,7 +198,7 @@ namespace GridKit ScalarT p0{0}; // Initial mechanical = initial electric torque - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { p0 = y_[2]; ///<- generator needs to be initialized first } @@ -277,10 +278,10 @@ namespace GridKit int Tgov1::evaluateResidual() { // Input Variables - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - ws_[0] = signals_.template readExternalVariable(); - ws_indices_[0] = signals_.template readExternalVariableIndex(); + ws_[0] = signals_.template readExternalVariable(); + ws_indices_[0] = signals_.template readExternalVariableIndex(); } evaluateInternalResidual(y_.data(), yp_.data(), wb_.data(), ws_.data(), f_.data()); diff --git a/GridKit/Model/PhasorDynamics/Load/LoadData.hpp b/GridKit/Model/PhasorDynamics/Load/LoadData.hpp index 959201fe3..0eba5a06f 100644 --- a/GridKit/Model/PhasorDynamics/Load/LoadData.hpp +++ b/GridKit/Model/PhasorDynamics/Load/LoadData.hpp @@ -19,10 +19,23 @@ namespace GridKit X, ///< Load reactance }; - /// Ports for a load - enum class LoadPorts + /// Terminals for a load + enum class LoadTerminals : size_t { bus, ///< Unique ID of the bus to which the load is connected + SIZE + }; + + /// Input ports supported for a load + enum class LoadInputPorts : size_t + { + SIZE + }; + + /// Output ports supported for a load + enum class LoadOutputPorts : size_t + { + SIZE }; /// Variables able to be monitored for a load @@ -44,13 +57,17 @@ namespace GridKit struct LoadData : public ComponentData { LoadData() = default; using Parameters = LoadParameters; - using Ports = LoadPorts; + using Terminals = LoadTerminals; + using InputPorts = LoadInputPorts; + using OutputPorts = LoadOutputPorts; using MonitorableVariables = LoadMonitorableVariables; }; } // namespace PhasorDynamics diff --git a/GridKit/Model/PhasorDynamics/Load/LoadImpl.hpp b/GridKit/Model/PhasorDynamics/Load/LoadImpl.hpp index e124bc375..8e9f1d137 100644 --- a/GridKit/Model/PhasorDynamics/Load/LoadImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Load/LoadImpl.hpp @@ -43,14 +43,15 @@ namespace GridKit const ModelDataT& data) : bus_(bus) { - if (data.parameters.contains(ModelDataT::Parameters::R)) + using Parameter = typename ModelDataT::Parameters; + if (data.parameters.contains(Parameter::R)) { - R_ = std::get(data.parameters.at(ModelDataT::Parameters::R)); + R_ = std::get(data.parameters.at(Parameter::R)); } - if (data.parameters.contains(ModelDataT::Parameters::X)) + if (data.parameters.contains(Parameter::X)) { - X_ = std::get(data.parameters.at(ModelDataT::Parameters::X)); + X_ = std::get(data.parameters.at(Parameter::X)); } // using Variable = typename ModelDataT::MonitorableVariables; diff --git a/GridKit/Model/PhasorDynamics/LoadZIP/LoadZIPData.hpp b/GridKit/Model/PhasorDynamics/LoadZIP/LoadZIPData.hpp index cfefff260..70f7d0bb9 100644 --- a/GridKit/Model/PhasorDynamics/LoadZIP/LoadZIPData.hpp +++ b/GridKit/Model/PhasorDynamics/LoadZIP/LoadZIPData.hpp @@ -17,10 +17,23 @@ namespace GridKit alphaP, ///< Fraction of load to be represented as constant power }; - /// Ports for a loadZIP - enum class LoadZIPPorts + /// Terminals for a loadZIP + enum class LoadZIPTerminals : size_t { bus, ///< Unique ID of the bus to which the loadZIP is connected + SIZE + }; + + /// Input ports supported for a loadZIP + enum class LoadZIPInputPorts : size_t + { + SIZE + }; + + /// Output ports supported for a loadZIP + enum class LoadZIPOutputPorts : size_t + { + SIZE }; /// Variables able to be monitored for a loadZIP @@ -45,13 +58,17 @@ namespace GridKit struct LoadZIPData : public ComponentData { LoadZIPData() = default; using Parameters = LoadZIPParameters; - using Ports = LoadZIPPorts; + using Terminals = LoadZIPTerminals; + using InputPorts = LoadZIPInputPorts; + using OutputPorts = LoadZIPOutputPorts; using MonitorableVariables = LoadZIPMonitorableVariables; }; } // namespace PhasorDynamics diff --git a/GridKit/Model/PhasorDynamics/LoadZIP/LoadZIPImpl.hpp b/GridKit/Model/PhasorDynamics/LoadZIP/LoadZIPImpl.hpp index 8dc38dc83..63e6399e8 100644 --- a/GridKit/Model/PhasorDynamics/LoadZIP/LoadZIPImpl.hpp +++ b/GridKit/Model/PhasorDynamics/LoadZIP/LoadZIPImpl.hpp @@ -44,29 +44,30 @@ namespace GridKit const ModelDataT& data) : bus_(bus) { - if (data.parameters.contains(ModelDataT::Parameters::P0)) + using Parameter = typename ModelDataT::Parameters; + if (data.parameters.contains(Parameter::P0)) { - P0_ = std::get(data.parameters.at(ModelDataT::Parameters::P0)); + P0_ = std::get(data.parameters.at(Parameter::P0)); } - if (data.parameters.contains(ModelDataT::Parameters::Q0)) + if (data.parameters.contains(Parameter::Q0)) { - Q0_ = std::get(data.parameters.at(ModelDataT::Parameters::Q0)); + Q0_ = std::get(data.parameters.at(Parameter::Q0)); } - if (data.parameters.contains(ModelDataT::Parameters::V0)) + if (data.parameters.contains(Parameter::V0)) { - V0_ = std::get(data.parameters.at(ModelDataT::Parameters::V0)); + V0_ = std::get(data.parameters.at(Parameter::V0)); } - if (data.parameters.contains(ModelDataT::Parameters::alphaI)) + if (data.parameters.contains(Parameter::alphaI)) { - alphaI_ = std::get(data.parameters.at(ModelDataT::Parameters::alphaI)); + alphaI_ = std::get(data.parameters.at(Parameter::alphaI)); } - if (data.parameters.contains(ModelDataT::Parameters::alphaP)) + if (data.parameters.contains(Parameter::alphaP)) { - alphaP_ = std::get(data.parameters.at(ModelDataT::Parameters::alphaP)); + alphaP_ = std::get(data.parameters.at(Parameter::alphaP)); } // using Variable = typename ModelDataT::MonitorableVariables; diff --git a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/Ieeest.hpp b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/Ieeest.hpp index 486f1820b..8e8c6b4fe 100644 --- a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/Ieeest.hpp +++ b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/Ieeest.hpp @@ -8,18 +8,13 @@ #include #include +#include #include namespace GridKit { namespace PhasorDynamics { - namespace Stabilizer - { - template - struct IeeestData; - } // namespace Stabilizer - template class SignalNode; @@ -102,8 +97,8 @@ namespace GridKit auto getSignals() -> ComponentSignals& + IeeestInputPorts, + IeeestOutputPorts>& { return signals_; } @@ -159,7 +154,7 @@ namespace GridKit RealT use_T6_block_{1}; RealT bypass_T6_block_{0}; - ComponentSignals signals_; + ComponentSignals signals_; std::unique_ptr monitor_; diff --git a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestData.hpp b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestData.hpp index 2ac7901ff..6b2fb176d 100644 --- a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestData.hpp +++ b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestData.hpp @@ -40,12 +40,29 @@ namespace GridKit }; /** - * @brief Port keys for IEEEST Stabilizer model. + * @brief Terminal keys for IEEEST Stabilizer model. */ - enum class IeeestPorts + enum class IeeestTerminals : size_t + { + SIZE + }; + + /** + * @brief Input port keys for IEEEST Stabilizer model. + */ + enum class IeeestInputPorts : size_t + { + input, ///< Unique ID of the stabilizer input signal + SIZE + }; + + /** + * @brief Output port keys for IEEEST Stabilizer model. + */ + enum class IeeestOutputPorts : size_t { - input, ///< Unique ID of the stabilizer input signal output, ///< Unique ID of the stabilizer output signal + SIZE }; /** @@ -66,13 +83,17 @@ namespace GridKit struct IeeestData : public ComponentData { IeeestData() = default; using Parameters = IeeestParameters; - using Ports = IeeestPorts; + using Terminals = IeeestTerminals; + using InputPorts = IeeestInputPorts; + using OutputPorts = IeeestOutputPorts; using MonitorableVariables = IeeestMonitorableVariables; }; diff --git a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestImpl.hpp b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestImpl.hpp index 70b49977d..fdd1f43cb 100644 --- a/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestImpl.hpp +++ b/GridKit/Model/PhasorDynamics/Stabilizer/IEEEST/IeeestImpl.hpp @@ -46,77 +46,78 @@ namespace GridKit template void Ieeest::initializeParameters(const ModelDataT& data) { - if (data.parameters.contains(ModelDataT::Parameters::A1)) + using Parameter = typename ModelDataT::Parameters; + if (data.parameters.contains(Parameter::A1)) { - A1_ = std::get(data.parameters.at(ModelDataT::Parameters::A1)); + A1_ = std::get(data.parameters.at(Parameter::A1)); } - if (data.parameters.contains(ModelDataT::Parameters::A2)) + if (data.parameters.contains(Parameter::A2)) { - A2_ = std::get(data.parameters.at(ModelDataT::Parameters::A2)); + A2_ = std::get(data.parameters.at(Parameter::A2)); } - if (data.parameters.contains(ModelDataT::Parameters::A3)) + if (data.parameters.contains(Parameter::A3)) { - A3_ = std::get(data.parameters.at(ModelDataT::Parameters::A3)); + A3_ = std::get(data.parameters.at(Parameter::A3)); } - if (data.parameters.contains(ModelDataT::Parameters::A4)) + if (data.parameters.contains(Parameter::A4)) { - A4_ = std::get(data.parameters.at(ModelDataT::Parameters::A4)); + A4_ = std::get(data.parameters.at(Parameter::A4)); } - if (data.parameters.contains(ModelDataT::Parameters::A5)) + if (data.parameters.contains(Parameter::A5)) { - A5_ = std::get(data.parameters.at(ModelDataT::Parameters::A5)); + A5_ = std::get(data.parameters.at(Parameter::A5)); } - if (data.parameters.contains(ModelDataT::Parameters::A6)) + if (data.parameters.contains(Parameter::A6)) { - A6_ = std::get(data.parameters.at(ModelDataT::Parameters::A6)); + A6_ = std::get(data.parameters.at(Parameter::A6)); } - if (data.parameters.contains(ModelDataT::Parameters::T1)) + if (data.parameters.contains(Parameter::T1)) { - T1_ = std::get(data.parameters.at(ModelDataT::Parameters::T1)); + T1_ = std::get(data.parameters.at(Parameter::T1)); } - if (data.parameters.contains(ModelDataT::Parameters::T2)) + if (data.parameters.contains(Parameter::T2)) { - T2_ = std::get(data.parameters.at(ModelDataT::Parameters::T2)); + T2_ = std::get(data.parameters.at(Parameter::T2)); } - if (data.parameters.contains(ModelDataT::Parameters::T3)) + if (data.parameters.contains(Parameter::T3)) { - T3_ = std::get(data.parameters.at(ModelDataT::Parameters::T3)); + T3_ = std::get(data.parameters.at(Parameter::T3)); } - if (data.parameters.contains(ModelDataT::Parameters::T4)) + if (data.parameters.contains(Parameter::T4)) { - T4_ = std::get(data.parameters.at(ModelDataT::Parameters::T4)); + T4_ = std::get(data.parameters.at(Parameter::T4)); } - if (data.parameters.contains(ModelDataT::Parameters::T5)) + if (data.parameters.contains(Parameter::T5)) { - T5_ = std::get(data.parameters.at(ModelDataT::Parameters::T5)); + T5_ = std::get(data.parameters.at(Parameter::T5)); } - if (data.parameters.contains(ModelDataT::Parameters::T6)) + if (data.parameters.contains(Parameter::T6)) { - T6_ = std::get(data.parameters.at(ModelDataT::Parameters::T6)); + T6_ = std::get(data.parameters.at(Parameter::T6)); } - if (data.parameters.contains(ModelDataT::Parameters::Ks)) + if (data.parameters.contains(Parameter::Ks)) { - Ks_ = std::get(data.parameters.at(ModelDataT::Parameters::Ks)); + Ks_ = std::get(data.parameters.at(Parameter::Ks)); } - if (data.parameters.contains(ModelDataT::Parameters::Lsmin)) + if (data.parameters.contains(Parameter::Lsmin)) { - Lsmin_ = std::get(data.parameters.at(ModelDataT::Parameters::Lsmin)); + Lsmin_ = std::get(data.parameters.at(Parameter::Lsmin)); } - if (data.parameters.contains(ModelDataT::Parameters::Lsmax)) + if (data.parameters.contains(Parameter::Lsmax)) { - Lsmax_ = std::get(data.parameters.at(ModelDataT::Parameters::Lsmax)); + Lsmax_ = std::get(data.parameters.at(Parameter::Lsmax)); } - if (data.parameters.contains(ModelDataT::Parameters::Vcl)) + if (data.parameters.contains(Parameter::Vcl)) { - Vcl_ = std::get(data.parameters.at(ModelDataT::Parameters::Vcl)); + Vcl_ = std::get(data.parameters.at(Parameter::Vcl)); } - if (data.parameters.contains(ModelDataT::Parameters::Vcu)) + if (data.parameters.contains(Parameter::Vcu)) { - Vcu_ = std::get(data.parameters.at(ModelDataT::Parameters::Vcu)); + Vcu_ = std::get(data.parameters.at(Parameter::Vcu)); } - if (data.parameters.contains(ModelDataT::Parameters::Tdelay)) + if (data.parameters.contains(Parameter::Tdelay)) { - Tdelay_ = std::get(data.parameters.at(ModelDataT::Parameters::Tdelay)); + Tdelay_ = std::get(data.parameters.at(Parameter::Tdelay)); } a0_ = 1; @@ -175,9 +176,9 @@ namespace GridKit this->setResidualIndex(j, j); } - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { - signals_.template getSignalNode()->set( + signals_.template getSignalNode()->set( &y_[11], &(this->getVariableIndex(11))); } @@ -189,9 +190,9 @@ namespace GridKit { int ret = 0; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - if (!signals_.template isLinked()) + if (!signals_.template isLinked()) { Log::error() << "Ieeest: input signal U attached with no linked source\n"; ret += 1; @@ -295,10 +296,10 @@ namespace GridKit template int Ieeest::evaluateResidual() { - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - ws_[0] = signals_.template readExternalVariable(); - ws_indices_[0] = signals_.template readExternalVariableIndex(); + ws_[0] = signals_.template readExternalVariable(); + ws_indices_[0] = signals_.template readExternalVariableIndex(); } evaluateInternalResidual(y_.data(), yp_.data(), wb_.data(), ws_.data(), f_.data()); diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 73b6f764d..a4db04568 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -150,8 +150,8 @@ namespace GridKit auto getSignals() -> ComponentSignals& + GenrouInputPorts, + GenrouOutputPorts>& { return signals_; } @@ -215,7 +215,7 @@ namespace GridKit IdxT unit_id_; //< @todo this should be removed /// Component signal extension - ComponentSignals signals_; + ComponentSignals signals_; /* Initial terminal conditions */ RealT p0_{0.0}; diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp index 34a429828..60c1c860f 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp @@ -36,13 +36,26 @@ namespace GridKit mva, ///< MVA base of the genrou model }; - /// Ports for a Genrou generator model - enum class GenrouPorts + /// Terminals for a Genrou generator model + enum class GenrouTerminals : size_t { - bus, ///< Unique ID of the connecting bus - pmech, ///< Unique ID of the bus providing the exciter signal - speed, ///< Unique ID of the bus providing the governor signal - efd, ///< Unique ID of the bus providing exciter field signal + bus, ///< Unique ID of the connecting bus + SIZE + }; + + /// Input ports for a Genrou generator model + enum class GenrouInputPorts : size_t + { + pmech, ///< Unique ID of the signal providing mechanical power + efd, ///< Unique ID of the signal providing exciter field signal + SIZE + }; + + /// Output ports for a Genrou generator model + enum class GenrouOutputPorts : size_t + { + speed, ///< Unique ID of the signal receiving speed deviation + SIZE }; /// Variables able to be monitored for a Genrou generator model @@ -69,13 +82,17 @@ namespace GridKit struct GenrouData : public ComponentData { GenrouData() = default; using Parameters = GenrouParameters; - using Ports = GenrouPorts; + using Terminals = GenrouTerminals; + using InputPorts = GenrouInputPorts; + using OutputPorts = GenrouOutputPorts; using MonitorableVariables = GenrouMonitorableVariables; }; } // namespace PhasorDynamics diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouImpl.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouImpl.hpp index 9cbb0b587..c9ca9d48f 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouImpl.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouImpl.hpp @@ -132,8 +132,8 @@ namespace GridKit unit_id_(1), monitor_(std::make_unique(data)) { - signals_.template attachSignalNode(pmech); - signals_.template assignSignalNode(omega); + signals_.template attachSignalNode(pmech); + signals_.template assignSignalNode(omega); initializeParameters(data); initializeMonitor(); @@ -150,9 +150,9 @@ namespace GridKit unit_id_(1), monitor_(std::make_unique(data)) { - signals_.template attachSignalNode(pmech); - signals_.template assignSignalNode(omega); - signals_.template attachSignalNode(efd); + signals_.template attachSignalNode(pmech); + signals_.template assignSignalNode(omega); + signals_.template attachSignalNode(efd); initializeParameters(data); initializeMonitor(); @@ -170,104 +170,106 @@ namespace GridKit template void Genrou::initializeParameters(const ModelDataT& data) { - if (data.parameters.contains(ModelDataT::Parameters::p0)) + using Parameter = typename ModelDataT::Parameters; + using Terminal = typename ModelDataT::Terminals; + if (data.parameters.contains(Parameter::p0)) { - p0_ = std::get(data.parameters.at(ModelDataT::Parameters::p0)); + p0_ = std::get(data.parameters.at(Parameter::p0)); } - if (data.parameters.contains(ModelDataT::Parameters::q0)) + if (data.parameters.contains(Parameter::q0)) { - q0_ = std::get(data.parameters.at(ModelDataT::Parameters::q0)); + q0_ = std::get(data.parameters.at(Parameter::q0)); } - if (data.parameters.contains(ModelDataT::Parameters::H)) + if (data.parameters.contains(Parameter::H)) { - H_ = std::get(data.parameters.at(ModelDataT::Parameters::H)); + H_ = std::get(data.parameters.at(Parameter::H)); } - if (data.parameters.contains(ModelDataT::Parameters::D)) + if (data.parameters.contains(Parameter::D)) { - D_ = std::get(data.parameters.at(ModelDataT::Parameters::D)); + D_ = std::get(data.parameters.at(Parameter::D)); } - if (data.parameters.contains(ModelDataT::Parameters::Ra)) + if (data.parameters.contains(Parameter::Ra)) { - Ra_ = std::get(data.parameters.at(ModelDataT::Parameters::Ra)); + Ra_ = std::get(data.parameters.at(Parameter::Ra)); } - if (data.parameters.contains(ModelDataT::Parameters::Tdop)) + if (data.parameters.contains(Parameter::Tdop)) { - Tdop_ = std::get(data.parameters.at(ModelDataT::Parameters::Tdop)); + Tdop_ = std::get(data.parameters.at(Parameter::Tdop)); } - if (data.parameters.contains(ModelDataT::Parameters::Tdopp)) + if (data.parameters.contains(Parameter::Tdopp)) { - Tdopp_ = std::get(data.parameters.at(ModelDataT::Parameters::Tdopp)); + Tdopp_ = std::get(data.parameters.at(Parameter::Tdopp)); } - if (data.parameters.contains(ModelDataT::Parameters::Tqopp)) + if (data.parameters.contains(Parameter::Tqopp)) { - Tqopp_ = std::get(data.parameters.at(ModelDataT::Parameters::Tqopp)); + Tqopp_ = std::get(data.parameters.at(Parameter::Tqopp)); } - if (data.parameters.contains(ModelDataT::Parameters::Tqop)) + if (data.parameters.contains(Parameter::Tqop)) { - Tqop_ = std::get(data.parameters.at(ModelDataT::Parameters::Tqop)); + Tqop_ = std::get(data.parameters.at(Parameter::Tqop)); } - if (data.parameters.contains(ModelDataT::Parameters::Xd)) + if (data.parameters.contains(Parameter::Xd)) { - Xd_ = std::get(data.parameters.at(ModelDataT::Parameters::Xd)); + Xd_ = std::get(data.parameters.at(Parameter::Xd)); } - if (data.parameters.contains(ModelDataT::Parameters::Xdp)) + if (data.parameters.contains(Parameter::Xdp)) { - Xdp_ = std::get(data.parameters.at(ModelDataT::Parameters::Xdp)); + Xdp_ = std::get(data.parameters.at(Parameter::Xdp)); } - if (data.parameters.contains(ModelDataT::Parameters::Xdpp)) + if (data.parameters.contains(Parameter::Xdpp)) { - Xdpp_ = std::get(data.parameters.at(ModelDataT::Parameters::Xdpp)); + Xdpp_ = std::get(data.parameters.at(Parameter::Xdpp)); } - if (data.parameters.contains(ModelDataT::Parameters::Xq)) + if (data.parameters.contains(Parameter::Xq)) { - Xq_ = std::get(data.parameters.at(ModelDataT::Parameters::Xq)); + Xq_ = std::get(data.parameters.at(Parameter::Xq)); } - if (data.parameters.contains(ModelDataT::Parameters::Xqp)) + if (data.parameters.contains(Parameter::Xqp)) { - Xqp_ = std::get(data.parameters.at(ModelDataT::Parameters::Xqp)); + Xqp_ = std::get(data.parameters.at(Parameter::Xqp)); } - if (data.parameters.contains(ModelDataT::Parameters::Xqpp)) + if (data.parameters.contains(Parameter::Xqpp)) { - Xqpp_ = std::get(data.parameters.at(ModelDataT::Parameters::Xqpp)); + Xqpp_ = std::get(data.parameters.at(Parameter::Xqpp)); } - if (data.parameters.contains(ModelDataT::Parameters::Xl)) + if (data.parameters.contains(Parameter::Xl)) { - Xl_ = std::get(data.parameters.at(ModelDataT::Parameters::Xl)); + Xl_ = std::get(data.parameters.at(Parameter::Xl)); } - if (data.parameters.contains(ModelDataT::Parameters::S10)) + if (data.parameters.contains(Parameter::S10)) { - S10_ = std::get(data.parameters.at(ModelDataT::Parameters::S10)); + S10_ = std::get(data.parameters.at(Parameter::S10)); } - if (data.parameters.contains(ModelDataT::Parameters::S12)) + if (data.parameters.contains(Parameter::S12)) { - S12_ = std::get(data.parameters.at(ModelDataT::Parameters::S12)); + S12_ = std::get(data.parameters.at(Parameter::S12)); } - if (data.parameters.contains(ModelDataT::Parameters::mva)) + if (data.parameters.contains(Parameter::mva)) { - mva_base_ = std::get(data.parameters.at(ModelDataT::Parameters::mva)); + mva_base_ = std::get(data.parameters.at(Parameter::mva)); } - if (data.ports.contains(ModelDataT::Ports::bus)) + if (data.terminals.contains(Terminal::bus)) { - bus_id_ = data.ports.at(ModelDataT::Ports::bus); + bus_id_ = data.terminals.at(Terminal::bus); } } @@ -352,9 +354,9 @@ namespace GridKit } // Set output signals - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { - signals_.template getSignalNode()->set(&y_[1], &(this->getVariableIndex(1))); + signals_.template getSignalNode()->set(&y_[1], &(this->getVariableIndex(1))); } return 0; @@ -366,8 +368,8 @@ namespace GridKit template int Genrou::verify() const { - static constexpr auto PM = GenrouExternalVariables::PM; - static constexpr auto EFD = GenrouExternalVariables::EFD; + static constexpr auto PM = GenrouInputPorts::pmech; + static constexpr auto EFD = GenrouInputPorts::efd; int ret = 0; @@ -491,15 +493,15 @@ namespace GridKit ScalarT Te = y_[12]; pmech_set_ = Te; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - signals_.template writeExternalVariable(Te); + signals_.template writeExternalVariable(Te); } efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - signals_.template writeExternalVariable(efd_set_); + signals_.template writeExternalVariable(efd_set_); } for (IdxT i = 0; i < size_; ++i) @@ -632,18 +634,18 @@ namespace GridKit { // Mechanical Power ws_[0] = pmech_set_; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - ws_[0] = signals_.template readExternalVariable(); - ws_indices_[0] = signals_.template readExternalVariableIndex(); + ws_[0] = signals_.template readExternalVariable(); + ws_indices_[0] = signals_.template readExternalVariableIndex(); } // Exciter Efield ws_[1] = efd_set_; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - ws_[1] = signals_.template readExternalVariable(); - ws_indices_[1] = signals_.template readExternalVariableIndex(); + ws_[1] = signals_.template readExternalVariable(); + ws_indices_[1] = signals_.template readExternalVariableIndex(); } // Bus voltages diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/Gensal.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/Gensal.hpp index 8e00fc2e8..b0fcc5019 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/Gensal.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/Gensal.hpp @@ -114,8 +114,8 @@ namespace GridKit auto getSignals() -> ComponentSignals& + GensalInputPorts, + GensalOutputPorts>& { return signals_; } @@ -177,7 +177,7 @@ namespace GridKit BusT* bus_; /// Component signal extension - ComponentSignals signals_; + ComponentSignals signals_; /* Initial terminal conditions */ RealT p0_{0.0}; diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/GensalData.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/GensalData.hpp index 0f3881ae9..6eb234073 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/GensalData.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/GensalData.hpp @@ -33,13 +33,26 @@ namespace GridKit mva, ///< MVA base of the gensal model }; - /// Ports for a Gensal generator model - enum class GensalPorts + /// Terminals for a Gensal generator model + enum class GensalTerminals : size_t + { + bus, ///< Unique ID of the connecting bus + SIZE + }; + + /// Input ports for a Gensal generator model + enum class GensalInputPorts : size_t { - bus, ///< Unique ID of the connecting bus pmech, ///< Unique ID of the signal providing mechanical power - speed, ///< Unique ID of the signal receiving speed deviation efd, ///< Unique ID of the signal providing exciter field voltage + SIZE + }; + + /// Output ports for a Gensal generator model + enum class GensalOutputPorts : size_t + { + speed, ///< Unique ID of the signal receiving speed deviation + SIZE }; /// Variables able to be monitored for a Gensal generator model @@ -75,13 +88,17 @@ namespace GridKit struct GensalData : public ComponentData { GensalData() = default; using Parameters = GensalParameters; - using Ports = GensalPorts; + using Terminals = GensalTerminals; + using InputPorts = GensalInputPorts; + using OutputPorts = GensalOutputPorts; using MonitorableVariables = GensalMonitorableVariables; }; } // namespace PhasorDynamics diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/GensalImpl.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/GensalImpl.hpp index 9b779ded5..b1773b023 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/GensalImpl.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GENSALwS/GensalImpl.hpp @@ -41,84 +41,85 @@ namespace GridKit template void Gensal::initializeParameters(const ModelDataT& data) { - if (data.parameters.contains(ModelDataT::Parameters::p0)) + using Parameter = typename ModelDataT::Parameters; + if (data.parameters.contains(Parameter::p0)) { - p0_ = std::get(data.parameters.at(ModelDataT::Parameters::p0)); + p0_ = std::get(data.parameters.at(Parameter::p0)); } - if (data.parameters.contains(ModelDataT::Parameters::q0)) + if (data.parameters.contains(Parameter::q0)) { - q0_ = std::get(data.parameters.at(ModelDataT::Parameters::q0)); + q0_ = std::get(data.parameters.at(Parameter::q0)); } - if (data.parameters.contains(ModelDataT::Parameters::H)) + if (data.parameters.contains(Parameter::H)) { - H_ = std::get(data.parameters.at(ModelDataT::Parameters::H)); + H_ = std::get(data.parameters.at(Parameter::H)); } - if (data.parameters.contains(ModelDataT::Parameters::D)) + if (data.parameters.contains(Parameter::D)) { - D_ = std::get(data.parameters.at(ModelDataT::Parameters::D)); + D_ = std::get(data.parameters.at(Parameter::D)); } - if (data.parameters.contains(ModelDataT::Parameters::Ra)) + if (data.parameters.contains(Parameter::Ra)) { - Ra_ = std::get(data.parameters.at(ModelDataT::Parameters::Ra)); + Ra_ = std::get(data.parameters.at(Parameter::Ra)); } - if (data.parameters.contains(ModelDataT::Parameters::Tdop)) + if (data.parameters.contains(Parameter::Tdop)) { - Tdop_ = std::get(data.parameters.at(ModelDataT::Parameters::Tdop)); + Tdop_ = std::get(data.parameters.at(Parameter::Tdop)); } - if (data.parameters.contains(ModelDataT::Parameters::Tdopp)) + if (data.parameters.contains(Parameter::Tdopp)) { - Tdopp_ = std::get(data.parameters.at(ModelDataT::Parameters::Tdopp)); + Tdopp_ = std::get(data.parameters.at(Parameter::Tdopp)); } - if (data.parameters.contains(ModelDataT::Parameters::Tqopp)) + if (data.parameters.contains(Parameter::Tqopp)) { - Tqopp_ = std::get(data.parameters.at(ModelDataT::Parameters::Tqopp)); + Tqopp_ = std::get(data.parameters.at(Parameter::Tqopp)); } - if (data.parameters.contains(ModelDataT::Parameters::Xd)) + if (data.parameters.contains(Parameter::Xd)) { - Xd_ = std::get(data.parameters.at(ModelDataT::Parameters::Xd)); + Xd_ = std::get(data.parameters.at(Parameter::Xd)); } - if (data.parameters.contains(ModelDataT::Parameters::Xdp)) + if (data.parameters.contains(Parameter::Xdp)) { - Xdp_ = std::get(data.parameters.at(ModelDataT::Parameters::Xdp)); + Xdp_ = std::get(data.parameters.at(Parameter::Xdp)); } - if (data.parameters.contains(ModelDataT::Parameters::Xdpp)) + if (data.parameters.contains(Parameter::Xdpp)) { - Xdpp_ = std::get(data.parameters.at(ModelDataT::Parameters::Xdpp)); + Xdpp_ = std::get(data.parameters.at(Parameter::Xdpp)); } - if (data.parameters.contains(ModelDataT::Parameters::Xq)) + if (data.parameters.contains(Parameter::Xq)) { - Xq_ = std::get(data.parameters.at(ModelDataT::Parameters::Xq)); + Xq_ = std::get(data.parameters.at(Parameter::Xq)); } - if (data.parameters.contains(ModelDataT::Parameters::Xl)) + if (data.parameters.contains(Parameter::Xl)) { - Xl_ = std::get(data.parameters.at(ModelDataT::Parameters::Xl)); + Xl_ = std::get(data.parameters.at(Parameter::Xl)); } - if (data.parameters.contains(ModelDataT::Parameters::S10)) + if (data.parameters.contains(Parameter::S10)) { - S10_ = std::get(data.parameters.at(ModelDataT::Parameters::S10)); + S10_ = std::get(data.parameters.at(Parameter::S10)); } - if (data.parameters.contains(ModelDataT::Parameters::S12)) + if (data.parameters.contains(Parameter::S12)) { - S12_ = std::get(data.parameters.at(ModelDataT::Parameters::S12)); + S12_ = std::get(data.parameters.at(Parameter::S12)); } - if (data.parameters.contains(ModelDataT::Parameters::mva)) + if (data.parameters.contains(Parameter::mva)) { - mva_base_ = std::get(data.parameters.at(ModelDataT::Parameters::mva)); + mva_base_ = std::get(data.parameters.at(Parameter::mva)); } } @@ -221,9 +222,9 @@ namespace GridKit } // Set output signals - if (signals_.template isAssigned()) + if (signals_.template isAssigned()) { - signals_.template getSignalNode()->set(&y_[1], &(this->getVariableIndex(1))); + signals_.template getSignalNode()->set(&y_[1], &(this->getVariableIndex(1))); } return 0; @@ -235,8 +236,8 @@ namespace GridKit template int Gensal::verify() const { - static constexpr auto PM = GensalExternalVariables::PM; - static constexpr auto EFD = GensalExternalVariables::EFD; + static constexpr auto PM = GensalInputPorts::pmech; + static constexpr auto EFD = GensalInputPorts::efd; int ret = 0; @@ -314,15 +315,15 @@ namespace GridKit + G_ * (vd * -std::cos(delta) + vq * std::sin(delta)); pmech_set_ = Te; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - signals_.template writeExternalVariable(Te); + signals_.template writeExternalVariable(Te); } efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + ksat; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - signals_.template writeExternalVariable(efd_set_); + signals_.template writeExternalVariable(efd_set_); } for (IdxT i = 0; i < size_; ++i) @@ -448,18 +449,18 @@ namespace GridKit { // Mechanical Power ws_[0] = pmech_set_; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - ws_[0] = signals_.template readExternalVariable(); - ws_indices_[0] = signals_.template readExternalVariableIndex(); + ws_[0] = signals_.template readExternalVariable(); + ws_indices_[0] = signals_.template readExternalVariableIndex(); } // Exciter Efield ws_[1] = efd_set_; - if (signals_.template isAttached()) + if (signals_.template isAttached()) { - ws_[1] = signals_.template readExternalVariable(); - ws_indices_[1] = signals_.template readExternalVariableIndex(); + ws_[1] = signals_.template readExternalVariable(); + ws_indices_[1] = signals_.template readExternalVariableIndex(); } // Bus voltages diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassicalData.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassicalData.hpp index 98dcbf9f9..97998362f 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassicalData.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassicalData.hpp @@ -24,17 +24,30 @@ namespace GridKit mva ///< MVA Base of the generator }; - /// Ports supported for a classical generator model + /// Terminals supported for a classical generator model + enum class GenClassicalTerminals : size_t + { + bus, ///< Unique ID of the connecting bus + SIZE + }; + + /// Input ports supported for a classical generator model /// /// @warning GenClassical signal support is incomplete. These legacy port /// names are not wired by SystemModel today; the intended refactor is to /// align this model with Genrou/Gensal by supporting `pmech`, `speed`, and /// `efd` ports through ComponentSignals. - enum class GenClassicalPorts + enum class GenClassicalInputPorts : size_t { - bus, ///< Unique ID of the connecting bus exciter_signal, ///< Unique ID of the bus providing the exciter signal governor_signal, ///< Unique ID of the bus providing the governor signal + SIZE + }; + + /// Output ports supported for a classical generator model + enum class GenClassicalOutputPorts : size_t + { + SIZE }; /// Variables able to be monitored for a classical generator model @@ -62,13 +75,17 @@ namespace GridKit struct GenClassicalData : public ComponentData { GenClassicalData() = default; using Parameters = GenClassicalParameters; - using Ports = GenClassicalPorts; + using Terminals = GenClassicalTerminals; + using InputPorts = GenClassicalInputPorts; + using OutputPorts = GenClassicalOutputPorts; using MonitorableVariables = GenClassicalMonitorableVariables; }; } // namespace PhasorDynamics diff --git a/GridKit/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassicalImpl.hpp b/GridKit/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassicalImpl.hpp index 37578193a..7573597cf 100644 --- a/GridKit/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassicalImpl.hpp +++ b/GridKit/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassicalImpl.hpp @@ -75,44 +75,46 @@ namespace GridKit unit_id_(1), monitor_(std::make_unique(data)) { - if (data.parameters.contains(ModelDataT::Parameters::p0)) + using Parameter = typename ModelDataT::Parameters; + using Terminal = typename ModelDataT::Terminals; + if (data.parameters.contains(Parameter::p0)) { - p0_ = std::get(data.parameters.at(ModelDataT::Parameters::p0)); + p0_ = std::get(data.parameters.at(Parameter::p0)); } - if (data.parameters.contains(ModelDataT::Parameters::q0)) + if (data.parameters.contains(Parameter::q0)) { - q0_ = std::get(data.parameters.at(ModelDataT::Parameters::q0)); + q0_ = std::get(data.parameters.at(Parameter::q0)); } - if (data.parameters.contains(ModelDataT::Parameters::H)) + if (data.parameters.contains(Parameter::H)) { - H_ = std::get(data.parameters.at(ModelDataT::Parameters::H)); + H_ = std::get(data.parameters.at(Parameter::H)); } - if (data.parameters.contains(ModelDataT::Parameters::D)) + if (data.parameters.contains(Parameter::D)) { - D_ = std::get(data.parameters.at(ModelDataT::Parameters::D)); + D_ = std::get(data.parameters.at(Parameter::D)); } - if (data.parameters.contains(ModelDataT::Parameters::Ra)) + if (data.parameters.contains(Parameter::Ra)) { - Ra_ = std::get(data.parameters.at(ModelDataT::Parameters::Ra)); + Ra_ = std::get(data.parameters.at(Parameter::Ra)); } - if (data.parameters.contains(ModelDataT::Parameters::Xdp)) + if (data.parameters.contains(Parameter::Xdp)) { - Xdp_ = std::get(data.parameters.at(ModelDataT::Parameters::Xdp)); + Xdp_ = std::get(data.parameters.at(Parameter::Xdp)); } - if (data.parameters.contains(ModelDataT::Parameters::mva)) + if (data.parameters.contains(Parameter::mva)) { - mva_base_ = std::get(data.parameters.at(ModelDataT::Parameters::mva)); + mva_base_ = std::get(data.parameters.at(Parameter::mva)); } - if (data.ports.contains(ModelDataT::Ports::bus)) + if (data.terminals.contains(Terminal::bus)) { - bus_id_ = data.ports.at(ModelDataT::Ports::bus); + bus_id_ = data.terminals.at(Terminal::bus); } initializeMonitor(); diff --git a/GridKit/Model/PhasorDynamics/SystemModel.hpp b/GridKit/Model/PhasorDynamics/SystemModel.hpp index d7b4cc9d7..e6843ca0a 100644 --- a/GridKit/Model/PhasorDynamics/SystemModel.hpp +++ b/GridKit/Model/PhasorDynamics/SystemModel.hpp @@ -113,41 +113,39 @@ namespace GridKit // Add bus-to-signal adapters for (const auto& adapterdata : data.adapter) { - using AdapterPorts = BusToSignalAdapterData::Ports; - IdxT bus_index = 0; - if (adapterdata.ports.contains(AdapterPorts::bus)) + using AdapterTerminals = typename BusToSignalAdapterData::Terminals; + using AdapterInputPorts = typename BusToSignalAdapterData::InputPorts; + using AdapterOutputPorts = typename BusToSignalAdapterData::OutputPorts; + IdxT bus_index = 0; + if (adapterdata.terminals.contains(AdapterTerminals::bus)) { - bus_index = adapterdata.ports.at(AdapterPorts::bus); + bus_index = adapterdata.terminals.at(AdapterTerminals::bus); } auto* adapter = new BusToSignalAdapter(getBus(bus_index)); - if (adapterdata.ports.contains(AdapterPorts::vr)) + if (adapterdata.output_ports.contains(AdapterOutputPorts::vr)) { - IdxT vr = adapterdata.ports.at(AdapterPorts::vr); - constexpr auto VREAL = BusToSignalAdapterInternalVariables::VREAL; - adapter->getSignals().template assignSignalNode(getSignal(vr)); + IdxT vr = adapterdata.output_ports.at(AdapterOutputPorts::vr); + adapter->getSignals().template assignSignalNode(getSignal(vr)); } - if (adapterdata.ports.contains(AdapterPorts::vi)) + if (adapterdata.output_ports.contains(AdapterOutputPorts::vi)) { - IdxT vi = adapterdata.ports.at(AdapterPorts::vi); - constexpr auto VIMAG = BusToSignalAdapterInternalVariables::VIMAG; - adapter->getSignals().template assignSignalNode(getSignal(vi)); + IdxT vi = adapterdata.output_ports.at(AdapterOutputPorts::vi); + adapter->getSignals().template assignSignalNode(getSignal(vi)); } - if (adapterdata.ports.contains(AdapterPorts::ir)) + if (adapterdata.input_ports.contains(AdapterInputPorts::ir)) { - IdxT ir = adapterdata.ports.at(AdapterPorts::ir); - constexpr auto IREAL = BusToSignalAdapterExternalVariables::IREAL; - adapter->getSignals().template attachSignalNode(getSignal(ir)); + IdxT ir = adapterdata.input_ports.at(AdapterInputPorts::ir); + adapter->getSignals().template attachSignalNode(getSignal(ir)); } - if (adapterdata.ports.contains(AdapterPorts::ii)) + if (adapterdata.input_ports.contains(AdapterInputPorts::ii)) { - IdxT ii = adapterdata.ports.at(AdapterPorts::ii); - constexpr auto IIMAG = BusToSignalAdapterExternalVariables::IIMAG; - adapter->getSignals().template attachSignalNode(getSignal(ii)); + IdxT ii = adapterdata.input_ports.at(AdapterInputPorts::ii); + adapter->getSignals().template attachSignalNode(getSignal(ii)); } addComponent(adapter); @@ -157,15 +155,15 @@ namespace GridKit for (const auto& branchdata : data.branch) { IdxT bus1_index = 0; - if (branchdata.ports.contains(BranchData::Ports::bus1)) + if (branchdata.terminals.contains(BranchData::Terminals::bus1)) { - bus1_index = branchdata.ports.at(BranchData::Ports::bus1); + bus1_index = branchdata.terminals.at(BranchData::Terminals::bus1); } IdxT bus2_index = 0; - if (branchdata.ports.contains(BranchData::Ports::bus2)) + if (branchdata.terminals.contains(BranchData::Terminals::bus2)) { - bus2_index = branchdata.ports.at(BranchData::Ports::bus2); + bus2_index = branchdata.terminals.at(BranchData::Terminals::bus2); } auto* branch = new Branch(getBus(bus1_index), getBus(bus2_index), branchdata); @@ -177,9 +175,9 @@ namespace GridKit for (const auto& loaddata : data.load) { IdxT bus_index = 0; - if (loaddata.ports.contains(LoadData::Ports::bus)) + if (loaddata.terminals.contains(LoadData::Terminals::bus)) { - bus_index = loaddata.ports.at(LoadData::Ports::bus); + bus_index = loaddata.terminals.at(LoadData::Terminals::bus); } auto* load = new Load(getBus(bus_index), loaddata); addComponent(load); @@ -190,9 +188,9 @@ namespace GridKit for (const auto& loadzipdata : data.loadzip) { IdxT bus_index = 0; - if (loadzipdata.ports.contains(LoadZIPData::Ports::bus)) + if (loadzipdata.terminals.contains(LoadZIPData::Terminals::bus)) { - bus_index = loadzipdata.ports.at(LoadZIPData::Ports::bus); + bus_index = loadzipdata.terminals.at(LoadZIPData::Terminals::bus); } auto* loadzip = new LoadZIP(getBus(bus_index), loadzipdata); addComponent(loadzip); @@ -202,9 +200,9 @@ namespace GridKit for (const auto& gendata : data.genrou) { IdxT bus_index = 0; - if (gendata.ports.contains(GenrouData::Ports::bus)) + if (gendata.terminals.contains(GenrouData::Terminals::bus)) { - bus_index = gendata.ports.at(GenrouData::Ports::bus); + bus_index = gendata.terminals.at(GenrouData::Terminals::bus); } auto* gen = new Genrou(getBus(bus_index), gendata); @@ -212,22 +210,22 @@ namespace GridKit /// @todo Genrou (and likely other components) would need to name multiple /// signal inlets and outlets. For now we have only speed out and mechanical /// power in. - if (gendata.ports.contains(GenrouData::Ports::speed)) + if (gendata.output_ports.contains(GenrouData::OutputPorts::speed)) { - IdxT speed = gendata.ports.at(GenrouData::Ports::speed); - gen->getSignals().template assignSignalNode(getSignal(speed)); + IdxT speed = gendata.output_ports.at(GenrouData::OutputPorts::speed); + gen->getSignals().template assignSignalNode::OutputPorts::speed>(getSignal(speed)); } - if (gendata.ports.contains(GenrouData::Ports::pmech)) + if (gendata.input_ports.contains(GenrouData::InputPorts::pmech)) { - IdxT pmech = gendata.ports.at(GenrouData::Ports::pmech); - gen->getSignals().template attachSignalNode(getSignal(pmech)); + IdxT pmech = gendata.input_ports.at(GenrouData::InputPorts::pmech); + gen->getSignals().template attachSignalNode::InputPorts::pmech>(getSignal(pmech)); } - if (gendata.ports.contains(GenrouData::Ports::efd)) + if (gendata.input_ports.contains(GenrouData::InputPorts::efd)) { - IdxT efd = gendata.ports.at(GenrouData::Ports::efd); - gen->getSignals().template attachSignalNode(getSignal(efd)); + IdxT efd = gendata.input_ports.at(GenrouData::InputPorts::efd); + gen->getSignals().template attachSignalNode::InputPorts::efd>(getSignal(efd)); } addComponent(gen); @@ -237,29 +235,29 @@ namespace GridKit for (const auto& gendata : data.gensal) { IdxT bus_index = 0; - if (gendata.ports.contains(GensalData::Ports::bus)) + if (gendata.terminals.contains(GensalData::Terminals::bus)) { - bus_index = gendata.ports.at(GensalData::Ports::bus); + bus_index = gendata.terminals.at(GensalData::Terminals::bus); } auto* gen = new Gensal(getBus(bus_index), gendata); - if (gendata.ports.contains(GensalData::Ports::speed)) + if (gendata.output_ports.contains(GensalData::OutputPorts::speed)) { - IdxT speed = gendata.ports.at(GensalData::Ports::speed); - gen->getSignals().template assignSignalNode(getSignal(speed)); + IdxT speed = gendata.output_ports.at(GensalData::OutputPorts::speed); + gen->getSignals().template assignSignalNode::OutputPorts::speed>(getSignal(speed)); } - if (gendata.ports.contains(GensalData::Ports::pmech)) + if (gendata.input_ports.contains(GensalData::InputPorts::pmech)) { - IdxT pmech = gendata.ports.at(GensalData::Ports::pmech); - gen->getSignals().template attachSignalNode(getSignal(pmech)); + IdxT pmech = gendata.input_ports.at(GensalData::InputPorts::pmech); + gen->getSignals().template attachSignalNode::InputPorts::pmech>(getSignal(pmech)); } - if (gendata.ports.contains(GensalData::Ports::efd)) + if (gendata.input_ports.contains(GensalData::InputPorts::efd)) { - IdxT efd = gendata.ports.at(GensalData::Ports::efd); - gen->getSignals().template attachSignalNode(getSignal(efd)); + IdxT efd = gendata.input_ports.at(GensalData::InputPorts::efd); + gen->getSignals().template attachSignalNode::InputPorts::efd>(getSignal(efd)); } addComponent(gen); @@ -269,9 +267,9 @@ namespace GridKit for (const auto& gendata : data.genclassical) { IdxT bus_index = 0; - if (gendata.ports.contains(GenClassicalData::Ports::bus)) + if (gendata.terminals.contains(GenClassicalData::Terminals::bus)) { - bus_index = gendata.ports.at(GenClassicalData::Ports::bus); + bus_index = gendata.terminals.at(GenClassicalData::Terminals::bus); } auto* gen = new GenClassical(getBus(bus_index), gendata); addComponent(gen); @@ -282,16 +280,16 @@ namespace GridKit { auto* gov = new Tgov1(govdata); - if (govdata.ports.contains(Tgov1Data::Ports::speed)) + if (govdata.input_ports.contains(Tgov1Data::InputPorts::speed)) { - IdxT speed = govdata.ports.at(Tgov1Data::Ports::speed); - gov->getSignals().template attachSignalNode(getSignal(speed)); + IdxT speed = govdata.input_ports.at(Tgov1Data::InputPorts::speed); + gov->getSignals().template attachSignalNode::InputPorts::speed>(getSignal(speed)); } - if (govdata.ports.contains(Tgov1Data::Ports::pmech)) + if (govdata.output_ports.contains(Tgov1Data::OutputPorts::pmech)) { - IdxT pmech = govdata.ports.at(Tgov1Data::Ports::pmech); - gov->getSignals().template assignSignalNode(getSignal(pmech)); + IdxT pmech = govdata.output_ports.at(Tgov1Data::OutputPorts::pmech); + gov->getSignals().template assignSignalNode::OutputPorts::pmech>(getSignal(pmech)); } addComponent(gov); @@ -300,29 +298,29 @@ namespace GridKit for (const auto& excitedata : data.exciter) { IdxT bus_index = 0; - if (excitedata.ports.contains(Ieeet1Data::Ports::bus)) + if (excitedata.terminals.contains(Ieeet1Data::Terminals::bus)) { - bus_index = excitedata.ports.at(Ieeet1Data::Ports::bus); + bus_index = excitedata.terminals.at(Ieeet1Data::Terminals::bus); } auto* exciter = new Ieeet1(getBus(bus_index), excitedata); - if (excitedata.ports.contains(Ieeet1Data::Ports::speed)) + if (excitedata.input_ports.contains(Ieeet1Data::InputPorts::speed)) { - IdxT speed = excitedata.ports.at(Ieeet1Data::Ports::speed); - exciter->getSignals().template attachSignalNode(getSignal(speed)); + IdxT speed = excitedata.input_ports.at(Ieeet1Data::InputPorts::speed); + exciter->getSignals().template attachSignalNode::InputPorts::speed>(getSignal(speed)); } - if (excitedata.ports.contains(Ieeet1Data::Ports::efd)) + if (excitedata.output_ports.contains(Ieeet1Data::OutputPorts::efd)) { - IdxT efd = excitedata.ports.at(Ieeet1Data::Ports::efd); - exciter->getSignals().template assignSignalNode(getSignal(efd)); + IdxT efd = excitedata.output_ports.at(Ieeet1Data::OutputPorts::efd); + exciter->getSignals().template assignSignalNode::OutputPorts::efd>(getSignal(efd)); } - if (excitedata.ports.contains(Ieeet1Data::Ports::vs)) + if (excitedata.input_ports.contains(Ieeet1Data::InputPorts::vs)) { - IdxT vs = excitedata.ports.at(Ieeet1Data::Ports::vs); - exciter->getSignals().template attachSignalNode(getSignal(vs)); + IdxT vs = excitedata.input_ports.at(Ieeet1Data::InputPorts::vs); + exciter->getSignals().template attachSignalNode::InputPorts::vs>(getSignal(vs)); } addComponent(exciter); @@ -331,23 +329,23 @@ namespace GridKit for (const auto& excitedata : data.sexspti) { IdxT bus_index = 0; - if (excitedata.ports.contains(SexsPtiData::Ports::bus)) + if (excitedata.terminals.contains(SexsPtiData::Terminals::bus)) { - bus_index = excitedata.ports.at(SexsPtiData::Ports::bus); + bus_index = excitedata.terminals.at(SexsPtiData::Terminals::bus); } auto* exciter = new SexsPti(getBus(bus_index), excitedata); - if (excitedata.ports.contains(SexsPtiData::Ports::efd)) + if (excitedata.output_ports.contains(SexsPtiData::OutputPorts::efd)) { - IdxT efd = excitedata.ports.at(SexsPtiData::Ports::efd); - exciter->getSignals().template assignSignalNode(getSignal(efd)); + IdxT efd = excitedata.output_ports.at(SexsPtiData::OutputPorts::efd); + exciter->getSignals().template assignSignalNode::OutputPorts::efd>(getSignal(efd)); } - if (excitedata.ports.contains(SexsPtiData::Ports::vs)) + if (excitedata.input_ports.contains(SexsPtiData::InputPorts::vs)) { - IdxT vs = excitedata.ports.at(SexsPtiData::Ports::vs); - exciter->getSignals().template attachSignalNode(getSignal(vs)); + IdxT vs = excitedata.input_ports.at(SexsPtiData::InputPorts::vs); + exciter->getSignals().template attachSignalNode::InputPorts::vs>(getSignal(vs)); } addComponent(exciter); @@ -358,16 +356,16 @@ namespace GridKit { auto* stabilizer = new Ieeest(stabdata); - if (stabdata.ports.contains(IeeestPorts::input)) + if (stabdata.input_ports.contains(IeeestInputPorts::input)) { - IdxT input = stabdata.ports.at(IeeestPorts::input); - stabilizer->getSignals().template attachSignalNode(getSignal(input)); + IdxT input = stabdata.input_ports.at(IeeestInputPorts::input); + stabilizer->getSignals().template attachSignalNode(getSignal(input)); } - if (stabdata.ports.contains(IeeestPorts::output)) + if (stabdata.output_ports.contains(IeeestOutputPorts::output)) { - IdxT output = stabdata.ports.at(IeeestPorts::output); - stabilizer->getSignals().template assignSignalNode(getSignal(output)); + IdxT output = stabdata.output_ports.at(IeeestOutputPorts::output); + stabilizer->getSignals().template assignSignalNode(getSignal(output)); } addComponent(stabilizer); @@ -377,9 +375,9 @@ namespace GridKit for (const auto& faultdata : data.bus_fault) { IdxT bus_index = 0; - if (faultdata.ports.contains(BusFaultData::Ports::bus)) + if (faultdata.terminals.contains(BusFaultData::Terminals::bus)) { - bus_index = faultdata.ports.at(BusFaultData::Ports::bus); + bus_index = faultdata.terminals.at(BusFaultData::Terminals::bus); } auto* fault = new BusFault(getBus(bus_index), faultdata); addFault(fault); diff --git a/examples/PhasorDynamics/Tiny/ThreeBus/Basic/ThreeBusBasic.cpp b/examples/PhasorDynamics/Tiny/ThreeBus/Basic/ThreeBusBasic.cpp index 326760e80..4bac65253 100644 --- a/examples/PhasorDynamics/Tiny/ThreeBus/Basic/ThreeBusBasic.cpp +++ b/examples/PhasorDynamics/Tiny/ThreeBus/Basic/ThreeBusBasic.cpp @@ -110,34 +110,34 @@ int main() data.branch.resize(3); // Branch 0-1 - data.branch[0].ports[BranchPorts::bus1] = data.bus[0].bus_id; - data.branch[0].ports[BranchPorts::bus2] = data.bus[1].bus_id; - data.branch[0].parameters[BranchParameters::R] = 0.05; - data.branch[0].parameters[BranchParameters::X] = 0.21; - data.branch[0].parameters[BranchParameters::G] = 0.; - data.branch[0].parameters[BranchParameters::B] = 0.1; + data.branch[0].terminals[BranchTerminals::bus1] = data.bus[0].bus_id; + data.branch[0].terminals[BranchTerminals::bus2] = data.bus[1].bus_id; + data.branch[0].parameters[BranchParameters::R] = 0.05; + data.branch[0].parameters[BranchParameters::X] = 0.21; + data.branch[0].parameters[BranchParameters::G] = 0.; + data.branch[0].parameters[BranchParameters::B] = 0.1; // Branch 0-2 - data.branch[1].ports[BranchPorts::bus1] = data.bus[0].bus_id; - data.branch[1].ports[BranchPorts::bus2] = data.bus[2].bus_id; - data.branch[1].parameters[BranchParameters::R] = 0.06; - data.branch[1].parameters[BranchParameters::X] = 0.15; - data.branch[1].parameters[BranchParameters::G] = 0.; - data.branch[1].parameters[BranchParameters::B] = 0.12; + data.branch[1].terminals[BranchTerminals::bus1] = data.bus[0].bus_id; + data.branch[1].terminals[BranchTerminals::bus2] = data.bus[2].bus_id; + data.branch[1].parameters[BranchParameters::R] = 0.06; + data.branch[1].parameters[BranchParameters::X] = 0.15; + data.branch[1].parameters[BranchParameters::G] = 0.; + data.branch[1].parameters[BranchParameters::B] = 0.12; // Branch 1-2 - data.branch[2].ports[BranchPorts::bus1] = data.bus[1].bus_id; - data.branch[2].ports[BranchPorts::bus2] = data.bus[2].bus_id; - data.branch[2].parameters[BranchParameters::R] = 0.08; - data.branch[2].parameters[BranchParameters::X] = 0.27; - data.branch[2].parameters[BranchParameters::G] = 0.; - data.branch[2].parameters[BranchParameters::B] = 0.45; + data.branch[2].terminals[BranchTerminals::bus1] = data.bus[1].bus_id; + data.branch[2].terminals[BranchTerminals::bus2] = data.bus[2].bus_id; + data.branch[2].parameters[BranchParameters::R] = 0.08; + data.branch[2].parameters[BranchParameters::X] = 0.27; + data.branch[2].parameters[BranchParameters::G] = 0.; + data.branch[2].parameters[BranchParameters::B] = 0.45; // Set generator data data.genrou.resize(2); // Generator on bus 1 - data.genrou[0].ports[GenrouPorts::bus] = 1; + data.genrou[0].terminals[GenrouTerminals::bus] = 1; data.genrou[0].parameters[GenrouParameters::p0] = 0.5; data.genrou[0].parameters[GenrouParameters::q0] = -0.07588; data.genrou[0].parameters[GenrouParameters::H] = 2.7; @@ -158,7 +158,7 @@ int main() data.genrou[0].parameters[GenrouParameters::S12] = 0.; // Generator on bus 2 - data.genrou[1].ports[GenrouPorts::bus] = 2; + data.genrou[1].terminals[GenrouTerminals::bus] = 2; data.genrou[1].parameters[GenrouParameters::p0] = 0.25; data.genrou[1].parameters[GenrouParameters::q0] = 0.26587; data.genrou[1].parameters[GenrouParameters::H] = 1.6; @@ -182,14 +182,14 @@ int main() data.load.resize(1); // Load on bus 2 - data.load[0].ports[LoadPorts::bus] = 2; + data.load[0].terminals[LoadTerminals::bus] = 2; data.load[0].parameters[LoadParameters::R] = 0.4447197839297772; data.load[0].parameters[LoadParameters::X] = 0.20330047265361242; // Set fault data data.bus_fault.resize(1); - data.bus_fault[0].ports[BusFaultPorts::bus] = 2; + data.bus_fault[0].terminals[BusFaultTerminals::bus] = 2; data.bus_fault[0].parameters[BusFaultParameters::R] = 0.0; data.bus_fault[0].parameters[BusFaultParameters::X] = 1e-5; data.bus_fault[0].parameters[BusFaultParameters::state0] = false; diff --git a/examples/PhasorDynamics/Tiny/ThreeBus/Classical/ThreeBusClassical.cpp b/examples/PhasorDynamics/Tiny/ThreeBus/Classical/ThreeBusClassical.cpp index 4373ef46c..c4b03d238 100644 --- a/examples/PhasorDynamics/Tiny/ThreeBus/Classical/ThreeBusClassical.cpp +++ b/examples/PhasorDynamics/Tiny/ThreeBus/Classical/ThreeBusClassical.cpp @@ -111,34 +111,34 @@ int main() data.branch.resize(3); // Branch 0-1 - data.branch[0].ports[BranchPorts::bus1] = data.bus[0].bus_id; - data.branch[0].ports[BranchPorts::bus2] = data.bus[1].bus_id; - data.branch[0].parameters[BranchParameters::R] = 0.05; - data.branch[0].parameters[BranchParameters::X] = 0.21; - data.branch[0].parameters[BranchParameters::G] = 0.0; - data.branch[0].parameters[BranchParameters::B] = 0.1; + data.branch[0].terminals[BranchTerminals::bus1] = data.bus[0].bus_id; + data.branch[0].terminals[BranchTerminals::bus2] = data.bus[1].bus_id; + data.branch[0].parameters[BranchParameters::R] = 0.05; + data.branch[0].parameters[BranchParameters::X] = 0.21; + data.branch[0].parameters[BranchParameters::G] = 0.0; + data.branch[0].parameters[BranchParameters::B] = 0.1; // Branch 0-2 - data.branch[1].ports[BranchPorts::bus1] = data.bus[0].bus_id; - data.branch[1].ports[BranchPorts::bus2] = data.bus[2].bus_id; - data.branch[1].parameters[BranchParameters::R] = 0.06; - data.branch[1].parameters[BranchParameters::X] = 0.15; - data.branch[1].parameters[BranchParameters::G] = 0.0; - data.branch[1].parameters[BranchParameters::B] = 0.12; + data.branch[1].terminals[BranchTerminals::bus1] = data.bus[0].bus_id; + data.branch[1].terminals[BranchTerminals::bus2] = data.bus[2].bus_id; + data.branch[1].parameters[BranchParameters::R] = 0.06; + data.branch[1].parameters[BranchParameters::X] = 0.15; + data.branch[1].parameters[BranchParameters::G] = 0.0; + data.branch[1].parameters[BranchParameters::B] = 0.12; // Branch 1-2 - data.branch[2].ports[BranchPorts::bus1] = data.bus[1].bus_id; - data.branch[2].ports[BranchPorts::bus2] = data.bus[2].bus_id; - data.branch[2].parameters[BranchParameters::R] = 0.08; - data.branch[2].parameters[BranchParameters::X] = 0.27; - data.branch[2].parameters[BranchParameters::G] = 0.0; - data.branch[2].parameters[BranchParameters::B] = 0.45; + data.branch[2].terminals[BranchTerminals::bus1] = data.bus[1].bus_id; + data.branch[2].terminals[BranchTerminals::bus2] = data.bus[2].bus_id; + data.branch[2].parameters[BranchParameters::R] = 0.08; + data.branch[2].parameters[BranchParameters::X] = 0.27; + data.branch[2].parameters[BranchParameters::G] = 0.0; + data.branch[2].parameters[BranchParameters::B] = 0.45; // Set generator data data.genclassical.resize(2); // Generator on bus 1 - data.genclassical[0].ports[GenClassicalPorts::bus] = data.bus[1].bus_id; + data.genclassical[0].terminals[GenClassicalTerminals::bus] = data.bus[1].bus_id; data.genclassical[0].parameters[GenClassicalParameters::p0] = 0.5; data.genclassical[0].parameters[GenClassicalParameters::q0] = -0.07588; data.genclassical[0].parameters[GenClassicalParameters::H] = 2.7; @@ -147,7 +147,7 @@ int main() data.genclassical[0].parameters[GenClassicalParameters::Xdp] = 0.17; // Generator on bus 2 - data.genclassical[1].ports[GenClassicalPorts::bus] = data.bus[2].bus_id; + data.genclassical[1].terminals[GenClassicalTerminals::bus] = data.bus[2].bus_id; data.genclassical[1].parameters[GenClassicalParameters::p0] = 0.25; data.genclassical[1].parameters[GenClassicalParameters::q0] = 0.26587; data.genclassical[1].parameters[GenClassicalParameters::H] = 1.6; @@ -159,14 +159,14 @@ int main() data.load.resize(1); // Load on bus 2 - data.load[0].ports[LoadPorts::bus] = 2; + data.load[0].terminals[LoadTerminals::bus] = 2; data.load[0].parameters[LoadParameters::R] = 0.4447197839297772; data.load[0].parameters[LoadParameters::X] = 0.20330047265361242; // Set fault data data.bus_fault.resize(1); - data.bus_fault[0].ports[BusFaultPorts::bus] = 2; + data.bus_fault[0].terminals[BusFaultTerminals::bus] = 2; data.bus_fault[0].parameters[BusFaultParameters::R] = 0.0; data.bus_fault[0].parameters[BusFaultParameters::X] = 1e-5; data.bus_fault[0].parameters[BusFaultParameters::state0] = false; diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Basic/TwoBusBasic.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Basic/TwoBusBasic.cpp index 43fe05c59..39c57e17a 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Basic/TwoBusBasic.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Basic/TwoBusBasic.cpp @@ -54,12 +54,12 @@ int main() // Set branch data data.branch.resize(1); - data.branch[0].ports[BranchPorts::bus1] = data.bus[0].bus_id; - data.branch[0].ports[BranchPorts::bus2] = data.bus[1].bus_id; - data.branch[0].parameters[BranchParameters::R] = 0.0; - data.branch[0].parameters[BranchParameters::X] = 0.1; - data.branch[0].parameters[BranchParameters::G] = 0.0; - data.branch[0].parameters[BranchParameters::B] = 0.0; + data.branch[0].terminals[BranchTerminals::bus1] = data.bus[0].bus_id; + data.branch[0].terminals[BranchTerminals::bus2] = data.bus[1].bus_id; + data.branch[0].parameters[BranchParameters::R] = 0.0; + data.branch[0].parameters[BranchParameters::X] = 0.1; + data.branch[0].parameters[BranchParameters::G] = 0.0; + data.branch[0].parameters[BranchParameters::B] = 0.0; // Set generator data data.genrou.resize(1); diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Ieeet1/TwoBusIeeet1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Ieeet1/TwoBusIeeet1.cpp index 392a80dc6..813067b98 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Ieeet1/TwoBusIeeet1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Ieeet1/TwoBusIeeet1.cpp @@ -65,12 +65,12 @@ int main() // Set branch data data.branch.resize(1); - data.branch[0].ports[BranchPorts::bus1] = data.bus[0].bus_id; - data.branch[0].ports[BranchPorts::bus2] = data.bus[1].bus_id; - data.branch[0].parameters[BranchParameters::R] = 0.0; - data.branch[0].parameters[BranchParameters::X] = 0.1; - data.branch[0].parameters[BranchParameters::G] = 0.0; - data.branch[0].parameters[BranchParameters::B] = 0.0; + data.branch[0].terminals[BranchTerminals::bus1] = data.bus[0].bus_id; + data.branch[0].terminals[BranchTerminals::bus2] = data.bus[1].bus_id; + data.branch[0].parameters[BranchParameters::R] = 0.0; + data.branch[0].parameters[BranchParameters::X] = 0.1; + data.branch[0].parameters[BranchParameters::G] = 0.0; + data.branch[0].parameters[BranchParameters::B] = 0.0; // Add faults data.bus_fault.resize(1); @@ -82,46 +82,46 @@ int main() // Set generator data data.genrou.resize(1); - data.genrou[0].ports[GenrouPorts::speed] = 0; - data.genrou[0].ports[GenrouPorts::pmech] = 1; - data.genrou[0].ports[GenrouPorts::efd] = 2; - data.genrou[0].parameters[GenrouParameters::p0] = 1.; - data.genrou[0].parameters[GenrouParameters::q0] = 0.05013; - data.genrou[0].parameters[GenrouParameters::H] = 3.; - data.genrou[0].parameters[GenrouParameters::D] = 0.; - data.genrou[0].parameters[GenrouParameters::Ra] = 0.; - data.genrou[0].parameters[GenrouParameters::Tdop] = 7.; - data.genrou[0].parameters[GenrouParameters::Tdopp] = .04; - data.genrou[0].parameters[GenrouParameters::Tqopp] = .05; - data.genrou[0].parameters[GenrouParameters::Tqop] = .75; - data.genrou[0].parameters[GenrouParameters::Xd] = 2.1; - data.genrou[0].parameters[GenrouParameters::Xdp] = 0.2; - data.genrou[0].parameters[GenrouParameters::Xdpp] = 0.18; - data.genrou[0].parameters[GenrouParameters::Xq] = 0.5; - data.genrou[0].parameters[GenrouParameters::Xqp] = 0.5; - data.genrou[0].parameters[GenrouParameters::Xqpp] = 0.18; - data.genrou[0].parameters[GenrouParameters::Xl] = 0.15; - data.genrou[0].parameters[GenrouParameters::S10] = 0.; - data.genrou[0].parameters[GenrouParameters::S12] = 0.; + data.genrou[0].output_ports[GenrouOutputPorts::speed] = 0; + data.genrou[0].input_ports[GenrouInputPorts::pmech] = 1; + data.genrou[0].input_ports[GenrouInputPorts::efd] = 2; + data.genrou[0].parameters[GenrouParameters::p0] = 1.; + data.genrou[0].parameters[GenrouParameters::q0] = 0.05013; + data.genrou[0].parameters[GenrouParameters::H] = 3.; + data.genrou[0].parameters[GenrouParameters::D] = 0.; + data.genrou[0].parameters[GenrouParameters::Ra] = 0.; + data.genrou[0].parameters[GenrouParameters::Tdop] = 7.; + data.genrou[0].parameters[GenrouParameters::Tdopp] = .04; + data.genrou[0].parameters[GenrouParameters::Tqopp] = .05; + data.genrou[0].parameters[GenrouParameters::Tqop] = .75; + data.genrou[0].parameters[GenrouParameters::Xd] = 2.1; + data.genrou[0].parameters[GenrouParameters::Xdp] = 0.2; + data.genrou[0].parameters[GenrouParameters::Xdpp] = 0.18; + data.genrou[0].parameters[GenrouParameters::Xq] = 0.5; + data.genrou[0].parameters[GenrouParameters::Xqp] = 0.5; + data.genrou[0].parameters[GenrouParameters::Xqpp] = 0.18; + data.genrou[0].parameters[GenrouParameters::Xl] = 0.15; + data.genrou[0].parameters[GenrouParameters::S10] = 0.; + data.genrou[0].parameters[GenrouParameters::S12] = 0.; // Governor data.gov.resize(1); - data.gov[0].ports[Tgov1Ports::speed] = 0; - data.gov[0].ports[Tgov1Ports::pmech] = 1; - data.gov[0].parameters[Tgov1Parameters::R] = 0.05; - data.gov[0].parameters[Tgov1Parameters::Pvmin] = 0.0; - data.gov[0].parameters[Tgov1Parameters::Pvmax] = 1.0; - data.gov[0].parameters[Tgov1Parameters::T1] = 0.5; - data.gov[0].parameters[Tgov1Parameters::T2] = 2.5; - data.gov[0].parameters[Tgov1Parameters::T3] = 7.5; - data.gov[0].parameters[Tgov1Parameters::Dt] = 0.0; + data.gov[0].input_ports[Tgov1InputPorts::speed] = 0; + data.gov[0].output_ports[Tgov1OutputPorts::pmech] = 1; + data.gov[0].parameters[Tgov1Parameters::R] = 0.05; + data.gov[0].parameters[Tgov1Parameters::Pvmin] = 0.0; + data.gov[0].parameters[Tgov1Parameters::Pvmax] = 1.0; + data.gov[0].parameters[Tgov1Parameters::T1] = 0.5; + data.gov[0].parameters[Tgov1Parameters::T2] = 2.5; + data.gov[0].parameters[Tgov1Parameters::T3] = 7.5; + data.gov[0].parameters[Tgov1Parameters::Dt] = 0.0; // Exciter data.exciter.resize(1); - data.exciter[0].ports[Ieeet1Ports::speed] = 0; - data.exciter[0].ports[Ieeet1Ports::efd] = 2; + data.exciter[0].input_ports[Ieeet1InputPorts::speed] = 0; + data.exciter[0].output_ports[Ieeet1OutputPorts::efd] = 2; data.exciter[0].parameters[Exciter::Ieeet1Parameters::Tr] = 0.001; // (BUG: Nonfunctional if Tr = 0) data.exciter[0].parameters[Exciter::Ieeet1Parameters::Ka] = 50.; data.exciter[0].parameters[Exciter::Ieeet1Parameters::Ta] = 0.04; diff --git a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp index b50164656..62ccfd001 100644 --- a/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp +++ b/examples/PhasorDynamics/Tiny/TwoBus/Tgov1/TwoBusTgov1.cpp @@ -64,12 +64,12 @@ int main() // Set branch data data.branch.resize(1); - data.branch[0].ports[BranchPorts::bus1] = data.bus[0].bus_id; - data.branch[0].ports[BranchPorts::bus2] = data.bus[1].bus_id; - data.branch[0].parameters[BranchParameters::R] = 0.0; - data.branch[0].parameters[BranchParameters::X] = 0.1; - data.branch[0].parameters[BranchParameters::G] = 0.0; - data.branch[0].parameters[BranchParameters::B] = 0.0; + data.branch[0].terminals[BranchTerminals::bus1] = data.bus[0].bus_id; + data.branch[0].terminals[BranchTerminals::bus2] = data.bus[1].bus_id; + data.branch[0].parameters[BranchParameters::R] = 0.0; + data.branch[0].parameters[BranchParameters::X] = 0.1; + data.branch[0].parameters[BranchParameters::G] = 0.0; + data.branch[0].parameters[BranchParameters::B] = 0.0; // Add faults data.bus_fault.resize(1); @@ -81,39 +81,39 @@ int main() // Set generator data data.genrou.resize(1); - data.genrou[0].ports[GenrouPorts::pmech] = 1; - data.genrou[0].ports[GenrouPorts::speed] = 0; - data.genrou[0].parameters[GenrouParameters::p0] = 1.; - data.genrou[0].parameters[GenrouParameters::q0] = 0.05013; - data.genrou[0].parameters[GenrouParameters::H] = 3.; - data.genrou[0].parameters[GenrouParameters::D] = 0.; - data.genrou[0].parameters[GenrouParameters::Ra] = 0.; - data.genrou[0].parameters[GenrouParameters::Tdop] = 7.; - data.genrou[0].parameters[GenrouParameters::Tdopp] = .04; - data.genrou[0].parameters[GenrouParameters::Tqopp] = .05; - data.genrou[0].parameters[GenrouParameters::Tqop] = .75; - data.genrou[0].parameters[GenrouParameters::Xd] = 2.1; - data.genrou[0].parameters[GenrouParameters::Xdp] = 0.2; - data.genrou[0].parameters[GenrouParameters::Xdpp] = 0.18; - data.genrou[0].parameters[GenrouParameters::Xq] = 0.5; - data.genrou[0].parameters[GenrouParameters::Xqp] = 0.5; - data.genrou[0].parameters[GenrouParameters::Xqpp] = 0.18; - data.genrou[0].parameters[GenrouParameters::Xl] = 0.15; - data.genrou[0].parameters[GenrouParameters::S10] = 0.; - data.genrou[0].parameters[GenrouParameters::S12] = 0.; + data.genrou[0].input_ports[GenrouInputPorts::pmech] = 1; + data.genrou[0].output_ports[GenrouOutputPorts::speed] = 0; + data.genrou[0].parameters[GenrouParameters::p0] = 1.; + data.genrou[0].parameters[GenrouParameters::q0] = 0.05013; + data.genrou[0].parameters[GenrouParameters::H] = 3.; + data.genrou[0].parameters[GenrouParameters::D] = 0.; + data.genrou[0].parameters[GenrouParameters::Ra] = 0.; + data.genrou[0].parameters[GenrouParameters::Tdop] = 7.; + data.genrou[0].parameters[GenrouParameters::Tdopp] = .04; + data.genrou[0].parameters[GenrouParameters::Tqopp] = .05; + data.genrou[0].parameters[GenrouParameters::Tqop] = .75; + data.genrou[0].parameters[GenrouParameters::Xd] = 2.1; + data.genrou[0].parameters[GenrouParameters::Xdp] = 0.2; + data.genrou[0].parameters[GenrouParameters::Xdpp] = 0.18; + data.genrou[0].parameters[GenrouParameters::Xq] = 0.5; + data.genrou[0].parameters[GenrouParameters::Xqp] = 0.5; + data.genrou[0].parameters[GenrouParameters::Xqpp] = 0.18; + data.genrou[0].parameters[GenrouParameters::Xl] = 0.15; + data.genrou[0].parameters[GenrouParameters::S10] = 0.; + data.genrou[0].parameters[GenrouParameters::S12] = 0.; // Set governor data (Default PW values) data.gov.resize(1); - data.gov[0].ports[Tgov1Ports::speed] = 0; - data.gov[0].ports[Tgov1Ports::pmech] = 1; - data.gov[0].parameters[Tgov1Parameters::R] = 0.05; - data.gov[0].parameters[Tgov1Parameters::Pvmin] = 0.0; - data.gov[0].parameters[Tgov1Parameters::Pvmax] = 1.0; - data.gov[0].parameters[Tgov1Parameters::T1] = 0.5; - data.gov[0].parameters[Tgov1Parameters::T2] = 2.5; - data.gov[0].parameters[Tgov1Parameters::T3] = 7.5; - data.gov[0].parameters[Tgov1Parameters::Dt] = 0.0; + data.gov[0].input_ports[Tgov1InputPorts::speed] = 0; + data.gov[0].output_ports[Tgov1OutputPorts::pmech] = 1; + data.gov[0].parameters[Tgov1Parameters::R] = 0.05; + data.gov[0].parameters[Tgov1Parameters::Pvmin] = 0.0; + data.gov[0].parameters[Tgov1Parameters::Pvmax] = 1.0; + data.gov[0].parameters[Tgov1Parameters::T1] = 0.5; + data.gov[0].parameters[Tgov1Parameters::T2] = 2.5; + data.gov[0].parameters[Tgov1Parameters::T3] = 7.5; + data.gov[0].parameters[Tgov1Parameters::Dt] = 0.0; SystemModel sys(data); sys.allocate(); diff --git a/tests/UnitTests/PhasorDynamics/BranchTests.hpp b/tests/UnitTests/PhasorDynamics/BranchTests.hpp index 4ce11312e..f71669779 100644 --- a/tests/UnitTests/PhasorDynamics/BranchTests.hpp +++ b/tests/UnitTests/PhasorDynamics/BranchTests.hpp @@ -383,13 +383,17 @@ namespace GridKit const ScalarT Vr2{30.0}; const ScalarT Vi2{40.0}; - typename PhasorDynamics::Branch::ModelDataT data; - data.ports[PhasorDynamics::BranchPorts::bus1] = 1; - data.ports[PhasorDynamics::BranchPorts::bus2] = 2; - data.parameters[PhasorDynamics::BranchParameters::R] = R; - data.parameters[PhasorDynamics::BranchParameters::X] = X; - data.parameters[PhasorDynamics::BranchParameters::G] = G; - data.parameters[PhasorDynamics::BranchParameters::B] = B; + using Data = typename PhasorDynamics::Branch::ModelDataT; + using Parameter = typename Data::Parameters; + using Terminal = typename Data::Terminals; + + Data data; + data.terminals[Terminal::bus1] = 1; + data.terminals[Terminal::bus2] = 2; + data.parameters[Parameter::R] = R; + data.parameters[Parameter::X] = X; + data.parameters[Parameter::G] = G; + data.parameters[Parameter::B] = B; PhasorDynamics::Bus data_bus1(Vr1, Vi1); PhasorDynamics::Bus data_bus2(Vr2, Vi2); diff --git a/tests/UnitTests/PhasorDynamics/BusToSignalAdapterTests.hpp b/tests/UnitTests/PhasorDynamics/BusToSignalAdapterTests.hpp index ae4a8fafd..72b2f8a45 100644 --- a/tests/UnitTests/PhasorDynamics/BusToSignalAdapterTests.hpp +++ b/tests/UnitTests/PhasorDynamics/BusToSignalAdapterTests.hpp @@ -71,16 +71,16 @@ namespace GridKit ii_sig.set(&Ii, &ii_index); using namespace GridKit::PhasorDynamics; - constexpr auto VREAL = BusToSignalAdapterInternalVariables::VREAL; - constexpr auto VIMAG = BusToSignalAdapterInternalVariables::VIMAG; - constexpr auto IREAL = BusToSignalAdapterExternalVariables::IREAL; - constexpr auto IIMAG = BusToSignalAdapterExternalVariables::IIMAG; + constexpr auto VR = BusToSignalAdapterOutputPorts::vr; + constexpr auto VI = BusToSignalAdapterOutputPorts::vi; + constexpr auto IR = BusToSignalAdapterInputPorts::ir; + constexpr auto II = BusToSignalAdapterInputPorts::ii; auto adapter = AdapterT(&bus); - adapter.getSignals().template assignSignalNode(&vr_sig); - adapter.getSignals().template assignSignalNode(&vi_sig); - adapter.getSignals().template attachSignalNode(&ir_sig); - adapter.getSignals().template attachSignalNode(&ii_sig); + adapter.getSignals().template assignSignalNode(&vr_sig); + adapter.getSignals().template assignSignalNode(&vi_sig); + adapter.getSignals().template attachSignalNode(&ir_sig); + adapter.getSignals().template attachSignalNode(&ii_sig); adapter.allocate(); success *= (adapter.verify() == 0); success *= (vr_sig.read() == Vr); diff --git a/tests/UnitTests/PhasorDynamics/ExciterSexsPtiTests.hpp b/tests/UnitTests/PhasorDynamics/ExciterSexsPtiTests.hpp index 085ba7416..141cf957e 100644 --- a/tests/UnitTests/PhasorDynamics/ExciterSexsPtiTests.hpp +++ b/tests/UnitTests/PhasorDynamics/ExciterSexsPtiTests.hpp @@ -64,7 +64,7 @@ namespace GridKit auto data = makeTestData(); PhasorDynamics::Exciter::SexsPti exciter(&bus, data); - exciter.getSignals().template assignSignalNode(&efd_node); + exciter.getSignals().template assignSignalNode(&efd_node); exciter.allocate(); efd_node.init(1.2); @@ -111,8 +111,8 @@ namespace GridKit auto data = makeTestData(); PhasorDynamics::Exciter::SexsPti exciter(&bus, data); - exciter.getSignals().template assignSignalNode(&efd_node); - exciter.getSignals().template attachSignalNode(&vs_node); + exciter.getSignals().template assignSignalNode(&efd_node); + exciter.getSignals().template attachSignalNode(&vs_node); exciter.allocate(); efd_node.init(1.2); @@ -188,17 +188,20 @@ namespace GridKit TestOutcome parameterValidation() { + using Data = PhasorDynamics::Exciter::SexsPtiData; + using Parameter = typename Data::Parameters; + TestStatus success = true; PhasorDynamics::Bus bus(1.0, 0.0); auto missing = makeTestData(); - missing.parameters.erase(PhasorDynamics::Exciter::SexsPtiParameters::K); + missing.parameters.erase(Parameter::K); PhasorDynamics::Exciter::SexsPti missing_model(&bus, missing); success *= (missing_model.verify() > 0); - auto invalid = makeTestData(); - invalid.parameters[PhasorDynamics::Exciter::SexsPtiParameters::Tb] = 0.0; + auto invalid = makeTestData(); + invalid.parameters[Parameter::Tb] = 0.0; PhasorDynamics::Exciter::SexsPti invalid_model(&bus, invalid); success *= (invalid_model.verify() > 0); @@ -209,6 +212,9 @@ namespace GridKit { using namespace PhasorDynamics; using namespace PhasorDynamics::Exciter; + using Data = SexsPtiData; + using OutputPort = typename Data::OutputPorts; + using Terminal = typename Data::Terminals; TestStatus success = true; @@ -223,9 +229,9 @@ namespace GridKit data.signal[0].signal_id = 3; data.signal[0].name = "EFD"; - auto exciter = makeTestData(); - exciter.ports[SexsPtiPorts::bus] = 1; - exciter.ports[SexsPtiPorts::efd] = 3; + auto exciter = makeTestData(); + exciter.terminals[Terminal::bus] = 1; + exciter.output_ports[OutputPort::efd] = 3; data.sexspti.push_back(exciter); SystemModel system(data); @@ -235,7 +241,7 @@ namespace GridKit success *= (system.size() == 5); auto missing_efd = data; - missing_efd.sexspti[0].ports.erase(SexsPtiPorts::efd); + missing_efd.sexspti[0].output_ports.erase(OutputPort::efd); SystemModel missing_efd_system(missing_efd); success *= (missing_efd_system.verify() > 0); @@ -246,6 +252,10 @@ namespace GridKit { using namespace PhasorDynamics; using namespace PhasorDynamics::Exciter; + using Data = SexsPtiData; + using InputPort = typename Data::InputPorts; + using OutputPort = typename Data::OutputPorts; + using Terminal = typename Data::Terminals; TestStatus success = true; @@ -262,17 +272,17 @@ namespace GridKit data.signal[1].signal_id = 20; data.signal[1].name = "consumer_efd"; - auto consumer = makeTestData(); - consumer.disambiguation_string = "consumer"; - consumer.ports[SexsPtiPorts::bus] = 1; - consumer.ports[SexsPtiPorts::efd] = 20; - consumer.ports[SexsPtiPorts::vs] = 10; + auto consumer = makeTestData(); + consumer.disambiguation_string = "consumer"; + consumer.terminals[Terminal::bus] = 1; + consumer.output_ports[OutputPort::efd] = 20; + consumer.input_ports[InputPort::vs] = 10; data.sexspti.push_back(consumer); - auto source = makeTestData(); - source.disambiguation_string = "source"; - source.ports[SexsPtiPorts::bus] = 1; - source.ports[SexsPtiPorts::efd] = 10; + auto source = makeTestData(); + source.disambiguation_string = "source"; + source.terminals[Terminal::bus] = 1; + source.output_ports[OutputPort::efd] = 10; data.sexspti.push_back(source); SystemModel system(data); diff --git a/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp index d956ba9f3..b3d456e51 100644 --- a/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp +++ b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp @@ -38,12 +38,12 @@ namespace GridKit static GenClassicalDataT makeGenClassicalData() { using Parameter = typename GenClassicalDataT::Parameters; - using Port = typename GenClassicalDataT::Ports; + using Terminal = typename GenClassicalDataT::Terminals; GenClassicalDataT data; data.device_class = "GenClassical"; data.disambiguation_string = "1"; - data.ports[Port::bus] = 1; + data.terminals[Terminal::bus] = 1; data.parameters[Parameter::p0] = RealT{1.0}; data.parameters[Parameter::q0] = RealT{0.0}; data.parameters[Parameter::H] = RealT{0.5}; diff --git a/tests/UnitTests/PhasorDynamics/GenrouTests.hpp b/tests/UnitTests/PhasorDynamics/GenrouTests.hpp index 62bf255b2..611359cbf 100644 --- a/tests/UnitTests/PhasorDynamics/GenrouTests.hpp +++ b/tests/UnitTests/PhasorDynamics/GenrouTests.hpp @@ -29,12 +29,12 @@ namespace GridKit static GenrouDataT makeGenrouData() { using Parameter = typename GenrouDataT::Parameters; - using Port = typename GenrouDataT::Ports; + using Terminal = typename GenrouDataT::Terminals; GenrouDataT data; data.device_class = "Genrou"; data.disambiguation_string = "1"; - data.ports[Port::bus] = 1; + data.terminals[Terminal::bus] = 1; data.parameters[Parameter::p0] = RealT{1.0}; data.parameters[Parameter::q0] = RealT{0.05013}; data.parameters[Parameter::H] = RealT{3.0}; diff --git a/tests/UnitTests/PhasorDynamics/GensalTests.hpp b/tests/UnitTests/PhasorDynamics/GensalTests.hpp index a382e3172..5fadac420 100644 --- a/tests/UnitTests/PhasorDynamics/GensalTests.hpp +++ b/tests/UnitTests/PhasorDynamics/GensalTests.hpp @@ -30,12 +30,12 @@ namespace GridKit static GensalDataT makeGensalData() { using Parameter = typename GensalDataT::Parameters; - using Port = typename GensalDataT::Ports; + using Terminal = typename GensalDataT::Terminals; GensalDataT data; data.device_class = "Gensal"; data.disambiguation_string = "1"; - data.ports[Port::bus] = 1; + data.terminals[Terminal::bus] = 1; data.parameters[Parameter::p0] = RealT{1.0}; data.parameters[Parameter::q0] = RealT{0.05013}; data.parameters[Parameter::H] = RealT{3.0}; diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp index 3d9d40eb0..13066c6c6 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -63,9 +63,10 @@ namespace GridKit { TestStatus success = true; - using BusType = PhasorDynamics::BusData::BusType; - using GenrouParameters = PhasorDynamics::GenrouData::Parameters; - using GenrouPorts = PhasorDynamics::GenrouData::Ports; + using BusType = PhasorDynamics::BusData::BusType; + using GenrouDataT = PhasorDynamics::GenrouData; + using Parameter = typename GenrouDataT::Parameters; + using Terminal = typename GenrouDataT::Terminals; PhasorDynamics::BusData busdata; busdata.bus_id = 0; @@ -74,26 +75,26 @@ namespace GridKit busdata.Vi0 = 0.0; PhasorDynamics::GenrouData gendata; - gendata.ports[GenrouPorts::bus] = 0; - - gendata.parameters[GenrouParameters::p0] = 1.; - gendata.parameters[GenrouParameters::q0] = 0.05013; - gendata.parameters[GenrouParameters::H] = 3.; - gendata.parameters[GenrouParameters::D] = 0.; - gendata.parameters[GenrouParameters::Ra] = 0.; - gendata.parameters[GenrouParameters::Tdop] = 7.; - gendata.parameters[GenrouParameters::Tdopp] = .04; - gendata.parameters[GenrouParameters::Tqopp] = .05; - gendata.parameters[GenrouParameters::Tqop] = .75; - gendata.parameters[GenrouParameters::Xd] = 2.1; - gendata.parameters[GenrouParameters::Xdp] = 0.2; - gendata.parameters[GenrouParameters::Xdpp] = 0.18; - gendata.parameters[GenrouParameters::Xq] = 0.5; - gendata.parameters[GenrouParameters::Xqp] = 0.5; - gendata.parameters[GenrouParameters::Xqpp] = 0.18; - gendata.parameters[GenrouParameters::Xl] = 0.15; - gendata.parameters[GenrouParameters::S10] = 0.; - gendata.parameters[GenrouParameters::S12] = 0.; + gendata.terminals[Terminal::bus] = 0; + + gendata.parameters[Parameter::p0] = 1.; + gendata.parameters[Parameter::q0] = 0.05013; + gendata.parameters[Parameter::H] = 3.; + gendata.parameters[Parameter::D] = 0.; + gendata.parameters[Parameter::Ra] = 0.; + gendata.parameters[Parameter::Tdop] = 7.; + gendata.parameters[Parameter::Tdopp] = .04; + gendata.parameters[Parameter::Tqopp] = .05; + gendata.parameters[Parameter::Tqop] = .75; + gendata.parameters[Parameter::Xd] = 2.1; + gendata.parameters[Parameter::Xdp] = 0.2; + gendata.parameters[Parameter::Xdpp] = 0.18; + gendata.parameters[Parameter::Xq] = 0.5; + gendata.parameters[Parameter::Xqp] = 0.5; + gendata.parameters[Parameter::Xqpp] = 0.18; + gendata.parameters[Parameter::Xl] = 0.15; + gendata.parameters[Parameter::S10] = 0.; + gendata.parameters[Parameter::S12] = 0.; PhasorDynamics::Bus bus(busdata); PhasorDynamics::SignalNode pmech; @@ -159,9 +160,10 @@ namespace GridKit { TestStatus success = true; - using BusType = typename PhasorDynamics::BusData::BusType; - using GenrouParameters = typename PhasorDynamics::GenrouData::Parameters; - using GenrouPorts = typename PhasorDynamics::GenrouData::Ports; + using BusType = typename PhasorDynamics::BusData::BusType; + using GenrouDataT = PhasorDynamics::GenrouData; + using Parameter = typename GenrouDataT::Parameters; + using Terminal = typename GenrouDataT::Terminals; PhasorDynamics::BusData busdata; busdata.bus_id = 0; @@ -170,26 +172,26 @@ namespace GridKit busdata.Vi0 = 0.0; PhasorDynamics::GenrouData gendata; - gendata.ports[GenrouPorts::bus] = 0; - - gendata.parameters[GenrouParameters::p0] = 1.; - gendata.parameters[GenrouParameters::q0] = 0.05013; - gendata.parameters[GenrouParameters::H] = 3.; - gendata.parameters[GenrouParameters::D] = 0.; - gendata.parameters[GenrouParameters::Ra] = 0.; - gendata.parameters[GenrouParameters::Tdop] = 7.; - gendata.parameters[GenrouParameters::Tdopp] = .04; - gendata.parameters[GenrouParameters::Tqopp] = .05; - gendata.parameters[GenrouParameters::Tqop] = .75; - gendata.parameters[GenrouParameters::Xd] = 2.1; - gendata.parameters[GenrouParameters::Xdp] = 0.2; - gendata.parameters[GenrouParameters::Xdpp] = 0.18; - gendata.parameters[GenrouParameters::Xq] = 0.5; - gendata.parameters[GenrouParameters::Xqp] = 0.5; - gendata.parameters[GenrouParameters::Xqpp] = 0.18; - gendata.parameters[GenrouParameters::Xl] = 0.15; - gendata.parameters[GenrouParameters::S10] = 0.; - gendata.parameters[GenrouParameters::S12] = 0.; + gendata.terminals[Terminal::bus] = 0; + + gendata.parameters[Parameter::p0] = 1.; + gendata.parameters[Parameter::q0] = 0.05013; + gendata.parameters[Parameter::H] = 3.; + gendata.parameters[Parameter::D] = 0.; + gendata.parameters[Parameter::Ra] = 0.; + gendata.parameters[Parameter::Tdop] = 7.; + gendata.parameters[Parameter::Tdopp] = .04; + gendata.parameters[Parameter::Tqopp] = .05; + gendata.parameters[Parameter::Tqop] = .75; + gendata.parameters[Parameter::Xd] = 2.1; + gendata.parameters[Parameter::Xdp] = 0.2; + gendata.parameters[Parameter::Xdpp] = 0.18; + gendata.parameters[Parameter::Xq] = 0.5; + gendata.parameters[Parameter::Xqp] = 0.5; + gendata.parameters[Parameter::Xqpp] = 0.18; + gendata.parameters[Parameter::Xl] = 0.15; + gendata.parameters[Parameter::S10] = 0.; + gendata.parameters[Parameter::S12] = 0.; PhasorDynamics::Bus bus(busdata); PhasorDynamics::SignalNode pmech; @@ -239,9 +241,10 @@ namespace GridKit { TestStatus success = true; - using BusType = PhasorDynamics::BusData::BusType; - using GenrouParameters = PhasorDynamics::GenrouData::Parameters; - using GenrouPorts = PhasorDynamics::GenrouData::Ports; + using BusType = PhasorDynamics::BusData::BusType; + using GenrouDataT = PhasorDynamics::GenrouData; + using Parameter = typename GenrouDataT::Parameters; + using Terminal = typename GenrouDataT::Terminals; PhasorDynamics::BusData busdata; busdata.bus_id = 0; @@ -250,26 +253,26 @@ namespace GridKit busdata.Vi0 = 0.0; PhasorDynamics::GenrouData gendata; - gendata.ports[GenrouPorts::bus] = 0; - - gendata.parameters[GenrouParameters::p0] = 1.; - gendata.parameters[GenrouParameters::q0] = 0.05013; - gendata.parameters[GenrouParameters::H] = 3.; - gendata.parameters[GenrouParameters::D] = 0.; - gendata.parameters[GenrouParameters::Ra] = 0.; - gendata.parameters[GenrouParameters::Tdop] = 7.; - gendata.parameters[GenrouParameters::Tdopp] = .04; - gendata.parameters[GenrouParameters::Tqopp] = .05; - gendata.parameters[GenrouParameters::Tqop] = .75; - gendata.parameters[GenrouParameters::Xd] = 2.1; - gendata.parameters[GenrouParameters::Xdp] = 0.2; - gendata.parameters[GenrouParameters::Xdpp] = 0.18; - gendata.parameters[GenrouParameters::Xq] = 0.5; - gendata.parameters[GenrouParameters::Xqp] = 0.5; - gendata.parameters[GenrouParameters::Xqpp] = 0.18; - gendata.parameters[GenrouParameters::Xl] = 0.15; - gendata.parameters[GenrouParameters::S10] = 0.; - gendata.parameters[GenrouParameters::S12] = 0.; + gendata.terminals[Terminal::bus] = 0; + + gendata.parameters[Parameter::p0] = 1.; + gendata.parameters[Parameter::q0] = 0.05013; + gendata.parameters[Parameter::H] = 3.; + gendata.parameters[Parameter::D] = 0.; + gendata.parameters[Parameter::Ra] = 0.; + gendata.parameters[Parameter::Tdop] = 7.; + gendata.parameters[Parameter::Tdopp] = .04; + gendata.parameters[Parameter::Tqopp] = .05; + gendata.parameters[Parameter::Tqop] = .75; + gendata.parameters[Parameter::Xd] = 2.1; + gendata.parameters[Parameter::Xdp] = 0.2; + gendata.parameters[Parameter::Xdpp] = 0.18; + gendata.parameters[Parameter::Xq] = 0.5; + gendata.parameters[Parameter::Xqp] = 0.5; + gendata.parameters[Parameter::Xqpp] = 0.18; + gendata.parameters[Parameter::Xl] = 0.15; + gendata.parameters[Parameter::S10] = 0.; + gendata.parameters[Parameter::S12] = 0.; /// Jacobian via DependencyTracking std::vector dependency_tracking_jacobian = DependencyTrackingJacobian(busdata, gendata); diff --git a/tests/UnitTests/PhasorDynamics/StabilizerIeeestTests.hpp b/tests/UnitTests/PhasorDynamics/StabilizerIeeestTests.hpp index 0c1c77d66..4e25c0ea4 100644 --- a/tests/UnitTests/PhasorDynamics/StabilizerIeeestTests.hpp +++ b/tests/UnitTests/PhasorDynamics/StabilizerIeeestTests.hpp @@ -65,8 +65,8 @@ namespace GridKit PhasorDynamics::Stabilizer::Ieeest stab(data); // Wire: stabilizer reads u_node as input, writes vss_node as output - stab.getSignals().template attachSignalNode(&u_node); - stab.getSignals().template assignSignalNode(&vss_node); + stab.getSignals().template attachSignalNode(&u_node); + stab.getSignals().template assignSignalNode(&vss_node); stab.allocate(); success *= (stab.verify() == 0); @@ -115,8 +115,8 @@ namespace GridKit auto data = makeTestData(); PhasorDynamics::Stabilizer::Ieeest stab(data); - stab.getSignals().template attachSignalNode(&u_node); - stab.getSignals().template assignSignalNode(&vss_node); + stab.getSignals().template attachSignalNode(&u_node); + stab.getSignals().template assignSignalNode(&vss_node); stab.allocate(); stab.initialize(); @@ -205,8 +205,8 @@ namespace GridKit vss_node.set(&vss_value, &vss_index); PhasorDynamics::Stabilizer::Ieeest stab(ieeestdata); - stab.getSignals().template attachSignalNode(&u_node); - stab.getSignals().template assignSignalNode(&vss_node); + stab.getSignals().template attachSignalNode(&u_node); + stab.getSignals().template assignSignalNode(&vss_node); stab.allocate(); stab.initialize(); @@ -296,8 +296,8 @@ namespace GridKit vss_node.set(&vss_value, &vss_index); PhasorDynamics::Stabilizer::Ieeest stab(ieeestdata); - stab.getSignals().template attachSignalNode(&u_node); - stab.getSignals().template assignSignalNode(&vss_node); + stab.getSignals().template attachSignalNode(&u_node); + stab.getSignals().template assignSignalNode(&vss_node); stab.allocate(); stab.initialize(); diff --git a/tests/UnitTests/PhasorDynamics/SystemTests.hpp b/tests/UnitTests/PhasorDynamics/SystemTests.hpp index 94bd68412..dda79c4f4 100644 --- a/tests/UnitTests/PhasorDynamics/SystemTests.hpp +++ b/tests/UnitTests/PhasorDynamics/SystemTests.hpp @@ -22,7 +22,7 @@ namespace GridKit namespace Testing { using GridKit::PhasorDynamics::BranchParameters; - using GridKit::PhasorDynamics::BranchPorts; + using GridKit::PhasorDynamics::BranchTerminals; template class SystemTests @@ -75,12 +75,12 @@ namespace GridKit data.branch.resize(1); // Branch 0-1 - data.branch[0].ports[BranchPorts::bus1] = data.bus[0].bus_id; - data.branch[0].ports[BranchPorts::bus2] = data.bus[1].bus_id; - data.branch[0].parameters[BranchParameters::R] = 2.0; - data.branch[0].parameters[BranchParameters::X] = 4.0; - data.branch[0].parameters[BranchParameters::G] = 0.2; - data.branch[0].parameters[BranchParameters::B] = 1.2; + data.branch[0].terminals[BranchTerminals::bus1] = data.bus[0].bus_id; + data.branch[0].terminals[BranchTerminals::bus2] = data.bus[1].bus_id; + data.branch[0].parameters[BranchParameters::R] = 2.0; + data.branch[0].parameters[BranchParameters::X] = 4.0; + data.branch[0].parameters[BranchParameters::G] = 0.2; + data.branch[0].parameters[BranchParameters::B] = 1.2; // Create an empty system model system = new PhasorDynamics::SystemModel(data); @@ -198,12 +198,12 @@ namespace GridKit data.branch.resize(1); // Branch 0-1 - data.branch[0].ports[BranchPorts::bus1] = data.bus[0].bus_id; - data.branch[0].ports[BranchPorts::bus2] = data.bus[1].bus_id; - data.branch[0].parameters[BranchParameters::R] = 2.0; - data.branch[0].parameters[BranchParameters::X] = 4.0; - data.branch[0].parameters[BranchParameters::G] = 0.2; - data.branch[0].parameters[BranchParameters::B] = 1.2; + data.branch[0].terminals[BranchTerminals::bus1] = data.bus[0].bus_id; + data.branch[0].terminals[BranchTerminals::bus2] = data.bus[1].bus_id; + data.branch[0].parameters[BranchParameters::R] = 2.0; + data.branch[0].parameters[BranchParameters::X] = 4.0; + data.branch[0].parameters[BranchParameters::G] = 0.2; + data.branch[0].parameters[BranchParameters::B] = 1.2; // Jacobian via DependencyTracking std::vector dependency_tracking_jacobian = DependencyTrackingJacobian(data); diff --git a/tests/UnitTests/Utilities/CaseFormatTests.hpp b/tests/UnitTests/Utilities/CaseFormatTests.hpp index d1c3475ef..bdcb9304a 100644 --- a/tests/UnitTests/Utilities/CaseFormatTests.hpp +++ b/tests/UnitTests/Utilities/CaseFormatTests.hpp @@ -116,8 +116,8 @@ namespace GridKit success *= std::get(result.branch[0].parameters[BranchParameters::B]) == 0.0; success *= std::get(result.branch[0].parameters[BranchParameters::tap]) == 1.05; success *= std::get(result.branch[0].parameters[BranchParameters::phase]) == 0.1; - success *= result.branch[0].ports[BranchPorts::bus1] == 1; - success *= result.branch[0].ports[BranchPorts::bus2] == 2; + success *= result.branch[0].terminals[BranchTerminals::bus1] == 1; + success *= result.branch[0].terminals[BranchTerminals::bus2] == 2; success *= result.branch[0].disambiguation_string == "1"; success *= result.branch[0].monitored_variables.empty(); @@ -139,7 +139,7 @@ namespace GridKit success *= std::get(result.genrou[0].parameters[GenrouParameters::Xl]) == 0.15; success *= std::get(result.genrou[0].parameters[GenrouParameters::S10]) == 0.0; success *= std::get(result.genrou[0].parameters[GenrouParameters::S12]) == 0.0; - success *= result.genrou[0].ports[GenrouPorts::bus] == 1; + success *= result.genrou[0].terminals[GenrouTerminals::bus] == 1; success *= result.genrou[0].disambiguation_string == "1"; success *= result.genrou[0].monitored_variables.contains(GenrouMonitorableVariables::delta); success *= result.genrou[0].monitored_variables.contains(GenrouMonitorableVariables::omega); @@ -148,7 +148,7 @@ namespace GridKit success *= std::get(result.gensal[0].parameters[GensalParameters::q0]) == 0.05013; success *= std::get(result.gensal[0].parameters[GensalParameters::Xd]) == 2.1; success *= std::get(result.gensal[0].parameters[GensalParameters::Xq]) == 0.5; - success *= result.gensal[0].ports[GensalPorts::bus] == 1; + success *= result.gensal[0].terminals[GensalTerminals::bus] == 1; success *= result.gensal[0].disambiguation_string == "2"; success *= result.gensal[0].monitored_variables.contains(GensalMonitorableVariables::delta); success *= result.gensal[0].monitored_variables.contains(GensalMonitorableVariables::omega); @@ -156,7 +156,7 @@ namespace GridKit success *= std::get(result.bus_fault[0].parameters[BusFaultParameters::R]) == 0.0; success *= std::get(result.bus_fault[0].parameters[BusFaultParameters::X]) == 1e-3; success *= !std::get(result.bus_fault[0].parameters[BusFaultParameters::state0]); - success *= result.bus_fault[0].ports[BusFaultPorts::bus] == 1; + success *= result.bus_fault[0].terminals[BusFaultTerminals::bus] == 1; success *= result.bus_fault[0].disambiguation_string == "1"; success *= result.bus_fault[0].monitored_variables.empty(); @@ -249,8 +249,8 @@ namespace GridKit success *= std::get(result.branch[0].parameters[BranchParameters::B]) == 0.0; success *= std::get(result.branch[0].parameters[BranchParameters::tap]) == 1.05; success *= std::get(result.branch[0].parameters[BranchParameters::phase]) == 0.1; - success *= result.branch[0].ports[BranchPorts::bus1] == 1; - success *= result.branch[0].ports[BranchPorts::bus2] == 2; + success *= result.branch[0].terminals[BranchTerminals::bus1] == 1; + success *= result.branch[0].terminals[BranchTerminals::bus2] == 2; success *= result.branch[0].disambiguation_string == "BR1"; success *= result.branch[0].monitored_variables.empty(); @@ -272,10 +272,10 @@ namespace GridKit success *= std::get(result.genrou[0].parameters[GenrouParameters::Xl]) == 0.15; success *= std::get(result.genrou[0].parameters[GenrouParameters::S10]) == 0.0; success *= std::get(result.genrou[0].parameters[GenrouParameters::S12]) == 0.0; - success *= result.genrou[0].ports[GenrouPorts::bus] == 1; - success *= result.genrou[0].ports[GenrouPorts::speed] == 1; - success *= result.genrou[0].ports[GenrouPorts::pmech] == 2; - success *= result.genrou[0].ports[GenrouPorts::efd] == 3; + success *= result.genrou[0].terminals[GenrouTerminals::bus] == 1; + success *= result.genrou[0].output_ports[GenrouOutputPorts::speed] == 1; + success *= result.genrou[0].input_ports[GenrouInputPorts::pmech] == 2; + success *= result.genrou[0].input_ports[GenrouInputPorts::efd] == 3; success *= result.genrou[0].disambiguation_string == "DV1"; success *= result.genrou[0].monitored_variables.contains(GenrouMonitorableVariables::delta); success *= result.genrou[0].monitored_variables.contains(GenrouMonitorableVariables::omega); @@ -287,9 +287,9 @@ namespace GridKit success *= std::get(result.gov[0].parameters[Governor::Tgov1Parameters::Pvmax]) == 0; success *= std::get(result.gov[0].parameters[Governor::Tgov1Parameters::Pvmin]) == 1; success *= std::get(result.gov[0].parameters[Governor::Tgov1Parameters::Dt]) == 0; - success *= result.gov[0].ports[Governor::Tgov1Ports::bus] == 1; - success *= result.gov[0].ports[Governor::Tgov1Ports::speed] == 1; - success *= result.gov[0].ports[Governor::Tgov1Ports::pmech] == 2; + success *= result.gov[0].terminals[Governor::Tgov1Terminals::bus] == 1; + success *= result.gov[0].input_ports[Governor::Tgov1InputPorts::speed] == 1; + success *= result.gov[0].output_ports[Governor::Tgov1OutputPorts::pmech] == 2; success *= result.gov[0].disambiguation_string == "DV2"; success *= std::get(result.exciter[0].parameters[Exciter::Ieeet1Parameters::Tr]) == 0.001; @@ -306,9 +306,9 @@ namespace GridKit success *= std::get(result.exciter[0].parameters[Exciter::Ieeet1Parameters::Se1]) == 0.04; success *= std::get(result.exciter[0].parameters[Exciter::Ieeet1Parameters::Se2]) == 0.33; success *= std::get(result.exciter[0].parameters[Exciter::Ieeet1Parameters::Ispdlim]) == 0.0; - success *= result.exciter[0].ports[Exciter::Ieeet1Ports::bus] == 1; - success *= result.exciter[0].ports[Exciter::Ieeet1Ports::speed] == 1; - success *= result.exciter[0].ports[Exciter::Ieeet1Ports::efd] == 3; + success *= result.exciter[0].terminals[Exciter::Ieeet1Terminals::bus] == 1; + success *= result.exciter[0].input_ports[Exciter::Ieeet1InputPorts::speed] == 1; + success *= result.exciter[0].output_ports[Exciter::Ieeet1OutputPorts::efd] == 3; success *= result.exciter[0].disambiguation_string == "DV3"; success *= std::get(result.sexspti[0].parameters[Exciter::SexsPtiParameters::Ta]) == 0.1; @@ -317,14 +317,14 @@ namespace GridKit success *= std::get(result.sexspti[0].parameters[Exciter::SexsPtiParameters::K]) == 10.0; success *= std::get(result.sexspti[0].parameters[Exciter::SexsPtiParameters::Efdmax]) == 5.0; success *= std::get(result.sexspti[0].parameters[Exciter::SexsPtiParameters::Efdmin]) == -5.0; - success *= result.sexspti[0].ports[Exciter::SexsPtiPorts::bus] == 1; - success *= result.sexspti[0].ports[Exciter::SexsPtiPorts::efd] == 3; + success *= result.sexspti[0].terminals[Exciter::SexsPtiTerminals::bus] == 1; + success *= result.sexspti[0].output_ports[Exciter::SexsPtiOutputPorts::efd] == 3; success *= result.sexspti[0].disambiguation_string == "DV4"; success *= std::get(result.bus_fault[0].parameters[BusFaultParameters::R]) == 0.0; success *= std::get(result.bus_fault[0].parameters[BusFaultParameters::X]) == 1e-3; success *= !std::get(result.bus_fault[0].parameters[BusFaultParameters::state0]); - success *= result.bus_fault[0].ports[BusFaultPorts::bus] == 1; + success *= result.bus_fault[0].terminals[BusFaultTerminals::bus] == 1; success *= result.bus_fault[0].disambiguation_string == "1"; success *= result.bus_fault[0].monitored_variables.empty();