18 std::numeric_limits<double>::infinity())),
21 SPDLOG_LOGGER_INFO(
mSLog,
"Create {} of type {}", **
mName, this->
type());
36 mNominalVoltageEnd1 = nomV1;
37 mNominalVoltageEnd2 = nomV2;
41 mP2 = -1 * std::sqrt(Pref * Pref + Q1ref * Q1ref - Q2ref * Q2ref);
51 mSubLoadSide1->connect({
mTerminals[0]->node()});
52 mSubLoadSide2->connect({
mTerminals[1]->node()});
64 mSubLoadSide1->setParameters(**
mPref, **
mQ1ref, mNominalVoltageEnd1);
65 mSubLoadSide2->setParameters(mP2, **
mQ2ref, mNominalVoltageEnd2);
68 SPDLOG_LOGGER_ERROR(
mSLog,
69 "SST {}: non-finite secondary-side power {} (or "
70 "initialized before setting parameters)",
74 if ((**
mPref * mP2) > 0) {
75 throw std::invalid_argument(
76 "power at primary and secondary sides should be opposite");
79 SPDLOG_LOGGER_INFO(
mSLog,
80 "\n--- Initialization from powerflow ---"
81 "\nTerminal 0 power flow: {:s} VA"
82 "\nTerminal 1 power flow: {:s} VA"
83 "\n--- Initialization from powerflow finished ---",
89 Real baseApparentPower,
Real baseOmega) {
90 mPref_perUnit = **
mPref / baseApparentPower;
91 mP2_perUnit = mP2 / baseApparentPower;
92 mQ1ref_perUnit = **
mQ1ref / baseApparentPower;
93 mQ2ref_perUnit = **
mQ2ref / baseApparentPower;
94 mSubLoadSide1->calculatePerUnitParameters(baseApparentPower, baseOmega);
95 mSubLoadSide2->calculatePerUnitParameters(baseApparentPower, baseOmega);
98 "\n#### Calculate Per Unit Parameters for {}"
99 "\nTerminal 0 power flow: {:s} p.u."
100 "\nTerminal 1 power flow: {:s} p.u."
101 "\n#### Calculate Per Unit Parameters finished ---",
111 "\n#### get nodal injection for primary side"
112 "\nreturned {:s} p.u.",
114 return Complex(mPref_perUnit, mQ1ref_perUnit);
118 "\n#### get nodal injection for secondary side"
119 "\nreturned {:s} p.u.",
121 return Complex(mP2_perUnit, mQ2ref_perUnit);
123 throw std::invalid_argument(
124 "Failed to process nodal power injection of Solid State Transformer" +
void addMNASubComponent(typename SimPowerComp< Complex >::Ptr subc, MNA_SUBCOMP_TASK_ORDER preStepOrder, MNA_SUBCOMP_TASK_ORDER postStepOrder, Bool contributeToRightVector)
CompositePowerComp(String uid, String name, Bool hasPreStep, Bool hasPostStep, Logger::Level logLevel)
const Attribute< String >::Ptr mName
Human readable name.
String uid()
Returns unique id.
String type()
Get component type (cross-platform)
AttributeList::Ptr mAttributes
Attribute List.
spdlog::level::level_enum Level
static String complexToString(const Complex &num)
static bool isFinite(Real value)
const Attribute< MatrixVar< Complex > >::Ptr mIntfCurrent
SimTerminal< Complex >::List mTerminals
SimNode< Complex >::Ptr node(UInt index)
const Attribute< MatrixVar< Complex > >::Ptr mIntfVoltage
std::shared_ptr< SimPowerComp< VarType > > Ptr
void setTerminalNumber(UInt num)
std::shared_ptr< TopologicalNode > Ptr
Logger::Level mLogLevel
Component logger control for internal variables.
Logger::Log mSLog
Component logger.
static std::shared_ptr< SolidStateTransformer > make(Args &&...args)
std::complex< Real > Complex