46 Real initActivePower,
Real initReactivePower,
Real initTerminalVolt,
47 Real initVoltAngle,
Real initMechPower) {
50 nomPower, nomVolt, nomFreq, nomFieldCur, poleNumber, Rs, Ll, Lmd, Lmq,
51 Rfd, Llfd, Rkd, Llkd, Rkq1, Llkq1, Rkq2, Llkq2, inertia);
53 SPDLOG_LOGGER_INFO(
mSLog,
54 "Set base and fundamental parameters in per unit: \n"
55 "nomPower: {:e}\nnomVolt: {:e}\nnomFreq: "
56 "{:e}\npoleNumber: {:d}\nnomFieldCur: {:e}\n"
57 "Rs: {:e}\nLl: {:e}\nLmd: {:e}\nLmq: {:e}\nRfd: "
58 "{:e}\nLlfd: {:e}\nRkd: {:e}\n"
59 "Llkd: {:e}\nRkq1: {:e}\nLlkq1: {:e}\nRkq2: {:e}\nLlkq2: "
60 "{:e}\ninertia: {:e}",
61 nomPower, nomVolt, nomFreq, poleNumber, nomFieldCur, Rs,
62 Ll, Lmd, Lmq, Rfd, Llfd, Rkd, Llkd, Rkq1, Llkq1, Rkq2,
66 initTerminalVolt, initVoltAngle,
71 "Set initial values: \n"
72 "initActivePower: {:e} [W]\n"
73 "initReactivePower: {:e} [VAr]\n"
74 "initTerminalVolt: {:e} [V] (initTerminalVolt: {:e} [pu])\n"
75 "initVoltAngle: {:e} [deg] \n"
76 "initMechPower: {:e} [W]",
90 "Set base parameters: \n"
91 "nomPower: {:e}\nnomVolt: {:e}\nnomFreq: {:e}\n nomFieldCur: {:e}\n",
92 nomPower, nomVolt, nomFreq, nomFieldCur);
95 Lq_t, Ld_s, Lq_s, Td0_t, Tq0_t, Td0_s, Tq0_s);
96 SPDLOG_LOGGER_INFO(
mSLog,
97 "Set operational parameters in per unit: \n"
98 "poleNumber: {:d}\ninertia: {:e}\n"
99 "Rs: {:e}\nLd: {:e}\nLq: {:e}\nLl: {:e}\n"
100 "Ld_t: {:e}\nLq_t: {:e}\nLd_s: {:e}\nLq_s: {:e}\n"
101 "Td0_t: {:e}\nTq0_t: {:e}\nTd0_s: {:e}\nTq0_s: {:e}\n",
102 poleNumber, inertia, Rs, Ld, Lq, Ll, Ld_t, Lq_t, Ld_s,
103 Lq_s, Td0_t, Tq0_t, Td0_s, Tq0_s);
108 "Set fundamental parameters in per unit: \n"
109 "Rs: {:e}\nLl: {:e}\nLmd: {:e}\nLmq: {:e}\nRfd: {:e}\nLlfd: {:e}\nRkd: "
111 "Llkd: {:e}\nRkq1: {:e}\nLlkq1: {:e}\nRkq2: {:e}\nLlkq2: {:e}\n",
112 **
mRs, **
mLl,
mLmd,
mLmq,
mRfd,
mLlfd,
mRkd,
mLlkd,
mRkq1,
mLlkq1,
mRkq2,
117 Real initReactivePower,
118 Real initTerminalVolt,
120 Real initMechPower) {
123 initTerminalVolt, initVoltAngle,
128 "Set initial values: \n"
129 "initActivePower: {:e} [W]\n"
130 "initReactivePower: {:e} [VAr]\n"
131 "initTerminalVolt: {:e} [V] (initTerminalVolt: {:e} [pu])\n"
132 "initVoltAngle: {:e} [deg] \n"
133 "initMechPower: {:e} [W]",
141 SPDLOG_LOGGER_INFO(
mSLog,
142 "Apply operational parameters in per unit: \n"
143 "poleNumber: {:d}\ninertia: {:e}\n"
144 "Rs: {:e}\nLd: {:e}\nLq: {:e}\nLl: {:e}\n"
145 "Ld_t: {:e}\nLq_t: {:e}\nLd_s: {:e}\nLq_s: {:e}\n"
146 "Td0_t: {:e}\nTq0_t: {:e}\nTd0_s: {:e}\nTq0_s: {:e}\n",
154 "Updated fundamental parameters in per unit: \n"
155 "Rs: {:e}\nLl: {:e}\nLmd: {:e}\nLmq: {:e}\nRfd: {:e}\nLlfd: {:e}\nRkd: "
157 "Llkd: {:e}\nRkq1: {:e}\nLlkq1: {:e}\nRkq2: {:e}\nLlkq2: {:e}\n",
158 **
mRs, **
mLl,
mLmd,
mLmq,
mRfd,
mLlfd,
mRkd,
mLlkd,
mRkq1,
mLlkq1,
mRkq2,
165 SPDLOG_LOGGER_INFO(
mSLog,
"--- Initialization from powerflow ---");
169 Real reactivePower = -
terminal(0)->singlePower().imag();
177 SPDLOG_LOGGER_INFO(
mSLog,
178 "\nTerminal 0 voltage: {:s}"
179 "\nTerminal 0 power: {:s}"
180 "\n--- Initialization from powerflow finished ---",
184 SPDLOG_LOGGER_INFO(
mSLog,
"Initial values already set, skipping "
185 "initializeFromNodesAndTerminals.");
208 mVdq0 = Matrix::Zero(3, 1);
209 mIdq0 = Matrix::Zero(3, 1);
236 SPDLOG_LOGGER_INFO(
mSLog,
"Add {} to {}, {}", conductance,
238 SPDLOG_LOGGER_INFO(
mSLog,
"Add {} to {}, {}", conductance,
240 SPDLOG_LOGGER_INFO(
mSLog,
"Add {} to {}, {}", conductance,
267 const Matrix &leftVector) {
268 (**mIntfVoltage)(0, 0) =
270 (**mIntfVoltage)(1, 0) =
272 (**mIntfVoltage)(2, 0) =
281 attributeDependencies.push_back(leftVector);
296 abcToDq0 << 2. / 3. * cos(theta), 2. / 3. * cos(theta - 2. *
PI / 3.),
297 2. / 3. * cos(theta + 2. *
PI / 3.), -2. / 3. * sin(theta),
298 -2. / 3. * sin(theta - 2. *
PI / 3.),
299 -2. / 3. * sin(theta + 2. *
PI / 3.), 1. / 3., 1. / 3., 1. / 3.;
301 dq0Vector = abcToDq0 * abcVector;
312 dq0ToAbc << cos(theta), -sin(theta), 1., cos(theta - 2. *
PI / 3.),
313 -sin(theta - 2. *
PI / 3.), 1., cos(theta + 2. *
PI / 3.),
314 -sin(theta + 2. *
PI / 3.), 1.;
316 abcVector = dq0ToAbc * dq0Vector;
AttributePointer< Attribute< T > > Ptr
Matrix mIsr
Vector of stator and rotor currents.
const Attribute< Real >::Ptr mLq_t
Transient q-axis inductance [H].
Real mRkq1
q-axis damper resistance 1 Rkq1 [Ohm]
void calculateFundamentalFromOperationalParameters()
Real mRcomp
Compensation Resistance.
Real mLmd
d-axis mutual inductance Lmd [H]
Real mBase_I
base stator current peak
void setInitialValues(Real initActivePower, Real initReactivePower, Real initTerminalVolt, Real initVoltAngle, Real initMechPower)
Bool mCompensationOn
Determines if compensation elements are used.
const Attribute< Real >::Ptr mTq0_s
Subtransient time constant of q-axis [s].
Real mLmq
q-axis mutual inductance Lmq [H]
void setOperationalPerUnitParameters(Int poleNumber, Real inertia, Real Rs, Real Ld, Real Lq, Real Ll, Real Ld_t, Real Lq_t, Real Ld_s, Real Lq_s, Real Td0_t, Real Tq0_t, Real Td0_s, Real Tq0_s)
SynchronGenerator(CPS::AttributeList::Ptr attributeList)
Constructor.
Real mLlfd
field leakage inductance Llfd [H]
Int mPoleNumber
mNumber of poles
Bool mInitialValuesSet
Flag to remember when initial values are set.
const Attribute< Real >::Ptr mTq0_t
Transient time constant of q-axis [s].
Real mLlkd
d-axis damper leakage inductance Llkd [H]
Matrix mVsr
Vector of stator and rotor voltages.
const Attribute< Real >::Ptr mLq
q-axis inductance Lq [H]
Real mBase_Z
base stator impedance
const Attribute< Real >::Ptr mRs
stator resistance Rs [Ohm]
Real mLlkq1
q-axis damper leakage inductance 1 Llkq1 [H]
void calcStateSpaceMatrixDQ()
Matrix mIdq0
dq0 current calculated from terminal current
const Attribute< Real >::Ptr mLq_s
Subtransient q-axis inductance [H].
void setBaseAndFundamentalPerUnitParameters(Real nomPower, Real nomVolt, Real nomFreq, Real nomFieldCur, Int poleNumber, Real Rs, Real Ll, Real Lmd, Real Lmq, Real Rfd, Real Llfd, Real Rkd, Real Llkd, Real Rkq1, Real Llkq1, Real Rkq2, Real Llkq2, Real inertia)
Initializes the base and fundamental machine parameters in per unit.
Real mRkd
d-axis damper resistance Rkd [Ohm]
Real mRfd
field resistance Rfd [Ohm]
Matrix mVdq0
dq0 voltage calculated from terminal voltage
const Attribute< Real >::Ptr mLl
leakage inductance Ll [H]
const Attribute< Real >::Ptr mTd0_s
Subtransient time constant of d-axis [s].
void setBaseParameters(Real nomPower, Real nomVolt, Real nomFreq)
Real mBase_OmMech
base mechanical angular frequency
Real mRkq2
q-axis damper resistance 2 Rkq2 [Ohm]
Real mInitTerminalVoltage
const Attribute< Real >::Ptr mTd0_t
Transient time constant of d-axis [s].
Int mNumDampingWindings
Number of damping windings in q.
Real mBase_V
base stator voltage (phase-to-ground peak)
const Attribute< Real >::Ptr mLd
d-axis inductance Ld [H]
const Attribute< Real >::Ptr mOmMech
rotor speed omega_r
const Attribute< Real >::Ptr mLd_t
Transient d-axis inductance [H].
Real mLlkq2
q-axis damper leakage inductance 2 Llkq2 [H]
const Attribute< Real >::Ptr mLd_s
Subtransient d-axis inductance [H].
const Attribute< Real >::Ptr mInertia
inertia constant H [s] for per unit or moment of inertia J [kg*m^2]
const Attribute< Real >::Ptr mElecTorque
electrical torque
void initialize(Matrix frequencies) override
Initialize components with correct network frequencies.
Matrix dq0ToAbcTransform(Real theta, Matrix &dq0)
Inverse Park transform as described in Krause.
virtual void mnaCompUpdateVoltage(const Matrix &leftVector) override
Retrieves calculated voltage from simulation for next step.
virtual ~SynchronGeneratorDQ()
void applyParametersOperationalPerUnit()
Calculates fundamental from operational parameters and applies them to the model.
void mnaCompApplyRightSideVectorStamp(Matrix &rightVector) override
void initializeMatrixAndStates()
Initializes internal states and matrix.
void mnaCompApplySystemMatrixStamp(SparseMatrixRow &systemMatrix) override
Real rotationalSpeed() const
void setParametersOperationalPerUnit(Real nomPower, Real nomVolt, Real nomFreq, Int poleNumber, Real nomFieldCur, Real Rs, Real Ld, Real Lq, Real Ld_t, Real Lq_t, Real Ld_s, Real Lq_s, Real Ll, Real Td0_t, Real Tq0_t, Real Td0_s, Real Tq0_s, Real inertia)
void mnaCompAddPostStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes, Attribute< Matrix >::Ptr &leftVector) override
Add MNA post step dependencies.
Real rotorPosition() const
Real electricalTorque() const
void setInitialValues(Real initActivePower, Real initReactivePower, Real initTerminalVolt, Real initVoltAngle, Real initMechPower)
Initialize states according to desired initial electrical powerflow and mechanical input power.
Matrix mCompensationCurrent
Compensation current source set point.
void setParametersFundamentalPerUnit(Real nomPower, Real nomVolt, Real nomFreq, Int poleNumber, Real nomFieldCur, Real Rs, Real Ll, Real Lmd, Real Lmq, Real Rfd, Real Llfd, Real Rkd, Real Llkd, Real Rkq1, Real Llkq1, Real Rkq2, Real Llkq2, Real inertia, Real initActivePower, Real initReactivePower, Real initTerminalVolt, Real initVoltAngle, Real initMechPower)
void mnaCompPostStep(Real time, Int timeStepCount, Attribute< Matrix >::Ptr &leftVector) override
Matrix abcToDq0Transform(Real theta, Matrix &abc)
Park transform as described in Krause.
void initializeFromNodesAndTerminals(Real frequency) override
Initializes component from power flow data.
SynchronGeneratorDQ(String name, String uid, Logger::Level logLevel=Logger::Level::off)
Defines UID, name and logging level.
String uid()
Returns unique id.
AttributeList::Ptr mAttributes
Attribute List.
spdlog::level::level_enum Level
static String complexToString(const Complex &num)
static String phasorToString(const Complex &num)
MNASimPowerComp(String uid, String name, Bool hasPreStep, Bool hasPostStep, Logger::Level logLevel)
static Real realFromVectorElement(const Matrix &mat, Matrix::Index row)
static void setVectorElement(Matrix &mat, Matrix::Index row, Complex value, Int maxFreq=1, Int freqIdx=0, Matrix::Index colOffset=0)
static Real phase(Complex value)
static Real abs(Complex value)
static void addToMatrixElement(SparseMatrixRow &mat, Matrix::Index row, Matrix::Index column, Complex value, Int maxFreq=1, Int freqIdx=0)
static Real radtoDeg(Real rad)
UInt matrixNodeIndex(UInt nodeIndex)
const Attribute< MatrixVar< Real > >::Ptr mIntfCurrent
virtual void initialize(Matrix frequencies)
Initialize components with correct network frequencies.
SimTerminal< Real >::Ptr terminal(UInt index)
const Attribute< MatrixVar< Real > >::Ptr mIntfVoltage
Bool terminalNotGrounded(UInt index)
Complex initialSingleVoltage(UInt index)
void setTerminalNumber(UInt num)
Logger::Log mSLog
Component logger.
#define RMS3PH_TO_PEAK1PH
Eigen::Matrix< Real, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > Matrix
Dense matrix for real numbers.
Eigen::SparseMatrix< Real, Eigen::RowMajor > SparseMatrixRow
Sparse matrix for real numbers (row major).