Sie sind auf Seite 1von 5

PRACTICAS

DE CALCULO
NUMERICO
AVANZADO

PRACTICA
8: la ecuaci
on de Laplace (parte II: elementos finitos)
Vamos a obtener mediante elementos finitos (con la formulaci
on del metodo de Galerkin)
la distribuci
on de temperaturas en una placa rectangular con unas condiciones de contorno
determinadas. Inicialmente consideraremos el problema resuelto en la anterior pr
actica
mediante diferencias finitas; abordaremos la resoluci
on de este problema con elementos
finitos y posteriormente consideraremos un problema con condiciones de contorno m
as
complejas.

Elementos finitos

Para resolver el problema planteado consideraremos elementos triangulares lineales y las


correspondientes funciones base.
Los par
ametros geometricos que necesitamos para implementar el metodo de elementos
finitos son:
coord(i,j): matriz que contiene las coordenadas x (coord(1,j)) e y (coord(2,j)) de cada
uno de los nodos. j: numeraci
on global de los nodos.
nodos(n,m): matriz de conectividad. Dado un elemento m, nos da la numeraci
on global
del nodo n (n: numeraci
on local).
bcnod(k),bcval(k): vectores para las condiciones de contorno (Dirichlet). bcnod contiene la numeraci
on global de los nodos que tienen condici
on Dirichlet y bcval corresponde al valor de la condici
on de contorno en cada nodo.
Para aclarar conceptos, supongamos que la triangulaci
on de nuestro dominio rectangular es la siguiente:
Triangulacion T1
1

0.8

0.6

0.4

0.2

7
0

0.2

3
0.4

0.6

0.8

Como vemos, la triangulaci


on escogida consta de 8 elementos triangulares y 9
nodos. Si optamos porque el segundo ndice de las matrices coord y nodos represente al
nodo, resulta que coord es una matriz 2 9 y nodos es una matriz 3 9 cuyos primeros
elementos (se elige sentido antihorario para la numeraci
on de los nodos) son

5 2 3
nodos = 1 5 9 .
8 6 7
Por su parte, bcnod y bcval son vectores cuya dimensi
on viene determinada por el
n
umero de nodos de la frontera con condici
on Dirichlet.
Para realizar las triangulaciones de nuestro dominio optaremos por la utilizaci
on del
toolbox de MATLAB para EDPs. Podemos obtener las matrices coord, nodos y el vector
bcnod a partir de la informaci
on sobre la geometra del sistema que obtenemos cuando
elegimos la opci
on Export Mesh (una vez especificadas las condiciones de contorno y
realizada la triangulaci
on del dominio). La elecci
on de esta opci
on supone generar 3
matrices cuyas denominaciones por defecto son p, t y e. La correspondencia entre estas
matrices y las que necesitaremos para nuestra rutina de elementos finitos, es la siguiente:
Matriz coord = Matriz p.
Matriz nodos = Filas 1,2,3 de la matriz t (y todas las columnas).
Vector bcnod1 = Fila 1 de la matriz e (y todas las columnas).
Si queremos guardar en ficheros de texto la informaci
on que utilizaremos sobre las
matrices t, p y e, podemos hacer uso de las siguientes instrucciones:
tt=t(1:3,:);
ee=e(1,:);
% REEMPLAZAR LOS PUNTOS SUSPENSIVOS POR
% EL DIRECTORIO CORRESPONDIENTE
fid=fopen(c:\...\p.m,w);
fprintf(fid,%20.16f %20.16f\n,p);
fclose(fid);
fid=fopen(c:\...\t.m,w);
fprintf(fid,%3i %3i %3i\n,tt);
fclose(fid);
fid=fopen(c:\...\e.m,w);
fprintf(fid,%3i\n,ee);
fclose(fid);
Este fichero se encuentra en la p
agina web con nombre:
http://personales.unican.es/segurajj/fich.txt
Si nos fijamos en la estructura de los datos en los ficheros generados p.m, t.m y e.m,
vemos que corresponden a las matrices traspuestas de las originales. Para recuperar la
estructura original u
nicamente deberemos volver trasponer, lo que podemos hacer modificando ligeramente los ficheros en cuesti
on: Por ejemplo, f.m sera:
function p=p
p=[ ...
...];
1
La fila 1 de la matriz e proporciona los nodos que est
an en la frontera. Como para el problema que
queremos resolver TODOS los nodos frontera tienen condici
on Dirichlet, se verifica la igualdad entre vector
y componentes de la fila de la matriz.

y similarmente con los ficheros t.m y e.m. La inserci


on de los datos en nuestra rutina
principal se har
a, simplemente, a
nadiendo:
coord=p;nodos=t;bcnod=e;
El n
umero de nodos (nnode) y el de elementos (nel) se pueden obtener mediante
nel=length(nodos(1,:)); nnode=length(coord(1,:));
Despues de esto, solo nos falta especificar en nuestra rutina las componentes del vector
bcval. Utilizando las matrices bcnod y coord sabemos cuales son las coordenadas de los
elementos de la frontera; con esto es sencillo obtener los correspondientes valores de las
condiciones Dirichlet (bcval).
La estructura de ficheros para la programaci
on de nuestro problema de elementos
finitos ser
a la siguiente:
main.m : Incorpora la informaci
on sobre los par
ametros geometricos del problema (matrices coord, nodos; vectores bcnod y bcval). Llama a la rutina efrut.m y procesa
los resultados de la aproximaci
on numerica obtenida: generaci
on de gr
aficos etc.
Se recomienda que en esta rutina se definan dos variables globales para dos cantidades
que ser
an utilizadas por el resto de rutinas: el n
umero total de elementos finitos de
la triangulaci
on y el n
umero total de nodos. La definici
on de variables globales se
realiza utilizando el comando global.
efrut.m : rutina que implementa propiamente el esquema de elementos finitos. Su
sintaxis es
[fsol,kt]=efrut(nodos,coord,bcnod,bcval)
donde los inputs tienen el significado geometrico comentado anteriormente y los
outputs corresponden a la aproximaci
on numerica obtenida (fsol) y a la matriz de
rigidez del sistema (kt). Respecto a la construcci
on de esta, cada vez que en la rutina
se calcule una contribuci
on elemental (es decir, por cada elemento finito) a la misma
se proceder
a a llamar a la rutina ensamblaje.m que, como su nombre indica, las
ensamblar
a para ir conformando la matriz de rigidez completa del sistema. Una vez
terminado este proceso deberemos imponer las condiciones Dirichlet del problema,
para lo que llamaremos a la rutina dirichlet.m.
ensamblaje.m : rutina que realiza el ensamblado de las componentes de la matriz de
rigidez. Su sintaxis es:
kt=ensamblaje(kt,k,index)
donde los inputs corresponden a: k, matriz correspondiente a la contribuci
on del
elemento finito que estamos ensamblando; index, vector que contiene la numeraci
on
de los nodos del elemento que estamos ensamblando; kt matriz de rigidez del sistema
(antes de ensamblar la contribuci
on elemental k).
El output es la matriz de rigidez kt despues de ensamblar la contribuci
on k.

Como se ha comentado en el apartado anterior, se ha de proceder a llamar a esta


rutina cada vez que se calcule una contribuci
on elemental al sistema.
Ser
a conveniente que en efrut.m, se inicialice la matriz kt como matriz dispersa
(mediante kt=sparse(nnode,nnode)).
dirichlet.m : rutina que implementa las condiciones Dirichlet del problema. Su sintaxis
es:
[kt,ff]=dirichlet(kt,ff,bcnod,bcval)
siendo los inputs: kt, matriz de rigidez del sistema antes de aplicar las condiciones
Dirichlet; ff, vector de carga del sistema antes de aplicar las condiciones Dirichlet2 ;
bcnod, vector que contiene los nodos con condiciones Dirichlet; bcval, vector que
contiene los valores de las condiciones Dirichlet en esos nodos.
Los outputs son: kt, matriz de rigidez del sistema despues de aplicar las condiciones
Dirichlet; ff vector de carga del sistema despues de aplicar las condiciones Dirichlet.

Problemas a resolver
Comenzaremos con el mismo problema que resolvimos en la pr
actica anterior. La visualizaci
on de la los resultados obtenidos se har
a mediante las instrucciones que se detallan a
continuaci
on:
%------------------------------------------------% Representamos graficamente las solucion numerica
% -----------------------------------------------figure(1)
subplot(2,2,1);
pdesurf(coord,nodos,fsol);
title(Solucion aproximada de elementos finitos);
xlabel(x);ylabel(y);zlabel(Temperatura);
cood y nodos son las matrices antes definidas y fsol es la soluci
on numerica como vector
columna.
De la misma manera podemos proceder para representar la soluci
on analtica (o la que
podamos obtener mediante MATLAB si no hay soluci
on analtica) y el correspondiente
error.
El programa main.m deber
a generar en una misma ventana pero en gr
aficas distintas
(utilizando el comando subplot), las gr
aficas de la soluci
on numerica, la de la exacta, la
del error (todas ellas mediante pdesurf) junto con la localizaci
on de los nodos. Pasra este
u
ltimo caso, las instrucciones podran ser:
subplot(2,2,4);
hold on;
for i=1:nnode
plot(coord(1,i),coord(2,i),.);
2

Se supone que en la rutina efrut este vector se ha inicializado a cero.

end
title(Puntos del grid);
xlabel(x); ylabel(y); axis equal
Adicionalmente, resolveremos un sistema similar pero en el que han practicado dos
orificios que se encuentran a temperaturas distintas, seg
un se puede ver en la figura:
y

T=5

C1

T=5

C2
1

El contorno rectangular se mantiene a T=1 (pero tambien podemos mantener las


anteriores condiciones, si as lo preferimos).
Los radios de los orificios son: 0.2 (C1 ) y 0.1 (C2 ). Sus centros tienen como coordenadas: (0.3,0.7) (C1 ) y (0.8,0.2) (C2 ). A diferencia del anterior caso, el problema ahora
no tiene soluci
on analtica simple.
Compararemos con los resultados que proporciona MATLAB para este mismo problema.
Igual que antes, ser
a conveniente que guardemos los datos de la triangulaci
on as como
la soluci
on nuerica en funciones matlab. Para ello, exportaremos los datos del mesh con
los nombres p2, e2 y t2; tambien exportaremos la soluci
on numerica que da MATLAB,
donde le daremos el nombre u2 a la variable. El fichero fich2.m (ver p
agina web) sirve
para generar estos ficheros que habr
a que modificar como antes se coment
o, salvo porque
no es necesario trasponer la matriz columna u2 (para generar los ficheros se puede utilizar
fich2.txt, que est
a en la p
agina web).
Los resultados correspondientes ser
an generados por el programa main2.m (similar
a main.m pero con ciertos cambios); por ejemplo, en lugar de comparar con la soluci
on
analtica, como hicimos en main.m, compararemos con la soluci
on numerica que proporciona MATLAB (por supuesto, para la misma triangularizaci
on).

Das könnte Ihnen auch gefallen