Implementación del Método de Elemento Finito Usando la Matriz de Carga como una Matriz Virtual Antonio Carrillo Ledesma Ismael Herrera Revilla Robert Yates Smith Grupo de Modelación Matemática y Computacional Instituto de Geofísica, UNAM February 10, 2009 Contents 1 Método de Elemento Finito 1.1 Problema a Trabajar . . . . . . . . 1.1.1 Discretización de dominio . 1.1.2 Funciones Base . . . . . . . 1.2 Discretizacíón Usando Rectángulos 1.3 Discretización Usando Triángulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 5 6 10 2 Solución de Grandes Sistemas de Ecuaciones 2.1 Métodos Directos . . . . . . . . . . . . . . . . 2.2 Métodos Iterativos . . . . . . . . . . . . . . . 2.3 Precondicionadores . . . . . . . . . . . . . . . 2.3.1 Gradiente Conjugado Precondicionado 2.3.2 Precondicionador a Posteriori . . . . . 2.3.3 Precondicionador a Priori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 17 22 24 26 26 . . . . . . . . . . . . . . . . . . . . . . . . . 3 Implementación Computacional 28 3.1 Implementación de FEM . . . . . . . . . . . . . . . . . . . . . . . 29 1 4 Apéndice 4.1 Implementación de la Geometría . . . . . . . . . . . . . . 4.1.1 Estructura del Archivo que Contiene la Geometría 4.2 Matrices Virtuales . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Operaciones entre Matrices y Vectores . . . . . . . 4.3 Resolución de Sistemas Lineales . . . . . . . . . . . . . . . 5 Bibliografía . . . . . . . . . . . . . . . . . . . . 30 30 31 33 33 33 35 Versión: 0.00.04 2 Objetivos Comunmente cuando se trabaja con el método Finite Element Method (FEM) se genera una matriz, algunas veces llamada matriz de carga. En la implementación computacional del método, la matriz de carga resulta ser una matriz bandada, la cual consume mucha memoria RAM si la descomposición del dominio es …na. En el caso de un operador de segundo orden con coe…cientes constantes y cuyo dominio del problema se ha discretizado en una malla homogénea es posible no construir la matrz de carga, i.e. se usara en la implementación computacional una matriz virtual que sólo requiere guardar internamente una matriz de integrales que para interpoladores lineales es a lo más de 4 4 elementos, ahorrando con ello mucha memoria RAM en la implementación computacional del problema. El algoritmo aquí descrito puede usarse para implementar el método FEM en cualquier lenguaje de programación mediante el uso de matrices virtuales y extenderse a otros métodos de descomposición de dominio tales como subestructuración y FETI, FETI-DP y Roundtrip. Con el uso de matrices virtuales se ahorra una gran cantidad de memoria en la implementación computacional del método FEM, permitiendo resolver descomposiciones muy …nas en equipos con pocos recursos computacionales. Supuestos La geometría usada en la implementación particular de un problema puede ser generada por cualquier medio y para nuestros propositos, sólo se vera como usar dicha geometria e implementar con ella la matriz virtual para un problema concreto usando FEM y resolviendo el sistema lineal resultante mediante el método de Conjugate Gradient Method (CGM). 3 1 Método de Elemento Finito En el presente capítulo se prestará atención a varios aspectos necesarios para encontrar la solución aproximada de problemas variacionales con valor en la frontera (VBVP). En este capítulo se considera el VBVP de la forma Lu u = f = g en en @ (1) donde Lu = r a ru + cu (2) con a una matriz positiva de…nida, simétrica y c 0; como un caso particular del operador elíptico de orden 2; con Rn un dominio poligonal, es decir, es un conjunto abierto acotado y conexo tal que su frontera @ es la unión de un número …nito de polígonos. Sin perdida de generalidad supondremos que la ecuación es de coe…cientes constantes, en caso contrario, si es de coe…cientes variable supondremos en en discretización se hace de tal forma que cada subdominio la ecuación sea de coe…cientes constantes. 1.1 Problema a Trabajar Si multiplicamos a la ecuación r a ru + cu = f obtenemos v r a ru + cu = vf por v 2 V = H01 ( ), (3) aplicando el teorema de Green obtenemos la ecuación que podemos reescribir como Z Z rv a ru + cuv dx = vf dx: (4) De…niendo el operador bilineal Z a (u; v) = rv a ru + cuv dx y la funcional lineal l(v) = hf; vi = Z vf dx (5) (6) podemos reescribir el problema dado por la Ec. (??) de orden 2 en forma variacional, haciendo uso de la forma bilineal a ( ; ) y la funcional lineal l ( ). 1.1.1 Discretización de dominio El Mallado o triangulación Th del dominio es el primer aspecto básico, y ciertamente el más característico, el dominio Rn es subdividido en E subdominios o elementos e llamados elementos …nitos, tal que = E [ e=1 4 e donde: Cada e 2 Th es un polígono (rectángulo o triángulo) con interior no vacío ( e = 6 ;) y conexo. Cada e 2 Th tiene frontera @ Para cada i; j e 2 Th distintos, El diámetro hi = Diam( para cada e = 1; 2; :::; E: Los vértices de cada por cada elemento e . e e) Lipschitz continua. i \ de cada j e = ;: satisface Diam( e) h son llamados nodos, teniendo N de ellos De…nition 1 Una familia de triangulaciones Th es llamada de forma-regular si existe una constante independiente de h, tal que hK C K; con K 2 Th ; donde K es el radio del circulo más grande contenido en K. El radio hK = es llamado esl aspect ratio de K: K De…nition 2 Una familia de triangulaciones Th es llamada cuasi-uniforme si esta es de forma-regular y si existe una constante independiente de h, tal que hK Rn un dominio poligonal y sean Entonces, sea del dominio, i.e. 1.2.- ; para \ 3.- = E [ Ch; con K 2 Th : = 1; :::; E es un subdominio de = ?; siempre que 1 ; :::; E la partición ; 6= : : =1 Una vez que la triangulación Th del dominio es establecida, se procede a de…nir el espacio de elementos …nitos Ph [k] a través del proceso descrito a continuación. 1.1.2 Funciones Base A continuación describiremos la manera de construir las funciones base usada por el método de elemento …nito. En este procedimiento debemos tener en cuenta que las funciones base están de…nidas en un subespacio de V = H 1 ( ) para problemas de segundo orden que satisfacen las condiciones de frontera. Las funciones base deberán satisfacer las siguientes propiedades: 5 i) Las funciones base son acotadas y continuas, i.e i i 2C( e) : ii) Existen ` funciones base por cada nodo del polígono e ; y cada función i es no cero solo en los elementos contiguos conectados por el nodo i: iii) i = 1 en cada i nodo del polígono iv) La restricción i a alguna k 1 donde Pk [ más k sobre e : e e] e y cero en los otros nodos. es un polinomio, i.e. i 2 Pk [ e ] para es el espacio de polinomios de grado a lo Decimos que i 2 Pk [ e ] es una base de funciones y por su construcción es evidente que estas pertenecen a H 1 ( ) : Al conjunto formado por todas las funciones base de…nidas para todo e de será el espacio Ph [k] de funciones base, i.e. E [ Pk [ e ] Ph [k] = e=1 estas formarán las funciones base globales. 1.2 Discretizacíón Usando Rectángulos Partiendo de la ecuación Z ar i r j +c dxdy = i j Z f j dxdy (7) tenemos Kij = = Z ar E Z X e=1 = E Z X e=1 r i ar e a e " j +c (e) i @ @x (e) j r (e) i dxdy i j +c (e) j @ @x + @ (8) (e) (e) i j (e) i @y @ dxdy (e) j @y # +c (e) (e) i j ! dxdy y el lado derecho Fj = = Z f j dxdy E Z X e=1 Para cada Kij = e Z de e f (9) (e) j dxdy: e ; la submatriz de integrales (matriz de carga local) " # ! (e) (e) (e) (e) @ i @ j @ i @ j (e) (e) a + +c i j dxdy (10) @x @x @y @y 6 tiene la estructura 2 (e) K1;1 6K (e) 6 2;1 6 (e) 4K3;1 (e) K4;1 (e) (e) 3 K1;4 (e) K2;4 7 7 (e) 7 K3;4 5 (e) K1;2 (e) K2;2 (e) K3;2 (e) K4;2 K1;3 (e) K2;3 (e) K3;3 (e) K4;3 (11) (e) K4;4 la cual deberá ser ensamblada en la matriz de carga global que corresponda a la numeración de nodos locales del elemento e con respecto a la numeración global de los elementos en . De manera parecida, para cada e de se genera el vector de integrales (vector de carga local) Z Fj = (e) j dxdy f (12) e con la estructura 2 (e) 3 F1 6 (e) 7 6F2 7 6 (e) 7 4F3 5 (13) (e) F4 el cual también deberá ser ensamblado en el vector de carga global que corresponda a la numeración de nodos locales al elemento e con respecto a la numeración global de los elementos de . Integración Numérica Para implementar numéricamente en cada integrales " ! # Z (e) (e) (e) (e) @ i @ j @ i @ j (e) (e) a dxdy + +c i j @x @x @y @y e y Z (e) j dxdy; f e las (14) (15) e teniendo en mente el simpli…car los cálculos computacionales, se considera un elemento de referencia ^ en los ejes coordenados ("; ) cuyos vértices están el ( 1; 1); (1; 1); (1; 1) y ( 1; 1) respectivamente, en el cual mediante una función afín será proyectado cualquier elemento rectangular e cuyos vértices (e) (e) (e) (e) (e) (e) (e) (e) (x1 ; y1 ); (x2 ; y2 ); (x3 ; y3 ) y (x4 ; y4 ) están tomados en sentido contrario al movimiento de las manecillas del reloj como se muetra en la …guramediante la transformación f (x; y) = T ("; )+b, quedando dicha transformación como (e) x = x2 y x4 (e) x1 2 y2 "+ y4 (e) (e) = (e) "+ x1 2 7 (e) y1 2 (e) (e) y1 2 (16) en la cual la matriz T está dada por (e) x2 T = (e) (e) y2 (e) (e) y4 x1 2 x4 (e) x1 2 ! (e) y1 2 (e) y1 2 (17) y el vector b= (b1 ; b2 ) es la posición del vector centroide del rectángulo también se tiene que la transformación inversa es 2 3 (e) (e) x " y1 y2 b1 2 = 6 6 6 4 (e) x4 2 (e) y b2 !0 (e) x b1 x1 @ (e) y2 (e) x2 2 (e) y1 2 (e) x1 (e) x2 x1 2 y = (e) (e) x4 x1 2 x b1 b2 (e) y2 (e) y1 2 (e) x1 (e) x2 2 8 ! : (e) + (e) y4 y1 2 7 7 5 17 A e, (18) Entonces las (e) i quedan de…nidas en términos de ^ i como ^ ("; ) 1 = ^ ("; ) 2 = ^ ("; ) 3 = ^ ("; ) 4 = 1 (1 ")(1 4 1 (1 + ")(1 4 1 (1 + ")(1 + 4 1 (1 ")(1 + 4 ) (19) ) ) ) (e) (e) y las funciones i son obtenidas por el conjunto i (x; y) = ^ i ("; ) con (x; y) y (", ) relacionadas por la Ec. (16), entonces se tendrian las siguientes integrales # ! " Z (e) (e) (e) (e) @ i @ j @ i @ j (e) (e) (e) + +c i j dxdy (20) a Kij = @x @x @y @y e " ! ! Z @ ^j @ @ ^ j @" @ ^ i @" @ ^i @ a = + + + @" @x @ @x @" @x @ @x ^ ! !# ! @ ^ j @" @ ^ j @ @ ^ i @" @ ^ i @ ^ ^ + + + c i j jJj d"d @" @y @ @y @" @y @ @y donde el índice i y j varia de 1 a 4. En está última usamos la regla de la cadena y dxdy = jJj d"d para el cambio de variable en las integrales, aquí jJj = det T; R (e) donde T está dado como en la Ec. (17). Para resolver e f j dxdy en cada e se genera las integrales Z (e) (e) Fj = f j dxdy (21) e Z = f ^ j jJj d"d ^ donde el índice i y j varia de 1 a 4. Para realizar el cálculo numérico de las integrales en el rectángulo de refe@" @" @ rencia ^ = [ 1; 1] [ 1; 1], debemos conocer @@"i ; @@ i ; @x ; @y ; @x y @@y ; entonces realizando las operaciones necesarias a la Ec. (19) obtenemos @ 1 @" @ 2 @" @ 3 @" @ 4 @" @ @ @ @ @ @ @ @ = 14 (1 ) 1 = 4 (1 ) 1 = 4 (1 + ) = 14 (1 + ) 1 2 3 4 = 41 (1 ") = 41 (1 + ") = 41 (1 + ") = 41 (1 ") (22) y también (e) (e) @" @x = y4 y1 2 det T @ @x = y2 y1 2 det T (e) (e) 9 (e) (e) (e) (e) @" @y = x4 x1 2 det T @ @y = x2 x1 2 det T (23) (e) (e) las cuales deberán de ser sustituidas en cada Kij y Fj para calcular las integrales en el elemento e : Estas integrales se harán en el programa usando cuadratura Gaussiana, permitiendo reducir el número de cálculos al mínimo pero manteniendo el balance entre precisión y número bajo de operaciones necesarias para realizar las integraciones. 1.3 Discretización Usando Triángulos Partiendo de la ecuación Z ar i r tenemos Kij = = Z ar E Z X e=1 = E Z X e=1 r i ar e a e " j j +c (e) i @ +c (e) j (e) i @x j dxdy (24) @x + (25) (e) (e) i j +c (e) j @ f dxdy i j r dxdy = i j Z @ (e) i (e) j @ @y dxdy @y # +c (e) (e) i j ! dxdy y el lado derecho como Fj = = Z f j dxdy E Z X e=1 Para cada Kij = e de Z tiene la estructura e f (e) j dxdy: e la submatriz de integrales (matriz de carga local) " # ! (e) (e) (e) (e) @ i @ j @ i @ j (e) (e) a + +c i j dxdy @x @x @y @y 2 (e) k1;1 6 (e) 4k2;1 (e) k3;1 (26) (e) k1;2 (e) k2;2 (e) k3;2 (27) 3 (e) k1;3 (e) 7 k2;3 5 (e) k3;3 (28) (e) j dxdy (29) la cual deberá ser ensamblada en la matriz de carga global que corresponda a la numeración de nodos locales del elemento e con respecto a la numeración global de los elementos en . De manera parecida, para cada e de se genera el vector de integrales (vector de carla gocal) Z Fj = f e 10 con la estructura 2 (e) 3 F 6 1(e) 7 4F2 5 (e) F3 (30) el cual también deberá ser ensamblado en el vector de carga global que corresponda a la numeriación de nodos locales al elemento e con respecto a la numeración global de los elementos de . (e) (e) Montando los Kij en la matriz K y los Fj en el vector F según la numeración de nodos global, se genera el sistema Kuh =F donde uh será el vector cuyos valores serán la solución aproximada a la Ec. (??) en los nodos interiores de : La matriz K generada de esta forma, tiene una propiedad muy importante, es bandada y el ancho de banda es de 7 elementos, esto es muy útil al momento de soportar la matriz en memoria. Para implementar numéricamente en cada e las integrales " # ! Z (e) (e) (e) (e) @ i @ j @ i @ j (e) (e) a + +c i j dxdy @x @x @y @y e y Z (31) (e) j dxdy f e teniendo en mente el simpli…car los cálculos computacionales se considera a un elemento de referencia ^ en los ejes coordenados ("; ) cuyos vertices estan en (0; 0); (1; 0) y (0; 1) y en el cual mediante un mapeo afín será proyectado (e) (e) (e) (e) (e) (e) caulquier elemento triangular e cuyos vertices (x1 ; y1 ); (x2 ; y2 ); (x3 ; y3 ) están tomados en el sentido contrario al movimiento de las manecillas del reloj como se muetra en la …guramediante la transformación f ("; ) = T ("; )+b, quedando dicha transformación como (e) x = x1 (1 (e) y = y1 (1 (e) " " (e) ) + x2 " + x3 (e) (e) ) + y2 " + y3 (32) y en la cual la matriz T está dada por (e) T = x2 (e) y2 (e) (e) x1 (e) y1 x3 (e) y3 (e) x1 (e) y1 ! (33) donde b es un vector constante (e) b= x1 (e) y1 11 ! (34) también se tiene que la transformación inversa es " = = 1 2A 1 2A e e h h (e) (e) y3 y1 (e) y2 donde A Entoces las (e) i e (e) x (e) y1 (e) x1 x3 (e) x (e) x1 2 x2 3 (e) y1 (e) 7 y2 5 : (e) y3 (e) 1 x1 6 = det 4 1 x(e) 2 (e) 1 x3 (e) x1 (e) x1 (e) y y1 y i (e) y1 (35) i (36) quedan de…nidas en términos de ^ i como ^ ("; ) = 1 1 ^ ("; ) = " 2 ^ ("; ) = 3 " (37) (e) (e) entoces las funciones i son obtenidas por el conjunto i (x; y) = ^ i ("; ) con (x; y) y (", ) relacionadas por la Ec. (32), entonces se tendrian las siguientes 12 integrales (e) kij = Z a " (e) i @ (e) j @ (e) j @ # (e) (e) i j ! +c dxdy (38) @y @y ! ! " Z @ ^ j @" @ ^j @ @ ^i @ @ ^ i @" + + + = a @" @x @ @x @" @x @ @x ^ ! !# ! @ ^ j @" @ ^ j @ @ ^ i @" @ ^ i @ ^ ^ + + + c i j jJj d"d @" @y @ @y @" @y @ @y e @x @x + (e) i @ donde el índice i y j varia de 1 a 3. En está última usamos la regla de la cadena y dxdy = jJj d"d para el cambio de variable en las integrales, aquí jJj = det T; R (e) donde T está dado como en la Ec. (33). Para resolver e f j dxdy en cada e se genera las integrales Z (e) (e) f j dxdy (39) Fj = Z e = f ^ j jJj d"d ^ donde el indice i y j varia 1 a 3. Para realizar el cálculo numérico de las integrales en el triángulo de ref@" @" @ ; @y ; @x y @@y ; entonces realizando las erencia ^ , debemos conocer @@"i ; @@ i ; @x operaciones necesarias a las Ec. (37) obtenemos @ 1 @" @ 2 @" @ 3 @" @ @ @ @ @ @ = 1 =1 =0 1 2 3 = 1 =0 =1 (40) y también (e) @" @x @ @x = y3 (e) (e) y1 @" @y 2A e (e) (e) y1 y2 = 2A = (e) @ @y e = las cuales deberán de ser sustituidas en cada integrales en el elemento (e) x3 x2 x1 2A e (e) x1 2A (41) e (e) Kij (e) y Fj para calcular las e: Suponiendo que fue dividido en E elementos, estos elementos generan N nodos en total, de los cuales Nd son nodos desconocidos y Nc son nodos conocidos con valor j ; entonces el algoritmo de ensamble de la matriz K y el vector F se puede esquematizar como: Ki;j = ( i ; j ) 8i = 1; 2; :::; E; j = 1; 2; :::; E Fj = (f ; j ) 8j = 1; 2; :::; E 8j = 1; 2; :::; Nd : 13 bj = bj i Ki;j 8i = 1; 2; :::; E Así, se construye una matriz global en la cual están representados los nodos conocidos y los desconocidos, tomando sólo los nodos desconocidos de la matriz K formaremos una matriz A; haciendo lo mismo al vector F formamos el vector b; entonces la solución al problema será la resolución del sistema de ecuaciones lineales Ax= b; este sistema puede resolverse usando por ejemplo el método de gradiente conjugado. El vector x contendrá la solución buscada en los nodos desconocidos Nd . 14 2 Solución de Grandes Sistemas de Ecuaciones En el cápitulo anterior se mostró como proceder para transformar un problema de ecuaciones diferenciales parciales con valores en la frontera en un sistema algebraico de ecuaciones y así poder hallar la solución resolviendo el sistema de ecuaciones lineales que se pueden expresar en la forma matricial siguiente Au = b (42) donde la matriz A es bandada (muchos elementos son nulos) y en problemas reales tiene grandes dimensiones. Los métodos de resolución del sistema algebraico de ecuaciones Au = b se clasi…can en dos grandes grupos: los métodos directos y los métodos iterativos. En los métodos directos la solución u se obtiene en un número …jo de pasos y sólo están sujetos a los errores de redondeo. En los métodos iterativos, se realizan iteraciones para aproximarse a la solución u aprovechando las características propias de la matriz A; tratando de usar un menor número de pasos que en un método directo. Los métodos iterativos rara vez se usan para resolver sistemas lineales de dimensión pequeña (el concepto de dimensión pequeña es muy relativo), ya que el tiempo necesario para conseguir una exactitud satisfactoria rebasa el que requieren los métodos directos. Sin embargo, en el caso de sistemas grandes con un alto porcentaje de elementos cero, son e…cientes tanto en el almacenamiento en la computadora como en el tiempo que se invierte en su solución. Por ésta razón al resolver éstos sistemas algebraicos de ecuaciones es preferible aplicar métodos iterativos tal como Gradiente Conjugado. Cabe hacer mención de que la mayoría del tiempo de cómputo necesario para resolver el problema de ecuaciones diferenciales parciales (EDP), es consumido en la solución del sistema algebraico de ecuaciones asociado a la discretización, por ello es determinante elegir aquel método numérico que minimice el tiempo invertido en este proceso. 2.1 Métodos Directos En estos métodos, la solución u se obtiene en un número …jo de pasos y sólo están sujetos a los errores de redondeo. Entre los métodos más importantes podemos encontrar: Eliminación Gausiana, descomposición LU, eliminación bandada y descomposición de Cholesky. Los métodos antes mencionados, se colocaron en orden descendente en cuanto al consumo de recursos computacionales y ascendente en cuanto al aumento en su e…ciencia. Eliminación Gausiana Tal vez es el método más utilizado para encontrar la solución usando métodos directos. Este algoritmo sin embargo no es e…ciente, ya que en general, un sistema de N ecuaciones requiere para su almacenaje en memoria de N 2 entradas para la matriz A, pero cerca de N 3 =3 + O(N 2 ) 15 multiplicaciones y N 3 =3 + O(N 2 ) adiciones para encontrar la solución siendo muy costoso computacionalmente. La eliminación Gausiana se basa en la aplicación de operaciones elementales a renglones o columnas de tal forma que es posible obtener matrices equivalentes. Escribiendo el sistema de N ecuaciones lineales con N incógnitas como N X (0) (0) aij xj = ai;n+1 ; i = 1; 2; :::; N (43) j=1 (0) (i 1) y si a11 6= 0 y los pivotes aii ; i = 2; 3; :::; N de las demás …las, que se obtienen en el curso de los cálculos, son distintos de cero, entonces, el sistema lineal anterior se reduce a la forma triangular superior (eliminación hacia adelante) N X xi + (i) (i) aij xj = ai;n+1 ; i = 1; 2; :::; N (44) j=i+1 donde k = 1; 2; :::; N ; fj = k + 1; :::; N f (k 1) (k) akj akj ; (k 1) akk i = k + 1; :::; N + 1f (k) aij = (k 1) = aij (k) (k 1) akj aik ggg y las incógnitas se calculan por sustitución hacia atrás, usando las fórmulas (N ) xN = aN;N +1 ; i = N 1; N xi (i) = ai;N +1 (45) 2; :::; 1 N X (i) aij xj : j=i+1 En algunos casos nos interesa conocer A 1 ; por ello si la eliminación se aplica a la matriz aumentada A j I entonces la matriz A de la matriz aumentada se convertirá en la matriz I y la matriz I de la matriz aumentada será A 1 . Así, el sistema Au = b se transformará en u = A 1 b obteniendo la solución de u: Descomposición LU Sea U una matriz triangular superior obtenida de A por eliminación bandada. Entonces U = L 1 A; donde L es una matriz triangular inferior con unos en la diagonal. Las entradas de L 1 pueden obtenerse de los coe…cientes mij de…nidos en el método anterior y pueden ser almacenados estrictamente en las entradas de la diagonal inferior de A ya que estas ya fueron eliminadas. Esto proporciona una factorización LU de A en la misma matriz A ahorrando espacio de memoria. 16 El problema original Au = b se escribe como LU u = b y se reduce a la solución sucesiva de los sistemas lineales triangulares Ly = b y U u = y: (46) La descomposición LU requiere también N 3 =3 operaciones aritméticas para la matriz llena, pero sólo N b2 operaciones aritméticas para la matriz con un ancho de banda de b siendo esto más económico computacionalmente. Nótese que para una matriz no singular A, la eliminación de Gausiana (sin redondear …las y columnas) es equivalente a la factorización LU: Eliminación Bandada Cuando se usa la ordenación natural de los nodos, la matriz A que se genera es bandada, por ello se puede ahorrar considerable espacio de almacenamiento en ella. Este algoritmo consiste en triangular a la matriz A por eliminación hacia adelante operando sólo sobre las entradas dentro de la banda central no cero. Así el renglón j es multiplicado por mij = aij =ajj y el resultado es restado al renglón i para i = j + 1; j + 2; :::: El resultado es una matriz triangular superior U que tiene ceros abajo de la diagonal en cada columna. Así, es posible resolver el sistema resultante al sustituir en forma inversa las incógnitas. Descomposición de Cholesky Cuando la matriz es simétrica y de…nida positiva, se obtiene la descomposición LU de la matriz A; así A = LDU = LDLT donde D = diag(U ) es la diagonal con entradas positivas. La mayor ventaja de esta descomposición es que, en el caso en que es aplicable, el costo de cómputo es sustancialmente reducido, ya que requiere de N 3 =6 multiplicaciones y N 3 =6 adiciones. 2.2 Métodos Iterativos En estos métodos se realizan iteraciones para aproximarse a la solución u aprovechando las características propias de la matriz A; tratando de usar un menor número de pasos que en un método directo, para más información de estos y otros métodos ver [5] y [12]. Un método iterativo en el cual se resuelve el sistema lineal Au = b (47) comienza con una aproximación inicial u0 a la solución u y genera una sucesión 1 de vectores uk k=1 que converge a u. Los métodos iterativos traen consigo un proceso que convierte el sistema Au = b en otro equivalente de la forma u = T u + c para alguna matriz …ja T y un vector c: Luego de seleccionar el vector inicial u0 la sucesión de los vectores de la solución aproximada se genera calculando uk = T uk 1 + c 8k = 1; 2; 3; ::: (48) La convergencia a la solución la garantiza el siguiente teorema cuya solución puede verse en [13]. 17 Theorem 3 Si T < 1, entonces el sistema lineal u = T u + c tiene una solución única u y las iteraciones uk de…nidas por la fórmula uk = T uk 1 +c 8k = 1; 2; 3; ::: convergen hacia la solución exacta u para cualquier aproximación lineal u0 : Notemos que mientras menor sea la norma de la matriz T ; más rápida es la convergencia, en el caso cuando T es menor que uno, pero cercano a uno, la convergencia es muy lenta y el número de iteraciones necesario para disminuir el error depende signi…cativamente del error inicial. En este caso, es deseable proponer al vector inicial u0 de forma tal que se mínimo el error inicial. Sin embargo, la elección de dicho vector no tiene importancia si la T es pequeña ya que la convergencia es rápida. Como es conocido, la velocidad de convergencia de los métodos iterativos dependen de las propiedades espectrales de la matriz de coe…cientes del sistema de ecuaciones, cuando el operador diferencial L de la ecuación del problema a resolver es auto-adjunto se obtiene una matriz simétrica y positivo de…nida y el número de condicionamiento de la matriz A, es por de…nición cond(A) = max 1 (49) min donde max y min es el máximo y mínimo de los eigenvalores de la matriz A. Si el número de condicionamiento es cercano a 1 los métodos numéricos al solucionar el problema convergerá en pocas iteraciones, en caso contrario se requerirán muchas iteraciones. Frecuentemente al usar el método de elemento …nito se tiene una velocidad de convergencia de O h12 y en el caso de métodos de descomposición de dominio se tiene una velocidad de convergencia de O h1 en el mejor de los casos, donde h es la máxima distancia de separación entre nodos continuos de la partición, es decir, que poseen una pobre velocidad de convergencia cuando h ! 0, para más detalles ver [?]. Entre los métodos más usados para el tipo de problemas tratados en el presente trabajo podemos encontrar: Jacobi, Gauss-Seidel, Richardson, relajación sucesiva, Gradiente Conjugado, Gradiente Conjugado precondicionado. Los métodos antes mencionados se colocaron en orden descendente en cuanto al consumo de recursos computacionales y ascendente en cuanto al aumento en la e…ciencia en su desempeño, describiéndose a continuación: Jacobi Si todos los elementos de la diagonal principal de la matriz A son diferentes de cero aii 6= 0 para i = 1; 2; :::n: Podemos dividir la i ésima ecuación del sistema lineal (47) por aii para i = 1; 2; :::n; y después trasladamos todas las incógnitas, excepto xi , a la derecha, se obtiene el sistema equivalente u = Bu + d donde di = bi aii y B = fbij g = 18 (50) aij aii 0 si j 6= i : si j = i Las iteraciones del método de Jacobi están de…nidas por la fórmula xi = n X (k 1) bij xj + di (51) j=1 (0) donde xi son arbitrarias (i = 1; 2; ::::n; k = 1; 2; ::::): También el método de Jacobi se puede expresar en términos de matrices. Supongamos por un momento que la matriz A tiene la diagonal unitaria, esto es diag(A) = I: Si descomponemos A = I B, entonces el sistema dado por la Ecs. (47) se puede reescribir como I B u = b: (52) Para la primera iteración asumimos que k=b; entonces la última ecuación se escribe como u = Bu+k. Tomando una aproximación inicial u0 ; podemos obtener una mejor aproximación remplazando u por la más resiente aproximación de um : Esta es la idea que subyace en el método Jacobi. El proceso iterativo queda como um+1 = Bum + k: (53) La aplicación del método a la ecuación de la forma Au = b, con la matriz A no cero en los elementos diagonales, se obtiene multiplicando la Ec. (47) por D 1 = diag(A) 1 obteniendo B=I D 1 A; k=D 1 b: (54) Gauss-Seidel Este método es una modi…cación del método Jacobi, en el cual una vez obtenido algún valor de um+1 ; este es usado para obtener el resto de los valores utilizando los valores más actualizados de um+1 : Así, la Ec. (53) puede ser escrita como X X um+1 = bij um+1 + bij um (55) j + ki : i j j<i j>i Notemos que el método Gauss-Seidel requiere el mismo número de operaciones aritméticas por iteración que el método de Jacobi. Este método se escribe en forma matricial como um+1 = Eum+1 + F um + k (56) donde E y F son las matrices triangular superior e inferior respectivamente. Este método mejora la convergencia con respecto al método de Jacobi en un factor aproximado de 2. 19 Richardson Escribiendo el método de Jacobi como um+1 um = b Aum (57) entonces el método Richardson se genera al incorporar la estrategia de sobrerrelajación de la forma siguiente um+1 = um + ! b Aum : (58) El método de Richardson se de…ne como um+1 = I !A um + !b (59) en la práctica encontrar el valor de ! puede resultar muy costoso computacionalmente y las diversas estrategias para encontrar ! dependen de las características propias del problema, pero este método con un valor ! óptimo resulta mejor que el método de Gauss-Seidel. Relajación Sucesiva Partiendo del método de Gauss-Seidel y sobrerrelajando este esquema, obtenemos 2 3 i 1 N X X 4 5 um+1 = (1 !) um bij um+1 + bij um (60) i +! j + ki i j j=1 j=i+1 y cuando la matriz A es simétrica con entradas en la diagonal positivas, éste método converge si y sólo si A es de…nida positiva y ! 2 (0; 2) : En la práctica encontrar el valor de ! puede resultar muy costoso computacionalmente y las diversas estrategias para encontrar ! dependen de las características propias del problema. Gradiente Conjugado El método del Gradiente Conjugado ha recibido mucha atención en su uso al resolver ecuaciones diferenciales parciales y ha sido ampliamente utilizado en años recientes por la notoria e…ciencia al reducir considerablemente en número de iteraciones necesarias para resolver el sistema algebraico de ecuaciones. Aunque los pioneros de este método fueron Hestenes y Stiefel (1952), el interés actual arranca a partir de que Reid (1971) lo planteara como un método iterativo, que es la forma en que se le usa con mayor frecuencia en la actualidad, esta versión está basada en el desarrollo hecho en [4]. La idea básica en que descansa el método del Gradiente Conjugado consiste en construir una base de vectores ortogonales y utilizarla para realizar la búsqueda de la solución en forma más e…ciente. Tal forma de proceder generalmente no sería aconsejable porqué la construcción de una base ortogonal utilizando el procedimiento de Gramm-Schmidt requiere, al seleccionar cada nuevo elemento de la base, asegurar su ortogonalidad con respecto a cada uno de los vectores construidos previamente. La gran ventaja del método de Gradiente Conjugado radica en que cuando se utiliza este procedimiento, basta con 20 asegurar la ortogonalidad de un nuevo miembro con respecto al último que se ha construido, para que automáticamente esta condición se cumpla con respecto a todos los anteriores. De…nition 4 Una matriz A es llamada positiva de…nida si todos sus eigenvalores tienen parte real positiva o equivalentemente, si uT Au tiene parte real positiva para u 2 Cn f0g : Notemos en este caso que A + AT u > 0; con u 2 Rn n f0g : 2 En el algoritmo de Gradiente Conjugado (CGM), se toma a la matriz A como simétrica y positiva de…nida, y como datos de entrada del sistema uT Au = uT Au = b (61) el vector de búsqueda inicial u0 y se calcula r0 = b método esquemáticamente como: n un+1 r n+1 n pn+1 n = p n pn pn Apn = un + = r n Au0 ; p0 = r0 ; quedando el (62) n n p n Apn rn+1 rn+1 rn rn n+1 = r + n pn = n+1 = N Si denotamos f i ; Vi gi=1 como las eigensoluciones de A; i.e. AVi = i Vi , i = 1; 2; :::; N: Ya que la matriz A es simétrica, los eigenvalores son reales y podemos ordenarlos por 1 ::: 2 N : De…nimos el número de condición 2 por Cond(A) = N = 1 y la norma de la energía asociada a A por kukA = u Au entonces q 2 32k 1 Cond(A) 5 : q u uk A u u0 A 4 (63) 1 + Cond(A) El siguiente teorema nos da idea del espectro de convergencia del sistema Au = b para el método de Gradiente Conjugado. Theorem 5 Sea = cond(A) = max 1, entonces el método de Gradiente min Conjugado satisface la A norma del error dado por p n ken k 2 1 p 2 (64) p p n n ke0 k +1 +1 p +1 p + 1 1 donde em = u um del sistema Au = b: 21 Notemos que para grande se tiene que p 2 1 p '1 p +1 (65) tal que ken kA ' e0 A n 2p exp (66) p de lo anterior podemos esperar un espectro de convergencia del orden de O( ) iteraciones, para mayor referencia ver [13]. De…nition 6 Un método iterativo para la solución de un sistema lineal es llamado óptimo, si la razón de convergencia a la solución exacta es independiente del tamaño del sistema lineal. 2.3 Precondicionadores Una vía que permite mejorar la e…ciencia de los métodos iterativos consiste en transformar al sistema de ecuaciones en otro equivalente, en el sentido de que posea la misma solución del sistema original pero que a su vez tenga mejores condiciones espectrales. Esta transformación se conoce como precondicionamiento y consiste en aplicar al sistema de ecuaciones una matriz conocida como precondicionador encargada de realizar el mejoramiento del número de condicionamiento. Una amplia clase de precondicionadores han sido propuestos basados en las características algebraicas de la matriz del sistema de ecuaciones, mientras que por otro lado también existen precondicionadores desarrollados a partir de las características propias del problema que lo origina, un estudio más completo puede encontrarse en [?] y [6]. ¿Qué es un Precondicionador? De una manera formal podemos decir que un precondicionador consiste en construir una matriz C, la cuál es una aproximación en algún sentido de la matriz A del sistema Au = b, de manera tal que si multiplicamos ambos miembros del sistema de ecuaciones original por C 1 obtenemos el siguiente sistema C 1 Au = C 1 b (67) donde el número de condicionamiento de la matriz del sistema transformado C 1 A debe ser menor que el del sistema original, es decir Cond(C 1 A) < Cond(A); (68) dicho de otra forma un precondicionador es una inversa aproximada de la matriz original C 1'A 1 (69) 22 que en el caso ideal C 1 = A 1 el sistema convergería en una sola iteración, pero el coste computacional del cálculo de A 1 equivaldría a resolver el sistema por un método directo. Se sugiere que C sea una matriz lo más próxima a A sin que su determinación suponga un coste computacional elevado. Dependiendo de la forma de platear el producto de C 1 por la matriz del sistema obtendremos distintas formas de precondicionamiento, estas son: C 1 Au = C 1 b AC 1 Cu = b C 1 1 AC 2 1 C 2 u = C 1 1 b Precondicionamiento por la izquierda Precondicionamiento por la derecha Precondicionamiento por ambos lados si C puede factorizarse como C = C 1 C 2 : El uso de un precondicionador en un método iterativo provoca que se incurra en un costo de cómputo extra debido a que inicialmente se construye y luego se debe aplicar en cada iteración. Teniéndose que encontrar un balance entre el costo de construcción y aplicación del precondicionador versus la ganancia en velocidad en convergencia del método. Ciertos precondicionadores necesitan poca o ninguna fase de construcción, mientras que otros pueden requerir de un trabajo substancial en esta etapa. Por otra parte la mayoría de los precondicionadores requieren en su aplicación un monto de trabajo proporcional al número de variables; esto implica que se multiplica el trabajo por iteración en un factor constante. De manera resumida un buen precondicionador debe reunir las siguientes características: i) Al aplicar un precondicionador C al sistema original de ecuaciones Au = b, se debe reducir el número de iteraciones necesarias para que la solución aproximada tenga la convergencia a la solución exacta con una exactitud " pre…jada. ii) La matriz C debe ser fácil de calcular, es decir, el costo computacional de la construcción del precondicionador debe ser pequeño comparado con el costo total de resolver el sistema de ecuaciones Au = b. iii) El sistema Cz =r debe ser fácil de resolver. Esto debe interpretarse de dos maneras: a) El monto de operaciones por iteración debido a la aplicación del precondicionador C debe ser pequeño o del mismo orden que las que se requerirían sin precondicionamiento. Esto es importante si se trabaja en máquinas secuenciales. b) El tiempo requerido por iteración debido a la aplicación del precondicionador debe ser pequeño. En computadoras paralelas es importante que la aplicación del precondicionador sea paralelizable, lo cual eleva su e…ciencia, pero debe de existir un 23 balance entre la e…cacia de un precondicionador en el sentido clásico y su e…ciencia en paralelo ya que la mayoría de los precondicionadores tradicionales tienen un componente secuencial grande. El método de Gradiente Conjugado por si mismo no permite el uso de precondicionadores, pero con una pequeña modi…cación en el producto interior usado en el método, da origen al método de Gradiente Conjugado precondicionado que a continuación detallaremos. 2.3.1 Gradiente Conjugado Precondicionado Cuando la matriz A es simétrica y de…nida positiva se puede escribir como uA u u u 1 y tomando la matriz C que 1 (70) n como un precondicionador de A con la condición de uC 1 1 A u u u (71) n entonces la Ec. (61) se pude escribir como C 1 Au = C 1 b (72) donde C 1 A es también simétrica y de…nida positiva en el producto interior hu; vi = u Cv; porque u; C 1 Av = u C C = u Av 1 Av (73) que por hipótesis es simétrica y de…nida positiva en ese producto interior. La elección del producto interior h ; i quedará de…nido como hu; vi = u C 1 Av (74) por ello las Ecs. (62[1]) y (62[3]), se convierten en k+1 = rk rk pk+1 C 1 pk+1 (75) pk C 1 r k pk Apk (76) y k+1 = generando el método de Gradiente Conjugado precondicionado con precondicionador C 1 . Es necesario hacer notar que los métodos Gradiente Conjugado y Gradiente Conjugado Precondicionado sólo di…eren en la elección del producto interior. 24 Para el método de Gradiente Conjugado Precondicionado, los datos de entrada son un vector de búsqueda inicial u0 y el precondicionador C 1 : Calculándose r0 = b Au0 ; p = C 1 r0 ; quedando el método esquemáticamente como: k+1 pk+1 k+1 = pk C 1 r k pk Apk k+1 k = rk p k = (77) k r r pk+1 C 1 pk+1 uk+1 = uk + rk+1 = C 1 k r k+1 k+1 p k+1 Apk+1 : Algoritmo Computacional del Método Dado el sistema Au = b, con la matriz A simétrica y de…nida positiva de dimensión n n. La entrada al método será una elección de u0 como condición inicial, " > 0 como la tolerancia del método; N como el número máximo de iteraciones y la matriz de precondicionamiento C 1 de dimensión n n, el algoritmo del método de Gradiente Conjugado Precondicionado queda como: r = b Au w = C 1r v = (C 1 )T w Pn = j=1 wj2 k=1 Mientras que k N Si kvk1 < " Salir x = Av t = Pn j=1 vj xj u = u + tv r=r tx 1 w=C r Pn = j=1 wj2 Si krk1 < " Salir s= v= C 1 T w + sv = k =k+1 25 La salida del método será la solución aproximada u = (u1 ; :::; un ) y el residual r = (r1 ; :::; rn ). En el caso del método sin precondicionamiento, C 1 es la matriz identidad, que para propósitos de optimización sólo es necesario hacer la asignación de vectores correspondiente en lugar del producto de la matriz por el vector. En el caso de que la matriz A no sea simétrica, el método de Gradiente Conjugado puede extenderse para soportarlas, para más información sobre pruebas de convergencia, resultados numéricos entre los distintos métodos de solución del sistema algebraico Au = b generada por la discretización de un problema elíptico y como extender estos para matrices no simétricas ver [4] y [3]. Theorem 7 Sean A; B y C tres matrices simétricas y positivas de…nidas entonces C 1A C 1B B 1A : Clasi…cación de los Precondicionadores En general se pueden clasi…car en dos grandes grupos según su manera de construcción: los algebraicos o a posteriori y los a priori o directamente relacionados con el problema continuo que lo origina. 2.3.2 Precondicionador a Posteriori Los precondicionadores algebraicos o a posteriori son los más generales, ya que sólo dependen de la estructura algebraica de la matriz A, esto quiere decir que no tienen en cuenta los detalles del proceso usado para construir el sistema de ecuaciones lineales Au = b. Entre estos podemos citar los métodos de precondicionamiento del tipo Jacobi, SSOR, factorización incompleta, inversa aproximada, diagonal óptimo y polinomial. 2.3.3 Precondicionador a Priori Los precondicionadores a priori son más particulares y dependen para su construcción del conocimiento del proceso de discretización de la ecuación diferencial parcial, dicho de otro modo dependen más del proceso de construcción de la matriz A que de la estructura de la misma. Estos precondicionadores usualmente requieren de más trabajo que los del tipo algebraico discutidos anteriormente, sin embargo permiten el desarrollo de métodos de solución especializados más rápidos que los primeros. Veremos algunos de los métodos más usados relacionados con la solución de ecuaciones diferenciales parciales en general y luego nos concentraremos en el caso de los métodos relacionados directamente con descomposición de dominio. En estos casos el precondicionador C no necesariamente toma la forma simple de una matriz, sino que debe ser visto como un operador en general. De aquí que C podría representar al operador correspondiente a una versión simpli…cada del problema con valores en la frontera que deseamos resolver. 26 Por ejemplo se podría emplear en calidad de precondicionador al operador original del problema con coe…cientes variables tomado con coe…cientes constantes. En el caso del operador de Laplace se podría tomar como precondicionador a su discretización en diferencias …nitas centrales. Por lo general estos métodos alcanzan una mayor e…ciencia y una convergencia óptima, es decir, para ese problema en particular el precondicionador encontrado será el mejor precondicionador existente, llegando a disminuir el número de iteraciones hasta en un orden de magnitud. Donde muchos de ellos pueden ser paralelizados de forma efectiva. 27 3 Implementación Computacional Si suponemos que usamos funciones lineales de…nidas por pedazos en e en nuestro caso serán polinomios de orden uno en cada variable separadamente y (e) cuya restricción de i a e es i : Para simpli…car los cálculos en esta etapa, 1 0 ; entonces se tiene que la integral supondremos que la matriz a = a 0 1 del lado izquierdo queda escrita como Z Z ar i r j + c i j dxdy = f j dxdy (78) generandose la matriz de integrales por las Ecs.(11) y (13) en el caso de una discretización usando rectángulos o por las Ecs.(28) y (30) en el caso de una discretización usando triángulos, i.e. Para cada e de ; la submatriz de integrales (matriz de carga local) " # ! Z (e) (e) (e) (e) @ i @ j @ i @ j (e) (e) Kij = a + +c i j dxdy (79) @x @x @y @y e tiene la estructura 2 (e) K1;1 6 : 6 4 : (e) Kn;1 (e) 3 K1;n : 7 7 : 5 (e) Kn;n (80) (e) j dxdy (81) ::: ::: donde el valor de n depende del tipo de discretización usado, la cual deberá ser ensamblada en la matriz de carga global que corresponda a la numeración de nodos locales del elemento e con respecto a la numeración global de los elementos en . De manera parecida, para cada e de se genera el vector de integrales (vector de carga local) Z Fj = f e con la estructura 2 (e) 3 F1 6 7 6 7 5 4 (82) (e) Fn el cual también deberá ser ensamblado en el vector de carga global que corresponda a la numeración de nodos locales al elemento e con respecto a la numeración global de los elementos de . Una vez leida la discretización del dominio (ver apéndice 4), entonces se procede a generar una única de integrales Ec.(80) y Ec.(82) respectivamente, 28 con la cual formaremos a la matriz K virtual y al vector F . De…niendo así al sistema lineal virtual Ku = F (83) donde u será el vector solución. 3.1 Implementación de FEM Suponiendo que deseamos resolver la Ec.(83) sin construir la matriz K; entonces asumiendo que tenemos una clase derivada de la clase Matriz Bandada (ver apéndice 4.2) en la cual reimplementaremos el comportamiento de retornar la entrada (n; m) de la matriz virtual. El algoritmo que a continuación se detalla permite recuperar cualquier entrada de la matriz virtual de carga, los detalles de la implementación no son necesarios para este …n, sólo supondremos que tenemos acceso a la geometría del problema la cual fue leida o generada por cualquier medio. El comportamiento descrito lo llamaremos Retorna(n; m); el cual regresa el valor numérico de la entrada K n:m de la matriz, al pasarle los indices n y m. Supondremos que tenemos una numeración global de los nodos, y adicionalmente generamos otra numeración de los nodos que son interiores al dominio, esta numeración correspondera a la numeración de las entradas de la matriz K; i.e. si nos referimos a la entrada K n:m ; estaremos re…rendonos a la interación de los nodos n y m de la numeración de nodos interiores al dominio, que corresponden a un subconjunto de los nodos de la numeración global. double val Retorna(int n; int m) Si n = m; regresar la suma de la diagonal de la matriz Ec.(80) Solicitar soporte del nodo n Si el soporte no contiene al nodo m, retorna 0:0 Dado el nodo n y m retornar el indice (p1 ; q1 ) y (p2 ; q2 ) de los nodos dentro de cada elemento que contiene simultaneamente a los nodos n y m Si los nodos pertenecen a un mismo elemento, retornar K p ;q 1 1 Retornar (K p ;q + K p ;q ) 1 1 2 2 Resolviendo el sistema lineal virtual (ver apéndice 4.2), obtendremos la solución al problema dado por la Ec.(1), consumiendo muy poca memoria, pues la matriz K nunca se construyo. 29 4 Apéndice En este apéndice se describirán algunas características que expondremos suponiendo que se trabaja en programación orientada a objetos (pero no es esto extrictamente necesario, ya que pueden ser implementados los comportamientos de las clases como funciones). Así, las clases necesarias para implentar FEM, suponen que existe una clase Geometría, una clase Matriz bandada la cual sera la clase base de una clase llamada matriz de carga virtual y por último una clase para resolución de sistemas lineales. 4.1 Implementación de la Geometría Rn un dominio poligonal y sean Sea i.e. 1.2.- ; para \ 3.- = E [ 1 ; :::; = 1; :::; E es un subdominio de = ?; siempre que la partición del dominio, E ; 6= : : =1 Implementación de la Clase Geometría No se hará la implementación detallada de la clase geometría, lo que se indicará, seran los comportamientos mínimos para poder implementar FEM usando la matriz de carga virtual. Los comportamientos básicos son: 1. Dado un nodo de la malla poder saber como es el (interior, frontera, etc) 2. Dado un nodo de la malla poder conocer los elementos que forman su soporte 3. Dado un elemento de la malla poder conocer los nodos que lo forman (ordenados según el sentido contrario a las manecillas del relog) 4. Dado un nodo interior de la malla conocer los nodos soporte que son también nodos interiores 5. Dados dos nodos que esten en el mismo soporte, regresar la numeración del orden que tienen en cada elemento 6. Leer la geometria de un archivo de texto plano en formato ASCII 30 Manejo de la Geometría Información mínima de la discretización a la que se tiene acceso: Número de elementos (N E) Número de nodos (N N ) Número de nodos por elementos (N N E) Dimensión 1 –> R1 , 2 –> R2 , 3 –> R3 ; etc (DIM ) Coordenadas del dominio Partición (P art_X; P art_Y; P art_Z; :::) Arreglo conteniendo a los elementos (en sentido contrario a las manecillas del relog) Arreglo conteniendo a las Coordenadas Arreglo conteniendo el tipo nodo 4.1.1 Estructura del Archivo que Contiene la Geometría Supondremos que la discretización de esta generada en un archivo de texto plano en ASCII separando los distintos datos mediante un espacio, bajo la siguiente estructura: Número de elementos Número de nodos Número de nodos por elementos Dimensión 1 –> R1 , 2 –> R2 , 3 –> R3 ; etc Coordenadas del dominio Partición Elementos (en sentido contrario a las manecillas del relog) Coordenada_X Coordenada_Y Donde el tipo de nodo es de…nido como: -1 Nodo frontera -2 Nodo Primal -3 Nodo Dual 31 Coordenada_Z ... Tipo_Nodo Ejemplo en dos dimensiones, dominio de [ 1; 1] [ 1; 1] partido en 1 2 elementos; generandose 2 elementos, con un total de 6 nodos, donde hay 4 nodos por elemento: 2 6 4 2 -1.0 -1.0 1.0 1.0 12 0123 3245 -1.0 -1.0 -1 1.0 -1.0 -1 1.0 0.0 -1 -1.0 0.0 -1 1.0 1.0 -1 -1.0 1.0 -1 32 4.2 Matrices Virtuales Dado que las matrices resultantes de los métodos tipo FEM son matrices bandadas, todas las operaciones que aqui se implementan se harán bajo este supuesto, así, cuando se realize la multiplicación Ku; sólo están involucrados los valores de la banda del renglon i de la matriz virtual K con los valores correspondientes del vector u; realizando la menor cantidad de operaciones matemáticas posibles. Para realizar la implementación del producto Ku, se supone que cada indice de la matriz K corresponde a un nodo interior del dominio ; así al referirnos a la entrada K i;j de la matriz, nos estaremos re…riendo a la interacción del nodo interior i con el nodo interior j: Además para saber cuales entradas del renglon i son distintas de cero, bastará conocer el soporte del nodo interior i que determina las interaciones con dicho nodo. Suponiendo que se tiene implementado el siguiente comportamiento en la clase Geometría: Dado un nodo interior de la malla, se retornara el número de nodos interiores en el soporte así como cuales son estos, estos se guardarán en un arreglo, supondremos un comportamiento int num_nod_sop 4.2.1 Retorna_Soporte_N odo_Interior(int nodo; int arr): Operaciones entre Matrices y Vectores La implementación del producto Ku donde la matriz virtual K es de tamaño N X se hará mediante el siguiente algoritmo: for (i = 0; i < N; i++) { v = 0; // Solicita el soporte del nodo i NumeroNodosEnSoporte = GE->Retorna_Soporte_Nodo_Interior(i,arr); for (k = 0; k < NumeroNodosEnSoporte; k++) { l = arr[k]; val = K->Retorna(i, l); v += val * u->Retorna(l); } u->Asigna(i,v); } 4.3 Resolución de Sistemas Lineales Para la resolución del sistema lineal resultante Ku = F (84) podemos emplear varios métodos numéricos, pero los más adecuados serán aquellos que no necesiten modi…car el contenido de la matriz virtual K; por ello no 33 es opción el método de Factorización LU o sus derivados. En este caso usaremos el algoritmo de Gradiente Conjugado (2.3.1). Implementación Computacional En en la implementación computacional de método CGM, se usará el mismo algoritmo que para matrices bandadas, y sólo es necesario tener implementada la operación de multiplicación de la matriz virtual K con un vector v; la cual fue detallada anteriormente. 34 5 Bibliografía References [1] A. Quarteroni y A. Valli; Numerical Approximation of Partial Diferential Equations. Springer, 1994. [2] B. D. Reddy; Introductory Functional Analysis - With Applications to Boundary Value Problems and Finite Elements. Springer 1991. [3] I. Herrera; Análisis de Alternativas al Método de Gradiente Conjugado para Matrices no Simétricas. Tesis de Licenciatura, Facultad de Ciencias, UNAM, 1989. [4] I. Herrera;Un Análisis del Método de Gradiente Conjugado. Comunicaciones Técnicas del Instituto de Geofísica, UNAM; Serie Investigación, No. 7, 1988. [5] M.B. Allen III, I. Herrera & G. F. Pinder; Numerical Modeling in Science And Engineering. John Wiley & Sons, Inc . 1988. [6] M. Diaz, I. Herrera; Desarrollo de Precondicionadores para los Procedimientos de Descomposición de Dominio. Unidad Teórica C, Posgrado de Ciencias de la Tierra, 22 pags, 1997. [7] P.G. Ciarlet, J. L. Lions; Handbook of Numerical Analysis, Vol. II. NorthHolland, 1991. [8] R. L. Burden y J. D. Faires; Análisis Numérico. Math Learning, 7 ed. 2004. [9] S. Friedberg, A. Insel, and L. Spence; Linear Algebra, 4th Edition, Prentice Hall, Inc. 2003. [10] T. J. R. Hughes; The Finite Element Method: Linear Static and Dynamic Finite Element Analysis. Prentice Hall, 1987. [11] W. Rudin; Principles of Mathematical Analysis. McGraw-Hill International Editions, 1976. [12] Y. Saad; Iterative Methods for Sparse Linear Systems. SIAM, 2 ed. 2000. [13] Y. Skiba; Métodos y Esquemas Numéricos, un Análisis Computacional. UNAM, 2005. 35