diff options
-rw-r--r-- | Project/ElectricCalculation.cpp | 5 | ||||
-rw-r--r-- | Project/ElectricCalculation.h | 3 | ||||
-rw-r--r-- | Project/Electromechanical.cpp | 2 | ||||
-rw-r--r-- | Project/Fault.cpp | 6 | ||||
-rw-r--r-- | Project/TransferFunction.cpp | 5 |
5 files changed, 12 insertions, 9 deletions
diff --git a/Project/ElectricCalculation.cpp b/Project/ElectricCalculation.cpp index 36e7a9a..af3173b 100644 --- a/Project/ElectricCalculation.cpp +++ b/Project/ElectricCalculation.cpp @@ -74,7 +74,8 @@ bool ElectricCalculation::GetYBus(std::vector<std::vector<std::complex<double> > double systemPowerBase, YBusSequence sequence, bool includeSyncMachines, - bool allLoadsAsImpedances) + bool allLoadsAsImpedances, + bool usePowerFlowVoltagesOnImpedances) { if(m_busList.size() == 0) return false; @@ -106,7 +107,7 @@ bool ElectricCalculation::GetYBus(std::vector<std::vector<std::complex<double> > LoadElectricalData data = load->GetPUElectricalData(systemPowerBase); if(data.loadType == CONST_IMPEDANCE || allLoadsAsImpedances) { std::complex<double> yLoad = std::complex<double>(data.activePower, -data.reactivePower); - if(allLoadsAsImpedances) { + if(allLoadsAsImpedances && usePowerFlowVoltagesOnImpedances) { std::complex<double> v = static_cast<Bus*>(load->GetParentList()[0])->GetElectricalData().voltage; yLoad /= (std::abs(v) * std::abs(v)); } diff --git a/Project/ElectricCalculation.h b/Project/ElectricCalculation.h index 9dee71a..855f02f 100644 --- a/Project/ElectricCalculation.h +++ b/Project/ElectricCalculation.h @@ -94,7 +94,8 @@ class ElectricCalculation double systemPowerBase, YBusSequence sequence = POSITIVE_SEQ, bool includeSyncMachines = false, - bool allLoadsAsImpedances = false); + bool allLoadsAsImpedances = false, + bool usePowerFlowVoltagesOnImpedances = false); /** * @brief Invert a matrix. diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index 5bb9a1d..4ebb3b3 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -74,7 +74,7 @@ bool Electromechanical::RunStabilityCalculation() SetSyncMachinesModel(); // Calculate the admittance matrix with the synchronous machines. - if(!GetYBus(m_yBus, m_powerSystemBase, POSITIVE_SEQ, false, true)) { + if(!GetYBus(m_yBus, m_powerSystemBase, POSITIVE_SEQ, false, true, true)) { m_errorMsg = _("It was not possible to build the admittance matrix."); return false; } diff --git a/Project/Fault.cpp b/Project/Fault.cpp index 3d335fd..a71d2ce 100644 --- a/Project/Fault.cpp +++ b/Project/Fault.cpp @@ -34,11 +34,11 @@ bool Fault::RunFaultCalculation(double systemPowerBase) // Get adimittance matrices. std::vector<std::vector<std::complex<double> > > yBusPos; - GetYBus(yBusPos, systemPowerBase, POSITIVE_SEQ, true); + GetYBus(yBusPos, systemPowerBase, POSITIVE_SEQ, true, true); std::vector<std::vector<std::complex<double> > > yBusNeg; - GetYBus(yBusNeg, systemPowerBase, NEGATIVE_SEQ, true); + GetYBus(yBusNeg, systemPowerBase, NEGATIVE_SEQ, true, true); std::vector<std::vector<std::complex<double> > > yBusZero; - GetYBus(yBusZero, systemPowerBase, ZERO_SEQ, true); + GetYBus(yBusZero, systemPowerBase, ZERO_SEQ, true, true); // Calculate the impedance matrices. if(!InvertMatrix(yBusPos, m_zBusPos)) { diff --git a/Project/TransferFunction.cpp b/Project/TransferFunction.cpp index 8e7b68f..b78d74a 100644 --- a/Project/TransferFunction.cpp +++ b/Project/TransferFunction.cpp @@ -291,10 +291,11 @@ void TransferFunction::CalculateSpaceState(int maxIteration, double error) } for(int i = 0; i < order - 1; i++) { ss.A[order - 2][i] = -(denominator[order - 1 - i] / denominator[0]); - ss.C[i] = (numerator[order - 1 - i] - denominator[order - 1 - i] * numerator[0]) / denominator[0]; + ss.C[i] = numerator[order - 1 - i] / denominator[0] - + (denominator[order - 1 - i] / denominator[0]) * (numerator[0] / denominator[0]); } ss.B[order - 2] = 1.0; - ss.D = numerator[0]; + ss.D = numerator[0] / denominator[0]; m_ss = ss; |