Está en la página 1de 31

Introducción a OpenFOAM

OpenFOAM (Open-source Field Operation And Manipulation) es un conjunto de códigos de


ordenador en lenguaje de programación C++ para el desarrollo de métodos numéricos, así como
herramientas de preprocesado y posprocesado, para la solución de problemas de mecánica del
medio continuo, especialmente dentro del campo de la dinámica de fluidos computacional, más
conocido en inglés como CFD (Computational Fluid Dynamics). Se caracteriza por ser de código
abierto y gratuito mediante licencia GPLv3.

Hay principalmente dos variantes de OpenFOAM:

1. Variante OpenFOAM de OpenCFD Ltd. (www.openfoam.com). Las versiones se


denominan según la fecha de lanzamiento, por ejemplo, v1906 (junio de 2019).
2. Variante OpenFOAM de CFD Direct Ltd. (www.openfoam.org). Las versiones se
denoaminan por secuencia de números, por ejemplo, versión 6.0.

Aunque principalmente desarrollado con entornos GNU/Linux (Distribuciones Ubuntu,


openSUSE, etc.), se pueden instalar en Windows y MacOS.

Para Windows se recomienda usar el proyecto blueCFD (http://bluecfd.github.io), y para lo que


sigue se utiliza la versión “blueCFD-Core 2017-2”, que se puede descargar haciendo clic aquí.
Este proyecto adapta para Windows la variante de OpenFOAM de CFD Direct Ltd.
(www.openfoam.org), con lo cual se recomienda consultar la respectiva documentación (User
Guides y Tutorials) o bien en la web de blueCFD o bien en la web de CFD Direct Ltd..

1
Instalación
Una vez descargada la versión blueCFD desde aquí, hacer doble clic en el ejecutable y dar
permiso de ejecución.

Clicar Next:

Clicar Next:

Aceptar el acuerdo de licencia y clicar Next:

2
Para evitar posibles problemas futuros, se recomienda instalarlo en la raíz de una partición, en
nuestro caso “C:/blueCFD-Core-2017”:

Clicar Next:

Clicar Next:

3
Clicar Next:

Clicar Next:

Ahora debería a empezar a instalarse:

4
Durante la instalación, se pide instalar una aplicación adicional (Microsoft MPI), clicar Next:

Aceptar acuerdo de licencia y clicar Next:

Instalar en el directorio por defecto, clicar Next:

5
Clicar Next:

Instalación de Microsoft MPI finalizada.

Instalación de blueCFD-Core finalizada, clicar Finish:

Instalación finalizada.

6
Aspectos generales
Todo lo que vamos a realizar en OpenFOAM está recogido en la User Guide de la versión 5.x
(https://cfd.direct/openfoam/user-guide-v5/). Aquí haremos una visita rápida, directa y
resumida de los aspectos generales y fundamentales.

OpenFOAM viene acompañado por multitud de entornos de preprocesamiento y


posprocesamiento, además de los programas de resolución. La interfaz entre éstos son en sí
mismos aplicaciones de OpenFOAM, de tal manear que el flujo de datos en consistente entre
todos los entornos. La estructura general puede verse en Ilustración 1.

Ilustración 1: Estructura general de OpenFOAM

Los solvers (programas de resolución) presentes en esta versión de OpenFOAM están detallados
en la User Guide en https://cfd.direct/openfoam/user-guide/v5-standard-solvers/#x13-
960003.5. Se recomienda revisarlos ahora para identificar los problemas que se pueden abordar
teniendo en cuenta las ecuaciones ya estudiadas en clase sobre flujos y flujos simplificados. Se
pueden ver solvers potenciales, compresibles e incompresibles, y distintas variaciones con
algoritmos diferentes.

Las utilidades presentes están detalladas en la User Guide en https://cfd.direct/openfoam/user-


guide/v5-standard-utilities/#x14-1090003.6, en donde se agrupan en utilidades de
preprocesamiento, generación/conversión/manipulación de mallas y otras.

La generación de los casos de estudio se documenta en la User Guide en


https://cfd.direct/openfoam/user-guide/v5-cases/#x15-1210004, en donde se detalla cómo
generar los casos. Básicamente, se realiza mediante una estructura de carpetas y ficheros en
donde se guardan los datos de entrada y salida tras la resolución. Como veremos, la metodología
más cómoda para generar nuevos casos de estudio es copiar alguno de los existentes en los
tutoriales, y desarrollar a partir de éstos. Sin embargo, siempre hay que tener presente está
documentación

La visualización y posprocesamiento a través de ParaView/paraFoam se documenta en


https://cfd.direct/openfoam/user-guide/v5-paraview/#x30-2180006.1.

7
Sobre blueCFD-Core
Con blueCFD-Core, además de las utilidades y entornos de OpenFOAM, vienen algunas
utilidades necesarias en Windows. En el Escritorio deberían aparecer 3 accesos directos a las
más importantes:

Si clicamos en el icono “blueCFD-Core 2017 (Start Menu)” situado en el Escritorio, se abre el


explorador de archivos con una carpeta denominada “GUI” y 3 accesos directos adicionales:

En la carpeta GUI hay una serie de accesos directos:

que permiten ejecutar una serie de aplicaciones instaladas por blueCFD. Por un lado “Gnuplot
GUI”, que es una aplicación para dibujar gráficas. Por otro “Notepad2”, que es un editor de texto
enriquecido y que por motivos de compatibilidad es necesario utilizar para editar los ficheros
de texto que maneja OpenFOAM. Por último, “Paraview 5.4.1” que es un posprocesador muy
general, y del cual deriva otro particular para OpenFOAM denominado “paraFoam”, que ya
veremos. En el Escritorio hay otro acceso directo idéntico para “Paraview 5.4.1”.

Clicando en el acceso directo “blueCFD-Core folder”, se nos abre otro explorador de archivos en
la ruta donde hemos instalado todo blueCFD-Core.

8
Clicando en el acceso directo “blueCFD-Core terminal”, se nos abre una línea de comandos o
terminal tipo Unix/Linux/MacOS a través de la cual haremos todas las operaciones en
OpenFOAM. Nótese que un acceso directo idéntico a éste está situado en el Escritorio.

9
Clicando en el acceso directo “Extended Start Menu” se nos abre en un explorador de archivos
una serie de carpetas y accesos directos, en donde se recoge aspectos generales de blueCFD.

De entre todos, cabe destacar la carpeta “Documentation”, en donde se sitúan accesos directos
a *.pdf de documentación para OpenFOAM y ParaView.

Configuración inicial y comandos básicos


Antes de tener preparado blueCFD/OpenFOAM para desarrollar casos, debemos hacer una
breve inicialización del entorno. Para ello, comenzamos con clicar en el acceso directo “blueCFD-
Core 2017 terminal” situado en el Escritorio.

10
Si al principio de la terminal aparecen algunos mensajes diferentes a los que aparecen en la
imagen anterior, y donde avisa de que algunas operaciones no se pudieron realizar por temas
de permisos, se recomienda cerrar la terminal, y volver a abrirla, pero esta vez clicando con el
botón derecho sobre el acceso directo y ejecutándola como administrador. Una vez abierta,
deberían aparecer mensajes iniciales similares a la imagen anterior. Volver a cerrarla, y luego
abrirla de manera normal clicando dos veces sobre el icono.

La terminal que hemos abierto permite ejecutar comandos para el manejo de ficheros y carpetas
(copiar, mover, eliminar), pero también permite la ejecución de programas. Además, en ella hay
definidas una serie de variables, denominadas variables de entorno, en donde se guardan datos
referentes al equipo en donde se ha instalado el programa blueCFD/OpenFOAM. Lo primero que
vamos a hacer es que nos muestre la lista de estas variables de entorno, para ello escribimos en
la terminal el comando “printenv”:

Y presionamos Enter:

11
La línea de comandos devuelve un texto en donde en cada línea hay un texto con el formato
“nombre_variable = valor” (nótese que por el ancho de la terminal hay líneas que continúan en
una línea nueva). Si hacemos scroll hacía atrás en la línea de comandos hasta el inicio del texto,
podemos identificar claramente tres variables: FOAM_TUTORIALS (en donde se almacena
respectivamente la ruta hacia la carpeta de tutoriales), USERDOMAIN (el nombre del equipo) y
OS (el nombre del sistema operativo):

12
Si queremos saber qué valor tiene una variable en concreto, debemos ejecutar el comando
“echo $NOMBRE_VARIABLE”, donde el signo del dólar $ se pone antes del nombre de la variable
para indicar que queremos acceder a su contenido. Por ejemplo, vamos a ver qué contiene la
variable FOAM_TUTORIALS escribiendo “echo $FOAM_TUTORIALS” y presionando Enter:

Vemos que contiene la ruta hacia la carpeta de tutoriales. Nótese que la ruta está en formato
tipo Unix, donde la separación entre carpetas se indica con la barra inclinada hacia la derecha
“/” en vez de la barra inclinada hacia la izquierda “\” usada en Windows. Esto es importante a la
hora de escribir una ruta en la línea de comandos, ya que al ser una terminal Unix, requiere este
formato.

Ahora vamos a interesarnos por una variable de entorno denominada FOAM_RUN que almacena
la ruta por defecto para la ejecución de casos. Vamos a ejecutar “echo $FOAM_RUN” para ver
su valor:

Por defecto, esta carpeta no está creada, y por lo tanto deberemos asegurarnos de crearla. Para
ello, ejecutamos “mkdir -p $FOAM_RUN”:

Este comando lo que hace es crear una carpeta (mkdir == make a directory) en la ruta
especificada. En la línea previa a la que empieza por $, hay una línea con una serie de datos en
colores verde (nombre de usuario@nombre_de_equipo), magenta (sistema) y oro (directorio
actual, que por ahora está en “~”, que significa en la carpeta del usuario). Toda operación que
se haga en la terminal se hace teniendo presente el directorio actual, vamos por tanto a cambiar
de directorio e irnos al directorio indicado por FOAM_RUN. Para ello, ejecutamos “cd
$FOAM_RUN”:

13
Fijémonos ahora que, en la nueva línea de comandos, en dorado aparece el directorio actual,
que ahora es la ruta especificada por la variable de entorno FOAM_RUN. El comando cd
(cd==change directory) nos permite cambiar de directorio sin más que escribir “cd” y a
continuación la ruta al directorio que queremos cambiar.

Si quisiéramos acceder a dicho directorio pero a través de nuestro explorador de archivos de


Windows, debemos saber primero dónde está. Para ello, ejecutamos “echo $BLUECFDPATH”,
que nos muestra el valor de la variable de entorno BLUECFDPATH que contiene la ruta de
instalación de blueCFD:

En nuestro caso está en C:/BLUECF~1 (aparece una ruta abreviada), en realidad es “C:/blueCFD-
Core-2017”. Yéndonos a ella con el explorador vemos lo siguiente:

A través de la línea de comandos podemos también ver su contenido, para ello primero
cambiamos de directorio con el comando cd, y luego visualizamos lo que contiene con el
comando “ls” (ls==list files):

14
Vemos que en violeta aparecen los nombres de carpetas, y en verde los nombres de archivos.

Si ahora ejecutamos el comando “pwd” (pwd==present working directory) podremos ver la ruta
de este directorio en la línea de comandos:

Vemos que en la terminal “/home/ofuser/blueCFD” es lo mismo que en el explorador de


archivos “C:/blueCFD-Core-2017” (en función de lo seleccionado durante la instalación la
dirección vista por Windows puede variar, pero no la que se obtiene en la terminal).

Si quisiéramos ejecutar de nuevo un comando que hubiésemos escrito previamente, teniendo


el cursor en la nueva línea, basta con presionar la flecha hacia arriba, y podremos ir navegando
por el historial de comandos, desde el más nuevo al más viejo. Una vez encontrado, podremos
editarlo para finalmente ejecutarlo presionando Enter.

Otro truco es que si no nos sabemos el nombre del comando o ruta completa, podemos escribir
las primeras iniciales, y luego presionar el tabulador (tecla Tab), eso hará que la línea de
comandos rellene con comandos que empiezan por lo introducido, y si hubiesen varios los iría
mostrando.

15
Tutorial inicial
Debido a la dificultad propia de generar desde cero casos nuevos en OpenFOAM, es importante
saber utilizar los tutoriales ya desarrollados y validados presentes en la instalación. Dichos
tutoriales se encuentran dentro de la carpeta de instalación en:

O a través del explorador de archivos en:

16
Los tutoriales se encuentran perfectamente organizados según el tipo de problema que
resuelve, y el solver utilizado, según el mismo orden que encontramos en la User Guide
https://cfd.direct/openfoam/user-guide/v5-standard-solvers/#x13-960003.5.

Ahora, lo que vamos a hacer es cambiar el directorio de trabajo al directorio FOAM_RUN (que
ya vimos antes y es donde se pueden ejecutar los trabajos) haciendo “cd $FOAM_FUN”, luego
vamos a copiar el tutorial incompressible/icoFoam/cavity (que luego detallaremos) y lo pegamos
en el directorio de trabajo utilizando el comando cp (cp==copy), y por último miramos si lo
hemos copiado correctamente con el comando “ls”. A continuación, se pone la captura con la
secuencia de comandos.

El comando nuevo que aquí introducimos es el comando de copiar “cp”. Lo que aparece tras cp
es “-r” que es una opción que indica que queremos hacer una copia recursiva (es decir copiar la
carpeta y subcarpetas). A continuación la ruta de la carpeta o archivo que queremos copiar (el
origen). Por último, ponemos la ruta del destino, en nuestro caso ponemos un punto “.” para
indicar que lo queremos pegar en el directorio actual.

Una vez generada la copia del tutorial en la carpeta de trabajo, podremos estudiarla, modificarla
y ejecutarla a nuestro gusto sin perder la versión original (que siempre estará en la carpeta
tutorials). El tutorial que acabamos de copiar corresponde a un problema denominado “Lid-
driven cavity Flow” (https://cfd.direct/openfoam/user-guide/v5-cavity/#x5-40002.1). Se trata
de un problema bidimensional de un fluido encerrado en un recipiente cuadrado y donde en su
parte superior se aplica una velocidad horizontal (como si en la parte superior existiese una cinta
de transporte que va a esa velocidad moviendo al fluido). Se considera un flujo isotermo (sin
transporte de calor) e incompresible (líquido).

Nuestro directorio actual es “run”, pero para trabajar sobre un caso deberemos cambiar de
directorio hasta encontrar el caso de estudio, que es “cavity”. Para ello hacemos lo siguiente:

17
Donde se ve que dentro de cavity hay en realidad otros 3 casos: cavity (el que vamos a trabajar
ahora), cavityClipped (una variación incluida también en el tutorial de la User Guide), y
cavityGrade (otra variación). Una vez dentro de “run/cavity/cavity”, vemos que hay otras tres
carpetas: “0”, “constant”, “system”.

La documentación completa sobre qué contienen está en (https://cfd.direct/openfoam/user-


guide/v5-case-file-structure/#x16-1220004.1). En la siguiente imagen se muestra la estructura
de un caso:

Las carpetas que empiezan con números corresponden con las soluciones en cada paso de
tiempo, donde la carpeta 0 es la solución inicial (una vez resolvamos el caso aparecen más). Si
exploramos qué contiene esa carpeta “0”:

18
Vemos que contiene dos ficheros “p” y “U”, que contienen la presión y velocidades iniciales.

Si ahora vamos hacia atrás “cd ..”, y entramos en la carpeta “constant”, vemos que dentro hay
un único archivo “transportProperties”. En este archivo están las propiedades físicas del
problema. Aunque ahora mismo no hay nada, aquí también se pondrán los archivos de malla,
dentro de una subcarpeta denominada “polyMesh”.

Si ahora volvemos hacia atrás y entramos en la carpeta “system”, vemos que hay 4 archivos:
“blockMeshDict” (este archivo nos permitirá generar la malla con una utilidad llamada
blockMesh), “controlDict” (se definen parámetros de control de ejecución como paso de tiempo,
etc), “fvSchemes” (se definen los esquemas de discretización), “fvSolution” (se definen los
solvers de las ecuaciones, tolerancias y algoritmos de control). Los tres últimos son siempre
obligatorios, el primero “blockMeshDict” está presente porque vamos a generar la malla con un
mallador como es “blockMesh”.

19
Así que la estructura actual de carpetas y archivos es la siguiente:

- 0/
o P
o U
- constant/
o transportProperties
- system/
o blockMeshDict
o controlDict
o fvSchemes
o fvSolution

Antes de comenzar a visualizar y editar estos archivos es necesario irnos con el explorador de
archivos de Windows a la carpeta en donde están situados, para poder editarlos haciendo uso
del editor Notepad2 que mencionamos anteriormente:

Generación de la malla
En este punto, nos podemos ir directamente al User Guide apartado 2.1.1.1 Mesh generation
del tutorial. La cavidad se define por un paralelepípedo con 8 vértices.

En el archivo system/blockMeshDict, se especifica dicha geometría definiendo dichos vértices, y


luego definiendo un bloque y cómo se va a mallar dicho bloque. Asimismo, se definen los

20
contornos y el tipo de contorno que son. Este fichero tiene el formato requerido por la
aplicación blockMesh. Para más detalles sobre el formato de este fichero se recomienda ir a la
User Guide (https://cfd.direct/openfoam/user-guide/v5-blockMesh#x25-1790005.3).

Para generar la malla hay que situarse en el origen del caso y ejecutar blockMesh:

Tras lo cual se realiza la malla, y en la propia línea de comandos nos imprimen las características
de la malla generada:

Una vez hecho esto, nos aparecen nuevos ficheros en el caso (señalados en rojo)

- 0/
o P
o U

21
- constant/
o transportProperties
o polyMesh
 boundary
 faces
 neighbour
 owner
 points
- system/
o blockMeshDict
o controlDict
o fvSchemes
o fvSolution

En donde se está almacenando todos los datos de la malla. La malla se puede chequear haciendo
uso del comando checkMesh:

Tras el cual debe aparecer un texto con el chequeo de la malla hecho.

La malla generada la podemos visualizar haciendo uso de ParaView. Para ello podemos lanzar
desde terminal “paraFoam”:

22
Tras lo cual aparece la pantalla de inicio de ParaView:

Si clicamos en Close, y luego en Apply, estaremos en disposición de visualizar la malla. Para ello
deberemos acudir a “Display (UnstructuredGridRepresentation)” y en “Representation”
seleccionar “Surface With Edges” o bien “Wireframe”:

23
Condiciones iniciales y de contorno
En los archivos 0/p y 0/U están almacenadas las condiciones iniciales y de contorno. Más detalles
sobre la especificación de este tipo de archivo se puede ir al apartado “2.1.1.2 Boundary and
initial conditions” del tutorial, y a los apartados referenciados en éste para más detalles.

Propiedades físicas
Las propiedades físicas que hay que definir están en estrecha relación con el solver a utilizar, en
este caso es el solver icoFoam (después veremos dónde se define). La única propiedad que se
debe especificar es la viscosidad cinemática, y se hace en un fichero denominado
“transportProperties”, que ya vimos que existía.

Para este caso, se quiere estudiar lo que ocurre para número de Reynolds 10, con lo cual
teniendo en cuenta que Re=d*|U|/nu (donde d es una dimensión característica, |U| es una
velocidad, y nu es la viscosidad cinemática). Chequear que para este caso el valor de la viscosidad
cinemática 0.01 es válida.

Control
El control relativo al manejo de los pasos temporales y a la lectura y escritura de la solución se
define en el archivo “controlDict”.

En este archivo se especifica el solver o “application”, que es este caso es icoFoam, así como el
tiempo de comienzo, fin, y los pasos de tiempo. En este punto se sugiere chequear que el
“deltaT”, es decir el paso de tiempo, es tal que el número de Courant-Friedrich-Lewy (CFD) es
inferior a 1.

Más detalles en “2.1.1.4 Control”, y a los apartados referenciados en éste para más detalles.

Discretización por volúmenes finitos y configuración del solver de ecuaciones


El control sobre el método de discretización por volúmenes finitos, así como los algoritmos de
solución del sistema de ecuaciones resultante se realiza respectivamente en los ficheros
“fvSchemes” y “fvSolution”, dentro de la carpeta “system”.

Más detalles en “2.1.1.5 Discretisation and linear-solver settings”, y a los apartados


referenciados en éste para más detalles.

Ejecutar el caso
Para ejecutar el caso, nos basta con hacer:

Tras lo cual aparece texto informativo sobre el proceso:

24
Donde puede observarse, entre otras cosas, el chequeo del número de Courant máximo que el
programa calcula en toda la malla, así como los residuos (recuérdese que es un problema no
lineal que requiere de un proceso iterativo en cada paso de tiempo).

Aunque este caso es relativamente sencillo, puede ser que el proceso se pare, o incluso diverja,
para lo cual será necesario realizar las modificaciones oportunas en la definición de los
parámetros de solución.

Si ahora visualizamos el explorador de archivos, veremos que nos aparecen varias carpetas en
distintos pasos de tiempo en los cuales se ha impreso el resultado (recuérdese que esto se
cambia en ControlDict), se sugiere chequear y cambiar esto.

25
Posprocesado y visualización
Para visualizar los resultados podemos ejecutar ParaView (paraFoam) directamente:

Recordemos cerrar la ventana de inicio, y a continuación clicar en Apply.

26
Para cambiar el mapa de color, clicar en Edit dentro de “Display
(UnstructuredGridRepresentation)”:

Luego en el icono para cambiar el preset:

Y en la ventana emergente seleccionar “Blue to Red Rainbow”.

27
Si giramos la imagen clicando con el botón izquierdo, podremos ver que aunque hemos
modelado algo en 2D, como la malla es 3D, se visualiza como tal:

28
Para hacer un corte 2D, y quedarnos efectivamente con la solución bidimensional, deberemos
seleccionar cavity.foam en el pipeline browser:

Y luego aplicar el filtro Slice:

29
En las propiedades del Filtro, deberemos definir el plano de corte a través de un punto y una
normal del plano:

Ahora debería verse exclusivamente el plano 2D (xy).

Para dibujar los vectores de velocidad, deberemos primeramente extraer los valores por celda
(ya que por defecto vienen asociados tanto a nodos como a celdas), de tal manera que luego los
vectores se dibujen en el centro de cada celda. Para ello seleccionamos Slice1, y luego el filtro
Alphabetical>Cell Centers:

Y clicamos Apply.

30
Luego, seleccionando CellCenters1 en el pipeline browser, hay que aplicar el filtro
Common>Glyphs, y clicar aplicar. Nótese que en “Properties” y “Display” se puede customizar
cómo queremos que se vean las flechas.

Para visualizar las líneas de corriente, hay que seleccionar Slice1, y luego aplicar el filtro “Stream
Tracer”. Se debe definir correctamente la línea sobre la cual definir las partículas fluidas que
trazar:

Como parte final, se sugiere cambiar el número de pasos de impresión de resultados, así como
el tamaño de la malla, para poder visualizar en el dominio del tiempo tanto el campo de
presiones como el campo de velocidades, para ver cómo se forma el vórtice.

31

También podría gustarte