private boolean llenarMatrizDiagonal() { /* * recorre la lista de Barras, por cada barra, pide la impedancia */ for (Componente miComponente : barras) { double admitancia = 0; int fil = barraPos.get(miComponente); double sumaImpedancia = miComponente.getImpedancia(); System.out.println(fil + "impedan" + sumaImpedancia); admitancia = 1 / sumaImpedancia; matrizAdmitancia[fil][fil] = admitancia; } return true; }
private void llenarMatrizAdmitancia() { // traer lista en el constructor // crea un hashMap con solo las barras int cont = -1; barras.clear(); barraPos.clear(); for (Componente i : listComponentes) { // si es barra lo agrega en lista barras if ("domain.Barra" == i.getClass().getName()) { // OJO VER N0TA barra-BarraPos: barras.add(i); // guarda las dupla "barra - posicion en arreglo" en un HashMap cont += 1; barraPos.put(i, cont); } } // define tamaño de matriz crearMatriz(barras.size()); // llenar matriz diagonal principal llenarMatrizDiagonal(); // llenar matriz todo menos diagonal principal llenarMatrizNoDiagonal(); // FALTA // Cargar matriz en JAMA // imprime matriz for (int filM = 0; filM < matrizAdmitancia.length; filM++) { for (int colM = 0; colM < matrizAdmitancia.length; colM++) { System.out.print("\t" + matrizAdmitancia[filM][colM] + " "); } System.out.println(); } }
private boolean llenarMatrizNoDiagonal() { /*recorre la lista, si no es barra, carga en un lista los componentes (padres ó hijos) que son barras * es decir, las barras que estan relacionadas directo al componente actual * luego toma la lista de barras y por cada barra busca las posiciones de las otras barras y agrega el valor * en la matriz, por medio de un bucle dentro de otro bucle */ Iterator<Componente> componenteIt = listComponentes.iterator(); List<Componente> hijos = new ArrayList<Componente>(); List<Componente> conexionBarras = new ArrayList<Componente>(); double admitancia; while (componenteIt.hasNext()) { conexionBarras.clear(); Componente miComponente = componenteIt.next(); // busca conexiones de directa barra - linea - barra // es decir, si es linea busca padre barra, ó hijos barra if ("domain.Barra" != (miComponente.getClass().getName())) { admitancia = miComponente.getAdmitancia(); // padre es barra? if (miComponente.getPadre() != null) { if ("domain.Barra" == (miComponente.getPadre().getClass().getName())) { conexionBarras.add(miComponente.getPadre()); } } // trae los hijos y filtra solo las barras hijos = miComponente.getHijos(); if (hijos != null) { for (Componente miHijo : hijos) { if ("domain.Barra" == (miHijo.getClass().getName())) { conexionBarras.add(miHijo); } } } // recorre la lista y dentro del bucle recorre de nuevo para las // conexiones if (conexionBarras != null) { for (Componente conHijoPri : conexionBarras) { int barraPriPos = barraPos.get(conHijoPri); for (Componente conHijoSec : conexionBarras) { if (!conHijoPri.equals(conHijoSec)) { int barraSecPos = barraPos.get(conHijoSec); System.out.println("completa hijo: " + barraPriPos + "-" + barraSecPos); matrizAdmitancia[barraPriPos][barraSecPos] = admitancia; } } } } } } return true; }
public double calcularCC(Componente barra, HashMap<Componente, Double> barraTensionCC) { /* * Busca el valor de cc de la barra seleccionda, y los voltaje de cada * barra directamente relacionada a la barra seleccionda */ // calcular matrizAdmitancia llenarMatrizAdmitancia(); double calculoCC = 0; // El sistema busca el valor de la barra seleccionada en la matriz // inversa. int posBarra = barraPos.get(barra); System.out.println("posBarra" + posBarra); // carga matriz inversa con JAMA Matrix matrizCalculo = new Matrix(matrizAdmitancia); // double det = matrizCalculo.det(); // System.out.println("DET: "+det); Matrix matrizInv = matrizCalculo.inverse(); System.out.println("inversa:"); matrizInv.print(5, 3); double matrizInversa[][] = matrizInv.getArray(); /* * El sistema aplica esta formula para conocer la corriente de * cortocircuito en esa barra: If=Vref/Zkk, donde Vref es el voltaje de * referencia de la barra seleccionada, y Zkk es el elemento de la * matriz inversa que representa la barra. */ double vref = ((Barra) barra).getVoltajeReferencia(); double zkk = matrizInversa[posBarra][posBarra]; double valorIf = vref / zkk; calculoCC = valorIf; System.out.println( "Calculo de CC en barra " + barra.getId() + ": " + valorIf + " = " + vref + "/" + zkk); /* * Por cada barra que esta directamente conectada a la barra * seleccionada,el sistema aplica esta formula para conocer el voltaje * de la barra: Vj=Vref-Zjk*If,donde Vref es el voltaje de referencia de * la barra seleccionada,Zjk es el elemento de la matriz inversa que * representa la barra que esta conectada a la barraseleccionada, e If * es la corriente de cortocircuito de la barra seleccionada (calculada * en el paso anterior). */ double vj = 0; double zjk = 0; // recorre la matriz de admitancia en la columna de la barra seleccionada, // en cada valor <>0 indica que hay una barra directamente conectada for (int cont = 0; cont < matrizAdmitancia.length; cont++) { if ((matrizAdmitancia[posBarra][cont] != 0) && (posBarra != cont)) { zjk = matrizInversa[posBarra][cont]; Componente barraConectada = barras.get(cont); // ojo vj = vref - (zjk * valorIf); barraTensionCC.put(barraConectada, vj); } } return calculoCC; }