Noticias
Tutorial: preparación de una simulación CFD en OpenFOAM
OpenFOAM es una herramienta muy potente a la hora de realizar simulaciones CFD, sin embargo, no es fácil comenzar a trabajar con él debido a la carencia de interfaz gráfica que tiene. En este tutorial aprenderemos los conceptos básicos para ser capaces de entender la estructura de este programa.
Al acabar este tutorial serás capaz de:
- Entender la estructura de carpetas en las que se basa cualquier simulación de OpenFOAM.
- Configurar los archivos básicos y comprobar que todo se ha realizado de manera correcta para lanzar la simulación.
Índice de contenidos
Introducción y estructura general.
Para empezar, lo más recomendable suele ser partir de un caso ya resuelto que copiaremos a una carpeta nueva. Un buen método de partida consiste en comprobar que tipo de fenómeno estamos simulando, acceder a la carpeta de tutoriales de OpenFOAM (en adelante, OF) localizada en la carpeta “tutorials” (dentro de la carpeta de instalación del programa) y copiar el archivo. Es recomendable nombrar a este caso como “caso base” para diferenciarlo de posibles estudios que hagamos derivados de él.
Al abrir cualquier caso de OF siempre vamos a encontrar la misma estructura:
- Carpeta “0”. Es la carpeta donde se encuentran las condiciones iniciales de cada simulación. Existen distintos archivos para cada una de las ecuaciones que se van a resolver, cada uno de los cuales contendrá información sobre todas las “boundary conditions” que estén definidas en la malla que vamos a simular.
- Carpeta “constant”. En este directorio se localizan varios archivos que definirán ciertas variables que permanecerán contantes durante toda la simulación (turbulencia, viscosidad, variables termofísicas…) así como el archivo de malla del caso.
- Carpeta “system”. Finalmente, en esta carpeta encontraremos archivos referentes a las condiciones de simulación, como por ejemplo número de iteraciones, solver a utilizar, factores de relajación…
Como se puede ver, ninguna de las carpetas contiene nada que pueda sorprender a un ingeniero que conozca el CFD mediante otros softwares, la única diferencia es que no se puede visualizar mediante una GUI. Pasaremos ahora a desgranar el contenido de cada una de estas carpetas utilizando como ejemplo una simulación simple de un conducto de ventilación en régimen turbulento.
Constantes de la simulación.
Aunque parece más lógico comenzar a preparar las condiciones iniciales de simulación, lo cierto es que es preferible preparar el contenido de la carpeta “constant” antes que todo lo demás, ya que en base a ella cambiarán ciertos archivos en el resto de directorios. Esta carpeta siempre contiene una llamada “polyMesh” (dónde se encuentra la malla del caso) y diferentes archivos que dependerán del fenómeno a simular. Para este caso, únicamente serán necesarios los archivos “transportProperties” y “turbulenceProperties”, que contendrán las propiedades de transporte y turbulencia, respectivamente.
En el primero debemos definir la viscosidad CINEMÁTICA del fluido a simular (viscosidad dinámica/densidad), mientras que en el segundo definiremos el tipo de modelo de turbulencia que queremos emplear en el caso. No existe mucha dificultad para definir la viscosidad, simplemente escribimos el valor numérico en la línea “nu”.
Para el modelo de turbulencia, el primer paso es verificar si estamos en régimen laminar o turbulento. Para ello, una buena forma de proceder es comprobar que velocidad media tendremos en nuestro volumen y calcular el número de Reynolds con esta. En la línea “simulationType” especificaremos si el modelo es laminar (“laminar”) o turbulento (“RAS”) y, habiendo elegido turbulento, en “RASModel” definiremos una de las múltiples posibilidades de modelos turbulentos que ofrece OF. Elegir el modelo de turbulencia más adecuado requeriría de una explicación más detallada que podríamos desarrollar en otro artículo. Por el momento, una buena elección suele ser el modelo “kEpsilon”, que funciona razonablemente bien en muchos casos.
Es conveniente ahora comprobar que la malla es correcta, revisando sus archivos en la carpeta “polyMesh”. Independientemente de si la malla la hemos creado con otro programa y exportado, o creada con el propio OF, esta carpeta contendrá distintos archivos con toda la información, que son “boundary”, “faces”, “neighbour”, “owner” y “points”. El más importante es el archivo “boundary”, que contendrá información de las condiciones de contorno con sus nombres y el tipo de “boundary” que son. Para una simulación simple como esta únicamente tenemos “inlet”, “outlet” y “wall”. Las dos primeras son la entrada y la salida del fluido cuyo tipo se define como “patch” y la última son el resto de las paredes donde termina el volumen de control, cuyo tipo es “wall”. Es importante comprobar estos tipos, así como los nombres de estas condiciones de contorno, ya que nos servirán para preparar las condiciones iniciales de la simulación.
Condiciones iniciales.
En esta carpeta, habrá un archivo para cada ecuación que el solver vaya a resolver. Es por eso por lo que, en función de los archivos que hayamos definido en “constant”, serán necesarios más o menos archivos en este directorio. En esta simulación solo son necesarios los archivos “p” (presión), “U” (velocidad) y aquellos referentes al modelo de turbulencia seleccionado, siendo en este caso “k”, “epsilon” y “nut”. Si hubiéramos utilizado el modelo “kOmega”, habría que incluir el archivo “omega”, o si también estuviéramos modelando transferencia de calor, el archivo “T” (temperatura), etc.
Dentro de cada archivo, deben aparecer todos los nombres de las “boundaries” incluidas en la malla, y se debe especificar qué tipo de condición se impondrá. OF cuenta con numerosas condiciones de contorno, similares a las utilizadas en otros programas. Su explicación excede los objetivos de este tutorial, aunque en el siguiente enlace se puede encontrar una guía donde se encuentran todas ellas.
Parámetros de simulación.
Para terminar de preparar la simulación, hay que configurar los parámetros del caso. Dentro de la carpeta “system”, encontraremos, como mínimo, tres archivos necesarios para cualquier simulación: “controlDict”, “fvSchemes”, y “fvSolution”. El archivo principal, y del que hablaremos en este tutorial es “controlDict”. Los otros dos archivos incluyen información relativa a los esquemas numéricos que utilizará el solver, factores de relajación y criterios de convergencia. Esta información es necesaria para lograr una rápida y correcta convergencia del caso, pero para lanzar una primera simulación se pueden utilizar los del tutorial correspondiente que hayamos copiado.
El archivo “controlDict” si debe ser modificado. En el aparecen muchos parámetros, pero los más importantes son el tipo de solver que vayamos a utilizar y el número de iteraciones que queremos realizar. Para este tutorial, se utilizará el solver “simpleFoam” y un número de iteraciones de 500. Se deben incluir estos valores en las líneas “application” y “endTime”, respectivamente. Con el resto de líneas se pueden definir parámetros tales como el intervalo de iteraciones para guardar, si queremos empezar desde el instante 0 o no (por ejemplo, para seguir una simulación que habíamos parado), etc.
Resumen de estructura del caso.
-
- “0”: condiciones iniciales
- “p”: presión
- “U”: velocidad
- “k”: variable modelo de turbulencia
- “epsilon”: variable de modelo de turbulencia
- “nut”: variable de modelo de turbulencia
- “constant”: constantes
- “polyMesh”: malla del caso
- “transportProperties”: variables de transporte
- “turbulenceProperties”: variables de turbulencia
- “system”
- “controlDict”: parámetros de simulación principales
- “fvSchemes”: esquemas numéricos del solver
- “fvSolution”: criterios de convergencia y factores de relajación
- “0”: condiciones iniciales
Comprobación final antes de simular.
Con toda la estructura creada, ya seríamos capaces de lanzar la simulación, ejecutando el solver que hayamos seleccionado. Como es muy probable que hayamos cometido algún error en la modificación de algún archivo, una buena práctica es ejecutar en este punto el comando “checkMesh” que comprueba la calidad de la malla, pero a su vez sirve como indicador de si hemos cometido algún error en la configuración de alguna condición de contorno. Si todo está correcto, se puede lanzar la simulación. ¡Enhorabuena!