summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Project/ElectricCalculation.cpp5
-rw-r--r--Project/ElectricCalculation.h3
-rw-r--r--Project/Electromechanical.cpp2
-rw-r--r--Project/Fault.cpp6
-rw-r--r--Project/TransferFunction.cpp5
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;