Universidad Nacional Autónoma de México
Dirección General de Servicios de Cómputo Académico
Año 7 Núm. 74, Publicación Mensual, 27 de Noviembre de 2008

ARTÍCULOS

 

Año 6, Número 61, Octubre de 2007
Programación orientada a objetos en la dinámica de fluidos
Luis Miguel de la Cruz Salas

 

Dinámica de fluidos computacional

Un fluido es una sustancia que continuamente se deforma (fluye) bajo la aplicación de fuerzas, sin importar su magnitud, de tal manera que carece de forma propia y adopta la del recipiente que lo contiene. Los fluidos incluyen a los líquidos y gases, e incluso plasmas y sólidos plásticos. La deformación o flujo de fluidos es una constante en la vida de todos los seres vivos. La sangre que se mueve por nuestras venas y el aire que fluye hacia nuestros pulmones son dos ejemplos típicos y a su vez importantes de este fenómeno. Los vehículos que se mueven por todo el planeta a través del aire, lagos y océanos, y que son impulsados por combustibles que fluyen y reaccionan en sus motores, son ejemplos de que el flujo de fluidos facilita la vida diaria. En realidad, muchos de los fenómenos ambientales y procesos de la industria no podrían ser enfrentados sin un detallado conocimiento de la dinámica de fluidos.

El flujo de un fluido se puede describir mediante un conjunto de ecuaciones matemáticas que describen el balance de masa, balance de cantidad de movimiento (ecuaciones de Navier-Stokes) y balance de energía, las cuales se conocen desde hace más de cien años, sin embargo, no ha sido posible resolverlas analíticamente. En consecuencia, se ha sugerido el empleo de métodos numéricos para obtener soluciones numéricas aproximadas y poder simular el flujo de fluidos en una computadora. Esto ha generado el surgimiento de la Dinámica de Fluidos Computacional (CFD por sus siglas en inglés), que actualmente es una de las áreas de la computación científica que mayor crecimiento ha tenido en los últimos años. Esta nueva rama de la dinámica de fluidos, complementa a la teoría y la experimentación, e igual provee de una alternativa a bajo costo para simular flujos reales.

Casi todos los tipos de flujos que interesan a los científicos e ingenieros son turbulentos, de tal manera, que se puede decir que la turbulencia es una regla y no una excepción en la dinámica de fluidos. Aun cuando no existe una definición exacta de turbulencia, se puede decir que un flujo es turbulento cuando es irregular, consiste de un amplio rango de escalas (remolinos del orden de centímetros y de kilómetros en un mismo fenómeno), las velocidades son muy grandes y es completamente tridimensional. Por ejemplo, si abrimos un poco la llave de un lavabo, observaremos un flujo de agua regular y simple, conocido como flujo laminar. Si abrimos más la llave, el flujo es más veloz y se torna más complicado y lleno de remolinos, en otras palabras, tenemos un flujo turbulento. Un conocimiento sólido de la turbulencia permite a los ingenieros reducir el arrastre aerodinámico sobre un automóvil o un avión, así como mejorar la eficiencia de un motor. De igual manera, entender la turbulencia es necesario para comprender el flujo de sangre en el corazón, especialmente en el ventrículo izquierdo, donde el movimiento es particularmente rápido.

Todavía en nuestros días, el problema de la turbulencia no ha sido completamente entendido debido a que existen distintos enfoques teóricos y numéricos [1, 2]. De forma adicional, para simular problemas de turbulencia se requieren recursos de cómputo que superan a la mayoría de las arquitecturas de supercómputo existentes en nuestros días, véase por ejemplo [3].

Sistemas orientados a objetos en CFD

La programación orientada a objetos ha sido utilizada para el desarrollo de sistemas computacionales en muchas áreas de estudio. Existen multitud de ejemplos en bases de datos, sistemas financieros, de seguridad, graficación, etcétera. En aplicaciones científicas, este paradigma ha tenido poco impacto debido a que existe la percepción de que el rendimiento se ve sustancialmente afectado. No obstante, en los últimos años ha habido un constante crecimiento en sistemas para simulación de fluidos que utilizan este paradigma. La razón es que el lenguaje C++, el cual permite desarrollar programas usando la POO, ofrece además herramientas para evitar el bajo rendimiento. Adicionalmente, es posible construir códigos con un nivel de abstracción alto, es decir, el código expresa de manera clara las matemáticas que implementa, y se pueden separar conceptos en clases y módulos, lo cual promueve la reutilización del código. A continuación, se muestra una lista de sistemas de código abierto y comerciales para CFD, todos desarrollados en el lenguaje C++ usando la POO, cada uno con su propia estrategia de diseño.

PETSc: Portable Extensible Toolkit for Scientific Computation

Es un sistema orientado a objetos para la solución de ecuaciones diferenciales en general. Fácil de usar para usuarios principiantes debido a que encapsula muy bien todas sus funciones y algoritmos. A los usuarios expertos en programación, también les es fácil adentrarse en el código fuente para anexar y modificar módulos. Asimismo, incluye un conjunto de algoritmos paralelos basados en MPI que permiten escribir código portable y eficiente en lenguajes como C, C++, Fortran y Python. Es un software de código abierto que se puede obtener de: http://www-unix.mcs.anl.gov/petsc/petsc-as/

Diffpack

Es un sistema orientado a objetos para la solución de ecuaciones diferenciales en general. Está basado en el método de elemento finito. Proporciona un conjunto completo de herramientas para realizar simulaciones numéricas avanzadas. Permite, además, una fácil modificación y combinación de todos los bloques numéricos para resolver las ecuaciones que se deseen. Es un software comercial que se obtiene en times.

Overture: Object-Oriented Tools for Solving PDEs in Complex Geometries

Es un sistema orientado a objetos para la solución de ecuaciones diferenciales en general. Provee un ambiente de desarrollo portable y flexible para la simulación de complejos procesos físicos en geometrías complejas que cambian con el tiempo. Está basado en diferencias finitas y volumen finito. Es un software de código abierto que se puede obtener de: http://www.llnl.gov/casc/Overture/

MOUSE

Es un sistema orientado a objetos basado en el método de volumen finito sobre malla no estructurada. Aunque nació para aplicaciones de CFD, puede usarse en otras aplicaciones debido a la forma genérica en que fue desarrollado. Contiene varias herramientas de visualización de resultados. Es un software de código abierto que se puede obtener de: http://www.vug.uni-duisburg.de/MOUSE/

OpenFOAM: Open Field Operation and Manipulation

Es un conjunto de herramientas que pueden simular cualquier tipo de flujo de fluidos incluyendo reacciones químicas, turbulencia y tranferencia de calor. Utiliza el método de volumen finito y contiene una serie de algoritmos numéricos para la solución de las ecuaciones. Puede correr en paralelo usando la estrategia de descomposición de dominio. Es un software de código abierto que se puede obtener de: http://www.opencfd.co.uk/openfoam/

 

 

[1] C. Hirsch, Numerical Computation of Internal and External Flows: Fundamentals of Numerical Discretization, Vols 1 y 2 ßJohn Wiley & Sons, 1988.

[2] Thomas B. Gatski (NASA Langley Research Center), M. Youssuff Hussaini (ICASE)& Jonh L. Lumley (Cornell University) Editors, Simulation and Modeling of Turbulent Flows, Oxford University Press, New, 1996.

[3] P. Moin and J. Kim, Tackling Turbulence with Supercomputers, Scientific American, Vol. 1, 1997.

 

 

Inicio | Contacto |