Está en la página 1de 23

Práctica 1

Enunciado
Considérese una boquilla con la geometría presentada en la figura, donde las medidas se
indican en milímetros. Se asume que por la entrada (inlet) se introduce agua con una velocidad
de 0.01 m/s. El conducto inferior está conectado a un depósito con una solución acuosa a
presión atmosférica, y la salida a la derecha está conectada con el exterior. Considerar un
problema bidimensional.

• ¿qué número de Reynolds caracteriza, a priori, el flujo en el estrechamiento?


• ¿qué condiciones de contorno son las adecuadas para el estudio de este problema?
• Diseñe una malla apta para el análisis del problema con OpenFOAM
• ¿Cuál es el incremento de tiempo máximo que, a priori, debe establecerse en el análisis?
• Implemente este caso para su estudio utilizando OpenFOAM
• ¿Cómo es el flujo en el conducto inferior en estas condiciones?

1
Archivos
Descargar los archivos de OpenFOAM de la práctica 1 y ponerlos en la carpeta run. Recuérdese
que está en el directorio de instalación de blueCFD, y luego dentro de ofuser-of5/run. De esta
manera al abrir el terminal de OpenFOAM (clicando acceso directo “blueCFD-Core 2017
terminal”), cambiando el directorio a ese directorio (ejecutando “cd $FOAM_RUN”), y luego
visualizando el contenido (ejecutando “ls”), podamos ver la carpeta de este problema
“Nozzle_case_OF5”.

Ahora cambiamos directorio hacia dentro del caso (ejecutando “cd Nozzle_case_OF5”):

Número de Reynolds
Debido a que se puede tratar como un flujo incompresible (agua a una velocidad claramente
inferior al número de Mach M<0.3), el flujo en el estrechamiento debe tener aproximadamente
una velocidad promedio calculada a partir de la conservación de masa (caudal igual en el “inlet”
y en el estrechamiento):

𝑄𝑄𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 = 𝑄𝑄𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 ⇒ Vinlet · Ainlet = Vestr · Aestr ⇒ Vestr = 0.01 · 200/20 = 0.1 m/s

Teniendo en cuenta que la viscosidad cinemática del agua es 10−6 𝑚𝑚2 /𝑠𝑠, y que se puede tomar
como distancia característica del estrechamiento la apertura del mismo (20 mm), el número de
Reynolds será:
𝑉𝑉 · 𝐿𝐿
𝑅𝑅𝑒𝑒 = = 0.1 · 0.02/10−6 = 2000
ν
Con lo cual el flujo puede considerarse laminar. Por tanto, en OpenFOAM se selecciona el solver
icoFoam (ver variable “application” en system/controlDict).

Definición de la geometría y mallado


Recordemos que la geometría y las directrices para el mallado a través de la utilidad de mallado
blockMesh se definen en un fichero llamado blockMeshDict. En la práctica introductoria vimos
que lo situamos dentro de la carpeta del caso en la carpeta “system/”, sin embargo, este fichero
también se puede localizar dentro de constant/polyMesh/”:

- 0/
o P
o U

2
- constant/
o polyMesh/
 blockMeshDict (opcional)
o transportProperties
- system/
o blockMeshDict (opcional)
o controlDict
o fvSchemes
o fvSolution

En esta práctica lo hemos localizado en este otro directorio. La especificación completa de este
fichero puede verse en la User Guide en (https://cfd.direct/openfoam/user-guide/v5-
blockMesh/#x25-1790005.3).

Abramos ahora con Notepad2 el archivo “contant/polyMesh/blockMeshDict”, y por otro el


archivo del enunciado, y fijémonos en la geometría del dominio computacional. Esto lo
podremos hacer yendo con el explorador de archivos de Windows o bien la terminal ejecutando:

lo cual nos abrirá directamente Notepad2 con dicho archivo abierto.

La geometría se ha dibujado de tal manera que cada cota queda parametrizada con una letra (A,
B, C,…). Con ello se pretende ilustrar cómo se puede definir una geometría de manera
paramétrica en blockMesh.

Al principio de blockMeshDict, podemos ver lo siguiente:

3
En primer lugar, podemos ver que utilizamos un factor de escala de 0.001, lo que quiere decir
que las coordenadas de cada punto quedarán multiplicadas por este valor. Por tanto, las
coordenadas de los vértices se van a introducir directamente en milímetros, pero la malla
posterior se generará en m (SI).

A continuación, vemos una serie de líneas acabadas en punto y coma, que comienzan con una
letra y luego un número (separado por un espacio). Cada una de estas líneas está asignando a
una variable (las letras) un valor (el número de la derecha).

Por último, aparecen una serie de líneas que también empiezan por unas letras (el nombre de
una variable), y a la derecha, en vez de un número, aparece “#calc” y luego una operación entre
paréntesis, por ejemplo el primero es “$D+$E”, lo cual realiza la operación de D+B y lo guarda
en DpE. Esta es la manera de operar con variables previamente definidas, a cuyo valor se accede
con el signo del dólar “$” delante del nombre de la variable.

A continuación, aparece la sección en donde se introducen los vértices (a la derecha aparece


una doble barra hacia la derecha que nos permite introducir comentarios en cualquier fichero
de entrada del OpenFOAM):

En esta ocasión, en vez de aparecer números explícitamente, lo que aparecen son los valores de
las variables anteriormente definidas. Esto lo que permite es que la generación de la geometría
y la malla sea paramétrica (cambiando simplemente un valor arriba permite cambiar
completamente la geometría y la malla). Esto es vital para realizar análisis paramétricos.

La lista de puntos recordemos que se numera empezando por 0. La correspondencia entre las
coordenadas y los puntos se puede ver en la siguiente imagen:

4
Donde p1(p2) indica que p1 es el número de vértice en z=0, y p2 (entre paréntesis) indica el
número de vértice en z=Z.

A continuación, se definen los bloques hexaédricos:

Donde debemos tener presente el criterio de ordenación de los vértices según reza en la User
Guide:

5
Y donde la correspondencia entre cada bloque y la geometría puede visualizarse en la siguiente
imagen:

Fijándonos en el criterio de ordenación de cada bloque podemos ver que la dirección “x” local
de cada bloque queda definida por los dos primeros vértices establecidos al definir el bloque. Es
decir, el eje “x” del bloque 1 es la dirección establecida por la línea entre vértices 1 y 3, el eje
“x” para el bloque 2 queda definido por la línea entre vértices 3 y 5. De igual manera, podemos
establecer la dirección “y” en cada bloque por los vértices primero y cuarto utilizados al definir
la lista de vértices. Así, la dirección “y” en el bloque 1 es la definida por la línea desde el vértice
1 hasta el vértice 0.

Nótese que en esta geometría, se ha de usar una progresión no constante del tamaño de los
elementos, de tal manera que logremos celdas lo más cuadradas posibles, y en donde la
transición de tamaño y forma de los elementos sea progresiva y suave. Para ello, hay que
cambiar los ratios de expansión de tamaño en los comandos “simpleGrading”, según se explica
en (https://cfd.direct/openfoam/user-guide/v5-blockMesh/#x25-1830135). Esto se puede
visualizar en el siguiente gráfico:

Por tanto, si el “expansion ratio” es menor que 1, el tamaño de las celdas es mayor al inicio del
eje local, si es 1 el tamaño de las celdas es uniforme, y si es mayor que 1 el tamaño de las celdas
al inicio del eje local es menor.

Seguidamente, hay que definir los contornos exteriores (ojo, los interiores son simples interfaces
y por tanto no hay que definir condiciones de contorno). Recordemos que cada contorno hay
que diferenciarlo por condiciones de contorno diferentes, y que un mismo contorno puede ser
disjunto (puede estar constituido por varias caras no adyacentes). Cada contorno tiene asignado
un tipo (ver https://cfd.direct/openfoam/user-guide/v5-boundaries/#x24-1720005.2.1), que es

6
necesario para tipificar el tipo de contorno (patch es un contorno genérico, y wall es un contorno
donde se pueden especificar modelos de pared, que ya veremos). Hay que recordar también
que la definición de cada cara a través de los vértices debe ser tal que el orden indique una
normal saliente del dominio (siguiendo la regla de la mano derecha).

Cada contorno se nombra, según vimos ya en la práctica anterior, por conveniencia. En este
caso, en la siguiente imagen se puede visualizar a qué corresponde cada uno:

7
Donde el contorno “paredes” corresponde a todas las paredes rígidas del dominio
computacional.

Para generar dicha malla, basta con ejecutar “blockMesh” en la terminal:

el proceso de mallado va a tardar algo más de lo que tardó en la práctica introductoria debido a
que el programa necesita compilar las variables dimensionales declaradas (A, B, C, etc.). Una vez
hecho y si no añadimos nuevas variables, el procedimiento cambiando otros parámetros es
inmediato. Al terminar, debería aparecer algo como esto:

Y a continuación podemos visualizar la malla ejecutando “paraFoam”:

8
Al clicar en Apply, y luego seleccionar “Wireframe” en el menú de iconos:

Podremos tener una vista general de la malla:

Y haciendo un “zoom” sobre el estrechamiento, podremos ver cómo la transición del tamaño y
forma de las celdas es progresiva:

Si ahora vamos a blockMeshDict, y cambiamos la relación de expansión en “x” del bloque 1 a 1:

9
Vemos cómo la malla generada es ahora uniforme en la dirección “x” del bloque:

Pero ello supone un cambio brusco de tamaño en las celdas en la cercanía al estrecho. Es por
ello, que tendremos que volver a poner un factor 0.1 a la relación de expansión.

Una vez hecha la malla (deshaciendo el experimento de la relación de expansión), tendremos


los siguientes nuevos archivos que describen la malla:

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

Donde ahora aparecen nuevos archivos (boundary, faces, etc) que describen la malla.

10
Definición de condiciones iniciales y de contorno
Las condiciones iniciales y de contorno recordemos que se definen en los archivos en la carpeta
0, en este caso al tratarse de flujo incompresible laminar (icoFoam), basta con definir en esta
carpeta el archivo p (presiones dinámicas) y U (velocidades).

En el “inlet” (entrada de flujo) tenemos prescrita la velocidad de entrada en dirección x. Al


tratarse de una entrada de flujo por una boquilla, no tenemos idea sobre la presión absoluta, y
tampoco importa porque al tratarse de un flujo incompresible, sólo es relevante el gradiente de
presión. Lo que sí podemos establecer es que las condiciones del flujo aguas arriba de la boquilla
son constantes y por tanto podremos establecer que el gradiente de presiones normales a la
superficie del contorno es nulo.

En el “outlet” (salida de flujo) no tenemos idea sobre la velocidad (ya que aunque flujo
incompresible, no sabemos cuánto succiona la aspiración), ni tampoco sobre la presión. Pero al

11
igual que son el “inlet” si podemos considerar que aguas abajo el flujo seguirá con velocidades
y presiones constantes, por tanto podemos establecer gradientes nulos de presión y
velocidades.

En la aspiración nos pasa exactamente igual que con el outlet, y por tanto las condiciones son
las mismas.

En las paredes, debemos utilizar las hipótesis típicas del contacto sin deslizamiento en la pared,
y por tanto establecer que la velocidad es nula en las paredes, y el gradiente de presión es
también nulo.

Esquema de discretización temporal


Si abrimos con notepad2 el fichero que define los esquemas de discretización:

Podemos ver que el esquema de discretización temporal es de tipo Euler:

Eso quiere decir que el paso de tiempo a utilizar debe conducir a un número de Courant-
Friedrich-Lewy menor que 1:
𝑣𝑣 · Δt
𝐶𝐶𝐶𝐶𝐶𝐶 = ≤1
Δ𝑥𝑥
Para tener una idea de qué paso de tiempo debemos utilizar, hay que estimar un conjunto de
velocidad y tamaño de celda más desfavorable, eso quiere decir estimar la máxima velocidad
presente y el menor tamaño de celda presente en la malla. La máxima velocidad que podemos
estimar es la que se da en el estrechamiento, esto es 𝑣𝑣 = 0.1 m/s. Por otro lado, el tamaño de

12
celda más pequeño lo podemos ver también en el estrechamiento. El bloque 2 que discretiza el
estrechamiento tiene celdas de tamaño 0.02/40=0.0005 m en dirección “y” del bloque, y
0.005/10=0.0005 m en dirección “x” del bloque. Por tanto, como primera estimación, podremos
usar un paso de tiempo de:
Δ𝑥𝑥 0.0005 m
Δ𝑡𝑡 ≤ = = 0.005𝑠𝑠
v 0.1 𝑚𝑚/𝑠𝑠
Si ahora abrimos el archivo system/controlDict, en donde se define el paso de tiempo:

Vemos que el paso de tiempo utilizado es 0.002 s:

Si lo cambiamos a 0.005 s, y ejecutamos el solver:

Vemos, que la salida de mensajes del solver nos indica que el proceso iterativo no ha convergido:

13
Vemos que el proceso se para en el paso de tiempo 0.025 s, es decir, después de 5 pasos de
tiempo. Se remarca que el número de Courant máximo es 2.68, y también que el residuo final
(error en el algoritmo de resolución iterativo) diverge (el residuo final es un número muy alto
frente al residuo inicial). El número de Courant máximo de 2.68 nos da una idea de que el paso
de tiempo debe reducirse por un factor 2.68 para que se convierta en menor que 1, es decir,
0.005/2.68=0.002 s. No obstante, debe tenerse en cuenta que dicho número de Courant se ha
calculado para un campo de velocidades que ha divergido, pero es una indicación útil.

Es por ello por lo que si ejecutamos con 0.002 s (paso de tiempo inicialmente establecido en el
fichero propuesto), podremos ver que el proceso iterativo ahora si converge:

También podremos observar que el CFL máximo es 0.84, inferior al máximo permitido de 1 para
el esquema de Euler. Además vemos que el residuo inicial es siempre mayor que el final, lo cual
indica que en cada paso la resolución del sistema de ecuaciones converge.

Visualización e interpretación de los resultados


Para visualizar los resultados debemos ejecutar paraFoam:

Y para cargar los resultados debemos clicar Apply:

14
Por defecto, aparece visualizado el campo de presiones. Para que la visualización tome en
consideración que el problema es 2D, debemos clicar en el botón indicado a continuación que
cambia lo que se llama “modo de interacción”:

15
Clicando en Play, podremos ver de manera animada la simulación en cada paso de tiempo. Hay
que tener en cuenta que el parámetro “writeInterval” situado en el fichero “controlDict”
controla cada cuántos pasos de tiempo se guardan los resultados (y por tanto cada cuántos
pasos de tiempo podremos visualizar la solución).

Para cambiar la variable representada en el mapa de colores, cambiamos la variable en el


desplegable superior, y seleccionamos “U” y en la componente seleccionamos “Magnitude”:

Para visualizar el último paso temporal, clicamos en “Last frame”:

16
Luego reescalamos la escala de color:

Y así podremos visualizar la magnitud del campo de velocidades, y que la velocidad máxima es
0.12 m/s, y la mínima es 0 m/s (en el fluido pegado a la pared). Además, se observa le ley típica
en la sección de un tubo, en donde el perfil de velocidades muestra que la velocidad es máxima
en el centro del tubo, y disminuye a medida que nos acercamos a la pared (leyes de pared).

Podemos visualizar las líneas de corriente que emanan de la aspiración, seleccionando primero
el caso “Nozzle_case_OF5.foam” en el pipeline browser, clicando después en el botón de
Stream tracer:

17
Luego, movemos la línea de detección de partículas fluidas hacia la aspiración clicando en los
extremos de la línea:

Después, seleccionamos una resolución de líneas de corriente y la cambiamos de 1000 a 100,


para que nos aparezcan como máximo 100 líneas de corriente dentro de la línea:

18
Después volvemos a seleccionar como variable a dibujar en el mapa de colores de las líneas de
corriente a la velocidad:

Y por último reescalamos el mapa de color:

Y así podremos visualizar las líneas de corriente del fluido que entra por la aspiración y también
tener una idea de las velocidades de entrada:

19
Vemos que hay movimiento de fluido en la aspiración (tendremos que visualizar la dirección de
U para verificar que entra o sale del tubo). Y además, se observan vórtices en la interacción entre
el flujo de principal de entrada y dicho tubo de aspiración. Por la forma de los mismos, parece
que la aspiración efectivamente está succionando fluido e introduciéndolo en el tubo principal.

Para ver la dirección del fluido podemos también representar sólo la dirección X o Y del campo
de velocidades, y verificar en el campo de colores si el valor es positivo o negativo (en este caso
la dirección Y):

Como vemos el valor de UY es positivo, con lo cual el fluido está yendo de abajo a arriba, es
decir, el tubo de aspiración está extrayendo fluido del depósito e introduciéndolo en el tubo
principal.

20
Para visualizar el perfil de velocidades en el tubo de aspiración, podemos hacer uso del filtro
“Plot Over Line”. Recuérdese que primero hay que seleccionar “Nozzle_case_OF5.case” en el
Pipeline Browser:

Después poner la línea otra vez cortando el tubo de aspiración, y luego clicar Apply:

21
Ahora seleccionar sólo el campo “U_magnitude”:

Ahora cambiamos los títulos de los ejes:

22
El perfil de velocidades obtenido es:

Que es el perfil de velocidades típico en un tubo a bajos números de Reynolds, se trata de un


perfil aproximadamente parabólio con un máximo de velocidad de 0.0026 m/s.

23

También podría gustarte