9 #include <dpsim-models/EMT/EMT_Ph3_Switch.h>
18 Base::Ph3::
Switch(mAttributes) {
25 auto copy = Switch::make(name, mLogLevel);
26 copy->setParameters(**mOpenResistance, **mClosedResistance, **mSwitchClosed);
33 (**mSwitchClosed) ? **mClosedResistance : **mOpenResistance;
34 MatrixComp vInitABC = MatrixComp::Zero(3, 1);
35 vInitABC(0, 0) = initialSingleVoltage(1) - initialSingleVoltage(0);
36 vInitABC(1, 0) = vInitABC(0, 0) * SHIFT_TO_PHASE_B;
37 vInitABC(2, 0) = vInitABC(0, 0) * SHIFT_TO_PHASE_C;
38 **mIntfVoltage = vInitABC.real();
39 **mIntfCurrent = (impedance.inverse() * vInitABC).real();
41 SPDLOG_LOGGER_INFO(mSLog,
42 "\n--- Initialization from powerflow ---"
43 "\nVoltage across: {:s}"
45 "\nTerminal 0 voltage: {:s}"
46 "\nTerminal 1 voltage: {:s}"
47 "\n--- Initialization from powerflow finished ---",
48 Logger::matrixToString(**mIntfVoltage),
49 Logger::matrixToString(**mIntfCurrent),
50 Logger::phasorToString(initialSingleVoltage(0)),
51 Logger::phasorToString(initialSingleVoltage(1)));
54 void EMT::Ph3::Switch::mnaCompInitialize(Real omega, Real timeStep,
56 updateMatrixNodeIndices();
57 **mRightVector = Matrix::Zero(0, 0);
63 SparseMatrixRow &systemMatrix) {
64 MatrixFixedSize<3, 3> conductance = (**mSwitchClosed)
65 ? (**mClosedResistance).inverse()
66 : (**mOpenResistance).inverse();
68 MNAStampUtils::stampConductanceMatrix(
69 conductance, systemMatrix, matrixNodeIndex(0), matrixNodeIndex(1),
70 terminalNotGrounded(0), terminalNotGrounded(1), mSLog);
72 SPDLOG_LOGGER_TRACE(mSLog,
"\nConductance matrix: {:s}",
73 Logger::matrixToString(conductance));
77 Bool closed, SparseMatrixRow &systemMatrix, Int freqIdx) {
78 MatrixFixedSize<3, 3> conductance = (closed) ? (**mClosedResistance).inverse()
79 : (**mOpenResistance).inverse();
81 MNAStampUtils::stampConductanceMatrix(
82 conductance, systemMatrix, matrixNodeIndex(0), matrixNodeIndex(1),
83 terminalNotGrounded(0), terminalNotGrounded(1), mSLog);
85 SPDLOG_LOGGER_TRACE(mSLog,
"\nConductance matrix: {:s}",
86 Logger::matrixToString(conductance));
92 AttributeBase::List &prevStepDependencies,
93 AttributeBase::List &attributeDependencies,
94 AttributeBase::List &modifiedAttributes,
96 attributeDependencies.push_back(leftVector);
97 modifiedAttributes.push_back(mIntfVoltage);
98 modifiedAttributes.push_back(mIntfCurrent);
101 void EMT::Ph3::Switch::mnaCompPostStep(Real time, Int timeStepCount,
103 mnaCompUpdateVoltage(**leftVector);
104 mnaCompUpdateCurrent(**leftVector);
109 **mIntfVoltage = Matrix::Zero(3, 1);
110 if (terminalNotGrounded(1)) {
111 (**mIntfVoltage)(0, 0) =
112 Math::realFromVectorElement(leftVector, matrixNodeIndex(1, 0));
113 (**mIntfVoltage)(1, 0) =
114 Math::realFromVectorElement(leftVector, matrixNodeIndex(1, 1));
115 (**mIntfVoltage)(2, 0) =
116 Math::realFromVectorElement(leftVector, matrixNodeIndex(1, 2));
118 if (terminalNotGrounded(0)) {
119 (**mIntfVoltage)(0, 0) =
120 (**mIntfVoltage)(0, 0) -
121 Math::realFromVectorElement(leftVector, matrixNodeIndex(0, 0));
122 (**mIntfVoltage)(1, 0) =
123 (**mIntfVoltage)(1, 0) -
124 Math::realFromVectorElement(leftVector, matrixNodeIndex(0, 1));
125 (**mIntfVoltage)(2, 0) =
126 (**mIntfVoltage)(2, 0) -
127 Math::realFromVectorElement(leftVector, matrixNodeIndex(0, 2));
132 Matrix conductance = Matrix::Zero(3, 3);
133 (**mSwitchClosed) ? Math::invertMatrix(**mClosedResistance, conductance)
134 : Math::invertMatrix(**mOpenResistance, conductance);
136 **mIntfCurrent = conductance * **mIntfVoltage;
void mnaCompUpdateCurrent(const Matrix &leftVector) override
Update interface current from MNA system result.
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 mnaCompApplySwitchSystemMatrixStamp(Bool closed, SparseMatrixRow &systemMatrix, Int freqIdx) override
Stamps system matrix considering the defined switch position.
Switch(String uid, String name, Logger::Level loglevel=Logger::Level::off)
Defines UID, name, component parameters and logging level.
void mnaCompUpdateVoltage(const Matrix &leftVector) override
Update interface voltage from MNA system result.
void initializeFromNodesAndTerminals(Real frequency) override
Initializes component from power flow data.
void mnaCompApplySystemMatrixStamp(SparseMatrixRow &systemMatrix) override
Stamps system matrix.
void mnaCompAddPostStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes, Attribute< Matrix >::Ptr &leftVector) override
Add MNA post step dependencies.
void mnaCompApplyRightSideVectorStamp(Matrix &rightVector) override
Stamps right side (source) vector.
Bool mnaIsClosed() override
Check if switch is closed.
Base class for all MNA components that are transmitting power.
Base class for all components that are transmitting power.
const Attribute< MatrixVar< Real > >::Ptr mIntfCurrent
Current through component.
const Attribute< MatrixVar< Real > >::Ptr mIntfVoltage
Voltage between terminals.