17 Matrix dqvector = Tdq * fabc;
25 Matrix Tdq = Matrix::Zero(2, 3);
26 Real k = sqrt(2. / 3.);
27 Tdq << k * cos(theta), k * cos(theta - 2. *
M_PI / 3.),
28 k * cos(theta + 2. *
M_PI / 3.), -k * sin(theta),
29 -k * sin(theta - 2. *
M_PI / 3.), -k * sin(theta + 2. *
M_PI / 3.);
78 SPDLOG_LOGGER_INFO(
mSLog,
79 "\n--- Parameters ---"
100 SPDLOG_LOGGER_INFO(
mSLog,
101 "\n--- Parameters ---"
103 "\ninductance: {:f}",
127 SPDLOG_LOGGER_INFO(
mSLog,
128 "\n--- Parameters ---"
130 "\ninductance: {:f}",
173 MatrixComp intfVoltageComplex = MatrixComp::Zero(3, 1);
174 MatrixComp intfCurrentComplex = MatrixComp::Zero(3, 1);
180 intfCurrentComplex(0, 0) =
192 **
mEp = intfVoltageComplex(0, 0) -
mImpedance * intfCurrentComplex(0, 0);
201 std::conj(-intfCurrentComplex(0, 0)))
221 SPDLOG_LOGGER_INFO(
mSLog,
222 "\n--- Initialize according to powerflow ---"
223 "\nTerminal 0 voltage: {:e}<{:e}"
224 "\nVoltage behind reactance: {:e}<{:e}"
225 "\ninitial electrical power: {:e}+j{:e}"
226 "\nactive electrical power: {:e}"
227 "\nmechanical power: {:e}"
228 "\n--- End of powerflow initialization ---",
242 intfVoltageDQ(1, 0) * intfCurrentDQ(1, 0));
274 mMnaTasks.push_back(std::make_shared<AddBStep>(*
this));
289 attributeDependencies.push_back(leftVector);
304 **mGenerator.mRightVector = **mGenerator.mSubInductor->mRightVector +
305 **mGenerator.mSubVoltageSource->mRightVector;
315 const Matrix &leftVector) {
317 (**mIntfVoltage)(0, 0) =
319 (**mIntfVoltage)(1, 0) =
321 (**mIntfVoltage)(2, 0) =
326 const Matrix &leftVector) {
AttributePointer< Attribute< T > > Ptr
Real mNomFreq
nominal frequency fn [Hz]
Real mTimeStep
Simulation time step.
Real mLmd
d-axis mutual inductance Lmd [H]
SynchronGenerator(CPS::AttributeList::Ptr attributeList)
Constructor.
Real mLlfd
field leakage inductance Llfd [H]
const Attribute< Real >::Ptr mMechPower
mechanical Power Pm [W]
Real mNomVolt
nominal voltage Vn [V] (phase-to-phase RMS)
Real mBase_L
base stator inductance
Real mBase_Z
base stator impedance
const Attribute< Real >::Ptr mRs
stator resistance Rs [Ohm]
const Attribute< Real >::Ptr mElecActivePower
Active part of the electrical power.
ParameterType mParameterType
StateType mStateType
specifies if the machine parameters are transformed to per unit
Real mNomOmega
nominal angular frequency wn [Hz]
const Attribute< Real >::Ptr mLl
leakage inductance Ll [H]
void setBaseParameters(Real nomPower, Real nomVolt, Real nomFreq)
Real mLfd
field inductance Lfd [H]
const Attribute< Real >::Ptr mLd
d-axis inductance Ld [H]
Real mNomPower
nominal power Pn [VA]
const Attribute< Real >::Ptr mOmMech
rotor speed omega_r
Real calcHfromJ(Real J, Real omegaNominal, Int polePairNumber)
const Attribute< Real >::Ptr mInertia
inertia constant H [s] for per unit or moment of inertia J [kg*m^2]
void addMNASubComponent(typename SimPowerComp< Real >::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)
void execute(Real time, Int timeStepCount)
void setStandardParametersPU(Real nomPower, Real nomVolt, Real nomFreq, Real Xpd, Real inertia, Real Rs=0, Real D=0)
Initializes the machine parameters.
void mnaParentAddPostStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes, Attribute< Matrix >::Ptr &leftVector) override
void mnaParentAddPreStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes) override
void mnaParentInitialize(Real omega, Real timeStep, Attribute< Matrix >::Ptr leftVector) override
Initializes variables of component.
Real mThetaN
Nominal system angle.
void setStandardParametersSI(Real nomPower, Real nomVolt, Real nomFreq, Int polePairNumber, Real Rs, Real Lpd, Real inertiaJ, Real Kd=0)
Initializes the machine parameters.
void mnaCompUpdateCurrent(const Matrix &leftVector) override
Real mKd
Absolute damping coefficient.
std::shared_ptr< VoltageSource > mSubVoltageSource
Inner voltage source that represents the generator.
SimPowerComp< Real >::Ptr clone(String name) override
Returns a modified copy of the component with the given suffix added to the name and without.
void mnaParentPostStep(Real time, Int timeStepCount, Attribute< Matrix >::Ptr &leftVector) override
Retrieves calculated voltage from simulation for next step.
SynchronGeneratorTrStab(String uid, String name, Logger::Level logLevel=Logger::Level::off)
Matrix getParkTransformMatrixPowerInvariant(Real theta)
const Attribute< Real >::Ptr mRefDelta
const Attribute< Complex >::Ptr mEp
True after createSubComponents() runs; prevents double-construction.
void mnaCompUpdateVoltage(const Matrix &leftVector) override
Matrix parkTransformPowerInvariant(Real theta, const Matrix &fabc)
void mnaParentPreStep(Real time, Int timeStepCount) override
Complex mImpedance
Equivalent impedance for loadflow calculation.
std::shared_ptr< Inductor > mSubInductor
Inner inductor that represents the generator impedance.
void initializeParentFromNodesAndTerminals(Real frequency) override
const Attribute< Real >::Ptr mEp_abs
const Attribute< Real >::Ptr mDelta_p
Angle by which the emf Ep is leading the terminal voltage.
void setInitialValues(Complex elecPower, Real mechPower)
void createSubComponents() override
Constructs and registers MNA subcomponents without emf value; idempotent.
void setFundamentalParametersPU(Real nomPower, Real nomVolt, Real nomFreq, Real Ll, Real Lmd, Real Llfd, Real inertia, Real D=0)
Initializes the machine parameters.
Real mLpd
Absolute d-axis transient inductance.
const Attribute< Real >::Ptr mRefOmega
const Attribute< Real >::Ptr mEp_phase
Real mXpd
Absolute d-axis transient reactance X'd.
const Attribute< String >::Ptr mName
Human readable name.
String uid()
Returns unique id.
AttributeList::Ptr mAttributes
Attribute List.
spdlog::level::level_enum Level
static Real realFromVectorElement(const Matrix &mat, Matrix::Index row)
static Real phaseDeg(Complex value)
static Real phase(Complex value)
static Matrix singlePhaseParameterToThreePhase(Real parameter)
To convert single phase parameters to symmetrical three phase ones.
static Real abs(Complex value)
static MatrixComp singlePhaseVariableToThreePhase(Complex var_1ph)
To convert single phase complex variables (voltages, currents) to symmetrical three phase ones.
UInt matrixNodeIndex(UInt nodeIndex)
const Attribute< MatrixVar< Real > >::Ptr mIntfCurrent
SimTerminal< Real >::Ptr terminal(UInt index)
void setVirtualNodeNumber(UInt num)
const Attribute< MatrixVar< Real > >::Ptr mIntfVoltage
std::shared_ptr< SimPowerComp< VarType > > Ptr
SimNode< Real >::List mVirtualNodes
Complex initialSingleVoltage(UInt index)
void setTerminalNumber(UInt num)
Logger::Level mLogLevel
Component logger control for internal variables.
Logger::Log mSLog
Component logger.
static std::shared_ptr< SynchronGeneratorTrStab > make(Args &&...args)
#define PEAK1PH_TO_RMS3PH
Eigen::Matrix< Real, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > Matrix
Dense matrix for real numbers.
std::complex< Real > Complex
Eigen::Matrix< Complex, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > MatrixComp
Dense matrix for complex numbers.