From 41b81949a92aad043caa28b0e1144348d06921f8 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Wed, 6 Sep 2017 20:11:37 -0300 Subject: Data report implementation start --- Project/ElectricCalculation.cpp | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'Project/ElectricCalculation.cpp') diff --git a/Project/ElectricCalculation.cpp b/Project/ElectricCalculation.cpp index e67c9b4..95810fc 100644 --- a/Project/ElectricCalculation.cpp +++ b/Project/ElectricCalculation.cpp @@ -41,6 +41,16 @@ void ElectricCalculation::GetElementsFromList(std::vector elementList) else if(Transformer* transformer = dynamic_cast(element)) m_transformerList.push_back(transformer); } + + // Set buses numbers + int busNumber = 0; + for(auto itb = m_busList.begin(); itb != m_busList.end(); itb++) { + Bus* bus = *itb; + BusElectricalData data = bus->GetElectricalData(); + data.number = busNumber; + bus->SetElectricalData(data); + busNumber++; + } } bool ElectricCalculation::GetYBus(std::vector > >& yBus, @@ -274,15 +284,24 @@ void ElectricCalculation::UpdateElementsPowerFlow(std::vector reactiveLimit, double systemPowerBase) { - for(int i = 0; i < (int)reactiveLimit.size(); ++i) { - if(reactiveLimit[i].maxLimit > -1e-5 && reactiveLimit[i].maxLimit < 1e-5) reactiveLimit[i].maxLimit = 1e-5; - if(reactiveLimit[i].minLimit > -1e-5 && reactiveLimit[i].minLimit < 1e-5) reactiveLimit[i].minLimit = 1e-5; - } - // Buses voltages + double zeroLimit = 1e-4; + for(unsigned int i = 0; i < reactiveLimit.size(); ++i) { + if(reactiveLimit[i].maxLimit > -zeroLimit && reactiveLimit[i].maxLimit < zeroLimit) reactiveLimit[i].maxLimit = zeroLimit; + if(reactiveLimit[i].minLimit > -zeroLimit && reactiveLimit[i].minLimit < zeroLimit) reactiveLimit[i].minLimit = zeroLimit; + } + for(unsigned int i = 0; i < power.size(); ++i) { + if(std::real(power[i]) > -zeroLimit && std::real(power[i]) < zeroLimit) + power[i] = std::complex(0.0, std::imag(power[i])); + if(std::imag(power[i]) > -zeroLimit && std::imag(power[i]) < zeroLimit) + power[i] = std::complex(std::real(power[i]), 0.0); + } + // Buses for(int i = 0; i < (int)m_busList.size(); i++) { Bus* bus = m_busList[i]; BusElectricalData data = bus->GetElectricalData(); data.voltage = voltage[i]; + data.power = power[i]; + data.busType = busType[i]; bus->SetElectricalData(data); } -- cgit From 9e1f6849c929506a17fa12185c5c0185d5287177 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Fri, 8 Sep 2017 22:02:09 -0300 Subject: More grid data implemented Some fault bugfixes --- Project/ElectricCalculation.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'Project/ElectricCalculation.cpp') diff --git a/Project/ElectricCalculation.cpp b/Project/ElectricCalculation.cpp index 95810fc..485325f 100644 --- a/Project/ElectricCalculation.cpp +++ b/Project/ElectricCalculation.cpp @@ -122,7 +122,7 @@ bool ElectricCalculation::GetYBus(std::vector > for(auto it = m_lineList.begin(), itEnd = m_lineList.end(); it != itEnd; ++it) { Line* line = *it; if(line->IsOnline()) { - LineElectricalData data = line->GetElectricalData(); + LineElectricalData data = line->GetPUElectricalData(systemPowerBase); int n1 = static_cast(line->GetParentList()[0])->GetElectricalData().number; int n2 = static_cast(line->GetParentList()[1])->GetElectricalData().number; @@ -158,7 +158,7 @@ bool ElectricCalculation::GetYBus(std::vector > Transformer* transformer = *it; if(transformer->IsOnline()) { - TransformerElectricalData data = transformer->GetElectricalData(); + TransformerElectricalData data = transformer->GetPUElectricalData(systemPowerBase); int n1 = static_cast(transformer->GetParentList()[0])->GetElectricalData().number; int n2 = static_cast(transformer->GetParentList()[1])->GetElectricalData().number; @@ -249,7 +249,10 @@ bool ElectricCalculation::GetYBus(std::vector > yBus[n][n] += 1.0 / std::complex(data.negativeResistance, data.negativeReactance); } break; case ZERO_SEQ: { - yBus[n][n] += 1.0 / std::complex(data.zeroResistance, data.zeroReactance); + if(data.groundNeutral) { + yBus[n][n] += 1.0 / std::complex(data.zeroResistance + 3.0 * data.groundResistance, + data.zeroReactance + 3.0 * data.groundReactance); + } } break; } } @@ -268,7 +271,10 @@ bool ElectricCalculation::GetYBus(std::vector > yBus[n][n] += 1.0 / std::complex(data.negativeResistance, data.negativeReactance); } break; case ZERO_SEQ: { - yBus[n][n] += 1.0 / std::complex(data.zeroResistance, data.zeroReactance); + if(data.groundNeutral) { + yBus[n][n] += 1.0 / std::complex(data.zeroResistance + 3.0 * data.groundResistance, + data.zeroReactance + 3.0 * data.groundReactance); + } } break; } } @@ -286,8 +292,10 @@ void ElectricCalculation::UpdateElementsPowerFlow(std::vector -zeroLimit && reactiveLimit[i].maxLimit < zeroLimit) reactiveLimit[i].maxLimit = zeroLimit; - if(reactiveLimit[i].minLimit > -zeroLimit && reactiveLimit[i].minLimit < zeroLimit) reactiveLimit[i].minLimit = zeroLimit; + if(reactiveLimit[i].maxLimit > -zeroLimit && reactiveLimit[i].maxLimit < zeroLimit) + reactiveLimit[i].maxLimit = zeroLimit; + if(reactiveLimit[i].minLimit > -zeroLimit && reactiveLimit[i].minLimit < zeroLimit) + reactiveLimit[i].minLimit = zeroLimit; } for(unsigned int i = 0; i < power.size(); ++i) { if(std::real(power[i]) > -zeroLimit && std::real(power[i]) < zeroLimit) -- cgit