Resultados
[Métodos de resolución]

Diagrama de colaboración para Resultados:

Funciones

int mostrar_solucion (basicos *p_DATOS)
 Función que se encarga de preparar los ficheros que se mostrarán por pantalla.
QString queescribo (QString escribir)
 Función que se encarga de complementar a mostrar_solucion para escribir el tipo de elemento del que se está tomando la variable Esta función, dependiendo de que elemento, retorna un QString con el nombre del mismo para poder escribirlo en el fichero de soluciones.
void escribirgnuplot (basicos *p_DATOS)
 Función que se encarga de crear el script que usará el GNUPlot para graficar la solución del transitorio.
int mostrar_CI (basicos *p_DATOS)
 Función que se encarga de identificar e indicar en la interfaz que representa cada Condición Inicial que debe ser introducida al realizar un análisis transitorio.
QString script (basicos *p_DATOS)
 Función que se abrir el script para que el usuario pueda modificarlo y adaptarlo a sus necesidades.

Descripción detallada

Grupo encargado de la preparación de los resultados de ambos sistemas

Documentación de las funciones

void escribirgnuplot ( basicos p_DATOS  ) 

Función que se encarga de crear el script que usará el GNUPlot para graficar la solución del transitorio.

Parámetros:
Puntero a estructura basicos
Ver también:
sbcl_principal::slt_xcircuit()
Variando esta función se pueden obtener los scripts que más se adecúen a las necesidades del usuario.
Ávalon permite la modificación del script generado por defecto a través de la interfaz de salida

Definición en la línea 587 del archivo estructuras.cpp.

00588 {
00589 QString dire =p_DATOS->datos_trans;
00590 fstream fich(dire, ios::in |ios::out | ios::trunc | ios::binary);
00591 char texto[100];
00592 ifstream fichero;
00593 // Abro para lectura
00594 fichero.open("x_trans.data");
00595 float contador=p_DATOS->t0;; 
00596 if (!fichero)
00597 {
00598         cout << "No se ha podido abrir el fichero." << endl;
00599         exit(1);
00600 } 
00601 fichero.get(texto,256); 
00602 
00603 for (int indice=0; indice<=(p_DATOS->filas()*p_DATOS->numv)+1; indice++)
00604 {               
00605         fich<<texto<<" ";
00606         fichero.getline(texto,256); 
00607         if(0==indice%p_DATOS->filas() && indice!=0 && indice!=p_DATOS->filas()*p_DATOS->numv)
00608         {fich<<" "<<contador<<" \n";contador=contador+p_DATOS->h;}                      
00609 }
00610                 
00611 fichero.close();
00612 fich.close();
00613 //Ploteando las soluciones
00614 fstream ploteo(p_DATOS->datos_script, ios::in |ios::out | ios::trunc | ios::binary);
00615 ifstream variable;
00616 variable.open("variables.data");
00617 
00618 if (!variable)
00619 {
00620         cout << "No se ha podido abrir el fichero." << endl;
00621         exit(1);
00622 } 
00623 variable.getline(texto,255);                    
00624 int numcol=p_DATOS->filas()+1;
00625 ploteo<<"set terminal png "<<endl;
00626 QString grafica = p_DATOS->solucion;
00627 ploteo<<"set output '"<<grafica<<"'"<<endl;
00628 ploteo<<"set encoding iso_8859_1\nset grid\n"<<
00629 "set autoscale\nset key bottom right title 'Variables' box"<<endl;
00630 ploteo<<"set title 'Graficado por defecto de las soluciones del circuito'"<<endl;       
00631 ploteo<<"plot ";        
00632 for(int graf=numcol;graf>1;graf--)
00633 {
00634         ploteo<<"'"<<dire<<"' using "<<numcol<<":"<<numcol-graf+1<<
00635         " title '"<<texto<<"'"<<" with lines";
00636         variable.getline(texto,255);                        
00637         if(numcol-graf+1!=numcol-1){ploteo<<", ";}
00638 }
00639 ploteo<<"\n"<<endl;             
00640 variable.close();
00641 ploteo.close();
00642 QString plotear = p_DATOS->datos_script;
00643 plotear.prepend("gnuplot ");
00644 system (plotear);               
00645 }

int mostrar_CI ( basicos p_DATOS  ) 

Función que se encarga de identificar e indicar en la interfaz que representa cada Condición Inicial que debe ser introducida al realizar un análisis transitorio.

Parámetros:
Puntero a estructura basicos
Con esta función se puede saber que es cada variable que solicita el programa antes de realizar un análisis transitorio. Se debe tener presente que las condiciones iniciales deben ser consistentes.

Definición en la línea 647 del archivo estructuras.cpp.

00648 {
00649 PetscViewer viewer;
00650 PetscScalar DATO;
00651 PetscViewerASCIIOpen(PETSC_COMM_WORLD, "CI.data", &viewer);
00652 PetscViewerDestroy(viewer);
00653 fstream fich("CI.data", ios::in |ios::out | ios::trunc | ios::binary);
00654 for (int i=0; i<p_DATOS->nodos; i++)
00655 {
00656 fich<<"V nodo "<<i+1<<endl;
00657 }
00658 QString esA2, esEA, elemento, nodoi, nodoj, nodom, nodon;
00659 
00660 for(int j=0; j<p_DATOS->elementos;j++)
00661 {
00662 esA2=p_DATOS->tableMDG->text(j,3);
00663 esEA=p_DATOS->tableMDG->text(j,2);
00664 elemento=p_DATOS->tableMDG->text(j,0);
00665 nodoi=p_DATOS->tableMN->text(j,0);
00666 nodoj=p_DATOS->tableMN->text(j,1);
00667 nodom=p_DATOS->tableMN->text(j,2);
00668 nodon=p_DATOS->tableMN->text(j,3);
00669 
00670 if (esA2=="2")
00671 {
00672 if(elemento=="1")
00673         {fich<<"I Resistencia entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00674 if(elemento=="3")
00675         {fich<<"I Bobina entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00676 if(elemento=="4")
00677         {fich<<"I Fuente tension entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00678 if(elemento=="6")
00679         {fich<<"I Amplificador entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00680 if(elemento=="7")
00681         {fich<<"I Trafo entre nodos "<<nodoi<<", "<<nodoj<<endl;
00682          fich<<"I Trafo entre nodos "<<nodom<<", "<<nodon<<endl;}
00683 if(elemento=="9")
00684         {fich<<"I Fuente de V dependiente de V entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00685 if(elemento=="10")
00686         {fich<<"I Fuente de I dependiente de I entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00687 if(elemento=="11")
00688         {fich<<"I Fuente de V dependiente de I entre nodos "<<nodoi<<", "<<nodoj<<endl;
00689          fich<<"I Fuente de V dependiente de I entre nodos "<<nodom<<", "<<nodon<<endl;}
00690 if(elemento=="12")
00691         {fich<<"I Bobinas Acopladas entre nodos "<<nodoi<<", "<<nodoj<<endl;
00692          fich<<"I Bobinas Acopladas entre nodos "<<nodom<<", "<<nodon<<endl;}
00693 if(elemento=="13")
00694         {fich<<"I que recorre el Interruptor  entre nodos "<<nodoi<<", "<<endl;}
00695 if(elemento=="15")
00696         {fich<<"I Cuatripolo en Z entre nodos "<<nodoi<<", "<<nodoj<<endl;
00697          fich<<"I Cuatripolo en Z entre nodos "<<nodom<<", "<<nodon<<endl;}
00698 if(elemento=="16")
00699         {fich<<"I Cuatripolo en h entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00700 if(elemento=="17")
00701         {fich<<"I Cuatripolo en r entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00702 }
00703 if (esA2=="1")
00704 {
00705         if(esEA=="1")
00706         {
00707                 if(esEA=="1")
00708                 {
00709                 if(elemento=="0")
00710                 {fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<
00711                 " entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00712                 if(elemento=="2")
00713                 {fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<
00714                 " entre nodos "<<nodoi<<", "<<nodoj<<endl;}
00715                 if(elemento=="8")
00716                 {fich<<"I de Fuente de I dependiente de V entre nodos "<<nodom<<
00717                 ", "<<nodon<<endl;}
00718                 }
00719         }
00720 }
00721 } 
00722 }

int mostrar_solucion ( basicos p_DATOS  ) 

Función que se encarga de preparar los ficheros que se mostrarán por pantalla.

Parámetros:
Puntero a estructura basicos
Esta función prepara los ficheros siguientes:
  • Archivo donde se vuelcan los resultados del sistema estacionario identificando cada una de las variables utilizadas
  • Archivo Variables en el cual se apoya la función de generación de script para gnuplot
    Ver también:
    escribirgnuplot

Definición en la línea 200 del archivo estructuras.cpp.

00201 {
00202 PetscViewer viewer;
00203 PetscScalar DATO;
00204 if(p_DATOS->estacionario==1)
00205 {
00206 QString dire=p_DATOS->datos_perm;
00207 PetscViewerASCIIOpen(PETSC_COMM_WORLD, dire, &viewer);
00208 PetscViewerDestroy(viewer);
00209 fstream fich(dire, ios::in |ios::out | ios::trunc | ios::binary);
00210 char texto[100];
00211 ifstream fichero;
00212    // Abro para lectura
00213    fichero.open("x_perm.data"); 
00214  if (!fichero)
00215  {
00216    cout << "No se ha podido abrir el fichero."<< endl;
00217    exit(1);
00218  } 
00219 fichero.getline(texto,256);
00220 //fichero >> texto;
00221 fich<<"Resultados sistema estacionario: \n"<<endl;
00222 for (int i=0; i<p_DATOS->nodos; i++)
00223 {
00224 fich<<"Tensión en nodo "<<i+1<<": "<<texto<<endl;
00225 fichero.getline(texto,256); 
00226 }
00227 QString esA2, esEA, elemento, nodoi, nodoj, nodom, nodon;
00228 
00229 for(int j=0; j<p_DATOS->elementos;j++)
00230 {
00231 esA2=p_DATOS->tableMDG->text(j,3);
00232 esEA=p_DATOS->tableMDG->text(j,2);
00233 elemento=p_DATOS->tableMDG->text(j,0);
00234 nodoi=p_DATOS->tableMN->text(j,0);
00235 nodoj=p_DATOS->tableMN->text(j,1);
00236 nodom=p_DATOS->tableMN->text(j,2);
00237 nodon=p_DATOS->tableMN->text(j,3);
00238 
00239 if (esA2=="2")
00240 {
00241 if(elemento=="1")
00242         {fich<<"I Resistencia entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl; 
00243         fichero.getline(texto,256);}
00244 if(elemento=="3")
00245         {fich<<"I de Bobina entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl; 
00246         fichero.getline(texto,256);}
00247 if(elemento=="4")
00248         {fich<<"I de Fuente tension entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl; 
00249         fichero.getline(texto,256);}
00250 if(elemento=="6")
00251         {fich<<"I de Amplificador entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl; 
00252         fichero.getline(texto,256);}
00253 if(elemento=="7")
00254         {fich<<"I de Trafo entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl; 
00255         fichero.getline(texto,256);
00256         fich<<"I de Trafo entre nodos "<<nodom<<", "<<nodon<<": "<<texto<<endl; 
00257         fichero.getline(texto,256);}
00258 if(elemento=="9")
00259         {fich<<"I de Fuente de V dependiente de V entre nodos "<<nodoi<<
00260         ", "<<nodoj<<": "<<texto<<endl;
00261         fichero.getline(texto,256);}
00262 if(elemento=="10")
00263         {fich<<"I de Fuente de I dependiente de I entre nodos "<<nodoi<<
00264         ", "<<nodoj<<": "<<texto<<endl;
00265         fichero.getline(texto,256);}
00266 if(elemento=="11")
00267         {fich<<"I de Fuente de V dependiente de I entre nodos "<<nodoi<<
00268         ", "<<nodoj<<": "<<texto<<endl;
00269         fichero.getline(texto,256);
00270         fich<<"I de Fuente de V dependiente de I entre nodos "<<nodom<<
00271         ", "<<nodon<<": "<<texto<<endl;
00272         fichero.getline(texto,256);}
00273 if(elemento=="12")
00274         {fich<<"I de Bobinas Acopladas entre nodos "<<nodoi<<
00275         ", "<<nodoj<<": "<<texto<<endl;
00276         fichero.getline(texto,256);
00277         fich<<"I de Bobinas Acopladas entre nodos "<<nodom<<", "<<
00278         nodon<<": "<<texto<<endl;
00279         fichero.getline(texto,256);}
00280 if(elemento=="13")
00281         {fich<<"I que recorre el Interruptor  entre nodos "<<nodoi<<
00282         ", "<<nodoj<<"\n";
00283         fichero.getline(texto,256);}
00284 if(elemento=="15")
00285         {fich<<"I de Cuatripolo en Z entre nodos "<<nodoi<<", "<<nodoj<<
00286         ": "<<texto<<endl;
00287         fichero.getline(texto,256);
00288         fich<<"I de Cuatripolo en Z entre nodos "<<nodom<<", "<<nodon<<
00289         ": "<<texto<<endl;
00290         fichero.getline(texto,256);}
00291 if(elemento=="16")
00292         {fich<<"I de Cuatripolo en h entre nodos "<<nodoi<<", "<<nodoj<<
00293         ": "<<texto<<endl;
00294         fichero.getline(texto,256);}
00295 if(elemento=="17")
00296         {fich<<"I de Cuatripolo en r entre nodos "<<nodoi<<", "<<nodoj<<
00297         ": "<<texto<<endl;
00298         fichero.getline(texto,256);}
00299 }
00300 if (esA2=="1")
00301 {
00302         if(esEA=="1")
00303         {
00304                 if(esEA=="1")
00305                 {
00306                 if(elemento=="0")
00307                 {
00308                 fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<
00309                 " entre nodos "<<nodoi<<", "
00310                 <<nodoj<<": "<<texto<<endl;
00311                 fichero.getline(texto,256); 
00312                 }
00313                 if(elemento=="2")
00314                 {
00315                 fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<
00316                 " entre nodos "<<nodoi<<", "
00317                 <<nodoj<<": "<<texto<<endl;
00318                 fichero.getline(texto,256); 
00319                 }
00320                 if(elemento=="8")
00321                 {fich<<"I de Fuente de I dependiente de V entre nodos "<<nodom<<", "<<
00322                 nodon<<": "<<texto<<endl;
00323                 fichero.getline(texto,256);}
00324                 }
00325         }
00326 }
00327 }
00328 fichero.close(); 
00329 }
00330 
00331 if(p_DATOS->transitorio==1)
00332 {
00333 PetscViewerASCIIOpen(PETSC_COMM_WORLD, "variables.data", &viewer);
00334 PetscViewerDestroy(viewer);
00335 fstream fich("variables.data", ios::in |ios::out | ios::trunc | ios::binary);
00336 char texto[100];
00337 ifstream fichero;
00338    // Abro para lectura
00339    fichero.open("x_trans.data"); 
00340  if (!fichero)
00341  {
00342    cout << "No se ha podido abrir el fichero variables data."<< endl;
00343    exit(1);
00344  } 
00345 fichero.getline(texto,256);
00346 //fichero >> texto;
00347 for (int i=0; i<p_DATOS->nodos; i++)
00348 {
00349 fich<<"V en nodo "<<i+1<<"\n";
00350 fichero.getline(texto,256); 
00351 }
00352 QString esA2, esEA, elemento, nodoi, nodoj, nodom, nodon;
00353 
00354 for(int j=0; j<p_DATOS->elementos;j++)
00355 {
00356 esA2=p_DATOS->tableMDG->text(j,3);
00357 esEA=p_DATOS->tableMDG->text(j,2);
00358 elemento=p_DATOS->tableMDG->text(j,0);
00359 nodoi=p_DATOS->tableMN->text(j,0);
00360 nodoj=p_DATOS->tableMN->text(j,1);
00361 nodom=p_DATOS->tableMN->text(j,2);
00362 nodon=p_DATOS->tableMN->text(j,3);
00363 
00364 if (esA2=="2")
00365 {
00366 if(elemento=="1")
00367         {fich<<"I Resistencia entre nodos "<<nodoi<<", "<<nodoj<<endl; 
00368         fichero.getline(texto,256);}
00369 if(elemento=="3")
00370         {fich<<"I de Bobina entre nodos "<<nodoi<<", "<<nodoj<<endl; 
00371         fichero.getline(texto,256);}
00372 if(elemento=="4")
00373         {fich<<"I de Fuente tension entre nodos "<<nodoi<<", "<<nodoj<<endl; 
00374         fichero.getline(texto,256);}
00375 if(elemento=="6")
00376         {fich<<"I de Amplificador entre nodos "<<nodoi<<", "<<nodoj<<endl; 
00377         fichero.getline(texto,256);}
00378 if(elemento=="7")
00379         {fich<<"I de Trafo entre nodos "<<nodoi<<", "<<nodoj<<endl; 
00380         fichero.getline(texto,256);
00381         fich<<"I de Trafo entre nodos "<<nodom<<", "<<nodon<<endl; 
00382         fichero.getline(texto,256);}
00383 if(elemento=="9")
00384         {fich<<"I de Fuente de V dependiente de V entre nodos "<<nodoi<<", "<<nodoj<<endl;
00385         fichero.getline(texto,256);}
00386 if(elemento=="10")
00387         {fich<<"I de Fuente de I dependiente de I entre nodos "<<nodoi<<", "<<nodoj<<endl;
00388         fichero.getline(texto,256);}
00389 if(elemento=="11")
00390         {fich<<"I de Fuente de V dependiente de I entre nodos "<<nodoi<<", "<<nodoj<<endl;
00391         fichero.getline(texto,256);
00392         fich<<"I de Fuente de V dependiente de I entre nodos "<<nodom<<", "<<nodon<<endl;
00393         fichero.getline(texto,256);}
00394 if(elemento=="12")
00395         {fich<<"I de Bobinas Acopladas entre nodos "<<nodoi<<", "<<nodoj<<endl;
00396         fichero.getline(texto,256);
00397         fich<<"I de Bobinas Acopladas entre nodos "<<nodom<<", "<<nodon<<endl;
00398         fichero.getline(texto,256);}
00399 if(elemento=="13")
00400         {fich<<"I que recorre el Interruptor  entre nodos "<<nodoi<<", "<<nodoj<<"\n";
00401         fichero.getline(texto,256);}
00402 if(elemento=="15")
00403         {fich<<"I de Cuatripolo en Z entre nodos "<<nodoi<<", "<<nodoj<<endl;
00404         fichero.getline(texto,256);
00405         fich<<"I de Cuatripolo en Z entre nodos "<<nodom<<", "<<nodon<<endl;
00406         fichero.getline(texto,256);}
00407 if(elemento=="16")
00408         {fich<<"I de Cuatripolo en h entre nodos "<<nodoi<<", "<<nodoj<<endl;
00409         fichero.getline(texto,256);}
00410 if(elemento=="17")
00411         {fich<<"I de Cuatripolo en r entre nodos "<<nodoi<<", "<<nodoj<<endl;
00412         fichero.getline(texto,256);}
00413 }
00414 if (esA2=="1")
00415 {
00416         if(esEA=="1")
00417         {
00418                 if(esEA=="1")
00419                 {
00420                 if(elemento=="0")
00421                 {
00422                 fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<
00423                 " entre nodos "<<nodoi<<", "<<nodoj<<endl;
00424                 fichero.getline(texto,256); 
00425                 }
00426                 if(elemento=="2")
00427                 {
00428                 fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<
00429                 " entre nodos "<<nodoi<<", "<<nodoj<<endl;
00430                 fichero.getline(texto,256); 
00431                 }
00432                 if(elemento=="8")
00433                 {fich<<"I de Fuente de I dependiente de V entre nodos "<<nodom<<
00434                 ", "<<nodon<<endl;fichero.getline(texto,256);}
00435                 }
00436         }
00437 }
00438 
00439 }
00440 fichero.close(); 
00441 }
00442 return 0;
00443 }

QString queescribo ( QString  escribir  ) 

Función que se encarga de complementar a mostrar_solucion para escribir el tipo de elemento del que se está tomando la variable Esta función, dependiendo de que elemento, retorna un QString con el nombre del mismo para poder escribirlo en el fichero de soluciones.

Parámetros:
Puntero a estructura basicos
Ver también:
mostrar_solucion
Devuelve:
Retorna un QString con el nombre del elemento al cual pertenece la variable que se ha calculado

Definición en la línea 448 del archivo estructuras.cpp.

00449 {
00450 QString retorno;
00451 bool result; int escrito;
00452 escrito=escribir.toInt(&result,10);
00453 switch (escrito)
00454         {
00455         case 0:  retorno="Conductancia";
00456         return retorno;break;
00457         case 1:  cout<<"\n ERROR La resistencia es siempre del Grupo A2"<<
00458         endl ;break;
00459         case 2:  retorno="Condensador";
00460         return retorno;break;
00461         case 3:  cout<<"\n ERROR La bobina es siempre del Grupo A2"<<
00462         endl;break;
00463         case 4:  retorno="Fuente de Tensión";
00464         return retorno;break;
00465         case 5:  retorno="Fuente de Corriente";
00466         return retorno;break;
00467         case 6:  retorno="Amplificador Operacional";
00468         return retorno;break;
00469         case 7:  retorno="Transformador";
00470         return retorno;break;
00471         case 8:  retorno="Fuente de Corriente dependiente de Tensión";
00472         return retorno;break;
00473         case 9:  retorno="Fuente de Tensión dependiente de Tensión";
00474         return retorno;break;
00475         case 10: retorno="Fuente de Intensidad dependiente de Intensidad";
00476         return retorno;break;
00477         case 11: retorno="Fuente de Tensión dependiente de Intensidad";
00478         return retorno;break;
00479         case 12: retorno="Bobinas Acopladas";
00480         return retorno;break;
00481         case 13: cout<<"\n ERROR Este elemento no existe en Ávalon"<<
00482         endl; break;
00483         }
00484 }

QString script ( basicos p_DATOS  ) 

Función que se abrir el script para que el usuario pueda modificarlo y adaptarlo a sus necesidades.

Parámetros:
Puntero a estructura basicos
Por defecto esta función abre el fichero con el editor de texto kwrite, si se quisiese que lo abriese con otro editor debería realizarse la modificación oportuna en el código.

Definición en la línea 724 del archivo estructuras.cpp.

00725 {
00726 QString comando = p_DATOS->datos_script;                
00727         comando.prepend("kwrite ");//añade "convert " al string comando
00728 return comando;
00729 }


Generado el Wed Sep 2 16:04:54 2009 para Software de Análisis de Circuitos Lineales mediante Métodos Avanzados de Resolución para Uso Docente. Manual de Código Fuente por  doxygen 1.5.6