Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción al CFD
Curso dinámica de fluidos computacional
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.
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).
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.
Todas las ecuaciones de transporte pueden ser escritas en forma generalizada como:
𝜕 𝜕 𝜕 𝜕
(𝜌φ) + (𝜌𝑢𝑖 φ) = (𝜌D φ) + 𝑆(
⏟ φ) ; 𝑖 = x, y, z (1.1)
⏟
𝜕𝑡 𝜕𝑥𝑖
⏟ 𝜕𝑥𝑖
⏟ 𝜕𝑥𝑖
(4)
(1) (2) (3)
𝜕𝜌 𝜕
+ (𝜌𝑢𝑖 ) = 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)
𝜕𝑥𝑖 𝑖
𝜕 𝜕 𝜕𝜏𝑖𝑗 𝜕𝑃
(𝜌𝑢𝑖 ) + (𝜌𝑢𝑖 𝑢𝑗 ) = − + 𝜌𝑔, 𝑖, 𝑗 = x, y, z (1.4)
𝜕𝑡 𝜕𝑥𝑖 𝜕𝑥𝑖 𝜕𝑥𝑗
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:
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:
Existen otras simplificaciones adicionales a esta ecuación, por ejemplo la ecuación de flujo estacionario
de Stokes y la ecuación de Euler.
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.
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
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).
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).
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:
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.
5. Seleccionamos "Creamos un disco virtual ahora" y clic en crear. Luego seleccionamos "VDI (VirtualBox
Disk Image) y clic en siguiente (next).
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.
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.
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.
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
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.
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.
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
source /opt/openfoam231/etc/bashrc
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:
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.
3.1 Objetivos
3.2 Problema
3.3 Preprocesado
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 /𝑠
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.
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.
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.
3.4 Simulación
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.
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.
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.
3.6 Referencias
4.1 Objetivos
4.2 Problema
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
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.
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
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)
Pared de arriba Pared de abajo Cara superior Cara inferior (type patch)
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.
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
5.2 Problema
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
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.
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.
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:
type calculated;
outlet type zeroGradient; type zeroGradient;
value uniform 0;
Tabla 5.2 Condiciones de borde en tiempo cero para las variables relacionadas con turbulencia: k, epsilon
y nut.
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.
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
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
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”.
DT DT [ 0 2 -1 0 0 0 0 ] 0.01;
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
6.2 Problema
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
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.
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)
internalField
uniform 0; uniform (0 0 0); uniform 0;
(Campo interno)
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.
La última propiedad (sigma) corresponde a la tensión superficial del agua con el aire a 20°C, tomada de la
tabla 6.2.
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.
setFields
Después de esto el archivo alpha.water se actualiza con los valores del agua correctos.
6.4 Simulación
Antes de correr la simulación se debe verificar la existencia del archivo de gravedad (g) en la carpeta
constant.
6.5 Post-procesado
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.
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
[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.