Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. MALLADO
La solucin se busca en un dominio cuadrado de superficie unidad que se
somete a mallado con un patrn sencillo de tringulos. Se generan
archivos que identifican este mallado que sern usados por los cdigos
de resolucin.
83
PROGRAMACIN EN EL ENTORNO CUDA EN APLICACIONES DE MECNICA COMPUTACIONAL
CDIGO DEL PROYECTO
CDIGO TRATAMALLA:
Gracias a ste cdigo auxiliar, facilitado por el tutor, se genera a
partir de los parmetros del mallado 4 archivos con extensin .dat.
Estos archivos son los que se usan para la ejecucin del programa y
describen en su totalidad el mallado y las condiciones de contorno.
2. CDIGO SECUENCIAL
Esta parte est constituida por el archivo femP4 y por archivos
auxiliares. Realiza las siguientes tareas:
2. Lectura de archivos
7. Representacin.
84
PROGRAMACIN EN EL ENTORNO CUDA EN APLICACIONES DE MECNICA COMPUTACIONAL
CDIGO DEL PROYECTO
85
PROGRAMACIN EN EL ENTORNO CUDA EN APLICACIONES DE MECNICA COMPUTACIONAL
CDIGO DEL PROYECTO
86
PROGRAMACIN EN EL ENTORNO CUDA EN APLICACIONES DE MECNICA COMPUTACIONAL
CDIGO DEL PROYECTO
4. ANEXOS
ANEXO I: Cdigo MATLAB de Partida con las modificaciones
usadas.
function u=femP4
tic %medida de tiempo de ejecucin
load coordenadas.dat;
load triangulos.dat;
load neumann.dat;
load dirichlet.dat;
numNodos=size(coordenadas,1);
numTriang=size(triangulos,1);
numLadosDir=size(dirichlet,1); % no se usa
numLadosNeu=size(neumann,1);
for j=1:numTriang
tri=triangulos(j,:); % vertices del triangulo # j
vertices=coordenadas(tri,:); % coordenadas de sus vertices
[R,M,jacob]=local(vertices); % rigidez y masa local
A(tri,tri)=A(tri,tri)+0*M+R; % ensamblado
baricentro=sum(vertices)/3; % baricentro del triangulo
aux=(jacob/6)*f(baricentro); %contribucion
b(tri)=b(tri)+aux*[1;1;1];
end
mmwrite('A_matlab.mtx',A);
% CONDICIONES NEUMANN (g)
for j=1:numLadosNeu
lado=neumann(j,1:2); % extremos del lado # j
subd=neumann(j,3); % subdominio del lado #j
coord=coordenadas(lado,:); % coordenadas de los extremos
ptomedio=sum(coord)/2; % punto medio del lado
longitud=norm(coord(1,:)-coord(2,:)); % longitud del
lado
aux=longitud*g(ptomedio,subd)/2; % contribucion;
b(lado)=b(lado)+aux*[1;1];
end
87
PROGRAMACIN EN EL ENTORNO CUDA EN APLICACIONES DE MECNICA COMPUTACIONAL
CDIGO DEL PROYECTO
% RESOLVER
u(Lib)=A(Lib,Lib)\b(Lib);
trisurf(triangulos,coordenadas(:,1),coordenadas(:,2),u),...
view(0,90),...
colorbar,...
shading interp;
exacta=u_ex(coordenadas);
save exacta.dat u_ex -ascii
err=abs(exacta-u);
pause
trisurf(triangulos,coordenadas(:,1),coordenadas(:,2),err),...
view(0,90),...
colorbar,...
shading interp;
88