diff options
author | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2019-04-25 01:25:41 -0300 |
---|---|---|
committer | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2019-04-25 01:25:41 -0300 |
commit | 2771fff79ac9c3c09b70f4668e7142b2e944d1f2 (patch) | |
tree | c55b0780b0da2ac270df16c5b92d7fc243ea0756 /Project/ElectricCalculation.cpp | |
parent | fdb50c49b323edf16ce72c7ee2c678aa1ac99777 (diff) | |
download | PSP.git-2771fff79ac9c3c09b70f4668e7142b2e944d1f2.tar.gz PSP.git-2771fff79ac9c3c09b70f4668e7142b2e944d1f2.tar.xz PSP.git-2771fff79ac9c3c09b70f4668e7142b2e944d1f2.zip |
Matpower Importer and power quality calculation
Power quality in implementation
Diffstat (limited to 'Project/ElectricCalculation.cpp')
-rw-r--r-- | Project/ElectricCalculation.cpp | 67 |
1 files changed, 20 insertions, 47 deletions
diff --git a/Project/ElectricCalculation.cpp b/Project/ElectricCalculation.cpp index af3173b..c680ef1 100644 --- a/Project/ElectricCalculation.cpp +++ b/Project/ElectricCalculation.cpp @@ -34,6 +34,7 @@ void ElectricCalculation::GetElementsFromList(std::vector<Element*> elementList) m_syncGeneratorList.clear(); m_syncMotorList.clear(); m_transformerList.clear(); + m_harmCurrentList.clear(); // TODO: Bad design? for(auto it = elementList.begin(); it != elementList.end(); it++) { Element* element = *it; @@ -57,6 +58,8 @@ void ElectricCalculation::GetElementsFromList(std::vector<Element*> elementList) m_syncMotorList.push_back(syncMotor); else if(Transformer* transformer = dynamic_cast<Transformer*>(element)) m_transformerList.push_back(transformer); + else if(HarmCurrent* harmCurrent = dynamic_cast<HarmCurrent*>(element)) + m_harmCurrentList.push_back(harmCurrent); } // Set buses numbers @@ -83,9 +86,7 @@ bool ElectricCalculation::GetYBus(std::vector<std::vector<std::complex<double> > yBus.clear(); for(int i = 0; i < (int)m_busList.size(); i++) { std::vector<std::complex<double> > line; - for(int j = 0; j < (int)m_busList.size(); j++) { - line.push_back(std::complex<double>(0.0, 0.0)); - } + for(int j = 0; j < (int)m_busList.size(); j++) { line.push_back(std::complex<double>(0.0, 0.0)); } yBus.push_back(line); } @@ -679,18 +680,12 @@ std::vector<std::complex<double> > ElectricCalculation::GaussianElimination( std::vector<std::vector<std::complex<double> > > triangMatrix; triangMatrix.resize(matrix.size()); - for(unsigned int i = 0; i < matrix.size(); i++) { - triangMatrix[i].resize(matrix.size()); - } + for(unsigned int i = 0; i < matrix.size(); i++) { triangMatrix[i].resize(matrix.size()); } - for(unsigned int i = 0; i < matrix.size(); i++) { - solution.push_back(array[i]); - } + for(unsigned int i = 0; i < matrix.size(); i++) { solution.push_back(array[i]); } for(unsigned int i = 0; i < matrix.size(); i++) { - for(unsigned int j = 0; j < matrix.size(); j++) { - triangMatrix[i][j] = matrix[i][j]; - } + for(unsigned int j = 0; j < matrix.size(); j++) { triangMatrix[i][j] = matrix[i][j]; } } for(unsigned int k = 0; k < matrix.size(); k++) { @@ -705,15 +700,13 @@ std::vector<std::complex<double> > ElectricCalculation::GaussianElimination( } for(unsigned int i = k1; i < matrix.size(); i++) { if(triangMatrix[i][k] != std::complex<double>(0.0, 0.0)) { - for(unsigned int j = k1; j < matrix.size(); j++) { - triangMatrix[i][j] -= triangMatrix[k][j]; - } + for(unsigned int j = k1; j < matrix.size(); j++) { triangMatrix[i][j] -= triangMatrix[k][j]; } solution[i] -= solution[k]; } } } - for(unsigned int i = matrix.size() - 2; i >= 0; i--) { - for(unsigned int j = matrix.size() - 1; j >= i + 1; j--) { + for(int i = static_cast<int>(matrix.size()) - 2; i >= 0; i--) { + for(int j = static_cast<int>(matrix.size()) - 1; j >= i + 1; j--) { solution[i] -= triangMatrix[i][j] * solution[j]; } } @@ -726,14 +719,10 @@ Machines::SyncMachineModel ElectricCalculation::GetMachineModel(SyncGenerator* g auto data = generator->GetElectricalData(); if(data.transTd0 != 0.0) { if(data.transTq0 != 0.0) { - if(data.subTd0 != 0.0 || data.subTq0 != 0.0) { - return Machines::SM_MODEL_5; - } + if(data.subTd0 != 0.0 || data.subTq0 != 0.0) { return Machines::SM_MODEL_5; } return Machines::SM_MODEL_3; } else { - if(data.subTd0 != 0.0 || data.subTq0 != 0.0) { - return Machines::SM_MODEL_4; - } + if(data.subTd0 != 0.0 || data.subTq0 != 0.0) { return Machines::SM_MODEL_4; } return Machines::SM_MODEL_2; } } @@ -749,9 +738,7 @@ std::vector<std::complex<double> > ElectricCalculation::ComplexMatrixTimesVector for(unsigned int i = 0; i < matrix.size(); i++) { solution.push_back(std::complex<double>(0.0, 0.0)); - for(unsigned int j = 0; j < matrix.size(); j++) { - solution[i] += matrix[i][j] * vector[j]; - } + for(unsigned int j = 0; j < matrix.size(); j++) { solution[i] += matrix[i][j] * vector[j]; } } return solution; @@ -782,40 +769,30 @@ void ElectricCalculation::GetLUDecomposition(std::vector<std::vector<std::comple } // Lower matrix main diagonal. - for(int i = 1; i < size; i++) { - matrixL[i][i] = std::complex<double>(1.0, 0.0); - } + for(int i = 1; i < size; i++) { matrixL[i][i] = std::complex<double>(1.0, 0.0); } for(int i = 1; i < size - 1; i++) { // Upper matrix main diagonal. matrixU[i][i] = matrix[i][i]; - for(int k = 0; k < i; k++) { - matrixU[i][i] -= matrixL[i][k] * matrixU[k][i]; - } + for(int k = 0; k < i; k++) { matrixU[i][i] -= matrixL[i][k] * matrixU[k][i]; } // Others elements of upper matrix for(int j = i + 1; j < size; j++) { matrixU[i][j] = matrix[i][j]; - for(int k = 0; k < i; k++) { - matrixU[i][j] -= matrixL[i][k] * matrixU[k][j]; - } + for(int k = 0; k < i; k++) { matrixU[i][j] -= matrixL[i][k] * matrixU[k][j]; } } // Lower matrix elements for(int j = i + 1; j < size; j++) { matrixL[j][i] = matrix[j][i]; - for(int k = 0; k < i; k++) { - matrixL[j][i] -= matrixL[j][k] * matrixU[k][i]; - } + for(int k = 0; k < i; k++) { matrixL[j][i] -= matrixL[j][k] * matrixU[k][i]; } matrixL[j][i] = matrixL[j][i] / matrixU[i][i]; } } // Last element of upper matrix. matrixU[size - 1][size - 1] = matrix[size - 1][size - 1]; - for(int k = 0; k < size - 1; k++) { - matrixU[size - 1][size - 1] -= matrixL[size - 1][k] * matrixU[k][size - 1]; - } + for(int k = 0; k < size - 1; k++) { matrixU[size - 1][size - 1] -= matrixL[size - 1][k] * matrixU[k][size - 1]; } } std::vector<std::complex<double> > ElectricCalculation::LUEvaluate(std::vector<std::vector<std::complex<double> > > u, @@ -831,17 +808,13 @@ std::vector<std::complex<double> > ElectricCalculation::LUEvaluate(std::vector<s // Forward for(int i = 0; i < size; i++) { y[i] = b[i]; - for(int j = 0; j < i; j++) { - y[i] -= l[i][j] * y[j]; - } + for(int j = 0; j < i; j++) { y[i] -= l[i][j] * y[j]; } y[i] /= l[i][i]; } // Backward for(int i = size - 1; i >= 0; i--) { x[i] = y[i]; - for(int j = i + 1; j < size; j++) { - x[i] -= u[i][j] * x[j]; - } + for(int j = i + 1; j < size; j++) { x[i] -= u[i][j] * x[j]; } x[i] /= u[i][i]; } return x; |