Professional Documents
Culture Documents
2960
INTRODUCCIN
Los grandes avances en el desarrollo de hardware ocurridos durante las ltimas dcadas
permitieron a los ingenieros abordar problemas computacionales ms complejos y costosos.
En consecuencia, la tecnologa del software ha evolucionado, aumentando su complejidad de
tal manera que el viejo paradigma de programacin procedural est siendo reemplazado por
tecnologas de software ms avanzadas, tales como Programacin Orientada a Objetos (POO).
Un concepto surgido del campo de la computacin cientfica, particularmente del
paradigma de POO, es el denominado Application Framework (AFs). Un AF es un esfuerzo
de la arquitectura de diseo orientado a incrementar la reutilizacin de software. Esta
estructura se puede entender como una aplicacin incompleta que puede ser especializada
para producir aplicaciones particulares.
La reutilizacin de los AFs esta basado en la arquitectura de diseo de algunos principios
generales como la Abstraccin de Datos (AD) y en la Estandarizacin de Interfaces (EI). La
AD es un grupo de procedimientos que buscan desarrollar e implementar componentes
genricos compatibles con contextos cambiantes. En el contexto de la POO con C++, la AD
est relacionada con las Clases. Por otro lado, el uso de la EI admite mezclar nuevos
componentes con los ya existentes. Este concepto permite agregar funcionalidades sin
modificar la estructura del software.
Existen una variedad de cdigos del Mtodo de Elementos Finitos (MEF) basados en POO,
que fundamentalmente, construyen las clases a partir de las estructuras procedurales clsicas
(Touzani, 2002 y Martha, 2002). Si bien estos cdigos son ms fcilmente mantenibles, no
constituyen un AF que pueda ser extensible a otros mtodos de anlisis ya que estn
asociados a un mtodo numrico especfico (MEF). Existen otros desarrollos con enfoques
ms generales y una mayor flexibilidad para la aplicacin de mtodos numricos (Devloo,
1997 y Beal et al., 1999).
En este trabajo, partiendo de un AF anteriormente desarrollado en FORTRAN (Urquiza et
al., 2002), se cre un nuevo AF utilizando POO con C++. Esta nueva versin permite resolver
una mayor variedad de problemas como se describir en el punto 2.
2
Los modelos computacionales de los problemas fsicos se pueden ver como una serie de
idealizaciones (como muestra la Figura 1), donde cada una de las cuales introduce una
aproximacin del problema fsico inicial. Estas abstracciones se introducen para hacer
resoluble el problema planteado (debido a las restricciones del tamao del problema y/o del
tiempo de ejecucin).
Se pueden identificar varios niveles de aproximacin que surgen de un anlisis del
problema fsico, ver Figura 1. La idealizacin de nivel ms alto es la de aislar el problema
fsico real interactuando con su ambiente. El siguiente paso es obtener una descripcin
matemtica de dicho problema que introduce cierto nivel de idealizacin (ej. Ecuaciones
Diferenciales (ED)). La descripcin del modelo matemtico consiste de una definicin del
dominio (geometra), y una descripcin de la interaccin del problema fsico con su entorno y
las propiedades del mismo (condiciones de contorno, restricciones, materiales, etc.). Si la
descripcin matemtica del problema no puede ser resuelta de forma analtica, entonces se
deben usar tcnicas numricas.
La construccin de un problema numrico a partir de un problema matemtico involucra
otro grupo de idealizaciones. Un mismo problema matemtico puede ser resuelto por distintos
mtodos numricos, cada uno asociado a diferentes idealizaciones.
2961
Finalmente se puede decir que todos los mtodos numricos generan un -o una sucesin
de- Sistema de Ecuaciones Lineales (Linear System of Equations, LSE). De esta manera se
obtiene un conjunto de valores que describen la aproximacin del problema fsico luego de la
serie de idealizaciones aplicadas.
Problema
Fsico real
Idealizacin
Sistema de
Ecuaciones
Lineales
Problema
Numrico
Problema
Matemtico
Idealizacin
Idealizacin
Las abstracciones utilizadas para modelar las clases parten del anlisis de la construccin
del LSE. Es decir, las clases se piensan en funcin de los pasos requeridos para construir un
LSE, independizndose de las abstracciones aplicadas al problema fsico. Siguiendo esta
filosofa, la implementacin se reduce a tres clases bsicas. Una asociada a la aproximacin
de la geometra y propiedades fsicas, otra asociada al mtodo numrico, y finalmente una
asociada al LSE.
Este programa utiliza abstracciones de una versin anterior realizada en FORTRAN
(Urquiza et al., 2002) la cual funciona muy bien para problemas donde el LSE mantiene su
estructura simblica invariante, es decir, el acoplamiento entre las variables no cambia
durante la ejecucin del programa. Cuando los problemas a resolver involucran un cambio de
la estructura simblica del LSE (e.g., remallado en MEF), se requiere de un gran
conocimiento del programa y mucho esfuerzo de desarrollo para realizar esta tarea. Por este
motivo se decidi optar por la aplicacin de POO para mejorar la versin existente del
programa en FORTRAN, hacindolo ms modular y extensible, con vistas a facilitar la
implementacin de una variedad de problemas tales como los ya mencionados.
Desde el punto de vista del usuario, el tiempo de aprendizaje se reduce notablemente al
aplicar el paradigma de la POO y la EI ya que ste slo tiene que programar el cdigo
asociado al acoplamiento entre las variables del elemento (ver punto 3). En otras aplicaciones
de programas para MEF (Touzani, 2002 y Martha, 2002) se consideran clases a partir de
idealizaciones geomtricas, como nodos y elementos, pero dichas clases quedan
indefectiblemente vinculadas a un mtodo numrico y/o una formulacin particulares,
quitndole as generalidad al programa. La estandarizacin de interfaces y las abstracciones
de datos aqu presentadas hacen posible independizar el ensamblaje del LSE de la
formulacin y geometra particular de los elementos. Esto a su vez, es una de las claves para
que el Framework presentado cumpla con el principio de Inversin de Control, alcanzndose
niveles altsimos de reutilizacin del programa principal, que permanece inalterado mientras
se agregan elementos de naturaleza radicalmente diferentes en cuanto a geometra y
formulaciones, inclusive si se cambia de mtodo numrico (FEM, FVM, FDM, BEM, etc).
3
IMPLEMENTACIN
Partiendo del modelo matemtico, las abstracciones se pueden separar en dos grandes
grupos. La primera contiene la geometra y sus propiedades, y la segunda est asociada a la
descripcin matemtica de los fenmenos involucrados (ver Figura 2). Al pasar al modelo
2962
2963
- Aproximacin
geomtrica
- Aproximacin
de atributos
- Geometra
- Atributos
(propiedades)
Clase: GeomModel
Problema
Fsico real
Sistema de
Ecuaciones
Lineales
Problema
Numrico
Problema
Matemtico
- Formulacin
dbil de
Ecuaciones
Diferenciales
- Ecuaciones
Diferenciales
Clase: ALSE
Clase: MathModel
Figura 2: detalle de las abstracciones y relaciones con las clases.
GeomModel
3: Pide propiedades por ID de Elemento
4: Devuelve datos
1: Crea LSE
MathModel
ALSE
GeomModel
MathModel
1: Crea LSE
Se repite tantas
veces como n
de Elementos
4: Devuelve datos
5: Devuelve una MEN
(b)
Figura 3: Diagrama de colaboracin (a) y de secuencia (b) para la creacin de la parte numrica del LSE.
2964
P=1
P=0
en
en
P=0
P=0
2965
RESULTADOS Y DISCUSIONES
Se implement un problema del tipo de Laplace para una placa rectangular con
condiciones de contorno de Dirichlet utilizando el Mtodo de Diferentas Finitas (MDF). La
geometra analizada y la solucin del problema se observan en la Figura 4.
Se resolvieron casos con diferentes discretizaciones para evaluar el tiempo de ensamblaje
de la parte numrica del LSE. Los tiempos obtenidos con el programa aqu descripto se
comparan con la versin anterior desarrollada en FORTRAN. En la Tabla 1 se muestran los
resultados calculados con un procesador AMD Athlon64 y 1.5 GB RAM. Como se puede
observar, los tiempos de ensamblaje son levemente mayores en la versin en C++ (entre un
3% y un 5%). Esta prdida de eficiencia es despreciable frente a los beneficios obtenidos en
estructuracin y extensibilidad asociados a la POO.
n de elementos
40.000
90.000
490.000
1.000.000
Versin procedural
(FORTRAN)
0.0625
0.141
1.10
2.52
Versin OOP
(C++)
0.0625
0.156
1.16
2.61
CONCLUSIONES