Está en la página 1de 37

1.

Introducción al CFD
Curso dinámica de fluidos computacional

1.1 Definición de CFD

La dinámica de fluidos computacional, CFD por sus siglas en inglés, es la ciencia de la predicción del
movimiento de fluidos, transferencia de calor y masa, reacciones químicas y fenómenos relacionados, al
solucionar numéricamente un conjunto de ecuaciones matemáticas, llamadas ecuaciones de transporte,
que gobiernan dichos fenómenos.

Los resultados de los análisis CFD son relevantes en el estudio conceptual de nuevos diseños, desarrollo
de productos, solución de problemas y rediseño. Estos análisis numéricos ayudan, no solo a disminuir el
costo y esfuerzo requeridos para medir datos experimentalmente, sino también a evaluar condiciones
extremas, casi imposibles de medir en la práctica. Se utiliza ampliamente en la industria aeronáutica,
automotriz y química.

Tomado de: http://www.ansys.com/staticassets/ANSYS/staticassets/product/right-cfd-solution-3-bg.jpg

El propósito de una simulación de dinámica de fluidos es encontrar cómo se comporta el fluido en el futuro
ante ciertas condiciones iniciales de entrada y salida (condiciones de frontera).

1.2 Ecuaciones de transporte

Las ecuaciones de transporte son la forma matemática en la que se expresan las leyes que gobiernan el
flujo de fluido, transferencia de calor y demás fenómenos relacionados a la dinámica de fluidos. Son
ecuaciones diferenciales parciales (PDE) que expresan algún principio de conservación: de masa, de
energía, de momento entre otros.

Curso básico dinámica de fluidos computacional con OpenFOAM 1


Cada ecuación emplea una cantidad física como variable dependiente e implica que debe existir un
balance entre varios factores que la influencian. La variable dependiente es por lo general una propiedad
específica del fluido, es decir, una cantidad expresada en base a unidad de masa. Por ejemplo: fracción
másica, velocidad (momento por unidad de masa) y entalpia especifica.

Todas las ecuaciones de transporte pueden ser escritas en forma generalizada como:

𝜕 𝜕 𝜕 𝜕
(𝜌φ) + (𝜌𝑢𝑖 φ) = (𝜌D φ) + 𝑆(
⏟ φ) ; 𝑖 = x, y, z (1.1)

𝜕𝑡 𝜕𝑥𝑖
⏟ 𝜕𝑥𝑖
⏟ 𝜕𝑥𝑖
(4)
(1) (2) (3)

Donde φ es la variable dependiente, 𝜌 es la densidad, 𝑢 es la velocidad del fluido, D es el coeficiente de


difusión, 𝑥 es la variable espacial, que en coordenadas cartesianas es x, y, z y t es el tiempo. La notación
utilizada implica una sumatoria en cada coordenada cartesiana para cada término que contenga la i.

La ecuación de transporte generalizada 1.1 tiene 4 términos:

(1) Término transitorio, debido a que depende del tiempo.


(2) Término convectivo, debido al movimiento del fluido.
(3) Término difusivo, debido al transporte molecular.
(4) Término de generación, o fuente.

1.3 Ecuación de continuidad

La ecuación de continuidad es la representación matemática del principio de conservación de masa global.


Para resolver cualquier problema en CFD, se necesita esta ecuación y la de momento como mínimo.

𝜕𝜌 𝜕
+ (𝜌𝑢𝑖 ) = 0, 𝑖 = x, y, z (1.2)
𝜕𝑡 𝜕𝑥𝑖

El primer término a la izquierda en esta ecuación representa la tasa de incremento de masa por unidad
de volumen. El otro término representa la tasa de adición neta de masa por unidad de volumen debido a
la convección. Para fluidos incompresibles (𝜌 es constante) la ecuación de continuidad se simplifica:

𝜕
(𝑢 ) = 0, 𝑖 = x, y, z (1.3)
𝜕𝑥𝑖 𝑖

1.4 Ecuación de momento

La ecuación de momento es la representación matemática de la ley de conservación de momento.

𝜕 𝜕 𝜕𝜏𝑖𝑗 𝜕𝑃
(𝜌𝑢𝑖 ) + (𝜌𝑢𝑖 𝑢𝑗 ) = − + 𝜌𝑔, 𝑖, 𝑗 = x, y, z (1.4)
𝜕𝑡 𝜕𝑥𝑖 𝜕𝑥𝑖 𝜕𝑥𝑗

Curso básico dinámica de fluidos computacional con OpenFOAM 2


En esta ecuación, el primer término a la izquierda es la tasa de incremento de momento por unidad de
volumen. El segundo término es la tasa de adición de momento por unidad de volumen debido a la
convección. Los dos primeros términos a la derecha del igual corresponden a la tasa de adición de
momento por unidad de volumen debido al transporte molecular. El último término a la derecha
corresponde a la fuerza externa sobre el fluido por unidad de volumen.

En la ecuación 1.4, P es la presión, 𝑔 es la gravedad y 𝜏𝑖𝑗 es el tensor de esfuerzos viscosos que está
definido por la ley generalizada de viscosidad de Newton:

𝜕𝑢𝑖 𝜕𝑢𝑗 2 𝜕𝑢𝑘


𝜏𝑖𝑗 = 𝜇 ( + ) − ( 𝜇 − 𝜅) 𝛿 , 𝑖, 𝑗, 𝑘 = x, y, z (1.5)
𝜕𝑥𝑗 𝜕𝑥𝑖 3 𝜕𝑥𝑘 𝑖𝑗

𝛿𝑖𝑗 es el delta de Kronecker, que es 1 si i = j y 0 si i ≠ j. 𝜇 es la viscosidad dinámica y 𝜅 es la viscosidad


dilatacional. En muchos problemas de CFD no es necesario conocer el valor de 𝜅. Este es cero para gases
monoatómicos a baja densidad. Y para el caso de fluidos incompresibles, por ecuación 1.3, el segundo
término a la derecha en la ecuación 1.5 se cancela.

1.5 Ecuaciones de Navier-Stokes

Las famosas ecuaciones de Navier-Stokes fueron derivadas por primera vez en 1821. Son un caso especial
de la ecuación de momento en el que se considera 𝜌 y 𝜇 constantes:

𝜕𝑢𝑖 𝜕𝑢𝑗 𝜕 𝜕𝑢𝑗 𝜕𝑃


𝜌 + 𝜌𝑢𝑖 =𝜇 ( )− + 𝜌𝑔, 𝑖, 𝑗 = x, y, z (1.6)
𝜕𝑡 𝜕𝑥𝑖 𝜕𝑥𝑖 𝜕𝑥𝑖 𝜕𝑥𝑗

Existen otras simplificaciones adicionales a esta ecuación, por ejemplo la ecuación de flujo estacionario
de Stokes y la ecuación de Euler.

1.6 Como funciona un software CFD

La mayoría de software CFD sigue el método de volúmenes finitos. En este método, el dominio espacial
ocupado por el fluido es dividido en un conjunto de pequeños volúmenes de control. Las ecuaciones
diferenciales de transporte son transformadas en un sistema de ecuaciones algebraicas, que puede luego
ser solucionado numéricamente. Este sistema se evalúa entonces para volumen de control.

El flujo de trabajo para plantear y resolver un problema de CFD con un software es:

1. Generar la geometría del fluido: A partir de un programa CAD se busca extraer la geometría del dominio
espacial ocupado por el fluido. Lo más simplificado posible.

2. Subdividir la geometría con una malla: Se debe determinar que tantas celdas se pueden crear de
acuerdo al computador con el que se cuente. Se debe definir qué clase de elementos (hexaédricos,
tetraédricos, prismas, etc) se van a crear. Donde se va a refinar la malla para mejorar resultados.
Curso básico dinámica de fluidos computacional con OpenFOAM 3
3. Definir las propiedades físicas y parámetros de simulación: Se deben definir los modelos físicos se deben
incluir en la simulación. Las simplificaciones que se pueden asumir. La rapidez con la que se desea obtener
resultados entre otros. Con esta información se definen el fluido, modelo de turbulencia, condiciones de
operación, condiciones de borde y configurar controles de inicio y criterios de convergencia/parada de
simulación.

4. Simular y alcanzar convergencia en el resultado: Se debe verificar que la solución obtenida alcance los
criterios de convergencia establecidos y que el resultado sea independiente de la malla.

5. Analizar los resultados: ¿Se obtienen resultados físicamente posibles? ¿Se desarrolla completamente la
turbulencia? ¿Los valores numéricos son cercanos a los experimentos o valores esperados? En base a las
respuestas se refina el modelo, volviendo a los pasos 1, 2 o 3 dependiendo del caso y repitiendo el proceso.

Pre-procesado (1 a 3) Simulación (4) Post-procesado (5)

1.7 Referencias recomendadas para este curso

Libro base
 B. Andersson, R. Andersson, L. Håkansson, M. Mortensen, R. Sudiyo, B. van Wachem.
Computational fluid dynamics for engineers. Cambridge University Press, 2012.

Libros complementarios
 J. F. Wendt (editor). Computational Fluid Dynamics, An Introduction. 3rd ed. Springer. 2009.
 M. Griebel, T. Dornsheifer, T. Neunhoeffer. Numerical simulation in fluid dynamics: a practical
introduction. SIAM 1998.
 John D. Anderson. Computational Fluid Dynamics, McGraw Hill, 1995.
 T. Poinsot, D. Veynant. Theoretical and Numerical Combustion. 2nd ed. R.T. Edwards. 2005.
 R. Byron Bird, Warren E. Stewart, Edwin N. Lightfoot. Transport Phenomena. 2nd Edition 2006

Manuales del OpenFOAM


 Manual de OpenFOAM 2.3.1: http://foam.sourceforge.net/docs/Guides-a4/UserGuide.pdf
 Guía del programador OpenFOAM 2.3.1: http://foam.sourceforge.net/docs/Guides-
a4/ProgrammersGuide.pdf

Curso básico dinámica de fluidos computacional con OpenFOAM 4


2. Tutorial: Como instalar OpenFOAM
Curso dinámica de fluidos computacional

2.1 Que es OpenFOAM

OpenFOAM (OF) es un programa gratuito de CFD de código abierto escrito en C++, que se va a utilizar a lo
largo de este curso. Se usa principalmente para crear ejecutables conocidos como aplicaciones, que
pueden ser solucionadores (resuelven un problema específico en CFD) o utilidades (manipulan datos en
las etapas de pre y postprocesado).

La programación de OF es orientada a objetos, lo que permite a los usuarios crear aplicaciones


rápidamente sin tener un conocimiento muy profundo de los métodos, la física y las técnicas de
programación utilizadas. En OF las ecuaciones de transporte se asemejan a sus originales PDEs,
permitiendo una mejor comprensión del modelo utilizado para cada simulación.

El OF solo se ejecuta en el sistema operativo Linux, en particular se recomienda la distribución Ubuntu.


No existe versión oficial para Windows. Como muchos usuarios no tienen instalado el Ubuntu, se puede:

1 - Formatear o hacerle en una partición al disco duro de un PC para instalarle el Ubuntu (recomendado).
2 - Instalar el Ubuntu en una máquina virtual dentro Windows.
3 - Comprar un PC que venga de fábrica con el Ubuntu (algunos modelos Dell por ejemplo).

A continuación se explica cómo instalar el OpenFOAM dentro de una máquina virtual:

2.2 Instalación y configuración de Virtualbox en Windows

1. Se descarga el Ubuntu 14.04 LTS. Esta versión en particular de Ubuntu tiene soporte extendido y
actualizaciones de seguridad hasta el 2019. Se descarga desde los siguientes enlaces:

http://old-releases.ubuntu.com/releases/14.04.0/ubuntu-14.04-desktop-i386.iso (versión de 32 bits)


http://old-releases.ubuntu.com/releases/14.04.0/ubuntu-14.04-desktop-amd64.iso (versión de 64 bits)

La versión de 32 bits se recomienda para computadores antiguos con menos de 2 GB de RAM y cuyo
procesador no soporte los 64 bits.

2. Se descarga la última versión del VirtualBox. Esto se puede hacer visitando www.virtualbox.org o
alternativamente desde:

http://download.virtualbox.org/virtualbox/4.3.26/VirtualBox-4.3.26-98988-Win.exe

3. Se instala virtualbox desde el archivo descargado. No hay necesidad de configurar nada durante la
instalación, basta avanzar dando clic en siguiente, aceptar, Si a todo los mensajes que aparecen en el
instalador. Al final se abre automáticamente el programa.

Curso básico dinámica de fluidos computacional con OpenFOAM 5


4. Para crear una máquina virtual hacemos clic en el icono azul. Le damos por nombre ubuntu14-
04 y clic en siguiente (next). Le asignamos memoria RAM, por ejemplo 2 GB (no menos de 512
MB) y clic en siguiente.

5. Seleccionamos "Creamos un disco virtual ahora" y clic en crear. Luego seleccionamos "VDI (VirtualBox
Disk Image) y clic en siguiente (next).

6. Seleccionamos "Reservado dinámicamente" y clic en siguiente (next). Asignamos un tamaño de disco


de 20 GB (mínimo 10 GB) y clic en crear.

7. Clic en Configuración, engranaje amarillo ---------------->


En pantalla asignamos el máximo de memoria de video.

Curso básico dinámica de fluidos computacional con OpenFOAM 6


8. En almacenamiento, hacemos clic en el disco que dice "Vacío". Al lado derecho de "IDE secundario
maestro" hay otro disco que al hacer clic nos ofrece una opción llamada "Seleccionar un archivo de disco
virtual de CD/DVD...". Damos clic en ella.

9. Seleccionamos la imagen de Ubuntu en formato ISO que descargamos en el paso 1. En este caso
"ubuntu-14.04-desktop-i386.iso" (32 bits), clic en abrir y luego en aceptar.

2.3 Instalación de Ubuntu linux

1. Una vez configurada la máquina virtual damos clic en la flecha verde (iniciar). Es posible que
salgan algunas advertencias y mensajes emergentes informativos en la parte superior sobre la
integración del mouse con la máquina virtual.

2. Dentro de Ubuntu seleccionamos español como idioma y luego damos clic en "Instalar Ubuntu".
Recomiendo NO estar conectados a internet y damos clic en continuar. La instalación es más rápida sin
conexión internet ya que no descarga actualizaciones del sistema; estas se pueden descargar después.
Seleccionamos borrar disco e instalar Ubuntu. Luego se hace clic en instalar ahora y luego en continuar.

Curso básico dinámica de fluidos computacional con OpenFOAM 7


3. Se selecciona la zona horaria haciendo clic en el mapa (Bogotá) y luego clic en continuar. Verificamos
que el teclado sea español Latinoamérica, u otra distribución de teclado si ese es el caso, y luego se hace
clic en continuar.

4. Asignamos un nombre de usuario (en este caso cfd, puede ser cualquier otro) y contraseña de
administrador (en este caso cfd2015, puede ser cualquier otra), clic en continuar.

5. Se espera a que finalice la instalación y se da clic en reiniciar. Se espera dos minutos aprox. y cierra la
ventana de la máquina virtual. Se reinicia la máquina virtual como en el paso 1, con la flecha verde.

6. (Opcional) Dentro del Ubuntu se teclea CTRL derecho + d para correr las “guest additions”, que permiten
maximizar la pantalla del sistema operativo. Se ejecuta, se introduce la contraseña de administrador y se
espera 15 min a que la instalación termine. Se presiona enter para cerrar la terminal (ventana negra), se
hace clic en el icono del extremo superior derecho de la pantalla (engranaje), apagar y luego reiniciar.

Curso básico dinámica de fluidos computacional con OpenFOAM 8


2.4 Instalación de OpenFOAM 2.3.1 y del Paraview 4.10

Existen dos maneras de instalar el OpenFOAM 2.3.1:

A. Utilizando paquetes precompilados para Ubuntu. Esta es la manera recomendada oficialmente y es la


más rápida (20 min aprox.). Se explica en detalle en: http://www.openfoam.org/download/ubuntu.php.

B. Compilando manualmente el código fuente. Es un poco más difícil que la manera anterior, toma más
tiempo (2 horas aprox.). Se explica en detalle en: http://www.openfoam.org/download/source.php

A continuación se describe de manera simple las instrucciones del método A:

1. Se abre una terminal con CTRL+ALT+t, aparece una pantalla negra en la que escribimos las siguientes
líneas (entre línea y línea presionamos enter):

VERS=$(lsb_release -cs)

sudo sh -
c "echo deb http://www.openfoam.org/download/ubuntu $VERS main > /etc/apt/sources.list.d/open
foam.list"

NOTA: Estas líneas de código están en http://www.openfoam.org/download/ubuntu.php de modo que se pueden copiar y pegar
fácilmente con el mouse desde esa página web. Esto evita errores con los espacios o símbolos que son muy comunes omitir.

2. En esta parte introducimos la contraseña de administrador seguidos de enter. Luego en la misma


terminal escribimos lo siguiente y presionamos enter al final:

sudo apt-get update

3. Para instalar OpenFOAM 2.3.1 escribimos en la misma terminal:

sudo apt-get install openfoam231

seguido de enter. Presionamos S mayúscula para descargar los paquetes y s minúscula para instalarlos así
no estén autenticados. La descarga e instalación del OpenFOAM comienza.

4. Luego se copia lo siguiente en la terminal para instalar Paraview 4.10:

sudo apt-get install paraviewopenfoam410

y enter. Se introduce de nuevo la contraseña de administrador del sistema y enter. Se teclea S para
confirmar la instalación del paraview y luego enter. Para instalar sin autenticar los paquetes se teclea s y
enter. Después de esto hay que esperar que termine el proceso.
Curso básico dinámica de fluidos computacional con OpenFOAM 9
2.5 Configuración del OpenFOAM

1. Se abre una terminal diferente con ALT + CTRL + t. En esa terminal se escribe lo siguiente:

gedit ~/.bashrc

y se da enter. Este comando abre un archivo en un block de notas.

2. En la última línea del archivo de block de notas abierto se copia lo siguiente:

source /opt/openfoam231/etc/bashrc

se guarda y se cierra el archivo.

2.6 Verificación de la instalación

1. Para verificar que la instalación y configuración del OpenFOAM quedo correcta se abre una tercera
terminal (ALT + CTRL + t) y se copia

icoFoam –help

y se da enter. Si aparece el mensaje “no se encontró la orden” entonces hubo algún problema durante la
instalación o la configuración. Si por el contrario aparece un mensaje donde las últimas líneas son
parecidas a:

using: OpenFOAM-2.3.1 (see www.OpenFOAM.org)


build: 2.3.1-f5222ca19ce6

entonces quiere decir que el programa se ha instalado y configurado correctamente.

2. Para verificar que la instalación del paraview fue exitosa, se abre una terminal (ALT + CTRL + t) y se
teclea:

paraview

y se da enter. El programa debe abrirse y con esto se verifica que ha quedado correctamente instalado.

NOTA: Para el Ubuntu 14.04.2 se han reportado algunas dificultades en la instalación del OpenFOAM y del
paraview. Estos se describen junto con su solución en http://www.openfoam.org/download/ubuntu.php
en la sección “Installation problems”. Por esto en este documento se recomienda fuertemente descargar
la versión 14.04 desde los enlaces suministrados al principio de la sección 2.2, con la cual no hay problemas
de instalación, en lugar de descargar directamente el sistema operativo desde www.ubuntu.com.

Curso básico dinámica de fluidos computacional con OpenFOAM 10


3. Tutorial tapa-cavidad
Curso dinámica de fluidos computacional

3.1 Objetivos

 Aprender a pre-procesar, simular y post-procesar un caso.


 Simular un fluido incompresible en régimen laminar utilizando el solucionador icoFoam.
 Comparar los resultados de la simulación con datos previos experimentales o numéricos.

3.2 Problema

La geometría a simular corresponde a un cuadrado de 1 m de lado


(L), en el que el lado superior (la tapa) se mueve a una velocidad de
1 m/s constante en dirección x. Asumiendo que el fluido interno es
isotérmico e incompresible, con una viscosidad cinemática de 0,01
m2/s, se pide:

(1) Determinar el número de Reynolds y el paso temporal máximo


asumiendo N=20 subdivisiones por cada lado de la malla.
(2) Determinar la velocidad en el eje y en estado estable a lo largo
de una línea horizontal que pase por el centro de la cavidad.
(3) Comparar los resultados de la simulación con datos numéricos
de Ghia et al [3].

3.3 Preprocesado

Los archivos necesarios para correr este tutorial se encuentran en:

opt/openfoam231/tutorials/incompressible/icoFoam/cavity

Procedemos a copiar esta carpeta cavity a la carpeta personal, sobre la cual se va a trabajar en este tutorial.
El solucionador de OpenFOAM a utilizar en este caso es el icoFoam, ya que este permite resolver fluidos
transitorios, isotérmicos, incompresibles, laminares y Newtonianos.

Para evaluar el paso temporal máximo se parte de la definición del Número de Courant (Co), una cantidad
adimensional que para simulaciones CFD debe ser siempre menor a uno para garantizar estabilidad en la
solución:

𝐿 1𝑚
𝐶𝑜𝑚𝑎𝑥 𝛿𝑥 𝐶𝑜𝑚𝑎𝑥 ( ) 1 𝑥 ( )
𝑁 20
Calculo del paso temporal máximo: 𝛿𝑡𝑚𝑎𝑥 = = = = 0,05 𝑠
𝑈 𝑈 1 𝑚/𝑠

𝐿𝑈 1 𝑚 𝑥 1 𝑚/𝑠
Calculo del número de Reynolds: 𝑅𝑒 = = = 100
𝜐 0,01 𝑚2 /𝑠

Curso básico dinámica de fluidos computacional con OpenFOAM 11


Donde la distancia característica en este caso corresponde al lado L. Como Re=100, el fluido en este caso
se verifica que será laminar.

3.3.1 CAD y mallado

Abrimos el archivo blockMeshDict que está dentro de la carpeta cavity/constant/polymesh. Este archivo
contiene el CAD y la malla; es posible verificar que los 8 vértices que aparecen en este archivo
corresponden a un hexaedro de 1 x 1 x 0,01 (CAD) con 20 subdivisiones en x y en y (malla). La profundidad
en z no es relevante para un caso 2D pero debe ser positiva.

Se debe cambiar la linea convertToMeters de 0.1 a 1 y guardamos el archivo. Esta línea sirve para escalar
el dominio desde los metros, que es la unidad original del dibujo CAD en blockMesh, a otra diferente tal
como pies, km, cm, entre otras. En este caso no es necesario el escalado por lo que se deja en 1.

Abrimos una terminal (CTRL+ALT+t). Escribimos cada una de las siguientes líneas y les damos enter al final
de cada una:

Con blockMesh se crea la malla a partir del archivo blockMeshDict. Este comando entrega un reporte
detallado que queda guardado en un archivo llamado “reporteBlockMesh” al interior de la carpeta cavity.
Con checkMesh se crea un informe detallado de la calidad de la malla. Este queda guardado en un archivo
llamado “reporteCheckMesh” al interior de la carpeta cavity.

3.3.2 Condiciones iniciales (tiempo cero), de borde y propiedades del fluido

En la carpeta 0 (tiempo cero) aparecen los archivos de las variables que cambian con el tiempo, por lo
general son las variables que utilizan las ecuaciones de transporte para describir su evolución al interior
del dominio. Por ejemplo la velocidad para la ecuación de transporte de momento, la entalpía (o
temperatura) para la ecuación de energía, la fracción másica para la ecuación de especies, la presión para
la ecuación semi-discretizada de presión (algoritmo PISO), etc.

En este caso solo aparecen los archivos U (velocidad) y p (presión). Al


[A B C D E F G]
interior de estos archivos aparecen varias secciones:
A Masa kg
1 – El encabezado Nos indica que versión de OpenFOAM estamos
B Longitud m
trabajando (no se cambia)
C Tiempo s
D Temperatura K
2 – dimensions denota el exponente de las dimensiones de la variable
E Masa molar kgmol
que maneja el archivo, de acuerdo a la tabla mostrada a la derecha
F Corriente A
(OpenFOAM trabaja siempre con sistema internacional de unidades).
Intensidad
Por ejemplo las unidades de la velocidad son: G cd
luminosa
[0 1 -1 0 0 0 0] = kg0 m1 s-1 K0 kgmol0 A0 cd0 = m/s
Curso básico dinámica de fluidos computacional con OpenFOAM 12
Cabe anotar que la presión en icoFoam está dividida por la densidad del fluido (constante). La presión es
además relativa respecto de un nivel de referencia (por lo general el atmosférico).

3 - internalField corresponde al valor de la variable al interior del dominio. Para la velocidad es el vector
cero, es decir que el fluido es estático en el interior de la cavidad en tiempo inicial.

4 - boundaryField es la frontera del dominio. Dentro de esta sección aparecen las mismas fronteras que
se definen dentro del blockMeshDict cuando se hizo el mallado:

 movingWall corresponde a la tapa superior del dominio. Para la velocidad es el vector (1, 0, 0), es
decir 1 m/s en dirección x.

 fixedWalls son las otras 3 paredes. Para la velocidad es (0,0,0), es decir estas paredes no se mueven.

 frontAndBack son las paredes de atrás y adelante en z donde no se resuelven las ecuaciones de
transporte. Esto se le indica al programa con la palabra clave empty.

El contenido de los archivos U (velocidad) y p (presión) se muestran de izquierda a derecha a continuación:

En la carpeta constant, abrimos el archivo transportProperties y establecemos el valor de viscosidad


cinemática 𝜐 (nu) de 0,01 m2/s. Este es un valor arbitrario para este tutorial. En la práctica la viscosidad
se encuentra tabulada y depende del tipo de fluido y la temperatura. Para el agua y el aire se presentan a
continuación dichas viscosidades:

Curso básico dinámica de fluidos computacional con OpenFOAM 13


Tabla 3.1. Propiedades del aire y agua a presión atmosférica. Adaptado de [1].

3.4 Simulación

En la carpeta cavity/system hay 3 archivos:


o controlDict: controla los parámetros de inicio/fin de la simulación.
o fvSchemes: controla los esquemas de discretización de cada término de las ecuaciones de transporte.
o fvSolution: controla los algoritmos de solución de los sistemas de ecuaciones.

En este tutorial solo modificaremos una línea del archivo controlDict:

endTime 20; //Se supone que en 20 segundos el sistema llega a estado estable

Para correr la simulación abrimos una terminal (CTRL+ALT+t) y escribimos las 2 líneas siguientes, dándole
enter al final de cada línea.

cd cavity

icoFoam

3.5 Post-procesado

0. En una terminal escribimos paraview y luego enter para correr ese programa. Le damos abrir,
seleccionamos el archivo “reporteBlockMesh” y después le indicamos a Paraview que el archivo
corresponde al formato de OpenFOAM.

1. Luego hacemos click en “Apply” para cargar el caso en el programa.


Curso básico dinámica de fluidos computacional con OpenFOAM 14
0

4 3 2

9
6 7 8
10

2. Al hacer click en el icono “Edit view options” seleccionamos la opción “Use parallel projection” para
utilizar proyección ortogonal.

3. Del menú desplegable donde dice “Outline”, seleccionamos “Wireframe” para verificar que la malla
tenga las 20 subdivisiones por lado. Del mismo menú se selecciona luego la opción “Surface”.

4. Al dar click en el icono de “Last Frame” vamos al último paso temporal simulado.

5. Del menú desplegable donde dice “Solid color”, seleccionamos (Es mejor que la opción
que muestra los valores de U en cada celda sin interpolar).

6. Al dar click en el icono “Toggle Color Legend Visibility” aparece la escala de valores que toma la
velocidad para el caso simulado (0 a 1 m/s).

7. Al dar click en el siguiente icono a la derecha, en “Edit Color Map” y luego en “Choose Preset” (icono
con corazón) se puede elegir un mejor esquema de colores, ej. “Blue to red Rainbow”.

8. Damos click en el icono de “Slice” con el fin de extraer el plano medio del dominio. En este caso el origen
del plano medio queda en (0.5, 0.5, 0.05) y el vector normal a este plano (0, 0, 1). Deseleccionamos “Show
plane” y luego click en “Apply”.

9. Al dar click en “Glyph”, seleccionamos en “Glyph type” la opción “2D Glyph”. Seleccionamos también
la opción off en “Scale mode”. Al seleccionar la casilla “Edit” podemos introducir manualmente un factor
de escalado para los vectores de velocidad, en este caso por ej. 0.2. Al dar click en “Apply” finalmente nos
muestra la distribución vectorial de la velocidad.

Curso básico dinámica de fluidos computacional con OpenFOAM 15


10. Borramos el anterior “Glyph” desde el “Pipeline browser” y luego damos click en el icono de “Stream
tracer”. En “Seed Type” seleccionamos “High resolution line source” e introducimos las coordenadas del
punto 1 (0.5, 0, 0.05) y del punto 2 (0.5, 1, 0.05). Al dar click en “Apply” se obtienen las líneas de corriente
para este problema.

11. Para obtener las curvas de velocidad borramos primero el “Streamtracer” y el “Slice” previo que había
en el “Pipeline browser”. Luego vamos al menú “Filters > Data Analysis > Plot over line”. (a veces aparece
también en el menú “Filters > Recent”). Introducimos entonces las coordenadas de dos puntos, Punto 1
(0, 0.5, 0) y punto 2 (1, 0.5, 0), que forman la línea horizontal. En la parte donde dice “Line series”
seleccionamos solamente la velocidad en y, U(1). Luego se hace click en “Apply”.

12. Creamos un archivo de texto llamado datasetRe100-x-Uy.csv con los datos de la simulación previa
reportados [3] en la tabla 3.2.

13. Abrimos en Paraview el archivo datasetRe100-x-Uy.csv y damos click en “Apply”. Volvemos a la gráfica
de velocidad en y respecto a la coordenada en x que teníamos del paso 11 y activamos la visibilidad de los
datos que acabamos de abrir en el “pipeline browser” (es decir pasar de --> ). Ambas gráficas, la
numérica de esta simulación y la del estudio previo se superponen.

Curso básico dinámica de fluidos computacional con OpenFOAM 16


Tabla 3.2. Datos de 14. Para los datos recién cargados las propiedades se configuran como se
simulación reportados muestra a continuación:
por [3] para Re =100.
x,Uy
1,0
0.9688,-0.05906
0.9609,-0.07391
0.9531,-0.08864
0.9453,-0.10313
0.9063,-0.16914
0.8594,-0.22445
0.8047,-0.24533
0.5000,0.05454
0.2344,0.17527
0.2266,0.17507
0.1563,0.16077
0.0938,0.12317
0.0781,0.10890 Con esto queda lista la comparación de Uy (línea continua) con los datos
0.0703,0.10091 previos (puntos cuadrados). Esta comparación se muestra más abajo. Se
0.0625,0.09233 puede observar que la simulación actual coincide razonablemente bien con
0,0 los datos previos.

3.6 Referencias

[1] Potter, M. C y Wiggert, D. C. Mecánica de fluidos. 3ra edición, 2002. Ed Thomson.


[2] Manual de usuario de OpenFOAM: http://openfoam.org/docs/user/
[3] Ghia, U., Ghia, K. N. y Shin, T. C. High-Re solutions for incompressible flow using the Navier-stokes
equations and multigrid method. Journal of computational physics, vol 48, 1982, pp 387-411.

Curso básico dinámica de fluidos computacional con OpenFOAM 17


4. Tutorial vórtice de Von-Kárman
Curso dinámica de fluidos computacional

4.1 Objetivos

 Entender y utilizar la herramienta blockMesh para generar mallados en OpenFOAM.


 Evaluar numéricamente los coeficientes de arrastre y sustentación de una superficie aerodinámica.

4.2 Problema

La geometría a simular corresponde a un canal en el que se coloca una barra de diámetro D = 1 cm y se


somete a un flujo de aire a 30°C, a una velocidad de 0,16 m/s (Re=100). Las dimensiones A, B y C
corresponden a 10D, 3D y 20D respectivamente. En estas condiciones se producen periódicos
desprendimientos de vórtices, llamados vórtices de Von-Kárman. Se pide:

(1) Estimar la frecuencia esperada


de desprendimiento de vórtices
basada en el número de Strouhal.

(2) Determinar numéricamente la


frecuencia de desprendimiento y el
coeficiente de arrastre.
Compararlos con valores teóricos.

4.3 Preprocesado

En esta simulación se utilizara el solucionador icoFoam que permite resolver flujos transitorios isotérmicos
e incompresibles en régimen laminar. El paso temporal máximo en este problema se evalúa a partir de la
frecuencia estimada de desprendimiento de vórtices, ya que existe una relación experimental entre el
número adimensional de Strouhal (St) y el Reynolds (Re) Figura 4.1. En un amplio rango de Re, el St es
cercano a 0.2 por lo que utilizaremos este valor para la estimación. Despejando la frecuencia f de la
definición de St:
𝑚
𝑆𝑡 𝑈 0,2 𝑥 0,16 1
𝑠
𝑓= = = 3,2 𝐻𝑧 ⟹ 𝑇 = = 0,3125 𝑠
𝐷 0,01 𝑚 𝑓

Esto quiere decir que en un periodo de 0,3125 s aprox. se producirá el desprendimiento de un vórtice.
Para que la simulación capture adecuadamente este fenómeno se necesitan entre 20 y 25 pasos
temporales, por tanto

𝛿𝑡𝑚𝑎𝑥,𝑆𝑡 = 0,3125 𝑠⁄25 = 0,0125 𝑠

Este delta de tiempo máximo nos da una idea de que valor colocar al inicio de la simulación. Sin embargo
hay que tener en cuenta que es posible que sea muy alto para el criterio del número de Courant.
Curso básico dinámica de fluidos computacional con OpenFOAM 18
Figura 4.1. St vs Re experimental para un cilindro [1].

4.3.1 Mallado

La estrategia consiste en dividir en 2 partes el dominio y a su vez cada parte en 10 bloques hexaédricos
(numerados del 0 al 9 en la parte superior y del 10 al 19 en la inferior) en los que es más fácil establecer
otras subdivisiones y longitudes, Figura 4.2. En ambos diagramas todos los vértices han sido numerados
del 1 al 63. Cada vértice tiene 2 números uno encima del otro. El de arriba corresponde a la cara frontal
del hexaedro y el de abajo corresponde a la cara de atrás (ambas caras se superponen en la vista mostrada).

El archivo blockMeshDict en la carpeta constant/polyMesh contiene la información de las tablas 4.1 a 4.4
con la estructura de archivo vista en clase. Al principio del archivo se debe agregar la línea
convertToMeters 0.01 para un correcto escalado de unidades cm. Luego se ejecuta blockMesh para crear
la malla y luego checkMesh para verificar que se ha creado correctamente.

4.3.2 Condiciones iniciales, de borde y propiedades del fluido

Las condiciones de borde se resumen en la tabla a la Frontera Presión (p) Velocidad (U)
derecha. Los valores internos iniciales de velocidad
y presión en este caso son cero. La viscosidad entrada Zero gradient Fixed value 0.16
cinemática (nu) de 1,6 x 10-5 m2/s (tabla 3.1) se salida Fixed value 0 Zero gradient
establece en el archivo transportProperties de la pared Zero gradient Fixed value 0
carpeta constant. cilindro Zero gradient Fixed value 0
frontAndBack empty empty

Curso básico dinámica de fluidos computacional con OpenFOAM 19


Figura 4.2 Estrategia de mallado para el dominio de este problema.

Vértices parte superior (y positivo)


z = -0.5 z = 0.5

(0.5 0 -0.5) //0 (0.5 0 0.5) //19


(1 0 -0.5) //1 (1 0 0.5) //20
(20 0 -0.5) //2 (20 0 0.5) //21
(20 0.707107 -0.5) //3 (20 0.707107 0.5) //22
(0.707107 0.707107 -0.5) //4 (0.707107 0.707107 0.5) //23
(0.353553 0.353553 -0.5) //5 (0.353553 0.353553 0.5) //24
(20 5 -0.5) //6 (20 5 0.5) //25
(0.707107 5 -0.5) //7 (0.707107 5 0.5) //26
(0 5 -0.5) //8 (0 5 0.5) //27
(0 1 -0.5) //9 (0 1 0.5) //28
(0 0.5 -0.5) //10 (0 0.5 0.5) //29
(-0.5 0 -0.5) //11 (-0.5 0 0.5) //30
(-1 0 -0.5) //12 (-1 0 0.5) //31
(-3 0 -0.5) //13 (-3 0 0.5) //32
(-3 0.707107 -0.5) //14 (-3 0.707107 0.5) //33
(-0.707107 0.707107 -0.5) //15 (-0.707107 0.707107 0.5) //34
(-0.353553 0.353553 -0.5) //16 (-0.353553 0.353553 0.5) //35
(-3 5 -0.5) //17 (-3 5 0.5) //36
(-0.707107 5 -0.5) //18 (-0.707107 5 0.5) //37

Curso básico dinámica de fluidos computacional con OpenFOAM 20


Vértices parte inferior (y negativo)

z = -0.5 z = 0.5

(0.353553 -0.353553 -0.5) //38 (5) (0.353553 -0.353553 0.5) //51 (24)
(0.707107 -0.707107 -0.5) //39 (4) (0.707107 -0.707107 0.5) //52 (23)
(20 -0.707107 -0.5) //40 (3) (20 -0.707107 0.5) //53 (22)
(20 -5 -0.5) //41 (6) (20 -5 0.5) //54 (25)
(0.707107 -5 -0.5) //42 (7) (0.707107 -5 0.5) //55 (26)
(0 -5 -0.5) //43 (8) (0 -5 0.5) //56 (27)
(0 -1 -0.5) //44 (9) (0 -1 0.5) //57 (28)
(0 -0.5 -0.5) //45 (10) (0 -0.5 0.5) //58 (29)
(-0.353553 -0.353553 -0.5) //46 (16) (-0.353553 -0.353553 0.5) //59 (35)
(-0.707107 -0.707107 -0.5) //47 (15) (-0.707107 -0.707107 0.5) //60 (34)
(-3 -0.707107 -0.5) //48 (14) (-3 -0.707107 0.5) //61 (33)
(-3 -5 -0.5) //49 (17) (-3 -5 0.5) //62 (36)
(-0.707107 -5 -0.5) //50 (18) (-0.707107 -5 0.5) //63 (37)

Tabla 4.1. Listado de vértices para el mallado.

Bloques (Blocks) hexaédricos superiores

hex (5 4 9 10 24 23 28 29) (20 20 1) simpleGrading (1 1 1) //b0


hex (0 1 4 5 19 20 23 24) (20 20 1) simpleGrading (1 1 1) //b1
hex (1 2 3 4 20 21 22 23) (160 20 1) simpleGrading (2 1 1) //b2
hex (4 3 6 7 23 22 25 26) (160 40 1) simpleGrading (2 1 1) //b3
hex (9 4 7 8 28 23 26 27) (20 40 1) simpleGrading (1 1 1) //b4
hex (15 16 10 9 34 35 29 28) (20 20 1) simpleGrading (1 1 1) //b5
hex (12 11 16 15 31 30 35 34) (20 20 1) simpleGrading (1 1 1) //b6
hex (13 12 15 14 32 31 34 33) (40 20 1) simpleGrading (1 1 1) //b7
hex (14 15 18 17 33 34 37 36) (40 40 1) simpleGrading (1 1 1) //b8
hex (15 9 8 18 34 28 27 37) (20 40 1) simpleGrading (1 1 1) //b9

Bloques (Blocks) hexaédricos inferiores

hex (38 45 44 39 51 58 57 52) (20 20 1) simpleGrading (1 1 1) //b10


hex (0 38 39 1 19 51 52 20) (20 20 1) simpleGrading (1 1 1) //b11
hex (39 40 2 1 52 53 21 20) (160 20 1) simpleGrading (2 1 1) //b12
hex (42 41 40 39 55 54 53 52) (160 40 1) simpleGrading (2 1 1) //b13
hex (43 42 39 44 56 55 52 57) (20 40 1) simpleGrading (1 1 1) //b14
hex (47 44 45 46 60 57 58 59) (20 20 1) simpleGrading (1 1 1) //b15
hex (47 46 11 12 60 59 30 31) (20 20 1) simpleGrading (1 1 1) //b16
hex (48 47 12 13 61 60 31 32) (40 20 1) simpleGrading (1 1 1) //b17
hex (49 50 47 48 62 63 60 61) (40 40 1) simpleGrading (1 1 1) //b18
hex (50 43 44 47 63 56 57 60) (20 40 1) simpleGrading (1 1 1) //b19

Tabla 4.2. Listado de bloques (Blocks) para el mallado.

Curso básico dinámica de fluidos computacional con OpenFOAM 21


Bordes (edges) curvos parte superior Bordes (edges) curvos parte inferior

arc 0 5 (0.469846 0.17101 -0.5) arc 38 0 (0.469846 -0.17101 -0.5)


arc 5 10 (0.17101 0.469846 -0.5) arc 38 45 (0.17101 -0.469846 -0.5)
arc 1 4 (0.939693 0.34202 -0.5) arc 1 39 (0.939693 -0.34202 -0.5)
arc 4 9 (0.34202 0.939693 -0.5) arc 39 44 (0.34202 -0.939693 -0.5)
arc 19 24 (0.469846 0.17101 0.5) arc 19 51 (0.469846 -0.17101 0.5)
arc 24 29 (0.17101 0.469846 0.5) arc 51 58 (0.17101 -0.469846 0.5)
arc 20 23 (0.939693 0.34202 0.5) arc 20 52 (0.939693 -0.34202 0.5)
arc 23 28 (0.34202 0.939693 0.5) arc 52 57 (0.34202 -0.939693 0.5)
arc 11 16 (-0.469846 0.17101 -0.5) arc 11 46 (-0.469846 -0.17101 -0.5)
arc 16 10 (-0.17101 0.469846 -0.5) arc 46 45 (-0.17101 -0.469846 -0.5)
arc 12 15 (-0.939693 0.34202 -0.5) arc 12 47 (-0.939693 -0.34202 -0.5)
arc 15 9 (-0.34202 0.939693 -0.5) arc 47 44 (-0.34202 -0.939693 -0.5)
arc 30 35 (-0.469846 0.17101 0.5) arc 30 59 (-0.469846 -0.17101 0.5)
arc 35 29 (-0.17101 0.469846 0.5) arc 59 58 (-0.17101 -0.469846 0.5)
arc 31 34 (-0.939693 0.34202 0.5) arc 31 60 (-0.939693 -0.34202 0.5)
arc 34 28 (-0.34202 0.939693 0.5) arc 60 57 (-0.34202 -0.939693 0.5)

Tabla 4.3. Listado de bordes (edges) curvos para el mallado.

Pared (type wall) Cilindro (type wall) Salida

Pared de arriba Pared de abajo Cara superior Cara inferior (type patch)

(7 8 27 26) (41 42 55 54) (10 5 24 29) (0 38 51 19) (2 3 22 21)


(6 7 26 25) (42 43 56 55) (5 0 19 24) (38 45 58 51) (3 6 25 22)
(8 18 37 27) (43 50 63 56) (16 10 29 35) (45 46 59 58) (40 2 21 53)
(18 17 36 37) (50 49 62 63) (11 16 35 30) (46 11 30 59) (41 40 53 54)

frontAndBack (type empty)


Entrada
(type patch)
Cara frontal Cara trasera

Parte Parte Parte Parte


(14 13 32 33) superior inferior superior inferior
(17 14 33 36)
(48 13 32 61) (5 4 9 10) //fb0 (38 45 44 39) //fb10 (24 23 28 29) //bb0 (51 58 57 52) //bb10
(49 48 61 62) (0 1 4 5) //fb1 (0 38 39 1) //fb11 (19 20 23 24) //bb1 (19 51 52 20) //bb11
(1 2 3 4) //fb2 (39 40 2 1) //fb12 (20 21 22 23) //bb2 (52 53 21 20) //bb12
(4 3 6 7) //fb3 (42 41 40 39) //fb13 (23 22 25 26) //bb3 (55 54 53 52) //bb13
(9 4 7 8) //fb4 (43 42 39 44) //fb14 (28 23 26 27) //bb4 (56 55 52 57) //bb14
(15 16 10 9) //fb5 (47 44 45 46) //fb15 (34 35 29 28) //bb5 (60 57 58 59) //bb15
(12 11 16 15) //fb6 (47 46 11 12) //fb16 (31 30 35 34) //bb6 (60 59 30 31) //bb16
(13 12 15 14) //fb7 (48 47 12 13) //fb17 (32 31 34 33) //bb7 (61 60 31 32) //bb17
(14 15 18 17) //fb8 (49 50 47 48) //fb18 (33 34 37 36) //bb8 (62 63 60 61) //bb18
(15 9 8 18) //fb9 (50 43 44 47) //fb19 (34 28 27 37) //bb9 (63 56 57 60) //bb19

Tabla 4.4. Listado de las fronteras (boundary) para el mallado.

Curso básico dinámica de fluidos computacional con OpenFOAM 22


4.4 Simulación

Antes de correr la simulación se debe verificar que en el controlDict haya un endTime de 10 segundos con
un deltaT de 0.0005 y un writeInterval de 500 timestep. Segundo, se copia lo siguiente al final del archivo
controlDict

functions
{
forceCoeffs
{
type forceCoeffs;
functionObjectLibs ("libforces.so");
outputControl timeStep;
outputInterval 25;
patches (cilindro); //El nombre de la superficie sobre la cual se calculan los coeficientes
pName p;
UName U;
rhoName rhoInf;
log true;
liftDir (0 1 0); //Dirección del vector de sustentación
dragDir (1 0 0); //Dirección del vector de arrastre
CofR (0 0 0);
pitchAxis (0 0 0);
magUInf 0.16; //Magnitud de la velocidad
rhoInf 1.164; //La densidad
lRef 0.01; //El diámetro del cilindro es 0.01 m
Aref 0.0001; //La profundidad en z es 0.01 m, el diámetro del cilindro es 0.01 m
}
}

Esta rutina calcula los coeficientes de arrastre Cd y de sustentación CL mientras corre la simulación. Una
vez hechas estas modificaciones, se arranca la simulación al ejecutar icoFoam desde una teminal estando
en la carpeta de trabajo.

4.5 Post-procesado

Abrimos este caso en paraview y mostramos la distribución de velocidad en el tiempo cero. Al darle “play”
podemos ver la evolución del flujo respecto al tiempo. A los 4 segundos de simulación aproximadamente,
el flujo se desestabiliza y empieza la formación de los vórtices. En la figura 4.3 a la izquierda se muestran
instantáneas en 4 y 6 segundos respectivamente.

Los coeficientes Cd y CL quedan grabados en el archivo forceCoeffs.dat que se encuentra en la carpeta


postProcessing/forceCoeffs/0. Este archivo se puede abrir en Excel y obtener una gráfica como la que
aparece en la Figura 4.4. En esta figura se ve que el coeficiente de sustentación tiene forma sinusoidal en
el estado estable. De esta onda se puede obtener la frecuencia f a la cual se desprenden los vórtices y de
esta manera se puede conocer el número real de Strouhal para este caso.

Curso básico dinámica de fluidos computacional con OpenFOAM 23


Figura 4.3. Izquierda arriba, velocidad a los 4 segundos de simulación. Izquierda abajo, velocidad a los 6
segundos de simulación. Derecha: Cd experimental en función de Re [2].

Figura 4.4. Cd y CL graficados en función del tiempo.

4.6 Referencias

[1] Marks standard Handbook for mechanical engineers, 11 edition. 2007. McGraw Hill.
[2] White Frank. Viscous fluid flow. 2nd edition. 1991. McGraw Hill.
Curso básico dinámica de fluidos computacional con OpenFOAM 24
5. Tutorial transporte temperatura
Curso dinámica de fluidos computacional

5.1 Objetivos

 Simular en régimen turbulento con el solucionador pisoFoam utilizando el modelo k-epsilon.


 Calcular el perfil de temperatura a partir del perfil de velocidad con el solucionador
scalarTransportFoam.

5.2 Problema

La geometría a simular corresponde a un canal 2D de h = 25.4 mm de alto que se expande abruptamente


a uno de 2h, de modo que se generan zonas de recirculación ante el paso de fluido de la zona más angosta
a la más amplia.

De acuerdo a los experimentos de Armaly et al [1], en este tipo de configuración es posible predecir la
longitud Xr del torbellino principal en base al número de Reynolds, Re, Grafico 5.1, tanto para el caso
laminar como para el régimen turbulento (Re>1200 aprox). Asumiendo que el fluido de tiene una
viscosidad cinemática 1𝑥10−5 𝑚2 /𝑠 encontrar:

(1) La distancia Xr y compararla con el valor experimental. Asumir longitud característica L igual a 2h
para una velocidad media de entrada de 1 m/s.
(2) La distribución de temperatura al interior del dominio en el estado estable si suponemos que la
pared superior está a 40°C y el resto a 20°C. Asuma coeficiente de difusión igual a 0.01 m2/s.

5.3 Preprocesado
𝑚
𝑈𝐿 1 𝑥 0.0508 𝑚
𝑠
Calculo del Reynolds 𝑅𝑒 = = = 5080
𝜐 1𝑥10−5 𝑚2 /𝑠

Como Re es 5080, el fluido en este caso será turbulento. Dado que el fluido es transitorio, incompresible,
turbulento y Newtoniano, se elige el solucionador pisoFoam para resolver este problema. Este
solucionador utiliza el algoritmo PISO para resolver las ecuaciones de transporte de velocidad, presión y
las de turbulencia en caso de existir.
Curso básico dinámica de fluidos computacional con OpenFOAM 25
Grafico 5.1. Longitud experimental de las zonas de recirculación en función del Re [1].

5.3.1 Mallado

La malla de este tutorial se encuentra en la carpeta constant/polymesh de la carpeta pitz. La estrategia de


mallado en este dominio consistió en realizar 13 subdivisiones hexaédricas como se muestra a
continuación:

El segmento 1-7 mide 20,6 mm, el 4-10 mide 206 mm y el 10-16 mide 84 mm todos en dirección x mientras
que el segmento 16-21 mide 33.2 mm en dirección Y. El archivo blockMeshDict no requiere de ninguna
modificación especial, por tanto completamos el mallado al ejecutar blockMesh en una terminal (estando
Curso básico dinámica de fluidos computacional con OpenFOAM 26
dentro de la carpeta pitz). Ejecutamos checkMesh en la terminal para obtener información detallada de la
malla.

5.3.2 Condiciones de iniciales, de borde y propiedades del fluido

En la carpeta 0 se deben haber 6 archivos: p, U, T, nut, k y epsilon. Los 3 últimos archivos mencionados
permiten configurar el régimen de turbulencia al interior del dominio. El contenido de estos archivos se
muestra en las tablas 5.1 y 5.2.

Presión (p) Velocidad (U) Temperatura (T)

dimensions [0 -2 -2 0 0 0 0]; [0 1 -1 0 0 0 0]; [0 0 0 1 0 0 0];

internalField uniform 0; uniform (0 0 0); uniform 293.15;

type fixed value; type fixedValue;


inlet type zeroGradient;
value uniform (1 0 0); value uniform 293.15;

type fixedValue; type zeroGradient;


outlet type zeroGradient;
value uniform 0;

type fixed value; type fixedValue;


upperWall type zeroGradient;
value uniform (0 0 0); value uniform 313.15;

type fixed value; type fixedValue;


type zeroGradient;
lowerWall value uniform (0 0 0); value uniform 293.15;

frontAndBack empty; empty; empty;

Tabla 5.1 Condiciones de borde en tiempo cero para presión, velocidad y temperatura.

Los valores iniciales de k, nut y épsilon se estiman con las expresiones que se muestran a continuación:

𝑘 = 1.5(𝑈𝐼)2 = 1.5(1 𝑚/𝑠 × 0.05)2 = 0.00375 𝑚2 /𝑠 2


3/2 3/2
𝐶µ 𝑘 0.09 × 0.00375
epsilon = = = 0.01627 𝑚2 /𝑠3
𝑙𝑠 0.05 × 0.0254
Donde

 I es la intensidad de la turbulencia, normalmente de 5 a 20%,


 ls es la longitud de la escala de turbulencia, en este caso es alrededor del 5% de la altura del canal
de entrada,
 𝐶µ es una constante del modelo k-epsilon y es igual a 0.09.

Curso básico dinámica de fluidos computacional con OpenFOAM 27


Energía cinética turbulenta Viscosidad cinemática
Disipación de la ECT (epsilon)
-ECT- (k) turbulenta (nut)

dimensions [0 2 -2 0 0 0 0]; dimensions [0 2 -3 0 0 0 0]; dimensions [0 2 -1 0 0 0 0];

internalField uniform 0.00375; internalField uniform 0.01627; uniform 0;

type fixedValue; type fixedValue; type calculated;


inlet
value uniform 0.00375; value uniform 0.01627; value uniform 0;

type calculated;
outlet type zeroGradient; type zeroGradient;
value uniform 0;

type kqRWallFunction; type nutkWallFunction;


type epsilonWallFunction;
upperWall value uniform value uniform 0;
value uniform 0.01627;
0.00375;

type kqRWallFunction; type epsilonWallFunction; type nutkWallFunction;


lowerWall value uniform 0;
value uniform 0.00375; value uniform 0.01627;

frontAndBack empty; empty; empty;

Tabla 5.2 Condiciones de borde en tiempo cero para las variables relacionadas con turbulencia: k, epsilon
y nut.

En la carpeta constant, abrimos el archivo transportProperties y colocamos el valor de viscosidad


cinemática 𝜐 (nu) de 1x10-5 m2/s. Los archivos turbulenceProperties y RASProperties en este caso no
necesitan ser cambiados.

5.3.3 Controles de inicio de simulación, discretización y solución

En el controlDict verificamos que

endTime 2; // La simulación termina a los dos segundos


deltaT 0.0001; // El paso temporal
writeControl timeStep; // El control de escritura viene dado por el paso temporal
writeInterval 1000; // Cada 1000 pasos temporales hay escritura de avances (cada 0,1 s)

Estos parámetros permiten cumplir con el criterio del número de Courant menor a 1 (para que la
simulación sea estable) y también evitan escribir muy seguido los avances de la simulación. Los otros
archivos de la carpeta system no requieren modificación para este tutorial.

Curso básico dinámica de fluidos computacional con OpenFOAM 28


5.4 Simulación

Para correr la simulación abrimos una terminal y accedemos a la carpeta pitz donde tenemos nuestro caso
al escribir:

cd pitz

Y luego ejecutamos pisoFoam. La simulación debe arrancar y toma tiempo considerable en terminar. Se
recomienda correr en paralelo ejecutando en una terminal:

decomposePar

mpirun –np 2 pisoFoam –parallel

Donde 2 es el número de núcleos de nuestro procesador (este número debe ser coherente con lo escrito
en el archivo decomposeParDict de la carpeta system). Una vez finalizada la simulación el dominio se
reconstruye utilizando el siguiente comando en la terminal:

reconstructPar

5.5 Post-procesado

Abrimos el caso pitz en Paraview. Después de indicarle a Paraview que el archivo corresponde al formato
de OpenFOAM, seleccionamos todas las casillas en “Mesh Regions” y luego click en “Apply”.

Vamos al menú “filters > Common > Stream tracer”. Desde la pestaña propiedades seleccionamos en “seed
type” la opción “Line Source” e introducimos las coordenadas del punto 1 (0.1, -0.1, 0) y del punto 2 (0.1,
0.1, 0). Al dar click en “Apply” se obtienen las líneas de corriente para este problema.

Para obtener la regla sobre el dominio como se muestra en la figura anterior, se hace clic sobre el “stream
tracer” que aparece como un icono verde a la izquierda en el “pipeline browser”. Luego se selecciona la
opción “Show axis” en la pestaña Properties (parte inferior izquierda del paraview). De la figura se puede
ver que la zona de recirculación llega hasta 0,17 m en x para ese caso turbulento. De la Grafica 5.1 se
estima que X1/s es 6,5 aprox. para Re=5080. Como en este caso s = 0.0254 m entonces el X1 experimental

Curso básico dinámica de fluidos computacional con OpenFOAM 29


es 0,1651 m. Este valor está bastante cerca al valor que entrega la simulación. Cabe anotar que en el caso
laminar la correlación es mucho mejor que en el caso turbulento.

5.5.1 Cálculo de la temperatura

Se copia el archivo de velocidad (U) del último tiempo simulado (2 s) del caso pitz a la carpeta 0 del caso
pitzT. Esta carpeta contiene los archivos necesarios para una segunda simulación en la que se va a
determinar la distribución de temperaturas asumiendo que el fluido tiene una velocidad que no cambia
con el tiempo.

Para esta segunda simulación se utiliza el solucionador scalarTransportFoam. Este solver utiliza el
algoritmo SIMPLE en lugar del PISO para resolver/alcanzar convergencia en la solución de la ecuación de
transporte. Esa ecuación es escalar genérica la cual se puede utilizar para resolver el transporte de energía
al interior del dominio, transporte de fracción másica o concentración de especies entre otras aplicaciones.
La variable transportada en este solver se llama convenientemente “T” y el coeficiente de difusión “DT”.

Para este caso en el archivo transportProperties de la carpeta pitzT/constant, verificamos que el


coeficiente de difusión de la temperatura sea:

DT DT [ 0 2 -1 0 0 0 0 ] 0.01;

La simulación se puede ejecutar desde una nueva terminal:

cd pitzT

blockMesh

scalarTransportFoam

Luego de correr algunas iteraciones la simulación converge y se obtiene el siguiente perfil de temperatura:

5.6 Referencia

[1] Armaly, B.F., Dursts, F., Pereira, J. F. C. y Schonung, B. Experimental and theoretical investigation of
backward-facing step flow. Journal of Fluid Mechanics, vol 127, 1983, pp 473-496.
Curso básico dinámica de fluidos computacional con OpenFOAM 30
6. Tutorial rompimiento de represa
Curso dinámica de fluidos computacional

6.1 Objetivos

 Utilizar el solucionador interFoam para problemas de dos fases.


 Iniciar la simulación con valores diferentes a cero para las variables de interés.

6.2 Problema

La geometría a simular corresponde a una


columna de agua represada que
súbitamente es liberada al interior de un
tanque lleno de aire (caso bidimensional).
La temperatura de ambos fluidos es de
20°C.

Para este problema se pide hallar:

(1) La distancia máxima que alcanza el


agua sobre la pared derecha.
(2) El máximo número Reynolds del agua.
(3) El tiempo en el que el sistema alcanza
el estado estable.
(4) El nivel del agua en el equilibrio.

6.3 Preprocesado

El régimen laminar es una suposición razonable en este caso ya que el agua parte del reposo. Esta
suposición debe ser validada en la etapa de post-procesado. Por tanto en esta simulación se utilizara el
solucionador interFoam que permite resolver flujos transitorios isotérmicos e incompresibles en régimen
laminar para dos fluidos separados por una interface definida.

6.3.1 Mallado

La estrategia de esa malla se presenta en la Figura 6.1. Consiste básicamente en dividir en 5 bloques
hexaédricos el dominio, siguiendo un sentido anti horario para numerar los puntos (vértices) en cada
bloque empezando por el inferior izquierdo. Esta malla va en dirección Z de -1 a 1 (2D). La malla se genera
abriendo una terminal (CTRL + ALT + t) y escribiendo las siguientes líneas seguidas de enter:

cd damBreak
blockMesh

Curso básico dinámica de fluidos computacional con OpenFOAM 31


Figura 6.1. Estrategia de mallado y fronteras para este problema.

6.3.2 Condiciones iniciales, de borde y propiedades del fluido

El archivo alpha.water se crea manualmente copiando el archivo alpha.water.org y quitándole el .org del
nombre, todo esto dentro de la carpeta cero. El archivo .org es una copia de seguridad que necesitamos
del archivo alpha.water en caso que nos equivoquemos al configurar el fluido al interior del dominio con
setFields (más adelante se explica esto).

Las condiciones de iniciales (tiempo cero) y de borde se resumen en la Tabla 6.1. La frontera superior
(atmosphere) necesita permitir flujos de aire hacia dentro y hacia afuera del dominio mientras alcanza
estado estable. Por tanto se deben usar condiciones de borde que funcionen de ambas maneras
dependiendo del caso y que garantice la estabilidad de la simulación.

Para la presión (p_rgh): Se establece “totalPressure” que es una condición del tipo fixedValue que evalúa
la presión a partir de una presión total p0 y una velocidad local U.

Para la velocidad (U): Se establece “pressureInletOutletVelocity”, la cual es una condición:

 zeroGradient cuando hay fluido que sale del dominio.


 fixedValue cuando hay fluido que entra al dominio (solo se aplica a la componente tangencial de
la velocidad)

Curso básico dinámica de fluidos computacional con OpenFOAM 32


Para la fracción de fase (alpha.water): Se establece “inletOutlet”, la cual es una condición:

 zeroGradient cuando hay fluido que sale del dominio.


 fixedValue cuando hay fluido que entra al dominio.

Por otra parte, para las paredes se establece la condición fixedFluxPressure para la presión, la cual calcula
el gradiente normal de presión a partir del gradiente local de densidad.

Fracción de fase
Presión (p_rgh) Velocidad (U)
(alpha.water)

dimensions [1 -1 -2 0 0 0 0]; [0 1 -1 0 0 0 0]; [0 0 0 0 0 0 0];

internalField
uniform 0; uniform (0 0 0); uniform 0;
(Campo interno)

boundaryField Fracción de fase


Presión (p_rgh) Velocidad (U)
(Fronteras) (alpha.water)

type fixedFluxPressure; type fixedValue;


leftWall value uniform 0; value uniform (0 0 0); type zeroGradient;

type fixedFluxPressure; type fixedValue;


rigthWall type zeroGradient;
value uniform 0; value uniform (0 0 0);

type fixedFluxPressure; type fixedValue;


lowerWall type zeroGradient;
value uniform 0; value uniform (0 0 0);

type totalPressure; type pressureInletOutletVelocity ; type inletOutlet;


p0 uniform 0; value uniform (0 0 0) ; inletValue uniform 0;
U U; value uniform 0;
phi phi;
atmosphere
rho rho;
psi none;
gamma 1;
value uniform 0;

defaultFaces type empty; type empty; type empty;

Tabla 6.1 Condiciones de borde en tiempo cero.

La viscosidad cinemática (nu) para el aire a 20°C es 1,51 x 10 -5 m2/s y para el agua es 1,007 x 10-6 m2/s,
tabla 3.1. De la misma tabla se obtiene que la densidad (rho) es 1,204 kg/m 3 para el aire y 998,2 kg/m3
para el agua. Estas propiedades se establecen en el archivo transportProperties de la carpeta constant
como se muestra en la Figura 6.2.

Curso básico dinámica de fluidos computacional con OpenFOAM 33


Figura 6.2 Propiedades del fluido tal como se introducen en el archivo transportProperties.

La última propiedad (sigma) corresponde a la tensión superficial del agua con el aire a 20°C, tomada de la
tabla 6.2.

Tabla 6.2 Tensión superficial para interface agua-aire. Adaptado de [2].

6.3.3 Campo inicial de agua

Según la tabla 6.1 la fracción de fase de agua, alpha.water, es cero internamente. Esto no es correcto ya
que en este caso:
1 𝑐𝑢𝑎𝑛𝑑𝑜 ℎ𝑎𝑦 𝑎𝑔𝑢𝑎
𝛼.𝐻2𝑂 = {
0 𝑐𝑢𝑎𝑛𝑑𝑜 𝑛𝑜 ℎ𝑎𝑦 𝑎𝑔𝑢𝑎 (ℎ𝑎𝑦 𝑎𝑖𝑟𝑒)

Para que el archivo alpha.water de la carpeta cero tenga en cuenta la porción interna que ocupa el agua
represada, se debe entonces crear un archivo llamado setFieldsDict en la carpeta system con el contenido
mostrado en la Figura 6.3. El par de coordenadas que aparecen después de “Box”, figura 6.3, corresponden
al punto inicial y final de un vector que une los vértices extremos del hexaedro que contiene el agua.

Curso básico dinámica de fluidos computacional con OpenFOAM 34


Una vez creado el archivo alpha.water en la carpeta 0 tal como se describe en la Tabla 6.1 y el archivo
setFieldsDict en la carpeta system tal como se muestra en la Figura 6.3, se procede a ejecutar en la terminal
el siguiente comando:

setFields

Después de esto el archivo alpha.water se actualiza con los valores del agua correctos.

Encabezado del archivo

Valor por defecto de alpha.water

Coordenadas punto inicial y


final de vector que une los
vértices extremos del hexaedro
que contiene al agua

Nuevo valor de alpha.water


para el hexaedro dibujado

Figura 6.3 Contenido del archivo setFieldsDict de la carpeta system.

6.4 Simulación

Antes de correr la simulación se debe verificar la existencia del archivo de gravedad (g) en la carpeta
constant.

Curso básico dinámica de fluidos computacional con OpenFOAM 35


Se deben además hacer algunas modificaciones al archivo controlDict tal como se muestra en la Figura 6.4.
Una vez hechas estas modificaciones, se arranca la simulación al ejecutar interFoam desde una terminal
estando en la carpeta de trabajo.

Inicialmente 4 segundos de simulación

deltaT variable de modo que Co < maxCo

Figura 6.4 Contenido del archivo controlDict de la carpeta system.

6.5 Post-procesado

Abrimos el caso simulado en paraview. Mostramos la distribución de alpha.water en el tiempo cero. Al


darle “play” podemos ver la evolución del flujo de agua respecto al tiempo.

Curso básico dinámica de fluidos computacional con OpenFOAM 36


Aproximadamente a los 0,45 s de simulación el agua alcanza un máximo sobre la pared derecha.
Visualmente se puede verificar que el agua alcanza a tocar la superficie superior del dominio. Esto se
puede confirmar con un “plot over line” sobre la pared derecha para el cual alpha.water @ 0,45 s =
0,0012186.

Para calcular el Reynolds efectivo vamos al menú “Filters > Common > Calculator”. En la pestaña Properties
introducimos la formula mostrada en la Figura 6.5. El Re puede entonces ser visualizado tal como se hace
con la velocidad o presión. (En este cálculo asumimos que la longitud característica de este problema es
igual al ancho del dominio).

Como se puede apreciar en la figura 6.5, el Re de cierta parte del fluido corresponde a régimen turbulento
por lo que, para mejorar los resultados, se debe correr la simulación con modelado de turbulencia.

Figura 6.5 Calculo del Reynolds efectivo para el agua.

Al dejar correr más tiempo la simulación se puede establecer que se alcanza estado estable en aprox. 30
s con un nivel de aprox. 0.1 m en y.

6.6 Referencias

[1] Manual de usuario de OpenFOAM: http://openfoam.org/docs/user/

[2] Vargaftik, N. B., Volkov, B. N., y Voljak, L. D. International tables of the surface tension of water. J. Phys.
Chem. Ref. Data, Vol 12, No 3, 1983.

Curso básico dinámica de fluidos computacional con OpenFOAM 37

También podría gustarte