manual de código fuente

118

Upload: ayose-lomba-perez

Post on 24-Mar-2016

226 views

Category:

Documents


0 download

DESCRIPTION

Manual de código fuente del Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente.

TRANSCRIPT

Page 1: Manual de Código Fuente

Software de análisis de circuitos linealesmediante métodos avanzados deresolución para uso docente.

Autor: Ayose Lomba Pérez

Tutores: Jose Miguel Monzón VeronaAntonio Andrés Ocón Carreras

Fecha: Septiembre 2009

Universidad de Las Palmas de Gran CanariaEscuela Técnica Superior de Ingenieros Industriales

Ingeniería Industrial

Manual de Código Fuente

Page 2: Manual de Código Fuente
Page 3: Manual de Código Fuente

ÍNDICE I

Índice

1. Ávalon. 1

2. Indice de módulos 2

2.1. Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

3. Índice de clases 2

3.1. Lista de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

4. Indice de archivos 3

4.1. Lista de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

5. Documentación de módulos 3

5.1. Generación de las variables del sistema matricial Tx=W . . . . . . . . . . . . . . . . . . . 3

5.1.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

5.1.2. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

5.2. Forma de cargar los distintos elementos que componen un circuito . . . . . . . . . . . . . 9

5.2.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5.2.2. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5.3. Métodos de resolución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5.3.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

5.3.2. Slots públicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

5.3.3. Slots protegidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5.4. Resolución de Permanente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5.4.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5.4.2. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

5.5. Resolución de Transitorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

5.5.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5.5.2. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5.6. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

5.6.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

5.6.2. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5.7. Selección de filas en las Qtable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

5.7.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5.7.2. Slots públicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5.8. Creación del sistema general de ecuaciones lineales . . . . . . . . . . . . . . . . . . . . . 35

5.8.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 4: Manual de Código Fuente

1 Ávalon. 1

5.9. Ensamblaje los elementos en el sistema lineal . . . . . . . . . . . . . . . . . . . . . . . . 36

5.9.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5.9.2. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

5.10. Ensamblaje sobre la Matriz T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

5.10.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

5.10.2. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

5.11. Ensamblaje sobre el Vector W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

5.11.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

5.11.2. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

6. Documentación de las clases 76

6.1. Referencia de la Estructura basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

6.1.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

6.1.2. Documentación de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 79

6.1.3. Documentación de los datos miembro . . . . . . . . . . . . . . . . . . . . . . . . 81

6.2. Referencia de la Estructura sbcl_principal . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6.2.1. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

6.2.2. Documentación del constructor y destructor . . . . . . . . . . . . . . . . . . . . . 88

6.2.3. Documentación de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 89

6.2.4. Documentación de los datos miembro . . . . . . . . . . . . . . . . . . . . . . . . 97

7. Documentación de archivos 97

7.1. Referencia del Archivo Programacion/AVALON/src/cabeceras.h . . . . . . . . . . . . . . 97

7.1.1. Documentación de las definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . 99

7.2. Referencia del Archivo Programacion/AVALON/src/elementos.cpp . . . . . . . . . . . . . 99

7.3. Referencia del Archivo Programacion/AVALON/src/elementos.h . . . . . . . . . . . . . . 101

7.4. Referencia del Archivo Programacion/AVALON/src/estructuras.cpp . . . . . . . . . . . . 103

7.4.1. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

7.5. Referencia del Archivo Programacion/AVALON/src/estructuras.h . . . . . . . . . . . . . . 106

7.5.1. Documentación de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

7.6. Referencia del Archivo Programacion/AVALON/src/sbcl_principal.cpp . . . . . . . . . . 109

7.7. Referencia del Archivo Programacion/AVALON/src/sbcl_principal.h . . . . . . . . . . . . 109

1. Ávalon.

Documentación del código del PFC denominado "Software de análisis de circuitos lineales mediante méto-dos avanzados de resolución para uso docente"

Esta documentación pretende ser una guía para aquellos que deseen mejorar el funcionamiento del progra-

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 5: Manual de Código Fuente

2 Indice de módulos 2

ma o realizar una ampliación del mismo. Se ha intentado realizar una guía rápida de consulta para tenerpresente en todo momento la función de cada variable, estructura, clase y función que componen este pro-grama de análisis de circuitos para la Escuela Técnica Superior de Ingenieros Industriales de Las Palmasde Gran Canaria.

Autor:

Ayose Lomba Pérez

Fecha:

Septiembre 2009

2. Indice de módulos

2.1. Módulos

Lista de todos los módulos:

Métodos de resolución 18

Resolución de Permanente 22

Resolución de Transitorio 23

Resultados 25

Selección de filas en las Qtable 33

Creación del sistema general de ecuaciones lineales 35

Generación de las variables del sistema matricial Tx=W 3

Forma de cargar los distintos elementos que componen un circuito 9

Ensamblaje los elementos en el sistema lineal 36

Ensamblaje sobre la Matriz T 38

Ensamblaje sobre el Vector W 73

3. Índice de clases

3.1. Lista de clases

Lista de las clases, estructuras, uniones e interfaces con una breve descripción:

basicos (Estructura que almacena datos de interés para el correcto funcionamiento del pro-grama ) 76

sbcl_principal (Clase en la que se encuentran los diferentes slots utilizados para hacer fun-cionar la parte gráfica del programa ) 86

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 6: Manual de Código Fuente

4 Indice de archivos 3

4. Indice de archivos

4.1. Lista de archivos

Lista de todos los archivos con descripciones breves:

Programacion/AVALON/src/cabeceras.h 97

Programacion/AVALON/src/elementos.cpp 99

Programacion/AVALON/src/elementos.h 101

Programacion/AVALON/src/estructuras.cpp 103

Programacion/AVALON/src/estructuras.h 106

Programacion/AVALON/src/sbcl_principal.cpp 109

Programacion/AVALON/src/sbcl_principal.h 109

5. Documentación de módulos

5.1. Generación de las variables del sistema matricial Tx=W

Diagrama de colaboración para Generación de las variables del sistema matricial Tx=W:

Generación de las variables del sistema matricial Tx=WCreación del sistema general de ecuaciones lineales

Conjunto de funciones que se encarga de preparar los elementos del sistema matricial Tx=W

.

Funciones

Mat basicos::creaT ()Se encarga de dimensionar la matriz T del sistema a resolver. NOTA: La matriz T es una matriz sparsegenerada con las funciones de la librería PETCs.

void basicos::creaGC ()Se encarga de dimensionar las matrices del sistema transitorio G y C. NOTA: La matrices G y C sonmatrices sparse generadas con las funciones de la librería PETCs.

Vec basicos::creaW ()Se encarga de dimensionar el vector W para el sistema estacionario NOTA: El vector W es un vectorgenerado con las funciones de la librería PETCs.

Vec basicos::creaWn ()Se encarga de dimensionar el vector Wn para el sistema transitorio NOTA: El vector Wn es un vectorgenerado con las funciones de la librería PETCs.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 7: Manual de Código Fuente

5.1 Generación de las variables del sistema matricial Tx=W 4

Vec basicos::creaWn1 ()Se encarga de dimensionar el vector Wn1 para el sistema transitorio NOTA: El vector Wn1 es un vectorgenerado con las funciones de la librería PETCs.

Vec basicos::creax_perm ()Se encarga de dimensionar el vector x para el sistema estacionario. En el se almacenan las soluciones delmismo. NOTA: El vector x_perm es un vector generado con las funciones de la librería PETCs.

Vec basicos::creax_trans ()Se encarga de dimensionar el vector x para el sistema transitorio. En el se almacenan las soluciones delmismo. NOTA: El vector x_trans es un vector generado con las funciones de la librería PETCs.

void dimensiona (int ∗num_line_total, basicos ∗DATOS)Se encarga de dimensionar la matriz T y el vector W para el posterior cálculo del sistema que nos propor-cionará la solución del circuito. Tras calcular la dimensión de la misma se encarga de la creación de la Ty W.

int num_nodos (int ∗num_line_total, basicos ∗p_DATOS)Calcula el número de nodos del circuito. Para ello realiza un barrido por la qtable MN buscando el mayorvalor introducido.

int num_elemA2 (int ∗, basicos ∗)Calcula el número de elementos pertenecientes al grupo A2. Para ello realiza un barrido por la qtable MDGbuscando los elementos del grupo A2.

int num_EA (int ∗num_line_total, basicos ∗p_DATOS)Calcula el número de elementos que se han considerado ecuación adicional. Para ello realiza un barridopor la qtable MDG sumando el número de ecuaciones adicionales existentes.

5.1.1. Descripción detallada

Conjunto de funciones que se encarga de preparar los elementos del sistema matricial Tx=W

.

5.1.2. Documentación de las funciones

5.1.2.1. void basicos::creaGC () [inline, inherited]

Se encarga de dimensionar las matrices del sistema transitorio G y C. NOTA: La matrices G y C sonmatrices sparse generadas con las funciones de la librería PETCs.

Definición en la línea 110 del archivo estructuras.h.

111 {112 MatCreateSeqAIJ(PETSC_COMM_SELF,filas(),columnas(),10,PETSC_NULL,&G);113 MatAssemblyBegin(G,MAT_FINAL_ASSEMBLY); MatAssemblyEnd(G,MAT_FINAL_ASSEMBLY);114 MatCreateSeqAIJ(PETSC_COMM_SELF,filas(),columnas(),10,PETSC_NULL,&C);115 MatAssemblyBegin(C,MAT_FINAL_ASSEMBLY); MatAssemblyEnd(C,MAT_FINAL_ASSEMBLY);116 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 8: Manual de Código Fuente

5.1 Generación de las variables del sistema matricial Tx=W 5

5.1.2.2. Mat basicos::creaT () [inline, inherited]

Se encarga de dimensionar la matriz T del sistema a resolver. NOTA: La matriz T es una matriz sparsegenerada con las funciones de la librería PETCs.

Devuelve:

Retorna un puntero a una matriz PETCs

Definición en la línea 100 del archivo estructuras.h.

101 {102 MatCreateSeqAIJ(PETSC_COMM_SELF,filas(),columnas(),10,PETSC_NULL,&T);103 MatAssemblyBegin(T,MAT_FINAL_ASSEMBLY); MatAssemblyEnd(T,MAT_FINAL_ASSEMBLY);104 return T;105 }

5.1.2.3. Vec basicos::creaW () [inline, inherited]

Se encarga de dimensionar el vector W para el sistema estacionario NOTA: El vector W es un vectorgenerado con las funciones de la librería PETCs.

Devuelve:

Retorna un puntero a un vector PETCs

Definición en la línea 123 del archivo estructuras.h.

124 {125 VecCreate(PETSC_COMM_SELF,&W);126 VecSetSizes(W,PETSC_DECIDE,filas());127 VecSetFromOptions(W);128 VecAssemblyBegin(W); VecAssemblyEnd(W);129 return W;130 }

5.1.2.4. Vec basicos::creaWn () [inline, inherited]

Se encarga de dimensionar el vector Wn para el sistema transitorio NOTA: El vector Wn es un vectorgenerado con las funciones de la librería PETCs.

Devuelve:

Retorna un puntero a un vector PETCs

Definición en la línea 137 del archivo estructuras.h.

138 {139 VecCreate(PETSC_COMM_SELF,&Wn);140 VecSetSizes(Wn,PETSC_DECIDE,filas());141 VecSetFromOptions(Wn);142 VecAssemblyBegin(Wn); VecAssemblyEnd(Wn);143 return Wn;144 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 9: Manual de Código Fuente

5.1 Generación de las variables del sistema matricial Tx=W 6

5.1.2.5. Vec basicos::creaWn1 () [inline, inherited]

Se encarga de dimensionar el vector Wn1 para el sistema transitorio NOTA: El vector Wn1 es un vectorgenerado con las funciones de la librería PETCs.

Devuelve:

Retorna un puntero a un vector PETCs

Definición en la línea 151 del archivo estructuras.h.

152 {153 VecCreate(PETSC_COMM_SELF,&Wn1);154 VecSetSizes(Wn1,PETSC_DECIDE,filas());155 VecSetFromOptions(Wn1);156 VecAssemblyBegin(Wn1); VecAssemblyEnd(Wn1);157 return Wn1;158 }

5.1.2.6. Vec basicos::creax_perm () [inline, inherited]

Se encarga de dimensionar el vector x para el sistema estacionario. En el se almacenan las soluciones delmismo. NOTA: El vector x_perm es un vector generado con las funciones de la librería PETCs.

Devuelve:

Retorna un puntero a un vector PETCs

Definición en la línea 165 del archivo estructuras.h.

166 {167 VecCreate(PETSC_COMM_SELF,&x_perm);168 VecSetSizes(x_perm,PETSC_DECIDE,filas());169 VecSetFromOptions(x_perm);170 VecAssemblyBegin(x_perm); VecAssemblyEnd(x_perm);171 return x_perm;172 }

5.1.2.7. Vec basicos::creax_trans () [inline, inherited]

Se encarga de dimensionar el vector x para el sistema transitorio. En el se almacenan las soluciones delmismo. NOTA: El vector x_trans es un vector generado con las funciones de la librería PETCs.

Devuelve:

Retorna un puntero a un vector PETCs

Definición en la línea 179 del archivo estructuras.h.

180 {181 VecCreate(PETSC_COMM_SELF,&x_trans);182 VecSetSizes(x_trans,PETSC_DECIDE,filas());183 VecSetFromOptions(x_trans);184 VecAssemblyBegin(x_trans); VecAssemblyEnd(x_trans);185 return x_trans;186 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 10: Manual de Código Fuente

5.1 Generación de las variables del sistema matricial Tx=W 7

5.1.2.8. void dimensiona (int ∗ num_line_total, basicos ∗ DATOS)

Se encarga de dimensionar la matriz T y el vector W para el posterior cálculo del sistema que nos propor-cionará la solución del circuito. Tras calcular la dimensión de la misma se encarga de la creación de la T yW.

Parámetros:

num_line_total Esta variable contiene el número de líneas del fichero ∗.spc cargado que coincide conel número de elementos del circuito

DATOS Puntero a estructura basicos

Ver también:

num_nodos(), num_elemA2(), num_EA()

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

14 {15 int maxnodo,numA2, numEA;16 Mat T; Vec W, Wn,Wn1; // PetscScalar v[1];17 maxnodo = num_nodos (num_line_total, p_DATOS);18 p_DATOS->nodos=maxnodo;19 numA2 = num_elemA2 (num_line_total, p_DATOS);20 p_DATOS->A2=numA2;21 numEA = num_EA (num_line_total, p_DATOS);22 p_DATOS->EA=numEA;23 /*esta instruccion me da el valor donde ir colocando24 las EA que me encuentra al ir montando el sistema,25 según aparezcan iré incrementando este valor en 1*/26 p_DATOS->apuntaEA=p_DATOS->situaEA();27 /*Esta instrucción me da el valor donde debe ir28 el primer elemento que me encuentre perteneciente al grupo A2*/29 p_DATOS->apuntaA2=p_DATOS->situaA2();30 W=p_DATOS->creaW(); p_DATOS->W=W;31 T=p_DATOS->creaT(); p_DATOS->T=T;32 //Creación de Wn para transitorio33 Wn=p_DATOS->creaWn(); p_DATOS->Wn=Wn;34 Wn1=p_DATOS->creaWn1(); p_DATOS->Wn1=Wn1;35 }

5.1.2.9. int num_EA (int ∗ num_line_total, basicos ∗ p_DATOS)

Calcula el número de elementos que se han considerado ecuación adicional. Para ello realiza un barridopor la qtable MDG sumando el número de ecuaciones adicionales existentes.

Parámetros:

num_line_total Esta variable contiene el número de líneas del fichero ∗.spc cargado que coincide conel número de elementos del circuito

DATOS Puntero a estructura basicos

Ver también:

num_EA()

Devuelve:

Retorna el entero con el número de ecuaciones adicionales existentes en el circuito

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 11: Manual de Código Fuente

5.1 Generación de las variables del sistema matricial Tx=W 8

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

83 {84 bool result;85 QString var_string, var_string2;86 int var=0, var2=0, numEA=0, num_extra=0,total=0;87 for(int i=0;i<=*num_line_total;i++)88 {89 //toma el valor EA para contar el nº de EA que tenemos90 var_string=p_DATOS->tableMDG->text(i,2);91 var= var_string.toInt(&result, 10);92 //Cuenta el número de Fuentes de V dep de I las cuales introducen 2 EA93 //Revisar si hay más elementos que introduzcan 2 EA94 var_string2=p_DATOS->tableMDG->text(i,0);95 var2= var_string2.toInt(&result, 10);96 if(var>0){numEA=numEA+1;}97 //if(var2==11||var2==7){num_extra=num_extra+1;}98 }99 total=numEA+num_extra;100 return total;101 }

5.1.2.10. int num_elemA2 (int ∗, basicos ∗)

Calcula el número de elementos pertenecientes al grupo A2. Para ello realiza un barrido por la qtable MDGbuscando los elementos del grupo A2.

Parámetros:

num_line_total Esta variable contiene el número de líneas del fichero ∗.spc cargado que coincide conel número de elementos del circuito

DATOS Puntero a estructura basicos

Ver también:

num_elemA2()

Devuelve:

Retorna el entero con el número elementos del grupo A2 existente en el circuito

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

65 {66 bool result;67 QString var_string, var2_string;68 int var=0, var2=0, numA2=0;69 for(int i=0;i<*num_line_total;i++)70 {71 var_string=p_DATOS->tableMDG->text(i,3);72 var2_string=p_DATOS->tableMDG->text(i,0);73 var= var_string.toInt(&result, 10);74 var2=var2_string.toInt(&result, 10);75 if(var==2){numA2=numA2+1;}76 if(var2==7 ||var2==11 || var2==12 || var2==15){numA2=numA2+1;}77 }7879 return numA2;80 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 12: Manual de Código Fuente

5.2 Forma de cargar los distintos elementos que componen un circuito 9

5.1.2.11. int num_nodos (int ∗ num_line_total, basicos ∗ p_DATOS)

Calcula el número de nodos del circuito. Para ello realiza un barrido por la qtable MN buscando el mayorvalor introducido.

Parámetros:

num_line_total Esta variable contiene el número de líneas del fichero ∗.spc cargado que coincide conel número de elementos del circuito

DATOS Puntero a estructura basicos

Ver también:

num_nodos()

Devuelve:

Retorna el entero con el número de nodos existente en el circuito

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

48 {49 bool result;50 QString var_string;51 int var=0, maxnodo=0;52 for(int i=0;i<*num_line_total;i++)53 {54 for(int j=0;j<4;j++)55 {56 var_string=p_DATOS->tableMN->text(i,j);57 var=var_string.toInt(&result,10);58 if(var>maxnodo) {maxnodo=var;}59 }60 }61 return maxnodo;62 }

5.2. Forma de cargar los distintos elementos que componen un circuito

Diagrama de colaboración para Forma de cargar los distintos elementos que componen un circuito:

Creación del sistema general de ecuaciones lineales Forma de cargar los distintos elementos que componen un circuito

Este conjunto de funciones se encarga de indicar los límites del vector del elemento que se carga en lasQtable: MDG, MN y MVC.

El grupo de funciones lee_elementoX envía los límites del vector que los define para un correcto tratamien-to de los datos de los elementos de un circuito.

De esta forma se pueden generar nuevos elementos de manera más sencilla y sin limitaciones en losparámetros de definición.

Para más información leer manual de funcionamiento de Ávalon.

Funciones

void lee_elemento (int elemento, basicos ∗p_DATA)

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 13: Manual de Código Fuente

5.2 Forma de cargar los distintos elementos que componen un circuito 10

Esta Función se encarga de ver que elemento estamos analizando y llamar a funciones específicas parael tratamiento en cuestión del elemento. Concretamente llama a las funciones lee_elementoX para poderasignar los límites de las tablas en las que se cargan los valores que definen a los elementos del circuitoque se este analizando.

void lee_conductancia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una conductancia.

void lee_resistencia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una resistencia.

void lee_condensador (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una condensador.

void lee_bobina (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una bobina.

void lee_fuenteVcc (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de tensión.

void lee_fuenteI (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de corriente.

void lee_ampl0 (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un amplificador operacional.

void lee_trafo (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una transformador.

void lee_FuenIdepV (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de intensidad dependiente de tensión.

void lee_FuenVdepV (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de tensión dependiente de tensión.

void lee_FuenIdepI (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de intensidad dependiente de intensidad.

void lee_FuenVdepI (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de tensión dependiente de corriente.

void lee_bobAcopl (basicos ∗p_DATA)Esta función se encarga de detectar los límites de bobinas acopladas.

void lee_interruptor (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un interruptor.

void lee_cuatripoloadmitancia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de admitancia.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 14: Manual de Código Fuente

5.2 Forma de cargar los distintos elementos que componen un circuito 11

void lee_cuatripoloimpedancia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de impedancia.

void lee_cuatripolohibrido (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros híbridos.

void lee_cuatripolotransmision (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de trasmisión.

void actualiza (basicos ∗DATOS)Actualiza es una función que se encarga de mostrar por shell parámetros de interés en el análisis de uncircuito. En realidad se encarga de mostrar elementos del objeto DATOS de la estructura basicos.

5.2.1. Descripción detallada

Este conjunto de funciones se encarga de indicar los límites del vector del elemento que se carga en lasQtable: MDG, MN y MVC.

El grupo de funciones lee_elementoX envía los límites del vector que los define para un correcto tratamien-to de los datos de los elementos de un circuito.

De esta forma se pueden generar nuevos elementos de manera más sencilla y sin limitaciones en losparámetros de definición.

Para más información leer manual de funcionamiento de Ávalon.

Ver también:

designerbasicos

5.2.2. Documentación de las funciones

5.2.2.1. void actualiza (basicos ∗ DATOS)

Actualiza es una función que se encarga de mostrar por shell parámetros de interés en el análisis de uncircuito. En realidad se encarga de mostrar elementos del objeto DATOS de la estructura basicos.

Parámetros:

DATOS Puntero a estructura basicos

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

117 {118 QString line;119 cout << "\nContenido de la estructura DATOS: "<<endl;120 cout << "Número de elementos: "<<DATOS->elementos<<endl;121 cout << "Número de EA: "<<DATOS->EA<<endl;122 cout << "Número de nodos: "<<DATOS->nodos<<endl;123 cout << "Número de elementos en grupo A2: "<<DATOS->A2<<"\n";124 cout << "Elementos NO nulos: "<<DATOS->nocero<<endl;125 cout << "Densidad: "<<DATOS->densidad<<endl;126 cout << "Dispersión: "<<DATOS->dispersion<<endl;127 cout << "Tiempo Inicial: "<<DATOS->t0<<"\t";

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 15: Manual de Código Fuente

5.2 Forma de cargar los distintos elementos que componen un circuito 12

128 cout << "Tiempo Final: "<<DATOS->tf<<"\t";129 cout << "Paso de Tiempo: "<<DATOS->h<<"\t";130 cout << "Theta: "<<DATOS->theta<<"\n";131 }

5.2.2.2. void lee_ampl0 (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de un amplificador operacional.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

539 {540 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=9;541 }

5.2.2.3. void lee_bobAcopl (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de bobinas acopladas.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

563 {564 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=17;565 }

5.2.2.4. void lee_bobina (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una bobina.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

527 {528 p_DATA->lim[0]=4;p_DATA->lim[1]=6;p_DATA->lim[2]=8;529 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 16: Manual de Código Fuente

5.2 Forma de cargar los distintos elementos que componen un circuito 13

5.2.2.5. void lee_condensador (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una condensador.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

523 {524 p_DATA->lim[0]=4;p_DATA->lim[1]=6;p_DATA->lim[2]=8;525 }

5.2.2.6. void lee_conductancia (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una conductancia.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

515 {516 p_DATA->lim[0]=4;p_DATA->lim[1]=6;p_DATA->lim[2]=8;517 }

5.2.2.7. void lee_cuatripoloadmitancia (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de admitancia.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

571 {572 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=18;573 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 17: Manual de Código Fuente

5.2 Forma de cargar los distintos elementos que componen un circuito 14

5.2.2.8. void lee_cuatripolohibrido (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de un Cuatripolo con parámetros híbridos.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

579 {580 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=18;581 }

5.2.2.9. void lee_cuatripoloimpedancia (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de impedancia.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

575 {576 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=18;577 }

5.2.2.10. void lee_cuatripolotransmision (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de trasmisión.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

583 {584 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=18;585 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 18: Manual de Código Fuente

5.2 Forma de cargar los distintos elementos que componen un circuito 15

5.2.2.11. void lee_elemento (int elemento, basicos ∗ p_DATA)

Esta Función se encarga de ver que elemento estamos analizando y llamar a funciones específicas parael tratamiento en cuestión del elemento. Concretamente llama a las funciones lee_elementoX para poderasignar los límites de las tablas en las que se cargan los valores que definen a los elementos del circuito quese este analizando.

Parámetros:

elemento ID del elemento que se esta cargandop_DATA Puntero a estructura basicos

Ver también:

bcl_principal::slt_abrirspc()

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

487 {488489 switch (elemento)490 {491 case 0: lee_conductancia(p_DATA);break;492 case 1: lee_resistencia(p_DATA);break;493 case 2: lee_condensador(p_DATA);break;494 case 3: lee_bobina(p_DATA);break;495 case 4: lee_fuenteVcc(p_DATA);break;496 case 5: lee_fuenteI(p_DATA);break;497 case 6: lee_ampl0(p_DATA);break;498 case 7: lee_trafo(p_DATA);break;499 case 8: lee_FuenIdepV(p_DATA);break;500 case 9: lee_FuenVdepV(p_DATA);break;501 case 10: lee_FuenIdepI(p_DATA);break;502 case 11: lee_FuenVdepI(p_DATA);break;503 case 12: lee_bobAcopl(p_DATA);break;504 case 13: lee_interruptor(p_DATA);break;505 case 14: lee_cuatripoloadmitancia(p_DATA);break;506 case 15: lee_cuatripoloimpedancia(p_DATA);break;507 case 16: lee_cuatripolohibrido(p_DATA);break;508 case 17: lee_cuatripolotransmision(p_DATA);break;509 case 18: cout<<"\n ERROR Asegúrese de que la librería está adaptada a Ávalon"<<endl;510 break;511 }512 }

5.2.2.12. void lee_FuenIdepI (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una fuente de intensidad dependiente de intensidad.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

555 {556 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=10;557 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 19: Manual de Código Fuente

5.2 Forma de cargar los distintos elementos que componen un circuito 16

5.2.2.13. void lee_FuenIdepV (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una fuente de intensidad dependiente de tensión.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

547 {548 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=10;549 }

5.2.2.14. void lee_fuenteI (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una fuente de corriente.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

535 {536 p_DATA->lim[0]=4;p_DATA->lim[1]=6;p_DATA->lim[2]=16;537 }

5.2.2.15. void lee_fuenteVcc (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una fuente de tensión.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

531 {532 p_DATA->lim[0]=4;p_DATA->lim[1]=6;p_DATA->lim[2]=16;533 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 20: Manual de Código Fuente

5.2 Forma de cargar los distintos elementos que componen un circuito 17

5.2.2.16. void lee_FuenVdepI (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una fuente de tensión dependiente de corriente.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

559 {560 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=10;561 }

5.2.2.17. void lee_FuenVdepV (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una fuente de tensión dependiente de tensión.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

551 {552 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=10;553 }

5.2.2.18. void lee_interruptor (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de un interruptor.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

567 {568 p_DATA->lim[0]=4;p_DATA->lim[1]=6;p_DATA->lim[2]=8;569 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 21: Manual de Código Fuente

5.3 Métodos de resolución 18

5.2.2.19. void lee_resistencia (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una resistencia.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

519 {520 p_DATA->lim[0]=4;p_DATA->lim[1]=6;p_DATA->lim[2]=8;521 }

5.2.2.20. void lee_trafo (basicos ∗ p_DATA)

Esta función se encarga de detectar los límites de una transformador.

Parámetros:

p_DATA Puntero a estructura basicos.

Ver también:

designer

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

543 {544 p_DATA->lim[0]=4;p_DATA->lim[1]=8;p_DATA->lim[2]=10;545 }

5.3. Métodos de resolución

Diagrama de colaboración para Métodos de resolución:

Resolución de Transitorio

ResultadosMétodos de resolución

Resolución de Permanente

Módulos

Resolución de PermanenteResolución de TransitorioResultados

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 22: Manual de Código Fuente

5.3 Métodos de resolución 19

Slots públicos

virtual void sbcl_principal::slt_resolver ()El slot resolver se encarga comenzar los procesos necesarios para la resolución del sistema.

Slots protegidos

virtual void sbcl_principal::slt_resolucion (basicos ∗p_DATOS)Este Slot se encarga de seguir el proceso de resolución de los sistemas de ecuaciones del circuito a analizar.

5.3.1. Descripción detallada

En este grupo de funciones se encuentran todas aquellas que hacen posible la resolución de los sistemasestacionarios y transitorios

5.3.2. Slots públicos

5.3.2.1. void sbcl_principal::slt_resolver () [virtual, slot, inherited]

El slot resolver se encarga comenzar los procesos necesarios para la resolución del sistema.

Entre las tareas que realiza esta función se encuentra:

Ver si la matriz T está ensamblada

Toma los valores de análisis del transitorio, tiempo inicial, final, paso de tiempo y valor de theta.

Leer los valores existentes en las tablas MDG, MN y MVC

Ver también:

actualiza, slt_resolucion

Parámetros:

p_DATOS Puntero a estructura basicos

Ver también:

resolucion_transitorio, resolucion_permanente

Chequea que ha elegido el usuario para llamar a las funciones resolucion_transitorio o resolucion_-permanente.

Además también se encarga de llamar a las funciones que cargan en pantalla los sistemas utilizadosy sus respectivas soluciones

Definición en la línea 234 del archivo sbcl_principal.cpp.

235 {236 basicos *p_DATOS;basicos *p_DATA;237 p_DATA=&DATOS;238 p_DATOS=&DATOS;239 int i,j,k,cont=0;240 int *ii=&i; int *jj=&j,*p_cont=&cont;

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 23: Manual de Código Fuente

5.3 Métodos de resolución 20

241 int element;242 bool result;243 p_DATOS->estaT=0;//cargamos a 0 para indicar que no está ensamblada la matriz T244 //cargamos los valores para el transitorio245 QString h;246 h=lineEdit_t0->text(); p_DATOS->t0=h.toDouble(&result);247 h=lineEdit_tf->text(); p_DATOS->tf=h.toDouble(&result);248 h=lineEdit_h->text(); p_DATOS->h=h.toDouble(&result);249 h=lineEdit_theta->text(); p_DATOS->theta=h.toDouble(&result);250 //Barremos las tablas para resolver el estacionario251 if(p_DATOS->estacionario==1){252 for(i=0;i<DATOS.elementos;i++)253 {254 /*declaración del vector que contiene los datos leidos de las255 diferentes Qtables la longitud debe ser la del elemento más largo*/256 double elemento[16];257 //limpiamos en vector elemento258 for(j=0;j<16;j++){elemento[j]=0;}259 element=filaTable (ii,p_cont,tableMDG);260 lee_elemento (element,p_DATA);261 for(j=0;j<p_DATA->lim[2];j++)262 {263 ii=&i;jj=&j;264 if(j<p_DATA->lim[0])265 {elemento[j]=filaTable (ii,jj,p_DATOS->tableMDG);}266 int a=(j-p_DATA->lim[0]);jj=&a;267 if (j<p_DATA->lim[1] && j>=p_DATA->lim[0])268 {elemento[j]=filaTable (ii,jj,p_DATOS->tableMN);}269 int b=(j-p_DATA->lim[1]);jj=&b;270 if(j<p_DATA->lim[2] && j>=p_DATA->lim[1])271 {elemento[j]=filaTable (ii,jj,p_DATOS->tableMVC);}272 }273 double *p_elemento=&elemento[0];274 p_DATOS->t=0;275 elementoMatrizT(p_elemento,p_DATOS);276 elementoVectorW(p_elemento,p_DATOS,p_DATOS->t);277 }278 //llamada a salida de datos279 slt_resolucion(p_DATOS);280 p_DATOS->estacionario=0;281 }282283 //REsolución del transitorio284 if(p_DATOS->transitorio==1)285 {286 //Creamos el Vector que guardará la solución del sistema estacionario287 p_DATOS->x_trans=p_DATOS->creax_trans();288 //calculo del número de iteraciones289 if(p_DATOS->t0 > p_DATOS->tf){p_DATOS->numv=0;290 cout<<"Error los datos necesarios para el transitorio están mal"<<endl;}291 else {num_iteraciones(p_DATOS);}292 if(p_DATOS->numv!=0)//Entra sólo si las iteraciones a realizar son diferentes a 0293 {294 for(k=1;k<=p_DATOS->numv;k++)//Este for da tantas vueltas como número de iteraciones295 {296 p_DATOS->iter=k;297 //iMPORTANTE para que se apunte a EA y A2298 p_DATOS->apuntaA2=p_DATOS->situaA2();p_DATOS->apuntaEA=p_DATOS->situaEA();299 for(i=0;i<DATOS.elementos;i++)300 {301 /*declaración del vector que contiene los datos leidos de las302 diferentes Qtables la longitud debe ser la del elemento más largo*/303 double elemento[16];304 //limpiamos en vector elemento305 for(j=0;j<16;j++){elemento[j]=0;}306 element=filaTable (ii,p_cont,tableMDG);307 lee_elemento (element,p_DATA);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 24: Manual de Código Fuente

5.3 Métodos de resolución 21

308 for(j=0;j<p_DATA->lim[2];j++)309 {310 ii=&i;jj=&j;311 if(j<p_DATA->lim[0])312 {elemento[j]=filaTable (ii,jj,p_DATOS->tableMDG);}313 int a=(j-p_DATA->lim[0]);jj=&a;314 if (j<p_DATA->lim[1] && j>=p_DATA->lim[0])315 {elemento[j]=filaTable (ii,jj,p_DATOS->tableMN);}316 int b=(j-p_DATA->lim[1]);jj=&b;317 if(j<p_DATA->lim[2] && j>=p_DATA->lim[1])318 {elemento[j]=filaTable (ii,jj,p_DATOS->tableMVC);}319 }320 double *p_elemento=&elemento[0];321 p_DATOS->t=k-1;322 if(p_DATOS->estaT==1)323 {324 elementoVectorW(p_elemento,p_DATOS,p_DATOS->t);325 }326 else327 {328 elementoMatrizT(p_elemento,p_DATOS);329 elementoVectorW(p_elemento,p_DATOS,p_DATOS->t);330 }331 }332 MatAssemblyBegin(p_DATOS->T,MAT_FINAL_ASSEMBLY);333 MatAssemblyEnd(p_DATOS->T,MAT_FINAL_ASSEMBLY);334 p_DATOS->estaT=1;335 VecAssemblyBegin(p_DATOS->W); VecAssemblyEnd(p_DATOS->W);336337 //preparando el sistema transitorio338 PetscTruth *flg;339 Mat A1;340 Vec BBCC,z;341 z=creavectorauxiliar(p_DATOS);342 VecCreate(PETSC_COMM_SELF,&BBCC);343 VecSetSizes(BBCC,PETSC_DECIDE,p_DATOS->filas());VecSetFromOptions(BBCC);344 VecAssemblyBegin(BBCC); VecAssemblyEnd(BBCC);345 p_DATOS->BBCC=BBCC;346 MatCreateSeqAIJ(PETSC_COMM_SELF,p_DATOS->filas(),p_DATOS->columnas(),10,PETSC_NULL,&A1);347 MatAssemblyBegin(A1,MAT_FINAL_ASSEMBLY);MatAssemblyEnd(A1,MAT_FINAL_ASSEMBLY);348 PetscScalar unomenostheta=1-p_DATOS->theta;349 PetscScalar thetamenosuno=p_DATOS->theta-1;350 p_DATOS->creaGC();351 MatCopy(p_DATOS->T,p_DATOS->G, DIFFERENT_NONZERO_PATTERN);352 MatCopy(p_DATOS->T,p_DATOS->C, DIFFERENT_NONZERO_PATTERN);353 MatImaginaryPart(p_DATOS->C);354 float unoentreh=1/p_DATOS->h;355 MatScale ( p_DATOS->C, unoentreh);356 MatRealPart(p_DATOS->G);357 MatCopy(p_DATOS->G,A1, DIFFERENT_NONZERO_PATTERN);358 MatAYPX(p_DATOS->G,p_DATOS->theta,p_DATOS->C, DIFFERENT_NONZERO_PATTERN);359 //Operación A realizada Y = a*Y + X. MatAYPX(Mat Y,PetscScalar a,Mat X,MatStructure str)360 //A1=(theta-1)*G+C/h Operación B realizada361 MatAYPX(A1,thetamenosuno,p_DATOS->C, DIFFERENT_NONZERO_PATTERN);362 p_DATOS->x0=p_DATOS->creax0(k,p_DATOS);//Creamos el vector de condiciones iniciales363 VecScale (p_DATOS->Wn1, p_DATOS->theta);364 //preparación de CC y DD365 VecScale (p_DATOS->Wn, unomenostheta);366 //VecWAXPY(Vec w,PetscScalar alpha,Vec x,Vec y) Computes w = alpha x + y.367 VecWAXPY(z,1,p_DATOS->Wn,p_DATOS->Wn1);368 //MatMultAdd(Mat mat,Vec v1,Vec v2,Vec v3) Computes v3 = v2 + A * v1,prepara BB+CC369 MatMultAdd(A1,p_DATOS->x0,z,BBCC);370 //MatMultAdd(BBCC,Vec1,p_DATOS->W,terminoIndep);371372 //Resolucion373 resolucion_transitorio(p_DATOS);374 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 25: Manual de Código Fuente

5.4 Resolución de Permanente 22

375 }376 escribirgnuplot(p_DATOS);377 //llamada a salida de datos378 slt_resolucion(p_DATOS);379 }380 }

5.3.3. Slots protegidos

5.3.3.1. void sbcl_principal::slt_resolucion (basicos ∗ p_DATOS) [protected, virtual,slot, inherited]

Este Slot se encarga de seguir el proceso de resolución de los sistemas de ecuaciones del circuito a analizar.

Parámetros:

p_DATOS Puntero a estructura basicos

Definición en la línea 427 del archivo sbcl_principal.cpp.

428 {429 if(p_DATOS->estaT!=1)430 {431 MatAssemblyBegin(p_DATOS->T,MAT_FINAL_ASSEMBLY);MatAssemblyEnd(p_DATOS->T,MAT_FINAL_ASSEMBLY);432 p_DATOS->estaT=1;433 }434 VecAssemblyBegin(p_DATOS->W); VecAssemblyEnd(p_DATOS->W);435 if(p_DATOS->transitorio==1){resolucion_transitorio(p_DATOS);}436 if(p_DATOS->estacionario==1){resolucion_permanente(p_DATOS);}437 mostrar_solucion(p_DATOS);438 //CArgar soluciones en pantalla439 slt_sistemaestacionario();440 slt_sistematransitorio();441 slt_solucionestacionario();442 slt_soluciontransitorio();443 INFOgeneral (p_DATOS);444 }

5.4. Resolución de Permanente

Diagrama de colaboración para Resolución de Permanente:

Métodos de resolución Resolución de Permanente

Funciones

int resolucion_permanente (basicos ∗p_DATOS)Función que se encarga de la resolución del sistema permanente del circuito a analizar.

5.4.1. Descripción detallada

Grupo encargado de la resolución del sistema permanente del circuito que se esté analizando

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 26: Manual de Código Fuente

5.5 Resolución de Transitorio 23

5.4.2. Documentación de las funciones

5.4.2.1. int resolucion_permanente (basicos ∗ p_DATOS)

Función que se encarga de la resolución del sistema permanente del circuito a analizar.

Parámetros:

Puntero a estructura basicos

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

136 {137 Vec X,W; Mat T;138 PetscErrorCode ierr;139 KSP ksp;140 PetscViewer viewer, escribeDATOS;141 //Creamos el Vector que guardará la solución del sistema estacionario142 p_DATOS->x_perm=p_DATOS->creax_perm();143 VecAssemblyBegin(p_DATOS->x_perm); VecAssemblyEnd(p_DATOS->x_perm);144 //Cargamos los parametros de preacondicionamiento145 PetscOptionsInsertFile("opciones.txt");146 ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr);147 //Copias de los elementos con los que trabajaremos T,W y X148 T=p_DATOS->T; W=p_DATOS->W; X=p_DATOS->x_perm;149 //Resolución del sistema lineal150 ierr = KSPSetOperators(ksp,T,T,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);151 KSPSetFromOptions(ksp);152 ierr = KSPSolve(ksp,W,X);CHKERRQ(ierr);153 //llamada a funcion que excriba los valores del sistema154 PetscViewerASCIIOpen(PETSC_COMM_WORLD, "Datos_x_perm.data", &escribeDATOS);155 MatView(p_DATOS->T, escribeDATOS);156 VecView(p_DATOS->W, escribeDATOS);157 //Volcado del resultado en la Estructura DATOS BASICOS158 p_DATOS->x_perm=X;159 ierr = MatDestroy(T);CHKERRQ(ierr);160 ierr = VecDestroy(W);CHKERRQ(ierr);161 ierr = VecDestroy(X);CHKERRQ(ierr);162163 //Escritura de la solución en fichero164 PetscViewerASCIIOpen(PETSC_COMM_WORLD, "x_perm.data", &viewer);165 VecView(p_DATOS->x_perm, viewer);166 return 0;167 }

5.5. Resolución de Transitorio

Diagrama de colaboración para Resolución de Transitorio:

Resolución de TransitorioMétodos de resolución

Funciones

Vec creavectorauxiliar (basicos ∗p_DATOS)Función que se encarga crear un vector auxiliar de cálculo del sistema a resolver.

void num_iteraciones (basicos ∗p_DATOS)

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 27: Manual de Código Fuente

5.5 Resolución de Transitorio 24

Función que se encarga calcular el número de iteraciones necesarias en el método iterativo directo utiliza-do.

int resolucion_transitorio (basicos ∗p_DATOS)Función que se encarga de la resolución del sistema permanente del circuito a analizar.

5.5.1. Descripción detallada

Grupo encargado de la resolución del sistema transitorio del circuito que se esté analizando

5.5.2. Documentación de las funciones

5.5.2.1. Vec creavectorauxiliar (basicos ∗ p_DATOS)

Función que se encarga crear un vector auxiliar de cálculo del sistema a resolver.

Parámetros:

Puntero a estructura basicos return Vector tipo PETSc

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

38 {39 Vec z;40 VecCreate(PETSC_COMM_SELF,&z);41 VecSetSizes(z,PETSC_DECIDE,p_DATOS->filas());42 VecSetFromOptions(z);43 VecAssemblyBegin(z); VecAssemblyEnd(z);44 return z;45 }

5.5.2.2. void num_iteraciones (basicos ∗ p_DATOS)

Función que se encarga calcular el número de iteraciones necesarias en el método iterativo directo utilizado.

Parámetros:

Puntero a estructura basicos

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

171 {172 p_DATOS->numv=(p_DATOS->tf-p_DATOS->t0)/p_DATOS->h;173174 }

5.5.2.3. int resolucion_transitorio (basicos ∗ p_DATOS)

Función que se encarga de la resolución del sistema permanente del circuito a analizar.

Parámetros:

Puntero a estructura basicos

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 28: Manual de Código Fuente

5.6 Resultados 25

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

178 {179 Vec BBCC=p_DATOS->BBCC;180 KSP ksp;181 PetscOptionsInsertFile("opciones.txt");182 KSPCreate(PETSC_COMM_WORLD,&ksp);183 KSPSetOperators(ksp,p_DATOS->G,p_DATOS->G,DIFFERENT_NONZERO_PATTERN);184 KSPSetFromOptions(ksp);185 //llamada a funcion que excriba los valores del sistema186 PetscViewer escribeDATOStran;187 PetscViewerASCIIOpen(PETSC_COMM_WORLD, "Datos_x_trans.data", &escribeDATOStran);188 MatView(p_DATOS->G, escribeDATOStran);189 VecView(BBCC, escribeDATOStran);190 KSPSolve(ksp,BBCC,p_DATOS->x_trans);//KSPSolve(KSP ksp,Vec b,Vec x)191 PetscViewer viewer;192 PetscViewerSetFormat(viewer,PETSC_VIEWER_ASCII_COMMON );193 PetscViewerASCIIOpen(PETSC_COMM_WORLD, "x_trans.data", &viewer);194 VecView(p_DATOS->x_trans, viewer);195 p_DATOS->Wn=p_DATOS->creaWn();196 p_DATOS->Wn1=p_DATOS->creaWn1();197 return 0;198 }

5.6. Resultados

Diagrama de colaboración para Resultados:

ResultadosMétodos de resolución

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 seestá tomando la variable Esta función, dependiendo de que elemento, retorna un QString con el nombre delmismo 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 quedebe 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.

5.6.1. Descripción detallada

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

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 29: Manual de Código Fuente

5.6 Resultados 26

5.6.2. Documentación de las funciones

5.6.2.1. 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.

588 {589 QString dire =p_DATOS->datos_trans;590 fstream fich(dire, ios::in |ios::out | ios::trunc | ios::binary);591 char texto[100];592 ifstream fichero;593 // Abro para lectura594 fichero.open("x_trans.data");595 float contador=p_DATOS->t0;;596 if (!fichero)597 {598 cout << "No se ha podido abrir el fichero." << endl;599 exit(1);600 }601 fichero.get(texto,256);602603 for (int indice=0; indice<=(p_DATOS->filas()*p_DATOS->numv)+1; indice++)604 {605 fich<<texto<<" ";606 fichero.getline(texto,256);607 if(0==indice%p_DATOS->filas() && indice!=0 && indice!=p_DATOS->filas()*p_DATOS->numv)608 {fich<<" "<<contador<<" \n";contador=contador+p_DATOS->h;}609 }610611 fichero.close();612 fich.close();613 //Ploteando las soluciones614 fstream ploteo(p_DATOS->datos_script, ios::in |ios::out | ios::trunc | ios::binary);615 ifstream variable;616 variable.open("variables.data");617618 if (!variable)619 {620 cout << "No se ha podido abrir el fichero." << endl;621 exit(1);622 }623 variable.getline(texto,255);624 int numcol=p_DATOS->filas()+1;625 ploteo<<"set terminal png "<<endl;626 QString grafica = p_DATOS->solucion;627 ploteo<<"set output ’"<<grafica<<"’"<<endl;628 ploteo<<"set encoding iso_8859_1\nset grid\n"<<629 "set autoscale\nset key bottom right title ’Variables’ box"<<endl;630 ploteo<<"set title ’Graficado por defecto de las soluciones del circuito’"<<endl;631 ploteo<<"plot ";632 for(int graf=numcol;graf>1;graf--)

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 30: Manual de Código Fuente

5.6 Resultados 27

633 {634 ploteo<<"’"<<dire<<"’ using "<<numcol<<":"<<numcol-graf+1<<635 " title ’"<<texto<<"’"<<" with lines";636 variable.getline(texto,255);637 if(numcol-graf+1!=numcol-1){ploteo<<", ";}638 }639 ploteo<<"\n"<<endl;640 variable.close();641 ploteo.close();642 QString plotear = p_DATOS->datos_script;643 plotear.prepend("gnuplot ");644 system (plotear);645 }

5.6.2.2. int mostrar_CI (basicos ∗ p_DATOS)

Función que se encarga de identificar e indicar en la interfaz que representa cada Condición Inicial quedebe 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álisistransitorio. Se debe tener presente que las condiciones iniciales deben ser consistentes.

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

648 {649 PetscViewer viewer;650 PetscScalar DATO;651 PetscViewerASCIIOpen(PETSC_COMM_WORLD, "CI.data", &viewer);652 PetscViewerDestroy(viewer);653 fstream fich("CI.data", ios::in |ios::out | ios::trunc | ios::binary);654 for (int i=0; i<p_DATOS->nodos; i++)655 {656 fich<<"V nodo "<<i+1<<endl;657 }658 QString esA2, esEA, elemento, nodoi, nodoj, nodom, nodon;659660 for(int j=0; j<p_DATOS->elementos;j++)661 {662 esA2=p_DATOS->tableMDG->text(j,3);663 esEA=p_DATOS->tableMDG->text(j,2);664 elemento=p_DATOS->tableMDG->text(j,0);665 nodoi=p_DATOS->tableMN->text(j,0);666 nodoj=p_DATOS->tableMN->text(j,1);667 nodom=p_DATOS->tableMN->text(j,2);668 nodon=p_DATOS->tableMN->text(j,3);669670 if (esA2=="2")671 {672 if(elemento=="1")673 {fich<<"I Resistencia entre nodos "<<nodoi<<", "<<nodoj<<endl;}674 if(elemento=="3")675 {fich<<"I Bobina entre nodos "<<nodoi<<", "<<nodoj<<endl;}676 if(elemento=="4")677 {fich<<"I Fuente tension entre nodos "<<nodoi<<", "<<nodoj<<endl;}678 if(elemento=="6")679 {fich<<"I Amplificador entre nodos "<<nodoi<<", "<<nodoj<<endl;}680 if(elemento=="7")681 {fich<<"I Trafo entre nodos "<<nodoi<<", "<<nodoj<<endl;682 fich<<"I Trafo entre nodos "<<nodom<<", "<<nodon<<endl;}

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 31: Manual de Código Fuente

5.6 Resultados 28

683 if(elemento=="9")684 {fich<<"I Fuente de V dependiente de V entre nodos "<<nodoi<<", "<<nodoj<<endl;}685 if(elemento=="10")686 {fich<<"I Fuente de I dependiente de I entre nodos "<<nodoi<<", "<<nodoj<<endl;}687 if(elemento=="11")688 {fich<<"I Fuente de V dependiente de I entre nodos "<<nodoi<<", "<<nodoj<<endl;689 fich<<"I Fuente de V dependiente de I entre nodos "<<nodom<<", "<<nodon<<endl;}690 if(elemento=="12")691 {fich<<"I Bobinas Acopladas entre nodos "<<nodoi<<", "<<nodoj<<endl;692 fich<<"I Bobinas Acopladas entre nodos "<<nodom<<", "<<nodon<<endl;}693 if(elemento=="13")694 {fich<<"I que recorre el Interruptor entre nodos "<<nodoi<<", "<<endl;}695 if(elemento=="15")696 {fich<<"I Cuatripolo en Z entre nodos "<<nodoi<<", "<<nodoj<<endl;697 fich<<"I Cuatripolo en Z entre nodos "<<nodom<<", "<<nodon<<endl;}698 if(elemento=="16")699 {fich<<"I Cuatripolo en h entre nodos "<<nodoi<<", "<<nodoj<<endl;}700 if(elemento=="17")701 {fich<<"I Cuatripolo en r entre nodos "<<nodoi<<", "<<nodoj<<endl;}702 }703 if (esA2=="1")704 {705 if(esEA=="1")706 {707 if(esEA=="1")708 {709 if(elemento=="0")710 {fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<711 " entre nodos "<<nodoi<<", "<<nodoj<<endl;}712 if(elemento=="2")713 {fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<714 " entre nodos "<<nodoi<<", "<<nodoj<<endl;}715 if(elemento=="8")716 {fich<<"I de Fuente de I dependiente de V entre nodos "<<nodom<<717 ", "<<nodon<<endl;}718 }719 }720 }721 }722 }

5.6.2.3. 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 vari-ables 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.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 32: Manual de Código Fuente

5.6 Resultados 29

201 {202 PetscViewer viewer;203 PetscScalar DATO;204 if(p_DATOS->estacionario==1)205 {206 QString dire=p_DATOS->datos_perm;207 PetscViewerASCIIOpen(PETSC_COMM_WORLD, dire, &viewer);208 PetscViewerDestroy(viewer);209 fstream fich(dire, ios::in |ios::out | ios::trunc | ios::binary);210 char texto[100];211 ifstream fichero;212 // Abro para lectura213 fichero.open("x_perm.data");214 if (!fichero)215 {216 cout << "No se ha podido abrir el fichero."<< endl;217 exit(1);218 }219 fichero.getline(texto,256);220 //fichero >> texto;221 fich<<"Resultados sistema estacionario: \n"<<endl;222 for (int i=0; i<p_DATOS->nodos; i++)223 {224 fich<<"Tensión en nodo "<<i+1<<": "<<texto<<endl;225 fichero.getline(texto,256);226 }227 QString esA2, esEA, elemento, nodoi, nodoj, nodom, nodon;228229 for(int j=0; j<p_DATOS->elementos;j++)230 {231 esA2=p_DATOS->tableMDG->text(j,3);232 esEA=p_DATOS->tableMDG->text(j,2);233 elemento=p_DATOS->tableMDG->text(j,0);234 nodoi=p_DATOS->tableMN->text(j,0);235 nodoj=p_DATOS->tableMN->text(j,1);236 nodom=p_DATOS->tableMN->text(j,2);237 nodon=p_DATOS->tableMN->text(j,3);238239 if (esA2=="2")240 {241 if(elemento=="1")242 {fich<<"I Resistencia entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl;243 fichero.getline(texto,256);}244 if(elemento=="3")245 {fich<<"I de Bobina entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl;246 fichero.getline(texto,256);}247 if(elemento=="4")248 {fich<<"I de Fuente tension entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl;249 fichero.getline(texto,256);}250 if(elemento=="6")251 {fich<<"I de Amplificador entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl;252 fichero.getline(texto,256);}253 if(elemento=="7")254 {fich<<"I de Trafo entre nodos "<<nodoi<<", "<<nodoj<<": "<<texto<<endl;255 fichero.getline(texto,256);256 fich<<"I de Trafo entre nodos "<<nodom<<", "<<nodon<<": "<<texto<<endl;257 fichero.getline(texto,256);}258 if(elemento=="9")259 {fich<<"I de Fuente de V dependiente de V entre nodos "<<nodoi<<260 ", "<<nodoj<<": "<<texto<<endl;261 fichero.getline(texto,256);}262 if(elemento=="10")263 {fich<<"I de Fuente de I dependiente de I entre nodos "<<nodoi<<264 ", "<<nodoj<<": "<<texto<<endl;265 fichero.getline(texto,256);}266 if(elemento=="11")267 {fich<<"I de Fuente de V dependiente de I entre nodos "<<nodoi<<

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 33: Manual de Código Fuente

5.6 Resultados 30

268 ", "<<nodoj<<": "<<texto<<endl;269 fichero.getline(texto,256);270 fich<<"I de Fuente de V dependiente de I entre nodos "<<nodom<<271 ", "<<nodon<<": "<<texto<<endl;272 fichero.getline(texto,256);}273 if(elemento=="12")274 {fich<<"I de Bobinas Acopladas entre nodos "<<nodoi<<275 ", "<<nodoj<<": "<<texto<<endl;276 fichero.getline(texto,256);277 fich<<"I de Bobinas Acopladas entre nodos "<<nodom<<", "<<278 nodon<<": "<<texto<<endl;279 fichero.getline(texto,256);}280 if(elemento=="13")281 {fich<<"I que recorre el Interruptor entre nodos "<<nodoi<<282 ", "<<nodoj<<"\n";283 fichero.getline(texto,256);}284 if(elemento=="15")285 {fich<<"I de Cuatripolo en Z entre nodos "<<nodoi<<", "<<nodoj<<286 ": "<<texto<<endl;287 fichero.getline(texto,256);288 fich<<"I de Cuatripolo en Z entre nodos "<<nodom<<", "<<nodon<<289 ": "<<texto<<endl;290 fichero.getline(texto,256);}291 if(elemento=="16")292 {fich<<"I de Cuatripolo en h entre nodos "<<nodoi<<", "<<nodoj<<293 ": "<<texto<<endl;294 fichero.getline(texto,256);}295 if(elemento=="17")296 {fich<<"I de Cuatripolo en r entre nodos "<<nodoi<<", "<<nodoj<<297 ": "<<texto<<endl;298 fichero.getline(texto,256);}299 }300 if (esA2=="1")301 {302 if(esEA=="1")303 {304 if(esEA=="1")305 {306 if(elemento=="0")307 {308 fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<309 " entre nodos "<<nodoi<<", "310 <<nodoj<<": "<<texto<<endl;311 fichero.getline(texto,256);312 }313 if(elemento=="2")314 {315 fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<316 " entre nodos "<<nodoi<<", "317 <<nodoj<<": "<<texto<<endl;318 fichero.getline(texto,256);319 }320 if(elemento=="8")321 {fich<<"I de Fuente de I dependiente de V entre nodos "<<nodom<<", "<<322 nodon<<": "<<texto<<endl;323 fichero.getline(texto,256);}324 }325 }326 }327 }328 fichero.close();329 }330331 if(p_DATOS->transitorio==1)332 {333 PetscViewerASCIIOpen(PETSC_COMM_WORLD, "variables.data", &viewer);334 PetscViewerDestroy(viewer);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 34: Manual de Código Fuente

5.6 Resultados 31

335 fstream fich("variables.data", ios::in |ios::out | ios::trunc | ios::binary);336 char texto[100];337 ifstream fichero;338 // Abro para lectura339 fichero.open("x_trans.data");340 if (!fichero)341 {342 cout << "No se ha podido abrir el fichero variables data."<< endl;343 exit(1);344 }345 fichero.getline(texto,256);346 //fichero >> texto;347 for (int i=0; i<p_DATOS->nodos; i++)348 {349 fich<<"V en nodo "<<i+1<<"\n";350 fichero.getline(texto,256);351 }352 QString esA2, esEA, elemento, nodoi, nodoj, nodom, nodon;353354 for(int j=0; j<p_DATOS->elementos;j++)355 {356 esA2=p_DATOS->tableMDG->text(j,3);357 esEA=p_DATOS->tableMDG->text(j,2);358 elemento=p_DATOS->tableMDG->text(j,0);359 nodoi=p_DATOS->tableMN->text(j,0);360 nodoj=p_DATOS->tableMN->text(j,1);361 nodom=p_DATOS->tableMN->text(j,2);362 nodon=p_DATOS->tableMN->text(j,3);363364 if (esA2=="2")365 {366 if(elemento=="1")367 {fich<<"I Resistencia entre nodos "<<nodoi<<", "<<nodoj<<endl;368 fichero.getline(texto,256);}369 if(elemento=="3")370 {fich<<"I de Bobina entre nodos "<<nodoi<<", "<<nodoj<<endl;371 fichero.getline(texto,256);}372 if(elemento=="4")373 {fich<<"I de Fuente tension entre nodos "<<nodoi<<", "<<nodoj<<endl;374 fichero.getline(texto,256);}375 if(elemento=="6")376 {fich<<"I de Amplificador entre nodos "<<nodoi<<", "<<nodoj<<endl;377 fichero.getline(texto,256);}378 if(elemento=="7")379 {fich<<"I de Trafo entre nodos "<<nodoi<<", "<<nodoj<<endl;380 fichero.getline(texto,256);381 fich<<"I de Trafo entre nodos "<<nodom<<", "<<nodon<<endl;382 fichero.getline(texto,256);}383 if(elemento=="9")384 {fich<<"I de Fuente de V dependiente de V entre nodos "<<nodoi<<", "<<nodoj<<endl;385 fichero.getline(texto,256);}386 if(elemento=="10")387 {fich<<"I de Fuente de I dependiente de I entre nodos "<<nodoi<<", "<<nodoj<<endl;388 fichero.getline(texto,256);}389 if(elemento=="11")390 {fich<<"I de Fuente de V dependiente de I entre nodos "<<nodoi<<", "<<nodoj<<endl;391 fichero.getline(texto,256);392 fich<<"I de Fuente de V dependiente de I entre nodos "<<nodom<<", "<<nodon<<endl;393 fichero.getline(texto,256);}394 if(elemento=="12")395 {fich<<"I de Bobinas Acopladas entre nodos "<<nodoi<<", "<<nodoj<<endl;396 fichero.getline(texto,256);397 fich<<"I de Bobinas Acopladas entre nodos "<<nodom<<", "<<nodon<<endl;398 fichero.getline(texto,256);}399 if(elemento=="13")400 {fich<<"I que recorre el Interruptor entre nodos "<<nodoi<<", "<<nodoj<<"\n";401 fichero.getline(texto,256);}

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 35: Manual de Código Fuente

5.6 Resultados 32

402 if(elemento=="15")403 {fich<<"I de Cuatripolo en Z entre nodos "<<nodoi<<", "<<nodoj<<endl;404 fichero.getline(texto,256);405 fich<<"I de Cuatripolo en Z entre nodos "<<nodom<<", "<<nodon<<endl;406 fichero.getline(texto,256);}407 if(elemento=="16")408 {fich<<"I de Cuatripolo en h entre nodos "<<nodoi<<", "<<nodoj<<endl;409 fichero.getline(texto,256);}410 if(elemento=="17")411 {fich<<"I de Cuatripolo en r entre nodos "<<nodoi<<", "<<nodoj<<endl;412 fichero.getline(texto,256);}413 }414 if (esA2=="1")415 {416 if(esEA=="1")417 {418 if(esEA=="1")419 {420 if(elemento=="0")421 {422 fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<423 " entre nodos "<<nodoi<<", "<<nodoj<<endl;424 fichero.getline(texto,256);425 }426 if(elemento=="2")427 {428 fich<<"Intensidad de "<<queescribo(p_DATOS->tableMDG->text(j,0))<<429 " entre nodos "<<nodoi<<", "<<nodoj<<endl;430 fichero.getline(texto,256);431 }432 if(elemento=="8")433 {fich<<"I de Fuente de I dependiente de V entre nodos "<<nodom<<434 ", "<<nodon<<endl;fichero.getline(texto,256);}435 }436 }437 }438439 }440 fichero.close();441 }442 return 0;443 }

5.6.2.4. QString queescribo (QString escribir)

Función que se encarga de complementar a mostrar_solucion para escribir el tipo de elemento del que seestá tomando la variable Esta función, dependiendo de que elemento, retorna un QString con el nombre delmismo 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.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 36: Manual de Código Fuente

5.7 Selección de filas en las Qtable 33

449 {450 QString retorno;451 bool result; int escrito;452 escrito=escribir.toInt(&result,10);453 switch (escrito)454 {455 case 0: retorno="Conductancia";456 return retorno;break;457 case 1: cout<<"\n ERROR La resistencia es siempre del Grupo A2"<<458 endl ;break;459 case 2: retorno="Condensador";460 return retorno;break;461 case 3: cout<<"\n ERROR La bobina es siempre del Grupo A2"<<462 endl;break;463 case 4: retorno="Fuente de Tensión";464 return retorno;break;465 case 5: retorno="Fuente de Corriente";466 return retorno;break;467 case 6: retorno="Amplificador Operacional";468 return retorno;break;469 case 7: retorno="Transformador";470 return retorno;break;471 case 8: retorno="Fuente de Corriente dependiente de Tensión";472 return retorno;break;473 case 9: retorno="Fuente de Tensión dependiente de Tensión";474 return retorno;break;475 case 10: retorno="Fuente de Intensidad dependiente de Intensidad";476 return retorno;break;477 case 11: retorno="Fuente de Tensión dependiente de Intensidad";478 return retorno;break;479 case 12: retorno="Bobinas Acopladas";480 return retorno;break;481 case 13: cout<<"\n ERROR Este elemento no existe en Ávalon"<<482 endl; break;483 }484 }

5.6.2.5. 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 otroeditor debería realizarse la modificación oportuna en el código.

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

725 {726 QString comando = p_DATOS->datos_script;727 comando.prepend("kwrite ");//añade "convert " al string comando728 return comando;729 }

5.7. Selección de filas en las Qtable

Selecciona varias filas de distintas tablas.

Selección filas se encarga de selecionar las filas simultáneamente de las diferentes Qtable de la pestaña∗.spc, es decir MDG, MN y MVC.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 37: Manual de Código Fuente

5.7 Selección de filas en las Qtable 34

Slots públicos

virtual void sbcl_principal::slt_seleccionfilasMDG ()Este Slot se encarga de detectar en que fila de la Qtable Matriz de Datos Generales se realiza un clickpara selecionar la misma fila de las demás tablas, de esta forma el análisis de los elementos en mucho mássencilla.

virtual void sbcl_principal::slt_seleccionfilasMN ()Este Slot se encarga de detectar en que fila de la Qtable Matriz de Nodos se realiza un click para selecionarla misma fila de las demás tablas, de esta forma el análisis de los elementos en mucho más sencilla.

virtual void sbcl_principal::slt_seleccionfilasMVC ()Este Slot se encarga de detectar en que fila de la Qtable Matriz de Valores Característicos se realiza unclick para selecionar la misma fila de las demás tablas, de esta forma el análisis de los elementos en muchomás sencilla.

5.7.1. Descripción detallada

Selecciona varias filas de distintas tablas.

Selección filas se encarga de selecionar las filas simultáneamente de las diferentes Qtable de la pestaña∗.spc, es decir MDG, MN y MVC.

5.7.2. Slots públicos

5.7.2.1. void sbcl_principal::slt_seleccionfilasMDG () [virtual, slot, inherited]

Este Slot se encarga de detectar en que fila de la Qtable Matriz de Datos Generales se realiza un clickpara selecionar la misma fila de las demás tablas, de esta forma el análisis de los elementos en mucho mássencilla.

Definición en la línea 382 del archivo sbcl_principal.cpp.

383 {384 int fila=tableMDG->currentRow();385 int num_columnas=tableMDG->numRows();386 for(int i=0;i<num_columnas;i++)387 {tableMDG->removeSelection(i);tableMN->removeSelection(i);tableMVC->removeSelection(i);}388 tableMDG->selectRow(fila);389 tableMN->selectRow(fila);390 tableMVC->selectRow(fila);391 }

5.7.2.2. void sbcl_principal::slt_seleccionfilasMN () [virtual, slot, inherited]

Este Slot se encarga de detectar en que fila de la Qtable Matriz de Nodos se realiza un click para selecionarla misma fila de las demás tablas, de esta forma el análisis de los elementos en mucho más sencilla.

Definición en la línea 393 del archivo sbcl_principal.cpp.

394 {395 int fila=tableMN->currentRow();396 int num_columnas=tableMN->numRows();397 for(int i=0;i<num_columnas;i++)398 {tableMDG->removeSelection(i);tableMN->removeSelection(i);tableMVC->removeSelection(i);}

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 38: Manual de Código Fuente

5.8 Creación del sistema general de ecuaciones lineales 35

399 tableMDG->selectRow(fila);400 tableMN->selectRow(fila);401 tableMVC->selectRow(fila);402 }

5.7.2.3. void sbcl_principal::slt_seleccionfilasMVC () [virtual, slot, inherited]

Este Slot se encarga de detectar en que fila de la Qtable Matriz de Valores Característicos se realiza un clickpara selecionar la misma fila de las demás tablas, de esta forma el análisis de los elementos en mucho mássencilla.

Definición en la línea 404 del archivo sbcl_principal.cpp.

405 {406 basicos *p_DATOS=&DATOS;407 int fila=tableMVC->currentRow();408 int *elemento=&fila;409 int num_columnas=tableMVC->numRows();410 for(int i=0;i<num_columnas;i++)411 {tableMDG->removeSelection(i);tableMN->removeSelection(i);tableMVC->removeSelection(i);}412 tableMDG->selectRow(fila);413 tableMN->selectRow(fila);414 tableMVC->selectRow(fila);415416 }

5.8. Creación del sistema general de ecuaciones lineales

Diagrama de colaboración para Creación del sistema general de ecuaciones lineales:

Generación de las variables del sistema matricial Tx=W

Ensamblaje los elementos en el sistema linealCreación del sistema general de ecuaciones lineales

Forma de cargar los distintos elementos que componen un circuito

Módulos

Generación de las variables del sistema matricial Tx=WConjunto de funciones que se encarga de preparar los elementos del sistema matricial Tx=W.

Forma de cargar los distintos elementos que componen un circuitoEste conjunto de funciones se encarga de indicar los límites del vector del elemento que se carga en lasQtable: MDG, MN y MVC.El grupo de funciones lee_elementoX envía los límites del vector que los define para un correcto tratamientode los datos de los elementos de un circuito.De esta forma se pueden generar nuevos elementos de manera más sencilla y sin limitaciones en losparámetros de definición.Para más información leer manual de funcionamiento de Ávalon.

Ensamblaje los elementos en el sistema lineal

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 39: Manual de Código Fuente

5.9 Ensamblaje los elementos en el sistema lineal 36

5.8.1. Descripción detallada

Este grupo de funciones recoge los pasos necesarios para el dimensionamiento, lectura y ensamblaje dedatos para la creación del sistema de ecuaciones al que se reduce todo análisis de circuitos en este programa.Este grupo se divide en otros tres más, a saber:

Generación de las variables del sistema matricial Tx=W

Forma de cargar los diferentes elementos que componen un circuito

Ensamblaje los elementos en el sistema lineal

5.9. Ensamblaje los elementos en el sistema lineal

Diagrama de colaboración para Ensamblaje los elementos en el sistema lineal:

Ensamblaje sobre la Matriz T

Ensamblaje sobre el Vector W

Ensamblaje los elementos en el sistema linealCreación del sistema general de ecuaciones lineales

Módulos

Ensamblaje sobre la Matriz TEnsamblaje sobre el Vector W

Funciones

void elementoMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga de seleccionar a que función debe llamarse según el elemento que se este leyendoen tablas.

void elementoVectorW (double ∗p_elemento, basicos ∗p_DATOS, float t)Esta Función se encarga de seleccionar a que función debe llamarse según el elemento que se este leyendoen tablas.

5.9.1. Descripción detallada

Este grupo de funciones es la encargada de realizar el ensamblaje del sistema lineal de ecuaciones que deberesolver el programa. Se dividen las funciones a su vez en dos grupos más en función de su contribución, asaber:

Contribución a la Matriz T

Contribución al Vector W

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 40: Manual de Código Fuente

5.9 Ensamblaje los elementos en el sistema lineal 37

5.9.2. Documentación de las funciones

5.9.2.1. void elementoMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga de seleccionar a que función debe llamarse según el elemento que se este leyendoen tablas.

Para esto hace uso del switch

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 10 del archivo elementos.cpp.

11 {12 double tipo_elemento0= *p_elemento;13 int tipo_elemento=int(tipo_elemento0);14 switch (tipo_elemento)15 {16 case 0: conductanciaMatrizT(p_elemento,p_DATOS);break;17 case 1: resistenciaMatrizT(p_elemento,p_DATOS);break;18 case 2: condensadorMatrizT(p_elemento,p_DATOS);break;19 case 3: bobinaMatrizT(p_elemento,p_DATOS);break;20 case 4: fuenteVccMatrizT(p_elemento,p_DATOS);break;21 case 5: break;22 case 6: amplificadorMatrizT(p_elemento,p_DATOS);break;23 case 7: trafoMatrizT(p_elemento,p_DATOS);break;24 case 8: fuenteIdependVMatrizT(p_elemento,p_DATOS);break;25 case 9: fuenteVdependVMatrizT(p_elemento,p_DATOS);break;26 case 10: fuenteIdependIMatrizT(p_elemento,p_DATOS);break;27 case 11: fuenteVdependIMatrizT(p_elemento,p_DATOS);break;28 case 12: bobinaacopladaMatrizT(p_elemento,p_DATOS);break;29 case 13: interruptorMatrizT(p_elemento,p_DATOS);break;30 case 14: cuadripoloAdmitanciaMatrizT(p_elemento,p_DATOS);break;31 case 15: cuadripoloImpedanciaMatrizT(p_elemento,p_DATOS);break;32 case 16: cuadripoloHibridoMatrizT(p_elemento,p_DATOS);break;33 case 17: cuadripoloTrasmisionMatrizT(p_elemento,p_DATOS);break;34 case 18: {cout<<"\n ERROR Asegúrese de que la librería está adaptada a Ávalon"<<35 endl; break;}36 }37 }

5.9.2.2. void elementoVectorW (double ∗ p_elemento, basicos ∗ p_DATOS, float t)

Esta Función se encarga de seleccionar a que función debe llamarse según el elemento que se este leyendoen tablas.

Para esto hace uso del switch

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicost Valor de tiempo, importante en las funciones de fuentes de excitación para calcular el valor temporal

de dicha excitación

Definición en la línea 1964 del archivo elementos.cpp.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 41: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 38

1964 {1965 double tipo_elemento0= *p_elemento;1966 int tipo_elemento=int(tipo_elemento0);1967 /*for(int i=0;i<16;i++){cout<<p_elemento[i]<<" ";}1968 cout<<endl;*/1969 switch (tipo_elemento)1970 {1971 case 0: break;1972 case 1: p_DATOS->apuntaA2=p_DATOS->apuntaA2+1;break;1973 case 2: if(p_elemento[2]==1){p_DATOS->apuntaEA=p_DATOS->apuntaEA+1;}break;1974 case 3: p_DATOS->apuntaA2=p_DATOS->apuntaA2+1;break;1975 case 4: fuenteVccVectorW(p_elemento,p_DATOS,t);break;1976 case 5: fuenteIVectorW(p_elemento,p_DATOS,t);break;1977 case 6: p_DATOS->apuntaA2=p_DATOS->apuntaA2+1;break;1978 case 7: p_DATOS->apuntaA2=p_DATOS->apuntaA2+2;break;1979 case 8: if(p_elemento[2]==1){p_DATOS->apuntaEA=p_DATOS->apuntaEA+1;}break;1980 case 9: p_DATOS->apuntaA2=p_DATOS->apuntaA2+1;break;1981 case 10: p_DATOS->apuntaA2=p_DATOS->apuntaA2+1;break;1982 case 11: p_DATOS->apuntaA2=p_DATOS->apuntaA2+2;break;1983 case 12: p_DATOS->apuntaA2=p_DATOS->apuntaA2+2;break;1984 case 13: p_DATOS->apuntaA2=p_DATOS->apuntaA2+1;break;1985 case 14: break;1986 case 15: p_DATOS->apuntaA2=p_DATOS->apuntaA2+2;break;1987 case 16: p_DATOS->apuntaA2=p_DATOS->apuntaA2+1;break;1988 case 17: p_DATOS->apuntaA2=p_DATOS->apuntaA2+1;break;1989 case 18: {cout<<"\n ERROR Asegúrese de que la librería está adaptada a Ávalon"<<1990 endl; break;}1991 }1992 //cout<<"\n Primer valor del vector de datos elementos "<<p_elemento[1]<<endl;1993 }

5.10. Ensamblaje sobre la Matriz T

Diagrama de colaboración para Ensamblaje sobre la Matriz T:

Ensamblaje sobre la Matriz TEnsamblaje los elementos en el sistema lineal

Funciones

void conductanciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la conductancia.

void resistenciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la resistencia.

void condensadorMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la condensador.

void bobinaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la bobina.

void fuenteVccMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente independiente de tensión.

void amplificadorMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T del amplificador operacional ideal.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 42: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 39

void trafoMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T del transformador ideal.

void fuenteIdependVMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de corriente dependiente detensión.

void fuenteVdependVMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de tensión dependiente detensión.

void fuenteIdependIMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de corriente dependiente decorriente.

void fuenteVdependIMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de tensión dependiente decorriente.

void bobinaacopladaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de bobinas acopladas.

void interruptorMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T del interruptor.

void cuadripoloAdmitanciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros de admitancia.

void cuadripoloImpedanciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros de impedancia.

void cuadripoloHibridoMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros híbridos.

void cuadripoloTrasmisionMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros de trasmisión.

5.10.1. Descripción detallada

Este grupo de funciones es el encargado de realizar el ensamblaje en la Matriz T.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 43: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 40

5.10.2. Documentación de las funciones

5.10.2.1. void amplificadorMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T del amplificador operacional ideal.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 227 del archivo elementos.cpp.

228 {229 PetscScalar Valor=p_elemento[9];230 //un nodo conectado al de referencia231 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0)232 {233 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);234 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,Valor,ADD_VALUES);235 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);236 }237238 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0)239 {240 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);241 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,Valor,ADD_VALUES);242 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);243 }244245 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0)246 {247 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);248 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);249 }250251 //Dos nodos conectados al de referencia252 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0)253 {254 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);255 }256257 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0)258 {259 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);260 }261262 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0)263 {264 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,Valor,ADD_VALUES);265 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);266 }267268 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0)269 {270 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);271 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);272 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,Valor,ADD_VALUES);273 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);274 }275 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 44: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 41

5.10.2.2. void bobinaacopladaMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de bobinas acopladas.

Este elemento pertenece al grupo A2 por lo que siempre aporta dos ecuaciones adicionales

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 1028 del archivo elementos.cpp.

1029 {1030 PetscScalar ValorL1, ValorL2, ValorM;1031 PetscImaginaryPart(ValorL1)=p_elemento[14];1032 PetscImaginaryPart(ValorL2)=p_elemento[15];1033 //PetscImaginaryPart(ValorM)=p_elemento[16]*sqrt(p_elemento[14]*p_elemento[15]);1034 PetscImaginaryPart(ValorM)=p_elemento[16];1035 if(p_elemento[2]==1)//Ver si no es EA1036 {1037 cout<<"\nError de concepto en inductor "<<p_elemento[0]<<" con ID relativo: "<<1038 p_elemento[1]<<", este no puede ser EA, ya que su ensamblaje siempre es como si lo fuese"<<endl;1039 }1040 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1041 {1042 //primera EA1043 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1044 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1045 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1046 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1047 //segunda EA1048 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1049 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1050 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1051 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1052 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1053 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1054 }1055 if(p_elemento[5]==0 && p_elemento[4]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1056 {1057 //primera EA1058 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1059 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1060 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1061 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1062 //segunda EA1063 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1064 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1065 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1066 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1067 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1068 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1069 }1070 if(p_elemento[6]==0 && p_elemento[5]!=0 && p_elemento[4]!=0 && p_elemento[7]!=0)1071 {1072 //primera EA1073 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1074 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1075 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1076 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1077 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1078 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1079 //segunda EA1080 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1081 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 45: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 42

1082 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1083 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1084 }1085 if(p_elemento[7]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[4]!=0)1086 {1087 //primera EA1088 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1089 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1090 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1091 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1092 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1093 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1094 //segunda EA1095 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1096 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1097 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1098 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1099 }1100 //dos nodos conectados al nodo de referencia1101 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1102 {1103 //primera EA1104 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1105 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1106 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1107 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1108 //segunda EA1109 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1110 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1111 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1112 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1113 }11141115 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)1116 {1117 //primera EA1118 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1119 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1120 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1121 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1122 //segunda EA1123 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1124 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1125 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1126 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1127 }11281129 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)1130 {1131 //primera EA1132 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1133 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1134 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1135 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1136 //segunda EA1137 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1138 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1139 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1140 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1141 }11421143 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1144 {1145 //primera EA1146 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1147 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1148 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 46: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 43

1149 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1150 //segunda EA1151 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1152 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1153 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1154 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1155 }11561157 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)1158 {1159 //primera EA1160 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1161 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1162 //segunda EA1163 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1164 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1165 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1166 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1167 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1168 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1169 }11701171 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)1172 {1173 //primera EA1174 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1175 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1176 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1177 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1178 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1179 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1180 //segunda EA1181 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1182 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1183 }11841185 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)1186 {1187 //primera EA1188 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1189 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1190 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1191 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1192 //segunda EA1193 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1194 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1195 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1196 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1197 }1198 //tres nodos conectados al de referencia1199 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]==0)1200 {1201 //primera EA1202 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1203 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1204 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1205 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1206 //segunda EA1207 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1208 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1209 }12101211 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1212 {1213 //primera EA1214 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1215 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 47: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 44

1216 //segunda EA1217 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1218 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1219 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1220 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1221 }12221223 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1224 {1225 //primera EA1226 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1227 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1228 //segunda EA1229 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1230 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1231 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1232 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1233 }12341235 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1236 {1237 //primera EA1238 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1239 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1240 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-ValorL1,ADD_VALUES);1241 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-ValorM,ADD_VALUES);1242 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1243 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1244 //segunda EA1245 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1246 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1247 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-ValorM,ADD_VALUES);1248 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-ValorL2,ADD_VALUES);1249 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1250 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1251 }1252 }

5.10.2.3. void bobinaMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de la bobina.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 164 del archivo elementos.cpp.

165 {166 PetscScalar Valor;167 PetscImaginaryPart(Valor)=p_elemento[7];168 if(p_elemento[2]==1)//Ver si no es EA169 {170 cout<<"\nError de concepto en inductor "<<p_elemento[0]<<" con ID relativo: "<<171 p_elemento[1]<<", este no puede ser EA, pertenece al grupo A2 por lo que es equivalente"<<endl;172 }173 //PetscScalar Valor[0];174 //PetscImaginaryPart(Valor[0])=p_elemento[7];175 //cout<<"inductor: "<<Valor[0]<<endl;176

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 48: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 45

177 if(p_elemento[4]==0)178 {179 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);180 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-Valor,ADD_VALUES);181 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);182 }183 if(p_elemento[5]==0)184 {185 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);186 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-Valor,ADD_VALUES);187 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);188 }189 if(p_elemento[4]!=0&&p_elemento[5]!=0)190 {191 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);192 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);193 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-Valor,ADD_VALUES);194 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);195 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);196 }197 }

5.10.2.4. void condensadorMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de la condensador.

Este elemento pertenece al grupo A1 por lo que puede aportar una ecuación adicional si se desea obtenerla intensidad que pasa por el

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 116 del archivo elementos.cpp.

117 {118 PetscScalar Valor;119 PetscImaginaryPart(Valor)=p_elemento[7];120 cout<<"valor: "<<Valor<<endl;121 if(p_elemento[2]==0)//Ver si no es EA122 {123 if(p_elemento[4]==0)124 {125 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,Valor,ADD_VALUES);126 }127 if(p_elemento[5]==0)128 {129 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,Valor,ADD_VALUES);130 }131 if(p_elemento[4]!=0&&p_elemento[5]!=0)132 {133 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,Valor,ADD_VALUES);134 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,Valor,ADD_VALUES);135 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[5]-1,-Valor,ADD_VALUES);136 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[4]-1,-Valor,ADD_VALUES);137 }138 }139 else//Es EA140 {141 if(p_elemento[7]==0)142 {143 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_elemento[5]-1,-Valor,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 49: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 46

144 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_DATOS->apuntaEA,-1,ADD_VALUES);145 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaEA,-1,ADD_VALUES);146 }147 if(p_elemento[5]==0)148 {149 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_elemento[4]-1,Valor,ADD_VALUES);150 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_DATOS->apuntaEA,-1,ADD_VALUES);151 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaEA,1,ADD_VALUES);152 }153 if(p_elemento[4]!=0&&p_elemento[5]!=0)154 {155 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_elemento[4]-1,Valor,ADD_VALUES);156 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_elemento[5]-1,-Valor,ADD_VALUES);157 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_DATOS->apuntaEA,-1,ADD_VALUES);158 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaEA,1,ADD_VALUES);159 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaEA,-1,ADD_VALUES);160 }161 }162 }

5.10.2.5. void conductanciaMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de la conductancia.

Este elemento pertenece al grupo A1 por lo que puede aportar una ecuación adicional si se desea obtenerla intensidad que pasa por el

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 39 del archivo elementos.cpp.

40 {41 if(p_elemento[2]==0)//Ver si no es EA42 {43 cout<<"valores de la conductancia: "<<p_elemento[4]-1<<" "<<p_elemento[5]-1<<44 " "<<p_elemento[7]<<endl;45 if(p_elemento[4]==0)46 {MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,p_elemento[7],ADD_VALUES);}47 if(p_elemento[5]==0)48 {MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,p_elemento[7],ADD_VALUES);}49 if(p_elemento[4]!=0&&p_elemento[5]!=0)50 {51 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,p_elemento[7],ADD_VALUES);52 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,p_elemento[7],ADD_VALUES);53 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[5]-1,-p_elemento[7],ADD_VALUES);54 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[4]-1,-p_elemento[7],ADD_VALUES);55 }56 }57 else//Es EA58 {59 if(p_elemento[4]==0)60 {61 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_elemento[5]-1,-p_elemento[7],ADD_VALUES);62 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_DATOS->apuntaEA,-1,ADD_VALUES);63 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaEA,-1,ADD_VALUES);64 }65 if(p_elemento[5]==0)66 {67 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_elemento[4]-1,p_elemento[7],ADD_VALUES);68 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_DATOS->apuntaEA,-1,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 50: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 47

69 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaEA,1,ADD_VALUES);70 }71 if(p_elemento[5]!=0&&p_elemento[4]!=0)72 {73 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_elemento[4]-1,p_elemento[7],ADD_VALUES);74 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_elemento[5]-1,-p_elemento[7],ADD_VALUES);75 MatSetValue(p_DATOS->T,p_DATOS->apuntaEA,p_DATOS->apuntaEA,-1,ADD_VALUES);76 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaEA,1,ADD_VALUES);77 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaEA,-1,ADD_VALUES);78 }79 //Incremento en uno el valor para poder poner otra EA si la hubiese80 p_DATOS->apuntaEA=p_DATOS->apuntaEA+1;81 }82 }

5.10.2.6. void cuadripoloAdmitanciaMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por sus parámet-ros de admitancia.

Este elemento pertenece al grupo A1 y no tiene posibilidad de aportar ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 1284 del archivo elementos.cpp.

1285 {1286 PetscScalar y11=p_elemento[14];1287 PetscScalar y12=p_elemento[15];1288 PetscScalar y21=p_elemento[16];1289 PetscScalar y22=p_elemento[17];1290 if(p_elemento[2]==1)//Ver si no es EA1291 {1292 cout<<"\nError de concepto en este tipo de cuatripolo "<<p_elemento[0]<<1293 " con ID relativo: "<<p_elemento[1]<<1294 ", este no puede ser EA, cuando se define según parámetros de admitancia"<<endl;1295 }1296 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1297 {1298 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,y11,ADD_VALUES);1299 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[6]-1,-y12,ADD_VALUES);1300 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[7]-1,-y12,ADD_VALUES);1301 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[5]-1,-y21,ADD_VALUES);1302 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,y22,ADD_VALUES);1303 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[7]-1,-y22,ADD_VALUES);1304 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[5]-1,y21,ADD_VALUES);1305 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[6]-1,-y22,ADD_VALUES);1306 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,y22,ADD_VALUES);1307 }1308 if(p_elemento[5]==0 && p_elemento[4]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1309 {1310 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,y11,ADD_VALUES);1311 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[6]-1,y12,ADD_VALUES);1312 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[7]-1,-y11,ADD_VALUES);1313 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[4]-1,y21,ADD_VALUES);1314 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,y22,ADD_VALUES);1315 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[7]-1,-y22,ADD_VALUES);1316 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[4]-1,-y21,ADD_VALUES);1317 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[6]-1,-y22,ADD_VALUES);1318 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,y22,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 51: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 48

1319 }1320 if(p_elemento[6]==0 && p_elemento[5]!=0 && p_elemento[4]!=0 && p_elemento[7]!=0)1321 {1322 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,y11,ADD_VALUES);1323 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[5]-1,-y11,ADD_VALUES);1324 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[7]-1,-y11,ADD_VALUES);1325 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[4]-1,-y11,ADD_VALUES);1326 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,y11,ADD_VALUES);1327 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[7]-1,-y12,ADD_VALUES);1328 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[4]-1,-y21,ADD_VALUES);1329 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[5]-1,y21,ADD_VALUES);1330 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,y22,ADD_VALUES);1331 }1332 if(p_elemento[7]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[4]!=0)1333 {1334 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,y11,ADD_VALUES);1335 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[5]-1,-y11,ADD_VALUES);1336 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[6]-1,y12,ADD_VALUES);1337 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[4]-1,-y11,ADD_VALUES);1338 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,y11,ADD_VALUES);1339 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[6]-1,-y12,ADD_VALUES);1340 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[4]-1,y21,ADD_VALUES);1341 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[5]-1,-y21,ADD_VALUES);1342 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,y22,ADD_VALUES);1343 }1344 //dos nodos conectados al nodo de referencia1345 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1346 {1347 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,y11,ADD_VALUES);1348 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[6]-1,y12,ADD_VALUES);1349 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[4]-1,y21,ADD_VALUES);1350 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,y22,ADD_VALUES);1351 }13521353 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)1354 {1355 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,y11,ADD_VALUES);1356 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[7]-1,-y12,ADD_VALUES);1357 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[5]-1,y21,ADD_VALUES);1358 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,y22,ADD_VALUES);1359 }13601361 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)1362 {1363 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,y11,ADD_VALUES);1364 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[6]-1,-y12,ADD_VALUES);1365 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[5]-1,-y21,ADD_VALUES);1366 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,y22,ADD_VALUES);1367 }13681369 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1370 {1371 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,y11,ADD_VALUES);1372 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[7]-1,-y11,ADD_VALUES);1373 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[4]-1,-y21,ADD_VALUES);1374 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,y22,ADD_VALUES);1375 }13761377 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)1378 {1379 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,y22,ADD_VALUES);1380 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[7]-1,-y22,ADD_VALUES);1381 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[6]-1,-y22,ADD_VALUES);1382 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,y22,ADD_VALUES);1383 }13841385 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 52: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 49

1386 {1387 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,y11,ADD_VALUES);1388 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[5]-1,-y11,ADD_VALUES);1389 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[4]-1,-y11,ADD_VALUES);1390 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,y11,ADD_VALUES);1391 }1392 //tres nodos conectados al de referencia1393 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)1394 {1395 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,y11,ADD_VALUES);1396 }13971398 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]==0)1399 {1400 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,y11,ADD_VALUES);1401 }14021403 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1404 {1405 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,y22,ADD_VALUES);1406 }14071408 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1409 {1410 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,y22,ADD_VALUES);1411 }14121413 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1414 {1415 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[4]-1,y11,ADD_VALUES);1416 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[5]-1,-y11,ADD_VALUES);1417 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[6]-1,y12,ADD_VALUES);1418 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[7]-1,-y11,ADD_VALUES);1419 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[4]-1,-y11,ADD_VALUES);1420 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[5]-1,y11,ADD_VALUES);1421 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[6]-1,-y12,ADD_VALUES);1422 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[7]-1,-y12,ADD_VALUES);1423 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[4]-1,y21,ADD_VALUES);1424 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[5]-1,-y21,ADD_VALUES);1425 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,y22,ADD_VALUES);1426 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[7]-1,-y22,ADD_VALUES);1427 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[4]-1,-y21,ADD_VALUES);1428 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[5]-1,y21,ADD_VALUES);1429 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[6]-1,-y22,ADD_VALUES);1430 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,y22,ADD_VALUES);1431 }1432 }

5.10.2.7. void cuadripoloHibridoMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por sus parámet-ros híbridos.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 1627 del archivo elementos.cpp.

1628 {

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 53: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 50

1629 PetscScalar h11=p_elemento[14];1630 PetscScalar h12=p_elemento[15];1631 PetscScalar h21=p_elemento[16];1632 PetscScalar h22=p_elemento[17];1633 if(p_elemento[2]==1)//Ver si no es EA1634 {1635 cout<<"\nError de concepto en este tipo de cuatripolo "<<p_elemento[0]<<" con ID relativo: "<<p_elemento[1]<<", este no puede ser EA, cuando se define según parámetros de admitancia"<<endl;1636 }1637 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1638 {1639 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1640 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-h12,ADD_VALUES);1641 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,h12,ADD_VALUES);1642 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1643 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1644 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,h22,ADD_VALUES);1645 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[7]-1,-h22,ADD_VALUES);1646 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,h21,ADD_VALUES);1647 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[6]-1,-h22,ADD_VALUES);1648 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,h22,ADD_VALUES);1649 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-h21,ADD_VALUES);1650 }1651 if(p_elemento[5]==0 && p_elemento[4]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1652 {1653 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1654 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-h12,ADD_VALUES);1655 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,h12,ADD_VALUES);1656 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1657 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1658 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,h22,ADD_VALUES);1659 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[7]-1,-h22,ADD_VALUES);1660 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,h21,ADD_VALUES);1661 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[6]-1,-h22,ADD_VALUES);1662 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,h22,ADD_VALUES);1663 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-h21,ADD_VALUES);1664 }1665 if(p_elemento[6]==0 && p_elemento[5]!=0 && p_elemento[4]!=0 && p_elemento[7]!=0)1666 {1667 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1668 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1669 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,h12,ADD_VALUES);1670 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1671 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1672 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1673 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,h22,ADD_VALUES);1674 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-h21,ADD_VALUES);1675 }1676 if(p_elemento[7]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[4]!=0)1677 {1678 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1679 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1680 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-h12,ADD_VALUES);1681 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1682 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1683 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1684 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,h22,ADD_VALUES);1685 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,h21,ADD_VALUES);1686 }1687 //dos nodos conectados al nodo de referencia1688 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1689 {1690 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1691 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-h12,ADD_VALUES);1692 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1693 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1694 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,h22,ADD_VALUES);1695 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,h21,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 54: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 51

1696 }16971698 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)1699 {1700 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1701 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,h12,ADD_VALUES);1702 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1703 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1704 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,h22,ADD_VALUES);1705 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-h21,ADD_VALUES);1706 }17071708 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)1709 {1710 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1711 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-h12,ADD_VALUES);1712 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1713 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1714 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,h22,ADD_VALUES);1715 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,h21,ADD_VALUES);1716 }17171718 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1719 {1720 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1721 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,h12,ADD_VALUES);1722 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1723 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1724 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,h22,ADD_VALUES);1725 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-h21,ADD_VALUES);1726 }17271728 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)1729 {1730 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-h12,ADD_VALUES);1731 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,h12,ADD_VALUES);1732 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1733 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,h22,ADD_VALUES);1734 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[7]-1,-h22,ADD_VALUES);1735 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,h21,ADD_VALUES);1736 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[6]-1,-h22,ADD_VALUES);1737 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,h22,ADD_VALUES);1738 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-h21,ADD_VALUES);1739 }17401741 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)1742 {1743 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1744 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1745 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1746 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1747 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1748 }1749 //tres nodos conectados al de referencia1750 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)1751 {1752 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1753 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1754 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1755 }17561757 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]==0)1758 {1759 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1760 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1761 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1762 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 55: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 52

17631764 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1765 {1766 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-h12,ADD_VALUES);1767 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1768 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,h22,ADD_VALUES);1769 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,h21,ADD_VALUES);1770 }17711772 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1773 {1774 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,h12,ADD_VALUES);1775 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1776 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,h22,ADD_VALUES);1777 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-h21,ADD_VALUES);1778 }17791780 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1781 {1782 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1783 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1784 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-h12,ADD_VALUES);1785 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,h12,ADD_VALUES);1786 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-h11,ADD_VALUES);1787 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1788 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1789 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[6]-1,h22,ADD_VALUES);1790 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[7]-1,-h22,ADD_VALUES);1791 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,h21,ADD_VALUES);1792 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[6]-1,-h22,ADD_VALUES);1793 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[7]-1,h22,ADD_VALUES);1794 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-h21,ADD_VALUES);1795 }1796 }

5.10.2.8. void cuadripoloImpedanciaMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por sus parámet-ros de impedancia.

Este elemento pertenece al grupo A2 por lo que siempre aporta dos ecuaciones adicionales

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 1433 del archivo elementos.cpp.

1434 {1435 PetscScalar z11=p_elemento[14];1436 PetscScalar z12=p_elemento[15];1437 PetscScalar z21=p_elemento[16];1438 PetscScalar z22=p_elemento[17];1439 if(p_elemento[2]==1)//Ver si no es EA1440 {1441 cout<<"\nError de concepto en este tipo de cuatripolo "<<p_elemento[0]<<1442 " con ID relativo: "<<p_elemento[1]<<1443 ", este no puede ser EA, cuando se define según parámetros de admitancia"<<endl;1444 }1445 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1446 {1447 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 56: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 53

1448 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1449 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1450 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1451 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1452 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1453 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1454 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1455 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1456 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1457 }1458 if(p_elemento[5]==0 && p_elemento[4]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1459 {1460 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1461 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1462 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1463 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1464 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1465 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1466 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1467 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1468 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1469 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1470 }1471 if(p_elemento[6]==0 && p_elemento[5]!=0 && p_elemento[4]!=0 && p_elemento[7]!=0)1472 {1473 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1474 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1475 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1476 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1477 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1478 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1479 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1480 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1481 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1482 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1483 }1484 if(p_elemento[7]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[4]!=0)1485 {1486 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1487 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1488 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1489 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1490 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1491 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1492 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1493 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1494 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1495 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1496 }1497 //dos nodos conectados al nodo de referencia1498 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1499 {1500 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);15011502 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1503 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1504 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1505 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1506 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1507 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1508 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1509 }15101511 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)1512 {1513 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1514 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 57: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 54

1515 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1516 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1517 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1518 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1519 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1520 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1521 }15221523 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)1524 {1525 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1526 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1527 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1528 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1529 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1530 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1531 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1532 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1533 }15341535 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1536 {1537 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1538 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1539 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1540 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1541 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1542 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1543 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1544 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1545 }15461547 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)1548 {1549 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1550 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1551 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1552 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1553 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1554 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1555 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1556 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1557 }15581559 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)1560 {1561 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1562 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1563 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1564 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1565 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1566 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1567 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1568 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1569 }1570 //tres nodos conectados al de referencia1571 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)1572 {1573 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1574 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1575 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1576 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1577 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1578 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1579 }15801581 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]==0)

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 58: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 55

1582 {1583 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1584 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1585 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1586 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1587 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1588 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1589 }15901591 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1592 {1593 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1594 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1595 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1596 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1597 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1598 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1599 }16001601 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1602 {1603 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1604 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1605 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1606 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1607 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1608 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1609 }16101611 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1612 {1613 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1614 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1615 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-z11,ADD_VALUES);1616 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2+1,-z12,ADD_VALUES);1617 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1618 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1619 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-z21,ADD_VALUES);1620 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-z22,ADD_VALUES);1621 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1622 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1623 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1624 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1625 }1626 }

5.10.2.9. void cuadripoloTrasmisionMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por sus parámet-ros de trasmisión.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 1797 del archivo elementos.cpp.

1798 {1799 PetscScalar A=p_elemento[14];1800 PetscScalar B=p_elemento[15];

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 59: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 56

1801 PetscScalar C=p_elemento[16];1802 PetscScalar D=p_elemento[17];1803 if(p_elemento[2]==1)//Ver si no es EA1804 {1805 cout<<"\nError de concepto en este tipo de cuatripolo "<<p_elemento[0]<<1806 " con ID relativo: "<<p_elemento[1]<<1807 ", este no puede ser EA, cuando se define según parámetros de admitancia"<<endl;1808 }1809 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1810 {1811 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1812 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-A,ADD_VALUES);1813 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,A,ADD_VALUES);1814 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1815 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[6]-1,-C,ADD_VALUES);1816 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[7]-1,C,ADD_VALUES);1817 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,D,ADD_VALUES);1818 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1819 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1820 }1821 if(p_elemento[5]==0 && p_elemento[4]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1822 {1823 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1824 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-A,ADD_VALUES);1825 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,A,ADD_VALUES);1826 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1827 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[6]-1,C,ADD_VALUES);1828 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[7]-1,-C,ADD_VALUES);1829 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,-D,ADD_VALUES);1830 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1831 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1832 }1833 if(p_elemento[6]==0 && p_elemento[5]!=0 && p_elemento[4]!=0 && p_elemento[7]!=0)1834 {1835 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1836 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1837 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,A,ADD_VALUES);1838 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1839 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[7]-1,-C,ADD_VALUES);1840 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,-D,ADD_VALUES);1841 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[7]-1,C,ADD_VALUES);1842 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,D,ADD_VALUES);1843 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1844 }1845 if(p_elemento[7]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[4]!=0)1846 {1847 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1848 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1849 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-A,ADD_VALUES);1850 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1851 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[6]-1,C,ADD_VALUES);1852 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,-D,ADD_VALUES);1853 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[6]-1,-C,ADD_VALUES);1854 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,D,ADD_VALUES);1855 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1856 }1857 //dos nodos conectados al nodo de referencia1858 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1859 {1860 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1861 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-A,ADD_VALUES);1862 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1863 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[6]-1,C,ADD_VALUES);1864 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,-D,ADD_VALUES);1865 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1866 }1867

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 60: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 57

1868 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)1869 {1870 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1871 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,A,ADD_VALUES);1872 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1873 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[6]-1,-C,ADD_VALUES);1874 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[7]-1,C,ADD_VALUES);1875 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,D,ADD_VALUES);1876 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1877 }18781879 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)1880 {1881 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1882 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-A,ADD_VALUES);1883 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1884 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[6]-1,-C,ADD_VALUES);1885 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,D,ADD_VALUES);1886 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1887 }18881889 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1890 {1891 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1892 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,A,ADD_VALUES);1893 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1894 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[7]-1,-C,ADD_VALUES);1895 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,-D,ADD_VALUES);1896 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1897 }18981899 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)1900 {1901 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-A,ADD_VALUES);1902 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,A,ADD_VALUES);1903 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1904 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1905 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1906 }19071908 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)1909 {1910 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1911 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1912 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1913 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,-D,ADD_VALUES);1914 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,D,ADD_VALUES);1915 }1916 //tres nodos conectados al de referencia1917 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)1918 {1919 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1920 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1921 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,D,ADD_VALUES);1922 }19231924 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]==0)1925 {1926 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1927 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1928 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,-D,ADD_VALUES);1929 }19301931 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)1932 {1933 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-A,ADD_VALUES);1934 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 61: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 58

1935 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1936 }19371938 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1939 {1940 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,A,ADD_VALUES);1941 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1942 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1943 }19441945 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1946 {1947 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1948 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1949 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-A,ADD_VALUES);1950 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,A,ADD_VALUES);1951 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,B,ADD_VALUES);1952 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[6]-1,C,ADD_VALUES);1953 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_elemento[7]-1,-C,ADD_VALUES);1954 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,-D,ADD_VALUES);1955 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[6]-1,-C,ADD_VALUES);1956 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_elemento[7]-1,C,ADD_VALUES);1957 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,D,ADD_VALUES);1958 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1959 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1960 }1961 }

5.10.2.10. void fuenteIdependIMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de corriente dependiente decorriente.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 731 del archivo elementos.cpp.

732 {733 PetscScalar Valor=p_elemento[9];734 if(p_elemento[2]==1)//Ver si es EA735 {736 cout<<"Este elemento pertenece al grupo A2"<<endl;737 }738739 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)740 {741 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);742 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);743 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,Valor,ADD_VALUES);744 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);745 }746747 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)748 {749 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);750 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);751 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,Valor,ADD_VALUES);752 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 62: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 59

753 }754755 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)756 {757 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);758 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);759 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);760 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);761 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);762 }763764 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)765 {766 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);767 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);768 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);769 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);770 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,Valor,ADD_VALUES);771 }772773 //Dos nodos conectados al de referencia774 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)775 {776 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,Valor,ADD_VALUES);777 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);778 }779780 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)781 {782 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);783 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);784 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);785 }786787 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)788 {789 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);790 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);791 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,Valor,ADD_VALUES);792 }793794 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)795 {796 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);797 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);798 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);799 }800801 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)802 {803 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);804 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);805 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,Valor,ADD_VALUES);806 }807808 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)809 {810 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);811 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);812 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);813 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);814 }815816 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)817 {818 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);819 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 63: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 60

820821 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)822 {823 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,Valor,ADD_VALUES);824 }825826 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)827 {828 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);829 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);830 }831832 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]==0)833 {834 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);835 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);836 }837838 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)839 {840 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);841 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);842 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);843 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);844 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,Valor,ADD_VALUES);845 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);846 }847 }

5.10.2.11. void fuenteIdependVMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de corriente dependiente detensión.

Este elemento pertenece al grupo A1 por lo que puede aportar una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 456 del archivo elementos.cpp.

457 {458 PetscScalar Valor=p_elemento[9];459 if(p_elemento[2]==1)//Ver si es EA460 {461 //un nodo conectado al de referencia462 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)463 {464 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-Valor,ADD_VALUES);465 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);466 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);467 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);468 }469470 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)471 {472 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,Valor,ADD_VALUES);473 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);474 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);475 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);476 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 64: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 61

477478 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)479 {480 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,Valor,ADD_VALUES);481 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-Valor,ADD_VALUES);482 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);483 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);484 }485486 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)487 {488 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,Valor,ADD_VALUES);489 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-Valor,ADD_VALUES);490 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);491 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);492 }493494 //Dos nodos conectados al de referencia495 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)496 {497 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-Valor,ADD_VALUES);498 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);499 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);500 }501502 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)503 {504 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-Valor,ADD_VALUES);505 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);506 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);507 }508509 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)510 {511 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,Valor,ADD_VALUES);512 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);513 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);514 }515516 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)517 {518 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,Valor,ADD_VALUES);519 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);520 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);521 }522523 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)524 {525 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);526 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);527 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);528 }529530 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)531 {532 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,Valor,ADD_VALUES);533 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-Valor,ADD_VALUES);534 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);535 }536537 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)538 {539 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,Valor,ADD_VALUES);540 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-Valor,ADD_VALUES);541 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-1,ADD_VALUES);542 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);543 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 65: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 62

544 }545 }546 if(p_elemento[2]==0)//No es EA547 {548 //un terminal conectado al nodo de referencia549 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)550 {551 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[4]-1,Valor,ADD_VALUES);552 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[5]-1,-Valor,ADD_VALUES);553 }554555 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)556 {557 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[4]-1,-Valor,ADD_VALUES);558 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[5]-1,Valor,ADD_VALUES);559 }560561 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)562 {563 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[4]-1,Valor,ADD_VALUES);564 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[4]-1,-Valor,ADD_VALUES);565 }566567 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)568 {569 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[5]-1,-Valor,ADD_VALUES);570 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[5]-1,Valor,ADD_VALUES);571 }572573 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)574 {575 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[4]-1,Valor,ADD_VALUES);576 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[5]-1,-Valor,ADD_VALUES);577 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[4]-1,-Valor,ADD_VALUES);578 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[5]-1,Valor,ADD_VALUES);579 }580581 //dos nodos conectados al nudo de referencia582 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)583 {584 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[5]-1,Valor,ADD_VALUES);585 }586587 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)588 {589 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[5]-1,-Valor,ADD_VALUES);590 }591592 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)593 {594 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[4]-1,-Valor,ADD_VALUES);595 }596597 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)598 {599 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[4]-1,Valor,ADD_VALUES);600 }601602 //Ningún nodo es el de referencia603 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)604 {605 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[4]-1,Valor,ADD_VALUES);606 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_elemento[5]-1,-Valor,ADD_VALUES);607 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[4]-1,-Valor,ADD_VALUES);608 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_elemento[5]-1,Valor,ADD_VALUES);609 }610 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 66: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 63

611 }

5.10.2.12. void fuenteVccMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente independiente de tensión.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional, puede definirse eltipo de excitación según lo indicado en la memoria principal de este proyecto

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 199 del archivo elementos.cpp.

200 {201 if(p_elemento[2]!=0)//Ver si no es EA202 {203 cout<<"Error de concepto en fuente de tensión "<<p_elemento[0]<<204 " con ID relativo: "<<p_elemento[1]<<205 ", este siempre es A2."<<endl;206 }207208 if(p_elemento[4]==0)209 {210 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);211 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);212 }213 if(p_elemento[5]==0)214 {215 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);216 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);217 }218 if(p_elemento[4]!=0&&p_elemento[5]!=0)219 {220 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);221 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);222 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);223 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);224 }225 }

5.10.2.13. void fuenteVdependIMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de tensión dependiente decorriente.

Este elemento pertenece al grupo A2 por lo que siempre aporta dos ecuaciones adicionales

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 849 del archivo elementos.cpp.

850 {

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 67: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 64

851 PetscScalar Valor=p_elemento[9];852853 if(p_elemento[2]==1)//Ver si no es EA854 {855 cout<<"\nError de concepto en inductor "<<p_elemento[0]<<856 " con ID relativo: "<<p_elemento[1]<<857 ", este no puede ser EA, ya que su ensamblaje siempre es como si lo fuese"<<endl;858 }859 //un nodo conectado al de referencia860 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)861 {862 //primera EA863 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);864 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);865 //segunda EA866 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);867 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);868 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);869 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);870 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);871 }872 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)873 {874 //primera EA875 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);876 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);877 //segunda EA878 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);879 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);880 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);881 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);882 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);883 }884 if(p_elemento[6]==0 && p_elemento[5]!=0 && p_elemento[4]!=0 && p_elemento[7]!=0)885 {886 //primera EA887 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);888 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);889 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);890 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);891 //segunda EA892 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);893 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);894 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);895 }896 if(p_elemento[7]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[4]!=0)897 {898 //primera EA899 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);900 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);901 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);902 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);903 //segunda EA904 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);905 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);906 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);907 }908909 //dos nodos conectados al nodo de referencia910 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)911 {912 //primera EA913 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);914 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);915 //segunda EA916 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);917 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 68: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 65

918 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);919 }920921 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)922 {923 //primera EA924 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);925 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);926 //segunda EA927 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);928 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);929 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);930 }931932 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)933 {934 //primera EA935 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);936 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);937 //segunda EA938 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);939 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);940 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);941 }942943 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)944 {945 //primera EA946 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);947 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);948 //segunda EA949 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);950 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);951 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);952 }953954 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)955 {956 //primera EA957 //segunda EA958 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);959 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);960 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);961 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);962 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);963 }964965 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)966 {967 //primera EA968 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);969 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);970 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);971 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);972 //segunda EA973 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);974 }975 //tres nodos conectados al de referencia976 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)977 {978 //primera EA979 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);980 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);981 //segunda EA982 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);983 }984

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 69: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 66

985 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]==0)986 {987 //primera EA988 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);989 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);990 //segunda EA991 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);992 }993994 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)995 {996 //primera EA997 //segunda EA998 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);999 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);1000 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1001 }10021003 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)1004 {1005 //primera EA1006 //segunda EA1007 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1008 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);1009 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1010 }10111012 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)1013 {1014 //primera EA1015 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);1016 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);1017 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1018 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1019 //segunda EA1020 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[6]-1,1,ADD_VALUES);1021 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_elemento[7]-1,-1,ADD_VALUES);1022 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,-Valor,ADD_VALUES);1023 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);1024 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);1025 }1026 }

5.10.2.14. void fuenteVdependVMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de tensión dependiente detensión.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 613 del archivo elementos.cpp.

614 {615 PetscScalar Valor=p_elemento[9];616 if(p_elemento[2]==1)//Ver si es EA617 {618 cout<<"Este elemento pertenece al grupo A2"<<endl;619 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 70: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 67

620 //1 nodo conectados al de referencia621 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)622 {623 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,Valor,ADD_VALUES);624 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,1,ADD_VALUES);625 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,-1,ADD_VALUES);626 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);627 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);628 }629630 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)631 {632 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,-Valor,ADD_VALUES);633 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,1,ADD_VALUES);634 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,-1,ADD_VALUES);635 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);636 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);637 }638639 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)640 {641 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,-Valor,ADD_VALUES);642 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,Valor,ADD_VALUES);643 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,-1,ADD_VALUES);644 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);645 }646647 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)648 {649 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,-Valor,ADD_VALUES);650 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,Valor,ADD_VALUES);651 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,1,ADD_VALUES);652 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);653 }654655 //Dos nodos conectados al de referencia656 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)657 {658 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,1,ADD_VALUES);659 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,-1,ADD_VALUES);660 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);661 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);662 }663664 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)665 {666 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,Valor,ADD_VALUES);667 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,-1,ADD_VALUES);668 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);669 }670671 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)672 {673 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,Valor,ADD_VALUES);674 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,1,ADD_VALUES);675 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);676 }677678 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)679 {680 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,-Valor,ADD_VALUES);681 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,-1,ADD_VALUES);682 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);683 }684685 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)686 {

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 71: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 68

687 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,-Valor,ADD_VALUES);688 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,1,ADD_VALUES);689 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);690 }691692 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)693 {694 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,-Valor,ADD_VALUES);695 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,Valor,ADD_VALUES);696 }697 //3 nodos al de referencia698 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)699 {700 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,-1,ADD_VALUES);701 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);702 }703704 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)705 {706 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,1,ADD_VALUES);707 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);708 }709710 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)711 {712 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,Valor,ADD_VALUES);713 }714715 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]==0)716 {717 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,-Valor,ADD_VALUES);718 }719720 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)721 {722 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,-Valor,ADD_VALUES);723 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,Valor,ADD_VALUES);724 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,1,ADD_VALUES);725 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,-1,ADD_VALUES);726 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2,1,ADD_VALUES);727 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);728 }729 }

5.10.2.15. void interruptorMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T del interruptor.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 1254 del archivo elementos.cpp.

1255 {1256 PetscScalar Valor=p_elemento[7];1257 PetscScalar Valor1=p_elemento[7]-1;1258 if(p_elemento[2]==1)//Ver si es EA1259 {1260 cout<<"Este elemento pertenece al grupo A2"<<endl;

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 72: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 69

1261 }1262 if(p_elemento[4]==0 && p_elemento[5]!=0)1263 {1264 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-Valor,ADD_VALUES);1265 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,Valor1,ADD_VALUES);1266 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1267 }1268 if(p_elemento[5]==0 && p_elemento[4]!=0)1269 {1270 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,Valor,ADD_VALUES);1271 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,Valor1,ADD_VALUES);1272 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1273 }1274 if(p_elemento[4]!=0&&p_elemento[5]!=0)1275 {1276 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,Valor,ADD_VALUES);1277 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-Valor,ADD_VALUES);1278 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,Valor1,ADD_VALUES);1279 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);1280 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);1281 }1282 }

5.10.2.16. void resistenciaMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T de la resistencia.

Este elemento pertenece al grupo A2 por lo que puede siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 84 del archivo elementos.cpp.

85 {86 if(p_elemento[2]==1)//Ver si no es EA87 {88 cout<<"Error de concepto en resistencia "<<p_elemento[0]<<89 " con ID relativo: "<<p_elemento[1]<<90 ", esta no puede ser EA, pertenece al grupo A2 por lo que es equivalente"<<endl;91 }9293 if(p_elemento[4]==0 && p_elemento[5]!=0)94 {95 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);96 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-p_elemento[7],ADD_VALUES);97 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);98 }99 if(p_elemento[5]==0 && p_elemento[4]!=0)100 {101 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);102 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-p_elemento[7],ADD_VALUES);103 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);104 }105 if(p_elemento[4]!=0&&p_elemento[5]!=0)106 {107 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);108 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);109 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_DATOS->apuntaA2,-p_elemento[7],ADD_VALUES);110 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);111 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 73: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 70

112 }113114 }

5.10.2.17. void trafoMatrizT (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en la matriz T del transformador ideal.

Este elemento pertenece al grupo A2 por lo que siempre aporta dos ecuaciones adicionales

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

Definición en la línea 277 del archivo elementos.cpp.

278 {279 PetscScalar Valor=p_elemento[9];280 PetscScalar Valorinver=1/p_elemento[9];281 if(p_elemento[2]==1)//Ver si no es EA282 {283 cout<<"\nError de concepto en inductor "<<p_elemento[0]<<284 " con ID relativo: "<<p_elemento[1]<<285 ", este no puede ser EA, ya que su ensamblaje siempre es como si lo fuese"<<endl;286 }287 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)288 {289 //primera EA290 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);291 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-Valor,ADD_VALUES);292 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,Valor,ADD_VALUES);293 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);294 //segunda EA295 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);296 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);297 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);298 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);299 }300 if(p_elemento[5]==0 && p_elemento[4]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)301 {302 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);303 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-Valor,ADD_VALUES);304 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,Valor,ADD_VALUES);305 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);306 //segunda EA307 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);308 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);309 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);310 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);311 }312 if(p_elemento[6]==0 && p_elemento[5]!=0 && p_elemento[4]!=0 && p_elemento[7]!=0)313 {314 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);315 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);316 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,Valor,ADD_VALUES);317 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);318 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);319 //segunda EA320 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);321 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);322 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);323 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 74: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 71

324 if(p_elemento[7]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[4]!=0)325 {326 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);327 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);328 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-Valor,ADD_VALUES);329 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);330 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);331 //segunda EA332 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);333 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);334 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);335 }336 //dos nodos conectados al nodo de referencia337 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)338 {339 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);340 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-Valor,ADD_VALUES);341 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);342 //segunda EA343 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);344 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);345 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);346 }347348 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]!=0)349 {350 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);351 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,Valor,ADD_VALUES);352 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);353 //segunda EA354 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);355 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);356 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);357 }358359 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]==0)360 {361 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);362 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-Valor,ADD_VALUES);363 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);364 //segunda EA365 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);366 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);367 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);368 }369370 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)371 {372 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);373 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,Valor,ADD_VALUES);374 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);375 //segunda EA376 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);377 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);378 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);379 }380381 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]!=0)382 {383 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-Valor,ADD_VALUES);384 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,Valor,ADD_VALUES);385 //segunda EA386 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);387 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);388 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);389 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);390 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 75: Manual de Código Fuente

5.10 Ensamblaje sobre la Matriz T 72

391392 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)393 {394 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);395 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);396 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);397 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);398 //segunda EA399 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);400 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);401 }402 //tres nodos conectados al de referencia403 if(p_elemento[4]==0 && p_elemento[5]!=0 && p_elemento[6]==0 && p_elemento[7]==0)404 {405 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);406 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);407 //segunda EA408 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);409 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);410 }411412 if(p_elemento[4]!=0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]==0)413 {414 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);415 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);416 //segunda EA417 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);418 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);419 }420421 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]!=0 && p_elemento[7]==0)422 {423 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-Valor,ADD_VALUES);424 //segunda EA425 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);426 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);427 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);428 }429430 if(p_elemento[4]==0 && p_elemento[5]==0 && p_elemento[6]==0 && p_elemento[7]!=0)431 {432 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,Valor,ADD_VALUES);433 //segunda EA434 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);435 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);436 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);437 }438439 if(p_elemento[4]!=0 && p_elemento[5]!=0 && p_elemento[6]!=0 && p_elemento[7]!=0)440 {441 //primera EA442 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[4]-1,1,ADD_VALUES);443 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[5]-1,-1,ADD_VALUES);444 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[6]-1,-Valor,ADD_VALUES);445 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2,p_elemento[7]-1,Valor,ADD_VALUES);446 MatSetValue(p_DATOS->T,p_elemento[4]-1,p_DATOS->apuntaA2,1,ADD_VALUES);447 MatSetValue(p_DATOS->T,p_elemento[5]-1,p_DATOS->apuntaA2,-1,ADD_VALUES);448 //segunda EA449 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2,1,ADD_VALUES);450 MatSetValue(p_DATOS->T,p_DATOS->apuntaA2+1,p_DATOS->apuntaA2+1,-Valorinver,ADD_VALUES);451 MatSetValue(p_DATOS->T,p_elemento[6]-1,p_DATOS->apuntaA2+1,1,ADD_VALUES);452 MatSetValue(p_DATOS->T,p_elemento[7]-1,p_DATOS->apuntaA2+1,-1,ADD_VALUES);453 }454 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 76: Manual de Código Fuente

5.11 Ensamblaje sobre el Vector W 73

5.11. Ensamblaje sobre el Vector W

Diagrama de colaboración para Ensamblaje sobre el Vector W:

Ensamblaje sobre el Vector WEnsamblaje los elementos en el sistema lineal

Funciones

void bobinaVectorW (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en el vector W de una bobina.

void fuenteVccVectorW (double ∗p_elemento, basicos ∗p_DATOS, float t)Esta Función se encarga del ensamblaje de valores en el vector W de una fuente independiente de tensión.

void fuenteIVectorW (double ∗p_elemento, basicos ∗p_DATOS, float t)Esta Función se encarga del ensamblaje de valores en el vector W de una fuente independiente de corriente.

5.11.1. Descripción detallada

Este grupo de funciones es el encargado de realizar el ensamblaje en el Vector W.

5.11.2. Documentación de las funciones

5.11.2.1. void bobinaVectorW (double ∗ p_elemento, basicos ∗ p_DATOS)

Esta Función se encarga del ensamblaje de valores en el vector W de una bobina.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicos

5.11.2.2. void fuenteIVectorW (double ∗ p_elemento, basicos ∗ p_DATOS, float t)

Esta Función se encarga del ensamblaje de valores en el vector W de una fuente independiente de corriente.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicost Valor de tiempo, sirve para evaluar la excitación en el instante dado

Definición en la línea 2077 del archivo elementos.cpp.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 77: Manual de Código Fuente

5.11 Ensamblaje sobre el Vector W 74

2078 {2079 float limite_a=p_elemento[10];2080 float limite_b=p_elemento[11];2081 double tipo_excitacion0= p_elemento[6];2082 int tipo_excitacion=int(tipo_excitacion0);2083 float valor_n,valor_n1,valor;2084 cout<<"valor de t: "<<t<<endl;2085 if(p_elemento[2]==1)//Ver si es EA2086 {2087 cout<<"Error de concepto en fuente de intensidad "<<p_elemento[0]<<2088 " con ID relativo: "<<p_elemento[1]<<2089 ", pertenece al grupo A3 no puede ser ecuación adicional."<<endl;2090 }20912092 switch (tipo_excitacion)2093 {20942095 case 0:{if(p_DATOS->transitorio==1){valor_n=p_elemento[7];valor_n1=p_elemento[7];}2096 if(p_DATOS->estacionario==1){valor=p_elemento[7];}2097 break;}2098 case 1:{if(p_DATOS->transitorio==1)2099 {valor_n=p_elemento[12]*sin(p_elemento[9]*2*M_PI*(t*p_DATOS->h)+(p_elemento[8]*RAD));2100 cout<<"valor del seno de valor_n: "<<valor_n<<endl;2101 valor_n1=p_elemento[12]*sin(p_elemento[9]*2*M_PI*(t*p_DATOS->h+p_DATOS->h));2102 cout<<"valor del argumento del seno: "<<t*p_DATOS->h+p_DATOS->h<<endl;2103 cout<<"valor del elemento 8: "<<p_elemento[9]<<endl;2104 cout<<"valor del seno de valor_n1: "<<valor_n1<<endl;2105 }2106 if(p_DATOS->estacionario==1){valor=p_elemento[12];}2107 break;}//Seno2108 case 2:{if(p_DATOS->transitorio==1)2109 {valor_n=p_elemento[12]*cos(p_elemento[9]*2*M_PI*(t*p_DATOS->h)+(p_elemento[8]*RAD));2110 cout<<"valor del seno: "<<valor_n<<endl;2111 valor_n1=p_elemento[12]*cos(p_elemento[9]*2*M_PI*(t*p_DATOS->h+p_DATOS->h)+2112 (p_elemento[8]*RAD));}2113 if(p_DATOS->estacionario==1){valor=p_elemento[7];}2114 break;}//Coseno2115 case 3:{valor_n=p_elemento[12]*t+p_elemento[13];2116 valor_n1=p_elemento[12]*(t+p_DATOS->h)+p_elemento[13];2117 break;}//Rampa2118 case 4:{2119 if(t<limite_a){valor_n=p_elemento[12];valor_n1=valor_n;}2120 if(t>=limite_b){valor_n=p_elemento[13];valor_n1=valor_n;}2121 break;2122 }//Escalón2123 case 5:{2124 if(t<limite_a){valor_n=p_elemento[14];valor_n1=valor_n;}2125 if(t>=limite_b){valor_n=p_elemento[15];valor_n1=valor_n;}2126 if((t>limite_a)&&(t<limite_b))2127 {2128 valor_n=p_elemento[12]*t+p_elemento[13];2129 valor_n1=p_elemento[12]*(t+p_DATOS->h)+p_elemento[13];2130 }2131 break;2132 }//Escalón Modificado2133 }21342135 cout<<"valor excitación: "<<valor_n<<endl;2136 if(p_elemento[4]==0)2137 {2138 if(p_DATOS->transitorio==1){2139 VecSetValue(p_DATOS->Wn,p_elemento[5],valor_n,ADD_VALUES);2140 VecSetValue(p_DATOS->Wn1,p_elemento[5],valor_n1,ADD_VALUES);}2141 if(p_DATOS->estacionario==1){2142 VecSetValue(p_DATOS->W,p_elemento[5],valor,ADD_VALUES);}2143 }2144 if(p_elemento[5]==0)

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 78: Manual de Código Fuente

5.11 Ensamblaje sobre el Vector W 75

2145 {2146 if(p_DATOS->transitorio==1){2147 VecSetValue(p_DATOS->Wn,p_elemento[4],-valor_n,ADD_VALUES);2148 VecSetValue(p_DATOS->Wn1,p_elemento[4],-valor_n1,ADD_VALUES);}2149 if(p_DATOS->estacionario==1){2150 VecSetValue(p_DATOS->W,p_elemento[4],-valor,ADD_VALUES);}2151 }2152 if(p_elemento[4]!=0&&p_elemento[5]!=0)2153 {2154 if(p_DATOS->transitorio==1){2155 VecSetValue(p_DATOS->Wn,p_elemento[5],valor_n,ADD_VALUES);2156 VecSetValue(p_DATOS->Wn1,p_elemento[5],valor_n1,ADD_VALUES);2157 VecSetValue(p_DATOS->Wn,p_elemento[4],-valor_n,ADD_VALUES);2158 VecSetValue(p_DATOS->Wn1,p_elemento[4],-valor_n1,ADD_VALUES);}2159 if(p_DATOS->estacionario==1){2160 VecSetValue(p_DATOS->W,p_elemento[5],valor,ADD_VALUES);2161 VecSetValue(p_DATOS->W,p_elemento[4],-valor,ADD_VALUES);}2162 }2163 }

5.11.2.3. void fuenteVccVectorW (double ∗ p_elemento, basicos ∗ p_DATOS, float t)

Esta Función se encarga del ensamblaje de valores en el vector W de una fuente independiente de tensión.

Este elemento pertenece al grupo A2 por lo que siempre aporta una ecuación adicional

Parámetros:

elemento Puntero a vector con los valores de definición del elemento

p_DATOS Puntero a estructura basicost Valor de tiempo, sirve para evaluar la excitación en el instante dado

Definición en la línea 1995 del archivo elementos.cpp.

1996 {1997 float limite_a=p_elemento[10];1998 float limite_b=p_elemento[11];1999 double tipo_excitacion0= p_elemento[6];2000 int tipo_excitacion=int(tipo_excitacion0);2001 float valor_n,valor_n1,valor;20022003 if(p_elemento[2]!=0)//Ver si no es EA2004 {2005 cout<<"Error de concepto en fuente de tensión "<<p_elemento[0]<<2006 " con ID relativo: "<<p_elemento[1]<<2007 ", este siempre es EA."<<endl;2008 }20092010 switch (tipo_excitacion)2011 {20122013 case 0:{if(p_DATOS->transitorio==1){valor_n=p_elemento[7];valor_n1=p_elemento[7];}2014 if(p_DATOS->estacionario==1){valor=p_elemento[7];}2015 break;}2016 case 1:{if(p_DATOS->transitorio==1)2017 {valor_n=p_elemento[12]*sin(p_elemento[9]*2*M_PI*(t*p_DATOS->h)+(p_elemento[8]*RAD));2018 valor_n1=p_elemento[12]*sin(p_elemento[9]*2*M_PI*(t*p_DATOS->h+p_DATOS->h));2019 }2020 if(p_DATOS->estacionario==1){valor=p_elemento[12];}2021 break;}//Seno2022 case 2:{if(p_DATOS->transitorio==1)2023 {valor_n=p_elemento[12]*cos(p_elemento[9]*2*M_PI*(t*p_DATOS->h)+(p_elemento[8]*RAD));2024 valor_n1=p_elemento[12]*cos(p_elemento[9]*2*M_PI*(t*p_DATOS->h+p_DATOS->h)+

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 79: Manual de Código Fuente

6 Documentación de las clases 76

2025 (p_elemento[8]*RAD));}2026 if(p_DATOS->estacionario==1){valor=p_elemento[7];}2027 break;}//Coseno2028 case 3:{2029 valor_n=p_elemento[12]*t+p_elemento[13];2030 valor_n1=p_elemento[12]*(t+p_DATOS->h)+p_elemento[13];2031 break;}//Rampa2032 case 4:{2033 if(t<limite_a){valor_n=p_elemento[12];valor_n1=valor_n;}2034 if(t>=limite_a){valor_n=p_elemento[13];valor_n1=valor_n;}2035 break;2036 }//Escalón2037 case 5:{2038 if(t<=limite_a){valor_n=p_elemento[14];valor_n1=valor_n;}2039 if(t>=limite_b){valor_n=p_elemento[15];valor_n1=valor_n;}2040 if((t>limite_a)&&(t<limite_b))2041 {2042 valor_n=p_elemento[12]*t+p_elemento[13];2043 valor_n1=p_elemento[12]*(t+p_DATOS->h)+p_elemento[13];2044 }2045 break;2046 }//Escalón Modificado2047 }20482049 if(p_elemento[4]==0)2050 {2051 if(p_DATOS->transitorio==1){2052 VecSetValue(p_DATOS->Wn,p_DATOS->apuntaA2,valor_n,ADD_VALUES);2053 VecSetValue(p_DATOS->Wn1,p_DATOS->apuntaA2,valor_n1,ADD_VALUES);}2054 if(p_DATOS->estacionario==1){2055 VecSetValue(p_DATOS->W,p_DATOS->apuntaA2,valor,ADD_VALUES);}2056 }2057 if(p_elemento[5]==0)2058 {2059 if(p_DATOS->transitorio==1){2060 VecSetValue(p_DATOS->Wn,p_DATOS->apuntaA2,valor_n,ADD_VALUES);2061 VecSetValue(p_DATOS->Wn1,p_DATOS->apuntaA2,valor_n1,ADD_VALUES);}2062 if(p_DATOS->estacionario==1){2063 VecSetValue(p_DATOS->W,p_DATOS->apuntaA2,valor,ADD_VALUES);}2064 }2065 if(p_elemento[4]!=0&&p_elemento[5]!=0)2066 {2067 if(p_DATOS->transitorio==1){2068 VecSetValue(p_DATOS->Wn,p_DATOS->apuntaA2,valor_n,ADD_VALUES);2069 VecSetValue(p_DATOS->Wn1,p_DATOS->apuntaA2,valor_n1,ADD_VALUES);}2070 if(p_DATOS->estacionario==1){2071 VecSetValue(p_DATOS->W,p_DATOS->apuntaA2,valor,ADD_VALUES);}2072 }2073 //Incremento en uno el valor para poder poner otro elemento EA si lo hubiese2074 p_DATOS->apuntaA2=p_DATOS->apuntaA2+1;2075 }

6. Documentación de las clases

6.1. Referencia de la Estructura basicos

Estructura que almacena datos de interés para el correcto funcionamiento del programa.

#include <estructuras.h>

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 80: Manual de Código Fuente

6.1 Referencia de la Estructura basicos 77

Métodos públicos

void almacena_long_max (int long_elemento)Almacena la longitud máxima de los elementos que componen el circuito.

int situaA2 ()La función apunta a la fila donde se localiza el siguiente elemento del Grupo A2.

int situaEA ()La función apunta a la fila donde se localiza la siguiente Ecuación Adicional.

int filas ()Calcula el número de filas que debe tener la matriz T y el Vector W.

int columnas ()Calcula el número de columnas que debe tener la matriz T.

Mat creaT ()Se encarga de dimensionar la matriz T del sistema a resolver. NOTA: La matriz T es una matriz sparsegenerada con las funciones de la librería PETCs.

void creaGC ()Se encarga de dimensionar las matrices del sistema transitorio G y C. NOTA: La matrices G y C sonmatrices sparse generadas con las funciones de la librería PETCs.

Vec creaW ()Se encarga de dimensionar el vector W para el sistema estacionario NOTA: El vector W es un vectorgenerado con las funciones de la librería PETCs.

Vec creaWn ()Se encarga de dimensionar el vector Wn para el sistema transitorio NOTA: El vector Wn es un vectorgenerado con las funciones de la librería PETCs.

Vec creaWn1 ()Se encarga de dimensionar el vector Wn1 para el sistema transitorio NOTA: El vector Wn1 es un vectorgenerado con las funciones de la librería PETCs.

Vec creax_perm ()Se encarga de dimensionar el vector x para el sistema estacionario. En el se almacenan las soluciones delmismo. NOTA: El vector x_perm es un vector generado con las funciones de la librería PETCs.

Vec creax_trans ()Se encarga de dimensionar el vector x para el sistema transitorio. En el se almacenan las soluciones delmismo. NOTA: El vector x_trans es un vector generado con las funciones de la librería PETCs.

Vec creax0 (int k, basicos ∗p_DATOS)Se encarga de dimensionar el vector x0 para el sistema transitorio. En el se almacenan las condicionesiniciales consistentes del mismo. NOTA: El vector x0 es un vector generado con las funciones de la libreríaPETCs.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 81: Manual de Código Fuente

6.1 Referencia de la Estructura basicos 78

Atributos públicos

QTable ∗ tableMNQTable ∗ tableMDGQTable ∗ tableMVCQTable ∗ tablex0int long_maxQString file_spcQString file_pngQString file_sol_permanenteQString datos_permQString datos_transQString datos_scriptQString solucionQString sol_transQString sol_permint elementosint EAint nodosint A2int estacionarioint transitorioint lim [3]float hfloat thetafloat t0float tffloat numvfloat tMat TMat GMat Cdouble nocerodouble densidaddouble dispersionVec WVec WnVec Wn1Vec BBCCVec x_permVec x_transVec xnVec x0int iterint estaTPetscScalar ∗ dimenPetscScalar ∗ Xint apuntaEAint apuntaA2

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 82: Manual de Código Fuente

6.1 Referencia de la Estructura basicos 79

6.1.1. Descripción detallada

Estructura que almacena datos de interés para el correcto funcionamiento del programa.

Esta estructura está pensada para almacenar todos los datos de interés para el estudio y uso del circuito quese esté analizando.

Contiene variables que almacenan las direcciones de los ficheros que se generan, número de elementos delcircuito, número de ecuaciones adicionales, número de elementos pertenecientes al grupo A2 y un largoetcétera.

Definición en la línea 12 del archivo estructuras.h.

6.1.2. Documentación de las funciones miembro

6.1.2.1. void basicos::almacena_long_max (int long_elemento) [inline]

Almacena la longitud máxima de los elementos que componen el circuito.

Parámetros:

long_elemento Longitud del elemento que se está leyendo

Ver también:

sbcl_principal::slt_abrirspc() La función compara el dato almacenado en long_max y si el valor delparámetro enviado es mayor lo almacena.

Definición en la línea 65 del archivo estructuras.h.

65 {if(long_elemento>long_max)long_max=long_elemento;}

6.1.2.2. int basicos::situaA2 () [inline]

La función apunta a la fila donde se localiza el siguiente elemento del Grupo A2.

Definición en la línea 70 del archivo estructuras.h.

70 {int fila_situaA2=nodos; return fila_situaA2;};

6.1.2.3. int basicos::situaEA () [inline]

La función apunta a la fila donde se localiza la siguiente Ecuación Adicional.

Devuelve:

Devuelve el valor de la fila para colocar el siguiente elemento que proporcione una ecuación adicional.

Definición en la línea 75 del archivo estructuras.h.

75 {int fila_situaEA=nodos+A2; return fila_situaEA;}

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 83: Manual de Código Fuente

6.1 Referencia de la Estructura basicos 80

6.1.2.4. int basicos::filas () [inline]

Calcula el número de filas que debe tener la matriz T y el Vector W.

Ver también:

creaT() creaW()

Definición en la línea 82 del archivo estructuras.h.

82 {int resultado_fila=nodos+A2+EA; return resultado_fila;}

6.1.2.5. int basicos::columnas () [inline]

Calcula el número de columnas que debe tener la matriz T.

Ver también:

creaT()

Definición en la línea 87 del archivo estructuras.h.

87 {int resultado_columna=nodos+A2+EA; return resultado_columna;}

6.1.2.6. Vec basicos::creax0 (int k, basicos ∗ p_DATOS) [inline]

Se encarga de dimensionar el vector x0 para el sistema transitorio. En el se almacenan las condicionesiniciales consistentes del mismo. NOTA: El vector x0 es un vector generado con las funciones de la libreríaPETCs.

Devuelve:

Retorna un puntero a un vector PETCs Funcion que se encarga de dimensionar el vector decondiciones iniciales para el sistema transitorio e inicialiarlo con los valores introducidos por elusuario.(IMPORTANTE estos han de ser consistentes). Cuando nos encontramos en iteraciones difer-entes a la inicial este vector almacena la solución del sistema anterior ya que así lo requiere la expresióndel método iterativo utilizado.

Definición en la línea 198 del archivo estructuras.h.

199 {200 VecCreate(PETSC_COMM_SELF,&x0);201 VecSetSizes(x0,PETSC_DECIDE,filas());202 VecSetFromOptions(x0);203 if(k==1)204 {205 bool result;206 QString var_string;207 double var=0;208 int i=0;209 for( i=0;i<p_DATOS->filas();i++)210 {211 var_string=p_DATOS->tablex0->text(i,0);212 var= var_string.toDouble(&result);213 VecSetValue(x0,i,var,INSERT_VALUES);214 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 84: Manual de Código Fuente

6.1 Referencia de la Estructura basicos 81

215 }216 else217 {218 VecCopy(p_DATOS->x_trans,x0);219 }220 VecAssemblyBegin(x0);221 VecAssemblyEnd(x0);222 return x0;223 }

6.1.3. Documentación de los datos miembro

6.1.3.1. QTable∗ basicos::tableMN

Punteros a las QTable de la parte gráfica

Definición en la línea 14 del archivo estructuras.h.

6.1.3.2. QTable∗ basicos::tableMDG

Punteros a las QTable de la parte gráfica

Definición en la línea 15 del archivo estructuras.h.

6.1.3.3. QTable∗ basicos::tableMVC

Punteros a las QTable de la parte gráfica

Definición en la línea 16 del archivo estructuras.h.

6.1.3.4. QTable∗ basicos::tablex0

Punteros a las QTable de la parte gráfica

Definición en la línea 17 del archivo estructuras.h.

6.1.3.5. int basicos::long_max

Almacena longitud máxima

Definición en la línea 18 del archivo estructuras.h.

6.1.3.6. QString basicos::file_spc

Almacena la dirección del fichero ∗.spc

Definición en la línea 19 del archivo estructuras.h.

6.1.3.7. QString basicos::file_png

Almacena la dirección del fichero ∗.png

Definición en la línea 20 del archivo estructuras.h.

6.1.3.8. QString basicos::file_sol_permanente

Almacena la dirección del fichero en el que se almacena la solución del sistema permanente

Definición en la línea 21 del archivo estructuras.h.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 85: Manual de Código Fuente

6.1 Referencia de la Estructura basicos 82

6.1.3.9. QString basicos::datos_perm

Almacena la dirección del fichero en el que se almacena la matriz T y el vector W del sistema resuelto

Definición en la línea 22 del archivo estructuras.h.

6.1.3.10. QString basicos::datos_trans

Almacena la dirección del fichero en el que se almacena la matriz T y los vectores W del sistema resuelto

Definición en la línea 23 del archivo estructuras.h.

6.1.3.11. QString basicos::datos_script

Almacena la dirección del fichero en el que se almacena el script para representar el sistema resuelto congnuplot

Definición en la línea 24 del archivo estructuras.h.

6.1.3.12. QString basicos::solucion

Almacena la dirección de la gráfica del sistema transitorio

Definición en la línea 25 del archivo estructuras.h.

6.1.3.13. QString basicos::sol_trans

Almacena la dirección del fichero en el que se almacena las soluciones del transitorio

Definición en la línea 26 del archivo estructuras.h.

6.1.3.14. QString basicos::sol_perm

Almacena la dirección del fichero en el que se almacena la solución del estacionario

Definición en la línea 27 del archivo estructuras.h.

6.1.3.15. int basicos::elementos

Valores básicos necesarios para diversos pasos en el proceso de calculo del sistema

Definición en la línea 28 del archivo estructuras.h.

6.1.3.16. int basicos::EA

Valores básicos necesarios para diversos pasos en el proceso de calculo del sistema

Definición en la línea 29 del archivo estructuras.h.

6.1.3.17. int basicos::nodos

Definición en la línea 30 del archivo estructuras.h.

6.1.3.18. int basicos::A2

Valores básicos necesarios para diversos pasos en el proceso de calculo del sistema

Definición en la línea 30 del archivo estructuras.h.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 86: Manual de Código Fuente

6.1 Referencia de la Estructura basicos 83

6.1.3.19. int basicos::estacionario

Variables para saber que tipo de análisis se pretende realizar

Definición en la línea 31 del archivo estructuras.h.

6.1.3.20. int basicos::transitorio

Variables para saber que tipo de análisis se pretende realizar

Definición en la línea 32 del archivo estructuras.h.

6.1.3.21. int basicos::lim[3]

Vector que ayuda a la lectura de los elementos, almacena los límites de los valores para la introducción delos mismos en las QTable

Definición en la línea 33 del archivo estructuras.h.

6.1.3.22. float basicos::h

Variables necesarias para el transitorio h=paso de tiempo

Definición en la línea 34 del archivo estructuras.h.

6.1.3.23. float basicos::theta

Variables necesarias para el transitorio

Definición en la línea 35 del archivo estructuras.h.

6.1.3.24. float basicos::t0

Variables necesarias para el transitorio to=tiempo inicial

Definición en la línea 36 del archivo estructuras.h.

6.1.3.25. float basicos::tf

Variables necesarias para el transitorio tf=tiempo final

Definición en la línea 37 del archivo estructuras.h.

6.1.3.26. float basicos::numv

Variables necesarias para el transitorio numv=numero de iteraciones

Definición en la línea 38 del archivo estructuras.h.

6.1.3.27. float basicos::t

Variables necesarias para el transitorio

Definición en la línea 39 del archivo estructuras.h.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 87: Manual de Código Fuente

6.1 Referencia de la Estructura basicos 84

6.1.3.28. Mat basicos::T

Es la matriz T del sistema

Definición en la línea 40 del archivo estructuras.h.

6.1.3.29. Mat basicos::G

Es la matriz G del sistema transitorio

Definición en la línea 41 del archivo estructuras.h.

6.1.3.30. Mat basicos::C

Es la matriz C del sistema transitorio

Definición en la línea 42 del archivo estructuras.h.

6.1.3.31. double basicos::nocero

Almacena el número de valores distintos a cero de la matriz T

Definición en la línea 43 del archivo estructuras.h.

6.1.3.32. double basicos::densidad

Almacena la densidad de la matriz T

Definición en la línea 44 del archivo estructuras.h.

6.1.3.33. double basicos::dispersion

Almacena la dispersión de la matriz T

Definición en la línea 45 del archivo estructuras.h.

6.1.3.34. Vec basicos::W

Vector W del sistema

Definición en la línea 46 del archivo estructuras.h.

6.1.3.35. Vec basicos::Wn

Vector Wn del sistema transitorio

Definición en la línea 47 del archivo estructuras.h.

6.1.3.36. Vec basicos::Wn1

Vector Wn1 del sistema trasitorio

Definición en la línea 48 del archivo estructuras.h.

6.1.3.37. Vec basicos::BBCC

Vector BBCC del sistema transitorio

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 88: Manual de Código Fuente

6.1 Referencia de la Estructura basicos 85

Definición en la línea 49 del archivo estructuras.h.

6.1.3.38. Vec basicos::x_perm

Vector solución del sistema esta el sistema estacionario

Definición en la línea 50 del archivo estructuras.h.

6.1.3.39. Vec basicos::x_trans

Definición en la línea 51 del archivo estructuras.h.

6.1.3.40. Vec basicos::xn

Vector solución del sistema transitorio

Definición en la línea 52 del archivo estructuras.h.

6.1.3.41. Vec basicos::x0

Vector de condiciones iniciales del transitorio

Definición en la línea 53 del archivo estructuras.h.

6.1.3.42. int basicos::iter

Almacena la iteración que se está realizando

Definición en la línea 54 del archivo estructuras.h.

6.1.3.43. int basicos::estaT

Indica si la matriz T está ya ensamblada 1=si 0=no esto sirve para el transitorio, de esta forma no ensam-blamos más de la cuenta

Definición en la línea 55 del archivo estructuras.h.

6.1.3.44. PetscScalar∗ basicos::dimen

Definición en la línea 56 del archivo estructuras.h.

6.1.3.45. PetscScalar ∗ basicos::X

Definición en la línea 56 del archivo estructuras.h.

6.1.3.46. int basicos::apuntaEA

Valor que almacena donde debo colocar la EA generada por un elemento del grupo A1 que me encuentreal ir montando

Definición en la línea 57 del archivo estructuras.h.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 89: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 86

6.1.3.47. int basicos::apuntaA2

Valor que almacena donde debo colocar la EA generada por un elemento del grupo A2 que me encuentreal ir montando

Definición en la línea 58 del archivo estructuras.h.

La documentación para esta estructura fue generada a partir del siguiente fichero:

Programacion/AVALON/src/estructuras.h

6.2. Referencia de la Estructura sbcl_principal

Clase en la que se encuentran los diferentes slots utilizados para hacer funcionar la parte gráfica del pro-grama.

#include <sbcl_principal.h>

Diagrama de colaboración para sbcl_principal:

sbcl_principal

basicos

DATOS

Slots públicos

virtual void slt_abrirspc ()Este slot se encarga de abrir el fichero generado por el Xcircuit.

virtual void slt_abrirps ()Slot encargado de abrir la imagen del circuito para visualizar el mismo en pestaña Circuito.

virtual void slt_xcircuit ()Slot encargado de abrir el Xcircuit para realizar el diseño del circuito a través de la librería de elementoselaborada para Ávalon.

virtual void slt_resolver ()El slot resolver se encarga comenzar los procesos necesarios para la resolución del sistema.

virtual void slt_analisis ()Slot que se encarga de verificar que está seleccionado en tipo de análisis para así indicar a Ávalon comoha de comportarse en el análisis. Básicamente lo que hace es modificar los valores de unas variables en laclase basicos DATOS cuando el usuario cliquea en trasitorio o estacionario.

virtual void slt_seleccionfilasMDG ()Este Slot se encarga de detectar en que fila de la Qtable Matriz de Datos Generales se realiza un clickpara selecionar la misma fila de las demás tablas, de esta forma el análisis de los elementos en mucho mássencilla.

virtual void slt_seleccionfilasMN ()

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 90: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 87

Este Slot se encarga de detectar en que fila de la Qtable Matriz de Nodos se realiza un click para selecionarla misma fila de las demás tablas, de esta forma el análisis de los elementos en mucho más sencilla.

virtual void slt_seleccionfilasMVC ()Este Slot se encarga de detectar en que fila de la Qtable Matriz de Valores Característicos se realiza unclick para selecionar la misma fila de las demás tablas, de esta forma el análisis de los elementos en muchomás sencilla.

virtual void slt_solEstacionario (basicos ∗p_DATOS)Este Slot se encarga de escribir en pantalla la solución del sistema estacionario.

virtual void slt_calculadora ()Este Slot se encarga de lanzar una calculadora para posibles cálculos que el usuario pueda necesitar.

virtual void slt_prepara ()Este slot se encarga preparar la tabla de condiciones iniciales Entre las tareas que realiza este slot seencuentra:.

virtual void slt_nuevoanalisis ()Este slot se encarga purgar los valores necesarios para comenzar con un análisis de un nuevo circuito.

virtual void slt_gnuplot ()Slot encargado de abrir el GNUPlot para realizar nuevos ploteos tras adaptar el script realizado por de-fecto.

virtual void slt_sobreQt ()Slot encargado de lanzar el diálogo de información de la versión de Qt utilizada.

virtual void slt_ayuda ()Slot encargado de abrir diálogo de información sobre el programa.

virtual void slt_sistemaestacionario ()Slot que carga el sistema a resolver del estacionario en pantalla.

virtual void slt_sistematransitorio ()Slot que carga los sistemas a resolver del transitorio en pantalla.

virtual void slt_solucionestacionario ()Slot que carga la solución del estacionario en pantalla.

virtual void slt_soluciontransitorio ()Slot que carga la solución del transitorio en pantalla.

virtual void slt_cargagrafico ()Este slot abre el gráfico realizado con el script por defecto en pantalla.

virtual void slt_abrescript ()Este slot abre el script que usa GNUPlot para generar el gráfico final de las variables calculadas.

virtual void slt_vermatrizT ()

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 91: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 88

Este slot abre una visualización gráfica de la matriz sparse.

virtual void INFOgeneral (basicos ∗DATOS)Slot escargado de visualizar datos generales del circuito que se está analizando.

Métodos públicos

sbcl_principal (QWidget ∗parent=0, const char ∗name=0, bool modal=FALSE, WFlags fl=0)Constructor de la clase principal.

∼sbcl_principal ()Destructor de la clase principal.

Atributos públicos

basicos DATOS

Slots protegidos

virtual void slt_resolucion (basicos ∗p_DATOS)Este Slot se encarga de seguir el proceso de resolución de los sistemas de ecuaciones del circuito a analizar.

6.2.1. Descripción detallada

Clase en la que se encuentran los diferentes slots utilizados para hacer funcionar la parte gráfica del pro-grama.

En esta clase se encuentran las principales líneas que hacen funcionar al programa.

Esta clase contiene los slots encargados de hacer que funciones los botones de la interfaz de usuario en-lazando cuando es necesario con el resto de funciones existentes para que se ejecuten las operaciones quehacen posibles la obtención de las variables de los circuitos que se analizan.

Definición en la línea 20 del archivo sbcl_principal.h.

6.2.2. Documentación del constructor y destructor

6.2.2.1. sbcl_principal::sbcl_principal (QWidget ∗ parent = 0, const char ∗ name = 0, bool modal= FALSE, WFlags fl = 0)

Constructor de la clase principal.

Parámetros:

parent Nos indica de que QWidget depende

Definición en la línea 16 del archivo sbcl_principal.cpp.

17 : dlg_principal ( parent,name, modal,fl )//Constructor de la sbcl18 {19 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 92: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 89

6.2.2.2. sbcl_principal::∼sbcl_principal ()

Destructor de la clase principal.

Definición en la línea 21 del archivo sbcl_principal.cpp.

22 {23 }

6.2.3. Documentación de las funciones miembro

6.2.3.1. void sbcl_principal::slt_abrirspc () [virtual, slot]

Este slot se encarga de abrir el fichero generado por el Xcircuit.

Entre las tareas que realiza esta función se encuentra:

Abrir el fichero ∗spc generado con Xcircuit

Llamar a lee_elemento para asi clocar de forma correcta los valores en las tres Qtable existentes

Generar el archivo ∗.png de dicho fichero para poder mostrar en pantalla el gráfico del circuito

Ver también:

lee_elemento

Definición en la línea 26 del archivo sbcl_principal.cpp.

27 {28 //Ventana diaologo para abrir el *.spc29 QString fichero_spc = QFileDialog::getOpenFileName("",30 "Circuito (*.spc)",31 this,32 "open file dialog",33 "Elige el Circuito a resolver" );34 //Preparando direcciones de ficheros35 DATOS.file_spc=fichero_spc;36 QString fichero_ps = fichero_spc; fichero_ps.replace( ".spc", ".ps" );37 QString fichero_png = fichero_spc; fichero_png.replace(".spc",".png");38 DATOS.file_png=fichero_png;39 QString datos_xperm = fichero_spc; datos_xperm.replace(".spc","_x_perm.data");40 DATOS.datos_perm=datos_xperm;41 QString datos_xtrans = fichero_spc; datos_xtrans.replace(".spc","_x_trans.data");42 DATOS.datos_trans=datos_xtrans;43 QString datos_script = fichero_spc; datos_script.replace(".spc","_script.plot");44 DATOS.datos_script=datos_script;45 QString grafica = fichero_spc; grafica.replace(".spc","_grafica.png");46 DATOS.solucion=grafica;47 QString sol_trans = fichero_spc; sol_trans.replace(".spc","_sol_trans.data");48 DATOS.sol_trans=sol_trans;49 QString sol_perm = fichero_spc; sol_perm.replace(".spc","_sol_perm.data");50 DATOS.sol_perm=sol_perm;5152 //transformando archivo gráfico a formato compatible con Qt53 QString comando = fichero_png;54 comando.prepend(" ");55 comando.prepend(fichero_ps);56 comando.prepend("convert ");//añade "convert " al string comando57 // ejecuta un comando de imagemagick para la conversion de imagen de ps a png58 system(comando);5960 //Vista del Fichero por ventana

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 93: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 90

61 QFile *Document = new QFile(fichero_spc);62 if (!Document->open(IO_ReadOnly))63 {64 cout << tr("File not found.") << endl;65 return;66 }67 //Determinando el número de elementos y escribiendo la matriz en la table de la GUI68 QStringList lines;69 QFile file( fichero_spc );70 int num_line_total = 1;//es el numero de lineas del fichero71 QTextStream stream( &file );72 QString line;73 int i=0, j=0;7475 /*Esta lectura crea las filas necesarias para76 mostrar en la table los valores contenidos en el fichero *spc*/77 if ( file.open( IO_ReadOnly ) )78 {79 while ( !stream.atEnd() ) //lectura del fichero +.spc80 {81 line = stream.readLine(); // linea de texto excluyendo el ’\n’82 num_line_total++;83 }84 lines += line;85 num_line_total=num_line_total-5;86 tableMDG->insertRows(0,num_line_total); //creación de las filas necesarias87 tableMN->insertRows(0,num_line_total);88 tableMVC->insertRows(0,num_line_total);89 //numero de elementos, se le resta 2 por la cabecera y tres por como termina el fichero90 DATOS.elementos=num_line_total;91 file.close();92 }939495 if ( file.open( IO_ReadOnly ) )96 {97 basicos *p_DATA=&DATOS;basicos *p_DATOS=&DATOS;98 int num_line=1;99 int esp_blnk;100 int cont=0;101 QString valor,identifelemen;102 p_DATOS->tableMDG=tableMDG;p_DATOS->tableMN=tableMN;p_DATOS->tableMVC=tableMVC;103 p_DATOS->tablex0=tablex0;104105 while ( !stream.atEnd() )106 {107 for (i=0;i<num_line_total;i++)108 {109 line = stream.readLine(); // linea de texto excluyendo el ’\n’110 //Es el número de veces que debo leer la linea111 int num_lecturas_linea=line.contains(’ ’, FALSE);112113 if (num_line>1 && line!=".end")114 {115 bool result;116 int elemento=0;117 esp_blnk = line.find( ’ ’ );118 identifelemen = line.left( esp_blnk );119 elemento= identifelemen.toInt(&result,10);120 lee_elemento (elemento,p_DATA);121 p_DATOS->almacena_long_max(p_DATA->lim[2]);122 for(j=0;j<p_DATA->lim[2];j++)123 {124 esp_blnk = line.find( ’ ’ );125 if(cont<num_lecturas_linea)126 {127 valor = line.left( esp_blnk );

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 94: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 91

128 //insertar valor en la tabla adecuada129 if (j<p_DATA->lim[0]){tableMDG->setText(i,j,valor);}130 if (j<p_DATA->lim[1] && j>=p_DATA->lim[0])131 {tableMN->setText(i,(j-p_DATA->lim[0]), valor );}132 if (j<p_DATA->lim[2] && j>=p_DATA->lim[1])133 {tableMVC->setText(i,(j-p_DATA->lim[1]), valor );}134 line.remove(0,esp_blnk+1);135 num_lecturas_linea=num_lecturas_linea+1;136 }137 }138 }139 num_line++;140 }141 }142 file.close();143 }144 }

6.2.3.2. void sbcl_principal::slt_abrirps () [virtual, slot]

Slot encargado de abrir la imagen del circuito para visualizar el mismo en pestaña Circuito.

Definición en la línea 204 del archivo sbcl_principal.cpp.

205 {206 basicos *p_DATOS=&DATOS;207 QPixmap *imagen;208 QString nombre_imagen=p_DATOS->file_png;209 imagen=new QPixmap(nombre_imagen);210 pixmapLabel1_2->setPixmap(*imagen);211 }

6.2.3.3. void sbcl_principal::slt_xcircuit () [virtual, slot]

Slot encargado de abrir el Xcircuit para realizar el diseño del circuito a través de la librería de elementoselaborada para Ávalon.

Definición en la línea 446 del archivo sbcl_principal.cpp.

447 {448 if (!fork()){system("xcircuit");exit(1);}449 wait();450 }

6.2.3.4. void sbcl_principal::slt_analisis () [virtual, slot]

Slot que se encarga de verificar que está seleccionado en tipo de análisis para así indicar a Ávalon comoha de comportarse en el análisis. Básicamente lo que hace es modificar los valores de unas variables en laclase basicos DATOS cuando el usuario cliquea en trasitorio o estacionario.

Definición en la línea 418 del archivo sbcl_principal.cpp.

419 {420 basicos *p_DATOS;p_DATOS=&DATOS;421 QCheckBox *state=cb_trans;422 if(state->isChecked()){p_DATOS->transitorio=1;}423 QCheckBox *state2=cb_esta;424 if(state2->isChecked()){p_DATOS->estacionario=1;}425 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 95: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 92

6.2.3.5. void sbcl_principal::slt_solEstacionario (basicos ∗ p_DATOS) [virtual, slot]

Este Slot se encarga de escribir en pantalla la solución del sistema estacionario.

Parámetros:

p_DATOS Puntero a estructura basicos

Definición en la línea 213 del archivo sbcl_principal.cpp.

214 {215 p_DATOS->file_sol_permanente.replace( ".spc", ".data" );216 QStringList lines;217 QFile file( "sol_perm.data" );218 if ( file.open( IO_ReadOnly ) ) {219 QTextStream stream( &file );220 QString line;221222 while ( !stream.atEnd() )223 {224 line = stream.read();225 textEdit2->setText(line);226 lines += line;227 }228229 file.close();230 }231 //system("rm sol_perm.data x_perm.data");232 }

6.2.3.6. void sbcl_principal::slt_calculadora () [virtual, slot]

Este Slot se encarga de lanzar una calculadora para posibles cálculos que el usuario pueda necesitar.

Definición en la línea 458 del archivo sbcl_principal.cpp.

459 {460 if (!fork()){system("kcalc");exit(1);}461 wait();462 }

6.2.3.7. void sbcl_principal::slt_prepara () [virtual, slot]

Este slot se encarga preparar la tabla de condiciones iniciales Entre las tareas que realiza este slot seencuentra:

.

Preparar la tabla de Condiciones Iniciales calculando cuantas se deben introducir.

Escribir en pantalla las variables que calculará el sistema y por lo tanto las condiciones iniciales quedeben introducirse.

Poner en la pestaña en la que se encuentra un gráfico del circuito para que el usuario se guíe mejoren la introducción de las CI

Ver también:

mostrar_CI

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 96: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 93

Definición en la línea 146 del archivo sbcl_principal.cpp.

147 {148 basicos *p_DATOS=&DATOS;149 QPixmap *imagen;150 //Nos encargamos de preparar la tabla para las condiciones iniciales151 int *num_line_total_p=&DATOS.elementos;152 dimensiona(num_line_total_p,p_DATOS);153 mostrar_CI(p_DATOS);154 tablex0->insertRows(0,p_DATOS->filas());155156 //Escritura en pantalla de las variables que se calcularan en el sistema157 QStringList lines;158 QFile file( "CI.data" );159 if ( file.open( IO_ReadOnly ) )160 {161 QTextStream stream( &file );162 QString line;163 while ( !stream.atEnd() )164 {165 line = stream.read();166 textEdit2->setText(line);167 lines += line;168 }169 file.close();170 }171 system("rm CI.data");172173 QString nombre_imagen=p_DATOS->file_png;174 imagen=new QPixmap(nombre_imagen);175 pixmapLabel1_2_2->setPixmap(*imagen);176 }

6.2.3.8. void sbcl_principal::slt_nuevoanalisis () [virtual, slot]

Este slot se encarga purgar los valores necesarios para comenzar con un análisis de un nuevo circuito.

Definición en la línea 178 del archivo sbcl_principal.cpp.

179 {180181 //int num_filas=DATOS.elementos;182 int num_filas=tableMDG->numRows ();183 for (int k=0;k<5;k++){184 for(int i=0;i<=num_filas+1;i++)185 {tableMDG->removeRow (i);tableMN->removeRow (i);186 tableMVC->removeRow (i);tablex0->removeRow (i);}}187 DATOS.file_spc="";DATOS.file_sol_permanente="";188 DATOS.file_png="";DATOS.file_sol_permanente="";189 DATOS.datos_perm="";DATOS.datos_trans="";190 DATOS.datos_script="";DATOS.solucion="";DATOS.sol_trans="";DATOS.sol_perm="";191 DATOS.elementos=0; DATOS.EA=0; DATOS.nodos=0;DATOS.A2=0;192 DATOS.estacionario=0; DATOS.transitorio=0;193 DATOS.h=0;DATOS.theta=0;DATOS.t0=0;DATOS.tf=0;DATOS.numv=0; DATOS.t=0;194 DATOS.densidad=0;DATOS.dispersion=0;DATOS.iter=0;DATOS.estaT=0;195 DATOS.apuntaEA=0;DATOS.apuntaA2=0;196197 VecDestroy(DATOS.W);VecDestroy(DATOS.Wn);198 VecDestroy(DATOS.Wn1);VecDestroy(DATOS.x_perm);199 VecDestroy(DATOS.x_trans);200 VecDestroy(DATOS.xn);VecDestroy(DATOS.x0);201 MatDestroy(DATOS.T);MatDestroy(DATOS.G);MatDestroy(DATOS.C);202 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 97: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 94

6.2.3.9. void sbcl_principal::slt_gnuplot () [virtual, slot]

Slot encargado de abrir el GNUPlot para realizar nuevos ploteos tras adaptar el script realizado por defecto.

Definición en la línea 452 del archivo sbcl_principal.cpp.

453 {454 if (!fork()){system("konsole -e gnuplot");exit(1);}455 wait();456 }

6.2.3.10. void sbcl_principal::slt_sobreQt () [virtual, slot]

Slot encargado de lanzar el diálogo de información de la versión de Qt utilizada.

Definición en la línea 475 del archivo sbcl_principal.cpp.

476 {477 QMessageBox::aboutQt( this, "Intefaz creada con Qt" );478 }

6.2.3.11. void sbcl_principal::slt_ayuda () [virtual, slot]

Slot encargado de abrir diálogo de información sobre el programa.

Definición en la línea 464 del archivo sbcl_principal.cpp.

465 {466467468 QMessageBox::about( this, "Ayuda de Avalon",469 "PFC:\nSoftware de analisis de circuitos lineales\n"470 "mediante metodos avanzados de resolucion\npara uso docente\n\n"471 "Manual de usuario del programa\ny mas info disponibles""\n"472 "en la web http://avalon-alp.es");473 }

6.2.3.12. void sbcl_principal::slt_sistemaestacionario () [virtual, slot]

Slot que carga el sistema a resolver del estacionario en pantalla.

Definición en la línea 480 del archivo sbcl_principal.cpp.

481 {482 //Escritura en pantalla de las variables que se calcularan en el sistema483 QStringList lines;484 QFile file( "Datos_x_perm.data" );485 if ( file.open( IO_ReadOnly ) ) {486 QTextStream stream( &file );487 QString line;488489 while ( !stream.atEnd() )490 {491 line = stream.read();492 textEdit_sistemaestacionario->setText(line);493 lines += line;494 }495496 file.close();497 }498 //system("rm Datos_x_perm.data");499 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 98: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 95

6.2.3.13. void sbcl_principal::slt_sistematransitorio () [virtual, slot]

Slot que carga los sistemas a resolver del transitorio en pantalla.

Definición en la línea 501 del archivo sbcl_principal.cpp.

502 {503 //Escritura en pantalla de las variables que se calcularan en el sistema504 QStringList lines;505 QFile file( "Datos_x_trans.data" );506 if ( file.open( IO_ReadOnly ) ) {507 QTextStream stream( &file );508 QString line;509510 while ( !stream.atEnd() )511 {512 line = stream.read();513 textEdit_sistematransitorio->setText(line);514 lines += line;515 }516517 file.close();518 }519 //system("rm Datos_x_trans.data");520 }

6.2.3.14. void sbcl_principal::slt_solucionestacionario () [virtual, slot]

Slot que carga la solución del estacionario en pantalla.

Definición en la línea 522 del archivo sbcl_principal.cpp.

523 {524 //Escritura en pantalla de las variables que se calcularan en el sistema525 basicos *p_DATOS=&DATOS;526 QStringList lines;527 QFile file( p_DATOS->datos_perm );528 if ( file.open( IO_ReadOnly ) ) {529 QTextStream stream( &file );530 QString line;531532 while ( !stream.atEnd() )533 {534 line = stream.read();535 textEdit09_solucionestacionario->setText(line);536 lines += line;537 }538539 file.close();540 }541 system("rm sol_perm.data");542 }

6.2.3.15. void sbcl_principal::slt_soluciontransitorio () [virtual, slot]

Slot que carga la solución del transitorio en pantalla.

Definición en la línea 544 del archivo sbcl_principal.cpp.

545 {546 //Escritura en pantalla de las variables que se calcularan en el sistema547 basicos *p_DATOS=&DATOS;

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 99: Manual de Código Fuente

6.2 Referencia de la Estructura sbcl_principal 96

548 QStringList lines;549 QFile file( p_DATOS->datos_trans );550 if ( file.open( IO_ReadOnly ) ) {551 QTextStream stream( &file );552 QString line;553554 while ( !stream.atEnd() )555 {556 line = stream.read();557 textEdit_soluciontransitorio->setText(line);558 lines += line;559 }560561 file.close();562 }563 //system("rm sol_trans.data");564 }

6.2.3.16. void sbcl_principal::slt_cargagrafico () [virtual, slot]

Este slot abre el gráfico realizado con el script por defecto en pantalla.

Definición en la línea 566 del archivo sbcl_principal.cpp.

567 {568 basicos *p_DATOS=&DATOS;569 QString grafica = p_DATOS->solucion;570 grafica.prepend("kview ");571 if (!fork()){system(grafica);exit(1);}572 wait();573 }

6.2.3.17. void sbcl_principal::slt_abrescript () [virtual, slot]

Este slot abre el script que usa GNUPlot para generar el gráfico final de las variables calculadas.

Definición en la línea 575 del archivo sbcl_principal.cpp.

576 {577 basicos *p_DATOS=&DATOS;578 QString comando=script(p_DATOS);579580 if (!fork()){system(comando);exit(1);}581 wait();582 }

6.2.3.18. void sbcl_principal::slt_vermatrizT () [virtual, slot]

Este slot abre una visualización gráfica de la matriz sparse.

Definición en la línea 584 del archivo sbcl_principal.cpp.

585 {586 basicos *p_DATOS=&DATOS;587 MatView(p_DATOS->T,PETSC_VIEWER_DRAW_WORLD );588 }

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 100: Manual de Código Fuente

7 Documentación de archivos 97

6.2.3.19. void sbcl_principal::INFOgeneral (basicos ∗ DATOS) [virtual, slot]

Slot escargado de visualizar datos generales del circuito que se está analizando.

Definición en la línea 590 del archivo sbcl_principal.cpp.

591 {592 QString line;593 QString salto=("\n");594 int elementos=DATOS->elementos;595 int EA=DATOS->EA; QString sEA("EA: ");596 int nodos=DATOS->nodos;QString sNodos("Nodos: ");597 int A2=DATOS->A2;QString sA2("A2: ");598 int NOnulos=DATOS->nocero;QString sNonulos("No nulos: ");599 double densidad=DATOS->densidad;QString sdensidad("Densidad: ");600 double dispersion=DATOS->dispersion;QString sdispersion("Dispersion: ");601602 //Calculo de la densidad y dispersión de la matriz T603 MatInfo info;604 MatGetInfo(DATOS->T,MAT_LOCAL,&info);605 DATOS->nocero=info.nz_used;606 DATOS->densidad=info.nz_used/(DATOS->filas()*DATOS->columnas());607 DATOS->dispersion=1-DATOS->densidad;608609 line= QString("Elementos del Cto: ");610 QString valor,valor1,valor2,valor3,valor4,valor5,valor6;611 valor.setNum (elementos, 10);line.append(valor);line.append(salto);612 valor1.setNum (EA, 10);line.append(sEA);line.append(valor1);line.append(salto);613 valor2.setNum (nodos, 10);line.append(sNodos);line.append(valor2);line.append(salto);614 valor3.setNum (A2, 10);line.append(sA2);line.append(valor3);line.append(salto);615 valor4.setNum (NOnulos, 10);line.append(sNonulos);line.append(valor4);line.append(salto);616 valor5.setNum (densidad,’g’, 6);617 line.append(sdensidad);line.append(valor5);line.append(salto);618 valor6.setNum (dispersion,’g’, 10);619 line.append(sdispersion);line.append(valor6);line.append(salto);620 te_infogeneral->setText(line);621 }

6.2.4. Documentación de los datos miembro

6.2.4.1. basicos sbcl_principal::DATOS

Definición en la línea 35 del archivo sbcl_principal.h.

La documentación para esta estructura fue generada a partir de los siguientes ficheros:

Programacion/AVALON/src/sbcl_principal.hProgramacion/AVALON/src/sbcl_principal.cpp

7. Documentación de archivos

7.1. Referencia del Archivo Programacion/AVALON/src/cabeceras.h

#include "petsc.h"

#include "petscmat.h"

#include "petscvec.h"

#include "petscksp.h"

#include "petscerror.h"

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 101: Manual de Código Fuente

7.1 Referencia del Archivo Programacion/AVALON/src/cabeceras.h 98

#include <iostream>

#include <fstream>

#include <cstdlib>

#include <stdio.h>

#include <stdlib.h>

#include "sbcl_principal.h"

#include "dlg_avalon.h"

#include <kapplication.h>

#include <kaboutdata.h>

#include <kcmdlineargs.h>

#include <klocale.h>

#include <qlineedit.h>

#include <qfiledialog.h>

#include <qstring.h>

#include <qimage.h>

#include <qrect.h>

#include <qpainter.h>

#include <qiodevice.h>

#include <qfile.h>

#include <qtextstream.h>

#include <qwidget.h>

#include <qtable.h>

#include <qprocess.h>

#include <qcstring.h>

#include <qmessagebox.h>

#include <qcheckbox.h>

#include <qtextedit.h>

#include <qdatatable.h>

#include <qhttp.h>

#include <qsplashscreen.h>

#include <qtimer.h>

#include <qsimplerichtext.h>

#include <gsl/gsl_sf_bessel.h>

#include <gsl/gsl_complex.h>

#include <gsl/gsl_complex_math.h>

#include <complex.h>

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 102: Manual de Código Fuente

7.2 Referencia del Archivo Programacion/AVALON/src/elementos.cpp 99

#include <gsl/gsl_matrix.h>

#include <gsl/gsl_vector.h>

Dependencia gráfica adjunta para cabeceras.h:

Programacion/AVALON/src/cabeceras.h

petsc.h petscmat.h petscvec.h petscksp.h petscerror.h iostream fstream cstdlib stdio.h stdlib.h sbcl_principal.h

dlg_avalon.h

kapplication.h kaboutdata.h kcmdlineargs.h klocale.h qlineedit.h qfiledialog.h qstring.h qimage.h qrect.h qpainter.h qiodevice.h qfile.h qtextstream.h qwidget.h qtable.h qprocess.h qcstring.h qmessagebox.h qcheckbox.h qtextedit.h qdatatable.h qhttp.h qsplashscreen.h qtimer.h qsimplerichtext.h gsl/gsl_sf_bessel.h gsl/gsl_complex.h gsl/gsl_complex_math.h complex.h gsl/gsl_matrix.h gsl/gsl_vector.h

estructuras.h

Gráfico de los archivos que directa o indirectamente incluyen a este archivo:

Programacion/AVALON/src/cabeceras.h

Programacion/AVALON/src/sbcl_principal.h

Programacion/AVALON/src/sbcl_principal.cpp

Programacion/AVALON/src/estructuras.cpp Programacion/AVALON/src/elementos.cpp

Definiciones

#define PI 3.141592654#define RAD 0.017453292#define GRADOS 57.29577951

7.1.1. Documentación de las definiciones

7.1.1.1. #define GRADOS 57.29577951

Definición en la línea 81 del archivo cabeceras.h.

7.1.1.2. #define PI 3.141592654

Definición en la línea 79 del archivo cabeceras.h.

7.1.1.3. #define RAD 0.017453292

Definición en la línea 80 del archivo cabeceras.h.

7.2. Referencia del Archivo Programacion/AVALON/src/elementos.cpp

#include "cabeceras.h"

#include "elementos.h"

Dependencia gráfica adjunta para elementos.cpp:

Programacion/AVALON/src/elementos.cpp

cabeceras.h elementos.h

petsc.h petscmat.h petscvec.h petscksp.h petscerror.h iostream fstream cstdlib stdio.h stdlib.h sbcl_principal.h

dlg_avalon.h

kapplication.h kaboutdata.h kcmdlineargs.h klocale.h qlineedit.h qfiledialog.h qstring.h qimage.h qrect.h qpainter.h qiodevice.h qfile.h qtextstream.h qwidget.h qtable.h qprocess.h qcstring.h qmessagebox.h qcheckbox.h qtextedit.h qdatatable.h qhttp.h qsplashscreen.h qtimer.h qsimplerichtext.h gsl/gsl_sf_bessel.h gsl/gsl_complex.h gsl/gsl_complex_math.h complex.h gsl/gsl_matrix.h gsl/gsl_vector.h

estructuras.h

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 103: Manual de Código Fuente

7.2 Referencia del Archivo Programacion/AVALON/src/elementos.cpp 100

Funciones

void elementoMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga de seleccionar a que función debe llamarse según el elemento que se este leyendoen tablas.

void conductanciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la conductancia.

void resistenciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la resistencia.

void condensadorMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la condensador.

void bobinaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la bobina.

void fuenteVccMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente independiente de tensión.

void amplificadorMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T del amplificador operacional ideal.

void trafoMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T del transformador ideal.

void fuenteIdependVMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de corriente dependiente detensión.

void fuenteVdependVMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de tensión dependiente detensión.

void fuenteIdependIMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de corriente dependiente decorriente.

void fuenteVdependIMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de tensión dependiente decorriente.

void bobinaacopladaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de bobinas acopladas.

void interruptorMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T del interruptor.

void cuadripoloAdmitanciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 104: Manual de Código Fuente

7.3 Referencia del Archivo Programacion/AVALON/src/elementos.h 101

Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros de admitancia.

void cuadripoloImpedanciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros de impedancia.

void cuadripoloHibridoMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros híbridos.

void cuadripoloTrasmisionMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros de trasmisión.

void elementoVectorW (double ∗p_elemento, basicos ∗p_DATOS, float t)Esta Función se encarga de seleccionar a que función debe llamarse según el elemento que se este leyendoen tablas.

void fuenteVccVectorW (double ∗p_elemento, basicos ∗p_DATOS, float t)Esta Función se encarga del ensamblaje de valores en el vector W de una fuente independiente de tensión.

void fuenteIVectorW (double ∗p_elemento, basicos ∗p_DATOS, float t)Esta Función se encarga del ensamblaje de valores en el vector W de una fuente independiente de corriente.

7.3. Referencia del Archivo Programacion/AVALON/src/elementos.h

Gráfico de los archivos que directa o indirectamente incluyen a este archivo:

Programacion/AVALON/src/elementos.h

Programacion/AVALON/src/sbcl_principal.cpp Programacion/AVALON/src/elementos.cpp

Funciones

void elementoMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga de seleccionar a que función debe llamarse según el elemento que se este leyendoen tablas.

void conductanciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la conductancia.

void resistenciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la resistencia.

void condensadorMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la condensador.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 105: Manual de Código Fuente

7.3 Referencia del Archivo Programacion/AVALON/src/elementos.h 102

void bobinaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la bobina.

void fuenteVccMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente independiente de tensión.

void amplificadorMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T del amplificador operacional ideal.

void trafoMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T del transformador ideal.

void fuenteIdependVMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de corriente dependiente detensión.

void fuenteVdependVMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de tensión dependiente detensión.

void fuenteIdependIMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de corriente dependiente decorriente.

void fuenteVdependIMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de la fuente de tensión dependiente decorriente.

void bobinaacopladaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de bobinas acopladas.

void interruptorMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T del interruptor.

void cuadripoloAdmitanciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros de admitancia.

void cuadripoloImpedanciaMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros de impedancia.

void cuadripoloHibridoMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros híbridos.

void cuadripoloTrasmisionMatrizT (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en la matriz T de un cuadripolo definido por susparámetros de trasmisión.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 106: Manual de Código Fuente

7.4 Referencia del Archivo Programacion/AVALON/src/estructuras.cpp 103

void elementoVectorW (double ∗p_elemento, basicos ∗p_DATOS, float t)Esta Función se encarga de seleccionar a que función debe llamarse según el elemento que se este leyendoen tablas.

void bobinaVectorW (double ∗p_elemento, basicos ∗p_DATOS)Esta Función se encarga del ensamblaje de valores en el vector W de una bobina.

void fuenteVccVectorW (double ∗p_elemento, basicos ∗p_DATOS, float t)Esta Función se encarga del ensamblaje de valores en el vector W de una fuente independiente de tensión.

void fuenteIVectorW (double ∗p_elemento, basicos ∗p_DATOS, float t)Esta Función se encarga del ensamblaje de valores en el vector W de una fuente independiente de corriente.

7.4. Referencia del Archivo Programacion/AVALON/src/estructuras.cpp

#include "cabeceras.h"

#include "petscksp.h"

Dependencia gráfica adjunta para estructuras.cpp:

Programacion/AVALON/src/estructuras.cpp

cabeceras.h

petscksp.h petsc.h petscmat.h petscvec.h petscerror.h iostream fstream cstdlib stdio.h stdlib.h sbcl_principal.h

dlg_avalon.h

kapplication.h kaboutdata.h kcmdlineargs.h klocale.h qlineedit.h qfiledialog.h qstring.h qimage.h qrect.h qpainter.h qiodevice.h qfile.h qtextstream.h qwidget.h qtable.h qprocess.h qcstring.h qmessagebox.h qcheckbox.h qtextedit.h qdatatable.h qhttp.h qsplashscreen.h qtimer.h qsimplerichtext.h gsl/gsl_sf_bessel.h gsl/gsl_complex.h gsl/gsl_complex_math.h complex.h gsl/gsl_matrix.h gsl/gsl_vector.h

estructuras.h

Funciones

void dimensiona (int ∗num_line_total, basicos ∗p_DATOS)Se encarga de dimensionar la matriz T y el vector W para el posterior cálculo del sistema que nos propor-cionará la solución del circuito. Tras calcular la dimensión de la misma se encarga de la creación de la Ty W.

Vec creavectorauxiliar (basicos ∗p_DATOS)Función que se encarga crear un vector auxiliar de cálculo del sistema a resolver.

int num_nodos (int ∗num_line_total, basicos ∗p_DATOS)Calcula el número de nodos del circuito. Para ello realiza un barrido por la qtable MN buscando el mayorvalor introducido.

int num_elemA2 (int ∗num_line_total, basicos ∗p_DATOS)Calcula el número de elementos pertenecientes al grupo A2. Para ello realiza un barrido por la qtable MDGbuscando los elementos del grupo A2.

int num_EA (int ∗num_line_total, basicos ∗p_DATOS)Calcula el número de elementos que se han considerado ecuación adicional. Para ello realiza un barridopor la qtable MDG sumando el número de ecuaciones adicionales existentes.

double filaTable (int ∗i, int ∗k, QTable ∗tableMDG)Retorna valores de la fila de Qtable que estamos analizando para saber de que elemento se trata.

void actualiza (basicos ∗DATOS)

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 107: Manual de Código Fuente

7.4 Referencia del Archivo Programacion/AVALON/src/estructuras.cpp 104

Actualiza es una función que se encarga de mostrar por shell parámetros de interés en el análisis de uncircuito. En realidad se encarga de mostrar elementos del objeto DATOS de la estructura basicos.

int resolucion_permanente (basicos ∗p_DATOS)Función que se encarga de la resolución del sistema permanente del circuito a analizar.

void num_iteraciones (basicos ∗p_DATOS)Función que se encarga calcular el número de iteraciones necesarias en el método iterativo directo utiliza-do.

int resolucion_transitorio (basicos ∗p_DATOS)Función que se encarga de la resolución del sistema permanente del circuito a analizar.

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 seestá tomando la variable Esta función, dependiendo de que elemento, retorna un QString con el nombre delmismo para poder escribirlo en el fichero de soluciones.

void lee_elemento (int elemento, basicos ∗p_DATA)Esta Función se encarga de ver que elemento estamos analizando y llamar a funciones específicas parael tratamiento en cuestión del elemento. Concretamente llama a las funciones lee_elementoX para poderasignar los límites de las tablas en las que se cargan los valores que definen a los elementos del circuitoque se este analizando.

void lee_conductancia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una conductancia.

void lee_resistencia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una resistencia.

void lee_condensador (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una condensador.

void lee_bobina (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una bobina.

void lee_fuenteVcc (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de tensión.

void lee_fuenteI (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de corriente.

void lee_ampl0 (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un amplificador operacional.

void lee_trafo (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una transformador.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 108: Manual de Código Fuente

7.4 Referencia del Archivo Programacion/AVALON/src/estructuras.cpp 105

void lee_FuenIdepV (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de intensidad dependiente de tensión.

void lee_FuenVdepV (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de tensión dependiente de tensión.

void lee_FuenIdepI (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de intensidad dependiente de intensidad.

void lee_FuenVdepI (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de tensión dependiente de corriente.

void lee_bobAcopl (basicos ∗p_DATA)Esta función se encarga de detectar los límites de bobinas acopladas.

void lee_interruptor (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un interruptor.

void lee_cuatripoloadmitancia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de admitancia.

void lee_cuatripoloimpedancia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de impedancia.

void lee_cuatripolohibrido (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros híbridos.

void lee_cuatripolotransmision (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de trasmisión.

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 quedebe 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.

7.4.1. Documentación de las funciones

7.4.1.1. double filaTable (int ∗, int ∗, QTable ∗)

Retorna valores de la fila de Qtable que estamos analizando para saber de que elemento se trata.

Parámetros:

i Fila en que se está analizando

j Columna que se está analizando

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 109: Manual de Código Fuente

7.5 Referencia del Archivo Programacion/AVALON/src/estructuras.h 106

table2 Puntero a tabla en la que nos encontramos

Devuelve:

Retorna los valores de la fila que se está analizando

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

104 {105 bool result;106 QString dato_string;107 double dato;108 dato_string=tableMDG->text(*i,*k);109 dato= dato_string.toDouble(&result);110 //cout<<"\ndata= "<<dato<<endl;111 return dato;112 }

7.5. Referencia del Archivo Programacion/AVALON/src/estructuras.h

Gráfico de los archivos que directa o indirectamente incluyen a este archivo:

Programacion/AVALON/src/estructuras.h

Programacion/AVALON/src/sbcl_principal.h

Programacion/AVALON/src/cabeceras.h

Programacion/AVALON/src/sbcl_principal.cppProgramacion/AVALON/src/estructuras.cpp Programacion/AVALON/src/elementos.cpp

Clases

struct basicosEstructura que almacena datos de interés para el correcto funcionamiento del programa.

Funciones

void lee_elemento (int elemento, basicos ∗p_DATA)Esta Función se encarga de ver que elemento estamos analizando y llamar a funciones específicas parael tratamiento en cuestión del elemento. Concretamente llama a las funciones lee_elementoX para poderasignar los límites de las tablas en las que se cargan los valores que definen a los elementos del circuitoque se este analizando.

void lee_conductancia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una conductancia.

void lee_resistencia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una resistencia.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 110: Manual de Código Fuente

7.5 Referencia del Archivo Programacion/AVALON/src/estructuras.h 107

void lee_condensador (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una condensador.

void lee_bobina (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una bobina.

void lee_fuenteVcc (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de tensión.

void lee_fuenteI (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de corriente.

void lee_ampl0 (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un amplificador operacional.

void lee_trafo (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una transformador.

void lee_FuenIdepV (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de intensidad dependiente de tensión.

void lee_FuenVdepV (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de tensión dependiente de tensión.

void lee_FuenIdepI (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de intensidad dependiente de intensidad.

void lee_FuenVdepI (basicos ∗p_DATA)Esta función se encarga de detectar los límites de una fuente de tensión dependiente de corriente.

void lee_bobAcopl (basicos ∗p_DATA)Esta función se encarga de detectar los límites de bobinas acopladas.

void lee_interruptor (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un interruptor.

void lee_cuatripoloadmitancia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de admitancia.

void lee_cuatripoloimpedancia (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de impedancia.

void lee_cuatripolohibrido (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros híbridos.

void lee_cuatripolotransmision (basicos ∗p_DATA)Esta función se encarga de detectar los límites de un Cuatripolo con parámetros de trasmisión.

void actualiza (basicos ∗DATOS)

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 111: Manual de Código Fuente

7.5 Referencia del Archivo Programacion/AVALON/src/estructuras.h 108

Actualiza es una función que se encarga de mostrar por shell parámetros de interés en el análisis de uncircuito. En realidad se encarga de mostrar elementos del objeto DATOS de la estructura basicos.

void dimensiona (int ∗num_line_total, basicos ∗DATOS)Se encarga de dimensionar la matriz T y el vector W para el posterior cálculo del sistema que nos propor-cionará la solución del circuito. Tras calcular la dimensión de la misma se encarga de la creación de la Ty W.

int num_nodos (int ∗num_line_total, basicos ∗p_DATOS)Calcula el número de nodos del circuito. Para ello realiza un barrido por la qtable MN buscando el mayorvalor introducido.

int num_elemA2 (int ∗, basicos ∗)Calcula el número de elementos pertenecientes al grupo A2. Para ello realiza un barrido por la qtable MDGbuscando los elementos del grupo A2.

int num_EA (int ∗num_line_total, basicos ∗p_DATOS)Calcula el número de elementos que se han considerado ecuación adicional. Para ello realiza un barridopor la qtable MDG sumando el número de ecuaciones adicionales existentes.

double filaTable (int ∗, int ∗, QTable ∗)Retorna valores de la fila de Qtable que estamos analizando para saber de que elemento se trata.

int resolucion_permanente (basicos ∗p_DATOS)Función que se encarga de la resolución del sistema permanente del circuito a analizar.

Vec creavectorauxiliar (basicos ∗p_DATOS)Función que se encarga crear un vector auxiliar de cálculo del sistema a resolver.

void num_iteraciones (basicos ∗p_DATOS)Función que se encarga calcular el número de iteraciones necesarias en el método iterativo directo utiliza-do.

int resolucion_transitorio (basicos ∗p_DATOS)Función que se encarga de la resolución del sistema permanente del circuito a analizar.

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 seestá tomando la variable Esta función, dependiendo de que elemento, retorna un QString con el nombre delmismo 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 quedebe ser introducida al realizar un análisis transitorio.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 112: Manual de Código Fuente

7.6 Referencia del Archivo Programacion/AVALON/src/sbcl_principal.cpp 109

QString script (basicos ∗p_DATOS)Función que se abrir el script para que el usuario pueda modificarlo y adaptarlo a sus necesidades.

7.5.1. Documentación de las funciones

7.5.1.1. double filaTable (int ∗, int ∗, QTable ∗)

Retorna valores de la fila de Qtable que estamos analizando para saber de que elemento se trata.

Parámetros:

i Fila en que se está analizando

j Columna que se está analizando

table2 Puntero a tabla en la que nos encontramos

Devuelve:

Retorna los valores de la fila que se está analizando

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

104 {105 bool result;106 QString dato_string;107 double dato;108 dato_string=tableMDG->text(*i,*k);109 dato= dato_string.toDouble(&result);110 //cout<<"\ndata= "<<dato<<endl;111 return dato;112 }

7.6. Referencia del Archivo Programacion/AVALON/src/sbcl_principal.cpp

#include "sbcl_principal.h"

#include "cabeceras.h"

#include "elementos.h"

#include <qlabel.h>

#include <qapplication.h>

#include "sbcl_principal.moc"

Dependencia gráfica adjunta para sbcl_principal.cpp:

Programacion/AVALON/src/sbcl_principal.cpp

sbcl_principal.h

cabeceras.h

elementos.h qlabel.h qapplication.h sbcl_principal.moc

dlg_avalon.h

estructuras.h

petsc.h petscmat.h petscvec.h petscksp.h petscerror.h iostream fstream cstdlib stdio.h stdlib.h kapplication.h kaboutdata.h kcmdlineargs.h klocale.h qlineedit.h qfiledialog.h qstring.h qimage.h qrect.h qpainter.h qiodevice.h qfile.h qtextstream.h qwidget.h qtable.h qprocess.h qcstring.h qmessagebox.h qcheckbox.h qtextedit.h qdatatable.h qhttp.h qsplashscreen.h qtimer.h qsimplerichtext.h gsl/gsl_sf_bessel.h gsl/gsl_complex.h gsl/gsl_complex_math.h complex.h gsl/gsl_matrix.h gsl/gsl_vector.h

7.7. Referencia del Archivo Programacion/AVALON/src/sbcl_principal.h

#include "dlg_avalon.h"

#include "cabeceras.h"

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 113: Manual de Código Fuente

7.7 Referencia del Archivo Programacion/AVALON/src/sbcl_principal.h 110

#include "estructuras.h"

Dependencia gráfica adjunta para sbcl_principal.h:

Programacion/AVALON/src/sbcl_principal.h

dlg_avalon.h

cabeceras.h estructuras.h

petsc.h petscmat.h petscvec.h petscksp.h petscerror.h iostream fstream cstdlib stdio.h stdlib.h kapplication.h kaboutdata.h kcmdlineargs.h klocale.h qlineedit.h qfiledialog.h qstring.h qimage.h qrect.h qpainter.h qiodevice.h qfile.h qtextstream.h qwidget.h qtable.h qprocess.h qcstring.h qmessagebox.h qcheckbox.h qtextedit.h qdatatable.h qhttp.h qsplashscreen.h qtimer.h qsimplerichtext.h gsl/gsl_sf_bessel.h gsl/gsl_complex.h gsl/gsl_complex_math.h complex.h gsl/gsl_matrix.h gsl/gsl_vector.h

Gráfico de los archivos que directa o indirectamente incluyen a este archivo:

Programacion/AVALON/src/sbcl_principal.h

Programacion/AVALON/src/cabeceras.h

Programacion/AVALON/src/sbcl_principal.cppProgramacion/AVALON/src/estructuras.cpp Programacion/AVALON/src/elementos.cpp

Clases

struct sbcl_principalClase en la que se encuentran los diferentes slots utilizados para hacer funcionar la parte gráfica delprograma.

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 114: Manual de Código Fuente

Índice alfabético∼sbcl_principal

sbcl_principal, 88

A2basicos, 82

actualizaLee_elemento, 11

almacena_long_maxbasicos, 78

amplificadorMatrizTensambleMatrizT, 39

apuntaA2basicos, 85

apuntaEAbasicos, 84

basicos, 76A2, 82almacena_long_max, 78apuntaA2, 85apuntaEA, 84BBCC, 84C, 83columnas, 79creax0, 79datos_perm, 81datos_script, 81datos_trans, 81densidad, 83dimen, 84dispersion, 83EA, 81elementos, 81estacionario, 82estaT, 84filas, 79file_png, 81file_sol_permanente, 81file_spc, 80G, 83h, 82iter, 84lim, 82long_max, 80nocero, 83nodos, 82numv, 82situaA2, 78situaEA, 78sol_perm, 81sol_trans, 81

solucion, 81T, 83t, 83t0, 82tableMDG, 80tableMN, 80tableMVC, 80tablex0, 80tf, 82theta, 82transitorio, 82W, 83Wn, 83Wn1, 84X, 84x0, 84x_perm, 84x_trans, 84xn, 84

BBCCbasicos, 84

bobinaacopladaMatrizTensambleMatrizT, 40

bobinaMatrizTensambleMatrizT, 43

bobinaVectorWensambleVectorW, 72

Cbasicos, 83

cabeceras.hGRADOS, 98PI, 98RAD, 99

columnasbasicos, 79

condensadorMatrizTensambleMatrizT, 44

conductanciaMatrizTensambleMatrizT, 45

Creación del sistema general de ecuaciones lineales,35

creaGCTxW, 4

creaTTxW, 4

creavectorauxiliarResolucionTransitorio, 23

creaWTxW, 4

Page 115: Manual de Código Fuente

ÍNDICE ALFABÉTICO 112

creaWnTxW, 4

creaWn1TxW, 5

creax0basicos, 79

creax_permTxW, 5

creax_transTxW, 5

cuadripoloAdmitanciaMatrizTensambleMatrizT, 46

cuadripoloHibridoMatrizTensambleMatrizT, 49

cuadripoloImpedanciaMatrizTensambleMatrizT, 51

cuadripoloTrasmisionMatrizTensambleMatrizT, 54

DATOSsbcl_principal, 97

datos_permbasicos, 81

datos_scriptbasicos, 81

datos_transbasicos, 81

densidadbasicos, 83

dimenbasicos, 84

dimensionaTxW, 6

dispersionbasicos, 83

EAbasicos, 81

elementoMatrizTensamble, 36

elementosbasicos, 81

elementoVectorWensamble, 37

Ensamblaje los elementos en el sistema lineal, 35Ensamblaje sobre el Vector W, 72Ensamblaje sobre la Matriz T, 37ensamble

elementoMatrizT, 36elementoVectorW, 37

ensambleMatrizTamplificadorMatrizT, 39bobinaacopladaMatrizT, 40bobinaMatrizT, 43

condensadorMatrizT, 44conductanciaMatrizT, 45cuadripoloAdmitanciaMatrizT, 46cuadripoloHibridoMatrizT, 49cuadripoloImpedanciaMatrizT, 51cuadripoloTrasmisionMatrizT, 54fuenteIdependIMatrizT, 57fuenteIdependVMatrizT, 59fuenteVccMatrizT, 62fuenteVdependIMatrizT, 62fuenteVdependVMatrizT, 65interruptorMatrizT, 67resistenciaMatrizT, 68trafoMatrizT, 69

ensambleVectorWbobinaVectorW, 72fuenteIVectorW, 72fuenteVccVectorW, 74

escribirgnuplotresultados, 25

estacionariobasicos, 82

estaTbasicos, 84

estructuras.cppfilaTable, 105

estructuras.hfilaTable, 108

filasbasicos, 79

filaTableestructuras.cpp, 105estructuras.h, 108

file_pngbasicos, 81

file_sol_permanentebasicos, 81

file_spcbasicos, 80

Forma de cargar los distintos elementos que compo-nen un circuito, 9

fuenteIdependIMatrizTensambleMatrizT, 57

fuenteIdependVMatrizTensambleMatrizT, 59

fuenteIVectorWensambleVectorW, 72

fuenteVccMatrizTensambleMatrizT, 62

fuenteVccVectorWensambleVectorW, 74

fuenteVdependIMatrizTensambleMatrizT, 62

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 116: Manual de Código Fuente

ÍNDICE ALFABÉTICO 113

fuenteVdependVMatrizTensambleMatrizT, 65

Gbasicos, 83

Generación de las variables del sistema matricialTx=W, 2

GRADOScabeceras.h, 98

hbasicos, 82

INFOgeneralsbcl_principal, 96

interruptorMatrizTensambleMatrizT, 67

iterbasicos, 84

lee_ampl0Lee_elemento, 11

lee_bobAcoplLee_elemento, 11

lee_bobinaLee_elemento, 12

lee_condensadorLee_elemento, 12

lee_conductanciaLee_elemento, 12

lee_cuatripoloadmitanciaLee_elemento, 12

lee_cuatripolohibridoLee_elemento, 13

lee_cuatripoloimpedanciaLee_elemento, 13

lee_cuatripolotransmisionLee_elemento, 13

Lee_elementoactualiza, 11lee_ampl0, 11lee_bobAcopl, 11lee_bobina, 12lee_condensador, 12lee_conductancia, 12lee_cuatripoloadmitancia, 12lee_cuatripolohibrido, 13lee_cuatripoloimpedancia, 13lee_cuatripolotransmision, 13lee_elemento, 14lee_FuenIdepI, 14lee_FuenIdepV, 15lee_fuenteI, 15lee_fuenteVcc, 15

lee_FuenVdepI, 16lee_FuenVdepV, 16lee_interruptor, 16lee_resistencia, 17lee_trafo, 17

lee_elementoLee_elemento, 14

lee_FuenIdepILee_elemento, 14

lee_FuenIdepVLee_elemento, 15

lee_fuenteILee_elemento, 15

lee_fuenteVccLee_elemento, 15

lee_FuenVdepILee_elemento, 16

lee_FuenVdepVLee_elemento, 16

lee_interruptorLee_elemento, 16

lee_resistenciaLee_elemento, 17

lee_trafoLee_elemento, 17

limbasicos, 82

long_maxbasicos, 80

Métodos de resolución, 18mostrar_CI

resultados, 26mostrar_solucion

resultados, 28

nocerobasicos, 83

nodosbasicos, 82

num_EATxW, 6

num_elemA2TxW, 7

num_iteracionesResolucionTransitorio, 23

num_nodosTxW, 8

numvbasicos, 82

PIcabeceras.h, 98

Programacion/AVALON/src/cabeceras.h, 97

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 117: Manual de Código Fuente

ÍNDICE ALFABÉTICO 114

Programacion/AVALON/src/elementos.cpp, 99Programacion/AVALON/src/elementos.h, 100Programacion/AVALON/src/estructuras.cpp, 102Programacion/AVALON/src/estructuras.h, 105Programacion/AVALON/src/sbcl_principal.cpp,

108Programacion/AVALON/src/sbcl_principal.h, 109

queescriboresultados, 32

RADcabeceras.h, 99

resistenciaMatrizTensambleMatrizT, 68

Resolución de Permanente, 22Resolución de Transitorio, 23Resolucion

slt_resolucion, 21slt_resolver, 18

resolucion_permanenteResolucionPermanente, 22

resolucion_transitorioResolucionTransitorio, 24

ResolucionPermanenteresolucion_permanente, 22

ResolucionTransitoriocreavectorauxiliar, 23num_iteraciones, 23resolucion_transitorio, 24

Resultados, 24resultados

escribirgnuplot, 25mostrar_CI, 26mostrar_solucion, 28queescribo, 32script, 32

sbcl_principal, 85∼sbcl_principal, 88DATOS, 97INFOgeneral, 96sbcl_principal, 87sbcl_principal, 87slt_abrescript, 95slt_abrirps, 90slt_abrirspc, 88slt_analisis, 90slt_ayuda, 93slt_calculadora, 91slt_cargagrafico, 95slt_gnuplot, 93slt_nuevoanalisis, 92slt_prepara, 91

slt_sistemaestacionario, 93slt_sistematransitorio, 94slt_sobreQt, 93slt_solEstacionario, 91slt_solucionestacionario, 94slt_soluciontransitorio, 95slt_vermatrizT, 96slt_xcircuit, 90

scriptresultados, 32

Selección de filas en las Qtable, 33SelecionFilas

slt_seleccionfilasMDG, 33slt_seleccionfilasMN, 34slt_seleccionfilasMVC, 34

situaA2basicos, 78

situaEAbasicos, 78

slt_abrescriptsbcl_principal, 95

slt_abrirpssbcl_principal, 90

slt_abrirspcsbcl_principal, 88

slt_analisissbcl_principal, 90

slt_ayudasbcl_principal, 93

slt_calculadorasbcl_principal, 91

slt_cargagraficosbcl_principal, 95

slt_gnuplotsbcl_principal, 93

slt_nuevoanalisissbcl_principal, 92

slt_preparasbcl_principal, 91

slt_resolucionResolucion, 21

slt_resolverResolucion, 18

slt_seleccionfilasMDGSelecionFilas, 33

slt_seleccionfilasMNSelecionFilas, 34

slt_seleccionfilasMVCSelecionFilas, 34

slt_sistemaestacionariosbcl_principal, 93

slt_sistematransitoriosbcl_principal, 94

slt_sobreQt

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez

Page 118: Manual de Código Fuente

ÍNDICE ALFABÉTICO 115

sbcl_principal, 93slt_solEstacionario

sbcl_principal, 91slt_solucionestacionario

sbcl_principal, 94slt_soluciontransitorio

sbcl_principal, 95slt_vermatrizT

sbcl_principal, 96slt_xcircuit

sbcl_principal, 90sol_perm

basicos, 81sol_trans

basicos, 81solucion

basicos, 81

Tbasicos, 83

tbasicos, 83

t0basicos, 82

tableMDGbasicos, 80

tableMNbasicos, 80

tableMVCbasicos, 80

tablex0basicos, 80

tfbasicos, 82

thetabasicos, 82

trafoMatrizTensambleMatrizT, 69

transitoriobasicos, 82

TxWcreaGC, 4creaT, 4creaW, 4creaWn, 4creaWn1, 5creax_perm, 5creax_trans, 5dimensiona, 6num_EA, 6num_elemA2, 7num_nodos, 8

W

basicos, 83Wn

basicos, 83Wn1

basicos, 84

Xbasicos, 84

x0basicos, 84

x_permbasicos, 84

x_transbasicos, 84

xnbasicos, 84

Software de análisis de circuitos lineales mediante métodos avanzados de resolución para uso docente. Manual de Código Fuente por AyoseLomba Pérez