summaryrefslogtreecommitdiffstats
path: root/Project/ElectricCalculation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Project/ElectricCalculation.cpp')
-rw-r--r--Project/ElectricCalculation.cpp45
1 files changed, 36 insertions, 9 deletions
diff --git a/Project/ElectricCalculation.cpp b/Project/ElectricCalculation.cpp
index e67c9b4..485325f 100644
--- a/Project/ElectricCalculation.cpp
+++ b/Project/ElectricCalculation.cpp
@@ -41,6 +41,16 @@ void ElectricCalculation::GetElementsFromList(std::vector<Element*> elementList)
else if(Transformer* transformer = dynamic_cast<Transformer*>(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<std::vector<std::complex<double> > >& yBus,
@@ -112,7 +122,7 @@ bool ElectricCalculation::GetYBus(std::vector<std::vector<std::complex<double> >
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<Bus*>(line->GetParentList()[0])->GetElectricalData().number;
int n2 = static_cast<Bus*>(line->GetParentList()[1])->GetElectricalData().number;
@@ -148,7 +158,7 @@ bool ElectricCalculation::GetYBus(std::vector<std::vector<std::complex<double> >
Transformer* transformer = *it;
if(transformer->IsOnline()) {
- TransformerElectricalData data = transformer->GetElectricalData();
+ TransformerElectricalData data = transformer->GetPUElectricalData(systemPowerBase);
int n1 = static_cast<Bus*>(transformer->GetParentList()[0])->GetElectricalData().number;
int n2 = static_cast<Bus*>(transformer->GetParentList()[1])->GetElectricalData().number;
@@ -239,7 +249,10 @@ bool ElectricCalculation::GetYBus(std::vector<std::vector<std::complex<double> >
yBus[n][n] += 1.0 / std::complex<double>(data.negativeResistance, data.negativeReactance);
} break;
case ZERO_SEQ: {
- yBus[n][n] += 1.0 / std::complex<double>(data.zeroResistance, data.zeroReactance);
+ if(data.groundNeutral) {
+ yBus[n][n] += 1.0 / std::complex<double>(data.zeroResistance + 3.0 * data.groundResistance,
+ data.zeroReactance + 3.0 * data.groundReactance);
+ }
} break;
}
}
@@ -258,7 +271,10 @@ bool ElectricCalculation::GetYBus(std::vector<std::vector<std::complex<double> >
yBus[n][n] += 1.0 / std::complex<double>(data.negativeResistance, data.negativeReactance);
} break;
case ZERO_SEQ: {
- yBus[n][n] += 1.0 / std::complex<double>(data.zeroResistance, data.zeroReactance);
+ if(data.groundNeutral) {
+ yBus[n][n] += 1.0 / std::complex<double>(data.zeroResistance + 3.0 * data.groundResistance,
+ data.zeroReactance + 3.0 * data.groundReactance);
+ }
} break;
}
}
@@ -274,15 +290,26 @@ void ElectricCalculation::UpdateElementsPowerFlow(std::vector<std::complex<doubl
std::vector<ReactiveLimits> 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<double>(0.0, std::imag(power[i]));
+ if(std::imag(power[i]) > -zeroLimit && std::imag(power[i]) < zeroLimit)
+ power[i] = std::complex<double>(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);
}