Está en la página 1de 63

Universidad Autónoma de Nuevo León

Facultad de Ingenierı́a Mecánica y Eléctrica


Tutorial OpenFOAM

Presentado por
Grupo de Energı́as Térmica y Renovables (G.E.T.R.) Nuevo León, México

26 de junio de 2014
Resumen

Este tutorial está pensado para aprender a utilizar OpenFOAM en aplicaciones de Dinámica de
Fluidos Computacional (CFD). Se comienza por la instalación del software y la descripción de
un primer caso de estudio ya estructurado para la familiarización del usuario con la estructura y
la forma de trabajar de OpenFOAM. Una vez familiarizado se procede a la creación de un caso
desde cero, la creación de una geometrı́a sencilla y de la malla, la definición de las condiciones de
frontera e iniciales, y las opciones de simulación. Posteriormente se introduce a los archivos detrás
de un solver y se modifica uno de ellos. Más adelante se incluye un caso de geometrı́a de dificultad
intermedia y se modifica un modelo de viscosidad para introducir la dependencia de esta con la
temperatura. Finalmente se presenta un caso de geometrı́a compleja y se dan alternativas para su
pre-procesamiento.
Índice general

1. Introducción. 4

2. Instalación 5

3. Descripción de un caso 7
3.1. Constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.1. blockMeshDict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.2. transportProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2. 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.1. p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.2. U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3. system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3.1. controlDict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3.2. fvSchemes y fvSolution . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.4. Corrida del caso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4. ParaView 21
4.1. Visualización de los resultados en forma superficial . . . . . . . . . . . . . . . . . 21
4.2. Visualización de los resultados en forma vectorial . . . . . . . . . . . . . . . . . . 22
4.3. Visualización de las lineas de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.4. Gráfica sobre una linea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

5. Creación de un caso nuevo utilizando un solver existente: Flujo de Couette con ico-
Foam 25
5.1. Creación de la geometrı́a y la malla . . . . . . . . . . . . . . . . . . . . . . . . . 26

1
2

5.2. Definición de las condiciones de frontera e iniciales . . . . . . . . . . . . . . . . . 27


5.3. Configuración de la carpeta system . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.4. Ejecución e interpretación de resultados . . . . . . . . . . . . . . . . . . . . . . . 28
5.5. Modificación de un caso existente . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.5.1. Flujo de Poiseuille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.5.2. Flujo de Couette-Poiseuille . . . . . . . . . . . . . . . . . . . . . . . . . . 31

6. Modificación de un solver existente: adición de la ecuación de energı́a a icoFoam 34


6.1. Descripción de los archivos básicos de un solver . . . . . . . . . . . . . . . . . . . 34
6.2. Modificación de los archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.1. icoFoam.C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.2. createFields.H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.2.3. make/files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.3. Compilación del solver nuevo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.4. Validación del solver: flujo de Couette con temperatura . . . . . . . . . . . . . . . 38
6.4.1. Creación del campo de temperaturas . . . . . . . . . . . . . . . . . . . . . 38
6.4.2. Modificación de las propiedades de transporte . . . . . . . . . . . . . . . . 39
6.4.3. Configuración de la carpeta system . . . . . . . . . . . . . . . . . . . . . 39
6.4.4. Ejecución e interpretación de resultados . . . . . . . . . . . . . . . . . . . 40
6.4.5. Modificación del solver pisoFoam . . . . . . . . . . . . . . . . . . . . . . 41

7. Flujo al rededor de un tubo con temperatura 45


7.1. Descripción de la geometrı́a y técnica de mallado . . . . . . . . . . . . . . . . . . 45
7.2. Construcción de la geometrı́a y malla en OpenFOAM a partir de datos de SolidWorks 45
7.3. Definición de las condiciones de frontera e iniciales . . . . . . . . . . . . . . . . . 47
7.4. Determinación de las propiedades de transporte . . . . . . . . . . . . . . . . . . . 49
7.5. Configuración de la carpeta system . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.6. Ejecución e interpretación de resultados . . . . . . . . . . . . . . . . . . . . . . . 50

8. Flujo a través de un banco de tubos con temperatura 52


8.1. Descripción de la geometrı́a y sus complicaciones en OpenFOAM . . . . . . . . . 52
8.2. Generación de la geometrı́a y la malla en ANSYS . . . . . . . . . . . . . . . . . . 53
8.3. Exportación de la malla en ANSYS e importación en OpenFOAM . . . . . . . . . 54

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


3

8.4. Preparación de la simulación en OpenFOAM . . . . . . . . . . . . . . . . . . . . 55


8.5. Ejecución e interpretación de resultados . . . . . . . . . . . . . . . . . . . . . . . 55

9. Modificación de un modelo de viscosidad: Ley de la potencia con viscosidad depen-


diente de la temperatura 59

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


Capı́tulo 1

Introducción.

OpenFOAM [1] (Open Field Operation and Manipulation) es un software libre de CFD. Tiene
una gran variedad de solvers para la mayorı́a de las áreas de la ingenierı́a, desde flujo de fluidos
complejos con reacciones quı́micas, turbulencia y transferencia de calor, hasta dinámica de sólidos
y electromagnetismo. Posee una gran cantidad de herramientas para el pre y post procesamiento, de
tal manera que, con el conocimiento necesario, se puede correr prácticamente cualquier problema
que se requiera.
Al ser un software libre, OpenFOAM ofrece a los usuarios la completa libertad de modificar
y enriquecer cualquier solver o herramienta existente, ya sea por sı́ mismos o mediante soporte
ofrecido por OpenCFD. OpenFOAM sigue un diseño de código modular el que las utilidades de
cada solver como herramientas, modelos fı́sicos, propiedades, etc, son compiladas en su propa
librerı́a compartida.
OpenFOAM incluye más de 80 solvers que simulan problemas especı́ficos de la ingenierı́a, y
más de 170 utilidades para tareas de pre y post procesamiento como el mallado y la visualización
de resultados. [2]

4
Capı́tulo 2

Instalación

Para la instalación de OpenFOAM 2.2.2 se requiere tener un sistema operativo Linux, puede
ser Ubuntu, SuSe, Fedora, etc. En este tutorial se trabajará con Ubuntu 12.04. La versión 2.2.2 de
OpenFOAM soporta hasta la versión 13.10 de Ubuntu. Primeramente hay que seguir las siguientes
instrucciones (Figura 2.1) encontradas en la página de descarga de OpenFOAM para Ubuntu [3]:
http://www.openfoam.org/archive/2.2.2/download/ubuntu.php

Figura 2.1: Pasos de instalación de OpenFOAM 2.2.2 para Linux Ubuntu

Una vez instalado correctamente, se procede a configurar OpenFOAM para que corra correcta-

5
6

mente (Figuras 2.2 y 2.3):

Figura 2.2: Pasos para la configuración de OpenFOAM 2.2.2 para Linux Ubuntu

Figura 2.3: Pasos para empezar a usar OpenFOAM 2.2.2 para Linux Ubuntu

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


Capı́tulo 3

Descripción de un caso

En OpenFOAM, las simulaciones se manejan por casos. Dentro de la carpeta Home se encuen-
tra la carpeta OpenFOAM dentro de la cual se encuentra una carpeta compuesta por el nombre de
usuario y la versión de OpenFOAM user-2.2.2. Este folder es el folder de trabajo de OpenFOAM,
por el momento sólo contiene una carpeta llamada run dentro de la cual estan los tutoriales bajo
el nombre de tutorials. En esta carpeta se pueden observar los tutoriales organizados en tipos de
problemas o solvers. Por ejemplo, tenemos la carpeta incompressible donde se encuentran los tuto-
riales sobre fluidos incompresibles, ya sea laminares, turbulentos, transitorios o en estado estable.
Para este primer caso a resolver entraremos precisamente a esta carpeta incompressible. Aquı́ en-
contramos una gran variedad de solvers enfocados cada uno a ciertos problemas en especı́fico. Para
este caso usaremos el solver icoFoam que resuelve flujo incompressible, laminar y transitorio.
Al entrar a la carpeta icoFoam encontramos ahora una serie de carpetas dentro de las cuales se
encuentran diversos ejemplos listos para correr. Entramos a la carpeta cavity, donde se encuentra
el ejemplo de una cavidad cuadrada con tres paredes fijas y una pared movil, la cual provoca el
movimiento de un fluido dentro de la cavidad (Figura 3.1).
Dentro de esta carpeta podemos observar que existen tres carpetas: 0, constant y system. En
estas tres carpetas es donde se encuentra la información necesaria para correr una simulación co-
rrectamente. A continuación se describen los contenidos y propósitos de cada una de estas carpetas.

3.1. Constant
En esta carpeta se puede observar un archivo llamado transportProperties, que contiene las
propiedades de transporte de la sustancia a estudiar, y una carpeta llamada polyMesh, que contiene

7
8

Figura 3.1: Geometrı́a del caso de un fluido dentro de una cavidad

a su vez el archivo blockMeshDict con información sobre la geometrı́a y la malla del caso a estudiar.

3.1.1. blockMeshDict
En este archivo es donde se define la geometrı́a del caso de estudio ası́ como el mallado de esta.
La Figura 3.2 muestra el archivo tal como viene con la instalación de OpenFOAM 2.2.2:

Figura 3.2: Primera parte del archivo blockMeshDict

La primera parte del archivo es meramente informativo y contiene información que en realidad

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


9

no es relevante para la simulación. La parte importante comienza a partir de la linea 16. Podemos
observar que la primera linea que aparece es convertToMeters y se utiliza para indicar la escala en
la que vamos a trabajar. En este caso tiene un valor de 0.1, lo que significa que cada unidad que
introduzcamos equivaldrá a 0.1m; de esta forma si introducimos un valor de 10, OpenFOAM lo
convertirá a 1m. Posteriormente se introducen los vértices bajo el comando vertices. Estos vérti-
ces se numeran automáticamente empezando por el 0, si se desea se puede poner un comentario
enseguida de las coordenadas de cada vértice para identificar cada uno de estos. OpenFOAM siem-
pre requiere de una geometrı́a tridimensional, aunque sólo vayamos a hacer una simulación en dos
dimensiones. La geometrı́a para este caso consiste simplemente en un prisma rectangular con 8
vértices.
La siguiente sección contiene los bloques o secciones de nuestra geometrı́a. En este caso so-
lamente tenemos un bloque y se define por cada uno de los vértices. Cada bloque que definamos
tiene su propio sistema de coordenadas local. OpenFOAM toma como origen el primer vértice que
definimos, en este caso el vértice 0. El siguiente vértice define la dirección positiva del eje x, en
este caso el vértice 1. La dirección positiva del eje y se define moviéndonos del segundo al tercer
vértice, en este caso del vértice 1 al 2. El cuarto vértice, en este caso el número 3, completa los
cuatro vértices del plano z = 0. La dirección positiva del eje z se define moviéndose del vértice
0 al vértice 4. Finalmente los vértices 5, 6 y 7 se encuentran moviéndose en la dirección positiva
de z a partir de los ejes 1, 2 y 3 respectivamente. De esta forma definiremos el sistema local de
coordenadas de cada uno de los bloques necesarios para la geometrı́a de los subsequentes casos
que estudiaremos más adelante.
Cada uno de los bloques es seguido por un vector de tres números que definen el número de
elementos en que se va a dividir el bloque en cada dirección. De esta manera, en este caso, se divide
la geometrı́a en veinte elementos en la dirección x, veinte en y y solamente uno en z. En seguida
aparece la palabra simpleGrading seguido de otro vector de tres números. Estos números definen
el crecimiento o decrecimiento de la malla en el bloque. Por ejemplo, un número 2 en la primera
posición indica que el último elemento en la dirección x, dentro del bloque, tiene una longitud dos
veces mayor a la del primer elemento. De esta forma podemos hacer más definida la malla en el
área de intrés y menos definida en áreas que no lo necesiten.
La tercera sección del archivo contiene los bordes bajo la palabra edges. OpenFOAM automáti-
camente supone que los bordes de los bloques que se definieron previamente son rectos, lo cual
no es necesariamente cierto para algunos casos. Por ejemplo, si quisieramos modelar el flujo al

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


10

rededor de un cilindro, tendrı́amos que utilizar bordes circulares para modelar correctamente el
cilindro, de lo contrario, OpenFOAM harı́a un polı́gono en vez de un cı́rculo. En el caso que esta-
mos estudiando existen solamente bordes rectos, es por eso que esta sección se encuentra vacı́a en
nuestro archivo blockMeshDict. Más adelante se verán más a fondo estos bordes.
Por último están las fronteras de la geometrı́a bajo la palabra boundary (Figura 3.3). Aquı́ se
definen todas las fronteras existentes en el caso de estudio, en este caso tenemos tres tipos de
frontera: la pared movil (movingWall), las paredes fijas (fixedWalls) y las paredes de enfrente y
de atrás (frontAndBack), que no tomaremos en cuenta debido a que es una simulación 2D. Los
nombres de estas fronteras son arbitrarias, en este caso son los nombres que vienen por default
con la instalación de OpenFOAM y se pueden cambiar si ası́ se desea. Dentro de cada frontera
definida se encuentra la palabra type que define el tipo de frontera. El tipo wall es reconocido
por OpenFOAM como una frontera sólida por la que no existe transferencia de masa y tiene la
propiedad de no deslizamiento. El tipo empty indica a OpenFOAM que no se simulará en esa
dirección y que las fronteras no tienen ninguna caracterı́stica especial. En ejemplos posteriores
veremos diferentes tipos de fronteras.

3.1.2. transportProperties
El archivo transportProperties contiene las propiedades de transporte correspondientes al caso
de estudio (Figura 3.4). En este caso que estamos resolviendo las ecuaciones de conservación de
cantidad de movimiento con propiedades fı́sicas constantes, la única variable de transporte nece-
saria es la viscosidad cinemática, definida como nu en OpenFOAM. La primera parte del archivo
es meramente informativa y no es relevante para la simulación. La segunda parte empezando en la
linea 17 contiene las propiedades de transporte. Se observa que la viscosidad cinemática está iden-
tificada como nu y es seguida por un vector de siete números. Este vector se utiliza para asignar las
unidades corresondientes a la propiedad. Estas unidades son: [kilogramo (Kg), metro (m), segundo
(s), kelvin (K), kilomol (Kmol), ampere (A), candela (cd)].
En este caso la viscosidad cinemática tiene unidades de m2 /s, por lo tanto los números correctos
son: [0 2 -1 0 0 0 0]. El valor de la propiedad se define justo después del vector de las unidades. En
este caso es 0.01m2 /s , de tal manera que, con una longitud de 0.1m por lado de la cavidad y una
velocidad de 1m/s, tengamos un número de Reynolds Re = 10.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


11

Figura 3.3: Segunda parte del archivo blockMeshDict

3.2. 0
En esta carpeta se encuentran los archivos correspondientes a cada una de las variables a estu-
diar. En este caso solamente tenemos un archivo para la presión llamado p y uno para la velocidad
llamado U.

3.2.1. p
En este archivo se encuentran las condiciones iniciales y de frontera de la presión correspon-
dientes al caso de estudio (Figura 3.5. La primera parte es meramente informativa y no es de
relevancia para la simulación. Lo importante comienza en la linea 17 con la palabra dimensions se-
guido del vector de unidades, en este caso las unidades son m2 /s2 . La siguiente linea internalField

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


12

Figura 3.4: Archivo transportProperties

corresponde a la condición inicial, seguido de la palabra uniform, que indica que todo el volumen
de control tiene el mismo valor, y finalmente el valor de la propiedad, en este caso 0.
Posteriormente encontramos la palabra boundaryField que corresponde a las condiciones de
frontera. Como recordarán, las fronteras las definimos en el archivo blockMeshDict y tienen nom-
bres arbitrarios. Las condiciones de frontera deben ir identificadas con exactamente el mismo nom-
bre con que se definieron anteriormente. Debajo de cada frontera se encuentra la palabra type, que
representa el tipo de condición (diferente al tipo de frontera que definimos en el blockMeshDict).
Para las paredes superior, inferior y laterales se define el tipo zeroGradient que indica que el gra-
diente de presión es nulo en las paredes. Las paredes frontal y trasera tienen la condición empty ya
que no se simulará en esa dirección.

3.2.2. U
En este archivo se encuentran las condiciones iniciales y de frontera de la velocidad corres-
pondientes al caso de estudio (Figura 3.6). Las dimensiones de la velocidad son m/s representadas
bajo la palabra dimensions. Posteriormente, como ya mencionamos, bajo internalField definimos
la condición inicial. En este caso la velocidad es un campo vectorial y hay que definir sus tres com-
ponentes x, y y z. Para esta simulación se desea que el fluido se encuentre inicialmente en reposo,
por lo que la velocidad es 0 en las tres direcciones.
En la sección boundaryField encontramos nuevamente las tres fronteras definidas previamente.
Para la pared móvil se define un valor fijo, representado por la palabra fixedValue. La siguiente
linea, bajo la etiqueta value, indica el valor de la variable precedido de palabra uniform. En este

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


13

Figura 3.5: Archivo p para el caso de un fluido en una cavidad

caso la pared móvil tendrá una velocidad uniforme de 1m/s. Las paredes fijas tienen el mismo tipo
de condición pero con un valor diferente, en este caso 0m/s ya que no se están moviendo. Por
último, como ya mencionamos, las paredes restantes poseen el tipo de condición empty.

3.3. system
Dentro de la carpeta system existen tres archivos cuya función es determinar las condiciones y
los métodos mediante los cuales se llevará a cabo la solución del problema.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


14

Figura 3.6: Archivo U para el caso de un fluido en una cavidad

3.3.1. controlDict
En este archivo observamos varias lı́neas de comandos (Figura 3.7). La primera linea applica-
tion hace referencia al solver que se está utilizando. La segunda linea startTime indica en qué tiempo
empezará a correr la simulación, este tiempo se define en la siguiente linea startTime. Este valor, en
este caso 0, hace referencia a la carpeta de donde se van a extraer las condiciones iniciales. Como
ya vimos, las condiciones iniciales y de frontera están en la carpeta llamada 0. Si quisieramos em-
pezar a un tiempo diferente simplemente tendrı́amos que renombrar la carpeta 0 con el tiempo al
que deseamos iniciar. Si ya se ha corrido la simulación anteriormente hasta cierto tiempo y quisie-
ramos hacer una simulación hasta un tiempo mayor, simplemente cambiamos el valor de startTime
al último tiempo cálculado previamente.
Posteriormente tenemos el comando stopAt que indica cuándo hay que detener la simulación,

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


15

en este caso hace referencia a endTime, definido en la siguiente lı́nea. Este valor depende de la
naturaleza del fenómeno; existen fenómenos cuyo transitorio dura apenas algunas centésimas de
segundo y otros que pueden durar varios minutos. Enseguida encontramos el comando detlaT que
indica el paso de tiempo para los cálculos. De este valor depende que la simulación sea exitosa, ya
que influye directamente en el número de Courant.

δx|U|
Co = (3.1)
δt
Este número es una especie de seguimiento de una partı́cula y nos indica cuántos elementos de
la malla ha recorrido desde el último paso de tiempo. Por esta razón, el número de Courant no debe
pasar de 1, ya que de lo contrario se puede decir que hemos perdido el control sobre la simulación.
En este caso tenemos una volumen de control de 0.1m por lado dividido en 20 elementos, lo que
nos da un δx = 0.005m. La velocidad se definió como 1m/s, por lo tanto el paso de tiempo debe
ser:

δx|U| (0.005m) × (1m/s)


δt = = = 0.005s (3.2)
Co 1
El siguiente comando writeControl indica cada cuánto va a escribir los resultados en la memo-
ria, diferente a cada cuánto tiempo hace los cálculos (deltaT). Esto es debido a que, dependiendo
del paso de tiempo, puede hacer miles de cálculos que, si los escribiera todos, llenarı́a la memoria
de la computadora. Dependiendo de la naturaleza del fenómeno, basta con observar los resultados
cada segundo o cada 10− 1 segundos y no cada 10− 3 segundos como el paso de tiempo. En este caso
vamos a escribir en base al paso de tiempo (timeStep) y el valor asignado en la siguiente lı́nea es de
20, esto quiere decir que va a guardar los resultados cada 20 pasos de tiempo, o sea, cada 0.1s:

0.005s × 20 = 0.1s (3.3)

3.3.2. fvSchemes y fvSolution


El archivo fvSchemes contiene información sobre los métodos que utilizará OpenFOAM para
resolver los diferentes componentes del sistema de ecuaciones a resolver, por ejemplo, los gradien-
tes, divergentes, laplacianos, interpolaciones, etc. Estos métodos están configurados por default
para cada uno de los diferentes solvers, por lo que no hay necesitad de cambiarlos. Sin embargo,

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


16

Figura 3.7: Archivo controlDict para el caso de un fluido en una cavidad

si estás familiarizado con los métodos numéricos y sabes lo que estás haciendo, puedes cambiar el
método a utilizar.

3.4. Corrida del caso


Una vez que se ha configurado todo lo necesario para la simulación, se entra a la terminal y se
cambia al directorio del caso de estudio. Si no se está familiarizado con la terminal se puede em-
pezar por utilizar el comando ls que muestra una lista de todas las carpetas y archivos que hay en
la carpeta de inicio. Al inicio del tutorial mencionamos el camino para llegar a la carpeta del caso
cavity, de manera que introducimos el comando cd seguido del nombre de la carpeta para ingresar
a esta. Podemos llegar al caso haciendo lo mismo en cada carpeta, o si se conoce el camino comple-
to, simplemete se introduce: cd OpenFOAM/user-2.2.2/run/tutorials/incompressible/icoFoam/cavity.
Otra manera es utilizando el acceso directo que se creó al momento de la instalación, se introdu-
ce run en la terminal y automáticamente te posiciona en la carpeta OpenFOAM/user-2.2.2/run, a
partir de ahı́ simplemente se introduce cd tutorials/incompressible/icoFoam/cavity. En la Figura 3.8
podemos ver dos formas de cambiar el directorio.
Una vez que estamos ahı́ procedemos a generar la geometrı́a y la malla. Esto se realiza mediante
una herramienta que posee OpenFOAM llamada blockMesh, que utiliza la información contenida
en el diccionario (blockMeshDict) para generarla. Para utilizar esta herramienta, simplemete se
introduce en la terminal el comando blockMesh. A continuación se despliega información sobre el
proceso que realiza esta herramienta. En este punto no debe haber ningún error ya que el archivo
ya estaba construido, más adelante veremos que en caso de cometer algún error en alguno de

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


17

Figura 3.8: Ejemplos de cambio de directorio en la terminal.

los archivos, OpenFOAM automáticamente detecta en dónde está y cuál fue el error, haciendo su
corrección más fácil. En las Figuras 3.9 y 3.10 observamos la salida tı́pica del comando blockMesh.
Si se desea ver cómo quedó la geometrı́a y la malla antes de correr la simulación, para ase-
gurarse de que quedó bien, se utiliza el ParaView. Para abrir el programa y cargar la información
del caso a la vez, se teclea el comando paraFoam, unos segundos después se estará cargando el
programa con los datos de la geometrı́a, la malla y resultados de la simulación en caso de que
ya se hubiera corrido. En el capı́tulo 4 se hablará más al respecto. Cabe mencionar que este paso
no es necesario para correr la simulación, es meramente una medida para cerciorarse de que todo
vaya bien antes de dar el siguiente paso. En la Figura 3.11 observamos cómo debe ser la malla,
para poder observarla hay que selecionar Mesh Parts, hacer click en Apply y finalmente en el tipo
de visualización seleccionar Wireframe. La geometrı́a y la malla se muestran en perspectiva 3D,
para cambiar a ver solamente la proyección paralela nos vamos al menú Edit → View Settings y
seleccionamos la casilla Use Parallel Projection.
Una vez que se ha revisado que la geometrı́a y la malla sean correctas, se corre la simulación.
Esto se hace tecleando en la terminal el nombre del solver con el que se resolverá el caso. En
este caso usaremos el solver icoFoam, por lo que en la terminal simplemente se teclea icoFoam.
Si no hay ningún problema con la configuración del caso empezará a correr, en caso contrario
indicará cuál es el error y dónde está. Al momento de la corrida del caso, OpenFOAM muestra

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


18

Figura 3.9: Generación de la geometrı́a y la malla (parte 1).

información general sobre la simulación en la terminal (Figura 3.12). Posteriormente muestra el


paso de tiempo que está calculando, el número de Courant promedio de la malla para ese paso
de tiempo, ası́ como el valor máximo. También muestra información sobre los residuales de las
variables que está calculando y el número de iteraciones realizadas para un paso de tiempo dado.
Finalmente muestra el tiempo que ha pasado desde que se empezó la simulación (Figura 3.13).
Al final de la simulación podremos observar que en la carpeta del caso se crearon varias carpe-
tas, una para cada tiempo de escritura que especificamos en el archivo controlDict. Si entramos a
una de estas carpetas podemos observar que se han creado archivos para la presión y la velocidad
por separado, ası́ como información del paso de tiempo. Para observar estos resultados hacemos
uso del ParaView, ası́ que nuevamente tecleamos en la terminal paraFoam.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


19

Figura 3.10: Generación de la geometrı́a y la malla (parte 2).

Figura 3.11: Malla para el caso cavity en ParaView.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


20

Figura 3.12: Información sobre la simulación del caso cavity (parte 1).

Figura 3.13: Información sobre la simulación del caso cavity (parte 2).

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


Capı́tulo 4

ParaView

Como ya hemos mencionado, ParaView es una herramienta de post procesamiento de datos, en


él podemos observar la geometrı́a y la malla, podemos ver los resultados de la simulación en forma
de superficies de contorno, vectores, lineas de flujo, gráficas, etc. En este tutorial se muestran las
formas más comunes de visualización de datos, sin embargo hay muchas más herramientas a las
cuales sacarles provecho.

4.1. Visualización de los resultados en forma superficial


Una vez que tenemos cargados los datos, en la pestaña de visualización escogemos surface en
vez de wireframe y en la pestaña que dice Solid Color escogemos la variable que queramos ver, en
este caso escogemos U. La superficie se muestra en una escala de rojos y azules, para cambiar a
la representación tı́pica tipo arcoiris nos cambiamos a la pestaña Display, damos click en el botón
Edit Color Map del lado izquierdo, damos click en el botón Choose Preset, escogemos Blue to Red
Rainbow, damos click en OK y finalmente en Close(Figura 4.1). Para activar la escala damos click
al botón que parece un arcoiris a la izquiera de la barra de herramientas.
Ahora sı́ observamos la magnitud de la velocidad dentro de la cavidad con su escala a un lado
(Figura 4.2). Hay que recordar que esta es la magnitud resultante de la velocidad, es decir, un
campo escalar que nos dice la rapidez con que se mueve el fluido pero no nos indica hacia donde
se está moviendo. Podemos observar los componentes de esta velocidad en la pestaña que dice
Magnitude, ahı́ están las opciones X, Y y Z. Al observar estas componentes nos podemos dar una
idea de hacia donde se está moviendo el fluido.

21
22

Figura 4.1: Configuración de Para View para visualizar los resultados en forma superficial.

4.2. Visualización de los resultados en forma vectorial


Para un mejor entendimiento de la dirección y sentido de la velocidad del fluido hay que ob-
servar los resultados en forma vectorial, para hacer esto vamos al menú Filters → Alphabetical →
Cell Centers y en la pestaña Properties del lado izquierdo damos click en Apply. Posteriormente
añadimos un nuevo filtro: Filters → Alphabetical → Glyph y configuramos de manera que selec-
cionemos la opción off de Scale Mode, activamos la casilla edit, establecemos un valor de 0.005
y nuevamente click en Apply (Figura 4.3). Ahora podemos observar con más detalle cómo es el
movimiento del fluı́do, tanto en magnitud (en base a los colores) como en dirección y sentido (en
base a las flechas).

4.3. Visualización de las lineas de flujo


Otro filtro interesante es el Stream Tracer que traza las lineas de corriente en el fluido. Para
lograr esto vamos al menú Filters → Alphabetical → Stream Tracer, configuramos tal y como
muestra la Figura 4.4 y damos clikc en Apply. Ahora podemos ver las lineas de corriente que sigue
el fluido dentro de la cavidad (Figura 4.5).

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


23

Figura 4.2: Distribución de velocidades en la cavidad.

Figura 4.3: Configuración para mostrar los vectores de velocidad.

4.4. Gráfica sobre una linea


Por último veremos como graficar la velocidad a lo largo de una linea dentro del dominio.
Digamos que queremos saber como está cambiando la velocidad a lo largo de la cavidad a un 80 %
de la altura total. Nuevamente necesitamos un filtro ası́ que vamos a Filters → Alphabetical → Plot
Over Line. Establecemos las coordenadas de los puntos por donde pasará la linea que queremos
trazar, en este caso (0, 0.08, 0.01) y (0.10.08, 0.01) y click en Apply. Observamos que del lado
derecho aparece una gráfica para la velocidad y otra para la presión (Figura 4.6). Si no deseamos

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


24

Figura 4.5: Lineas de corriente en la cavidad.

Figura 4.4: Configuración para mostrar las lineas de co-


rriente.

observar la presión vamos a la pestaña Display y desactivamos la casilla p.

Figura 4.6: Velocidad y presión a lo largo de la cavidad a una altura de 0.08m.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


Capı́tulo 5

Creación de un caso nuevo utilizando un


solver existente: Flujo de Couette con
icoFoam

Ya que hemos visto como funciona OpenFOAM y hemos corrido uno de los tutoriales, es con-
veniente empezar un caso de estudio desde cero. Empezaremos con un caso sencillo como lo es el
flujo de Couette. El flujo de Couette consiste en un fluido entre dos placas planas que fluye debido
al movimiento de una de ellas a velocidad constante. Inicialmente se supone que el fluido se en-
cuentra en reposo. Para ilustrar el ejercicio, resolveremos un problema de la literatura [4]:

Aire a 20oC y 1atm se encuentra en reposo entre dos placas planas paralelas distancia-
das 2cm entre ellas. A tiempo t = 0, la placa inferior comienza a moverse tangencialmen-
te a 30cm/s. Calcule la velocidad del aire en el centro entre las placas a 2s. ¿Cúando
alcanzará la velocidad en el centro los 14cm/s? R: u(y = 1cm, t = 2s) = 5.92cm/s;
t ≈ 8s
Para empezar entramos a la carpeta cavity y copiamos las carpetas 0, constant y system. Pos-
teriormente salimos a la carpeta de icoFoam y creamos una nueva carpeta con el nombre couette,
entramos ahı́ y pegamos las carpetas copiadas.
Esta vez no se mostrará cada uno de los archivos, sólamente los resultados que se generen para
que el usuario practique la creación del caso y compare sus resultados.

25
26

5.1. Creación de la geometrı́a y la malla


Podemos observar que este problema es muy parecido al problema de la cavidad, solo que en
vez de tener las fronteras izquierda y derecha delimitadas por una pared, tenemos entrada y salida de
materia. Además, para modelar correctamente el flujo de Couette, no haremos el dominio cuadrado,
sino que le daremos por lo menos 5 veces la separación entre placas. Para mayor simplicidad
modificaremos los vértices para adaptarlos a nuestro caso especı́fico ya que en escencia es el mismo
tipo de geometrı́a con diferentes dimensiones.
Como la separación entre placas es de 2 centı́metros tenemos dos opciones para generar la
geometrı́a: una es definir convertToMeters=1 y en los vértices generar una separación de 0.02, y
calcular la longitud del canal 0.02 × 5 = 0.1; la segunda opción es definir convertToMeters=0.02
y simplemente generar una separación entre placas de 1, y una longitud del canal de 5. Ambas
opciones generan exactamente la misma geometrı́a. Todo depende de la manera de pensar y hacer
las cosas de cada quien. Esta decisión está abierta a cada persona.
Igual que el caso pasado nuestra geometrı́a consta de un solo bloque definido por los ocho
vértices que se debieron haber establecido ya. Haciendo un análisis del problema nos damos cuenta
que la velocidad del fluido está cambiando en la dirección y pero no en la dirección x. Esto nos da
una idea del número de divisiones que tenemos que hacer en cada dirección. Ya que nos interesa
observar el cambio de la velocidad en la dirección y haremos que cada división sea de 1mm, o sea,
haremos 20 divisiones en la dirección y. Debido a que no nos interesa el cambio de velocidad en la
direccion x le damos un número arbitrario, por ejemplo, 40.
Hay que observar detenidamente las caras que se definen para cada frontera, ya que en este caso
la pared movil es la inferior, al contrario del caso de la cavidad. La parde fija es la superior y las
fronteras izquierda y derecha irán bajo nuevos tipos de frontera. Las fronteras frontal y posterior
siguen siendo tipo empty. Nombraremos a las nuevas fronteras inlet y outlet. La cara izquierda
será la entrada y la cara derecha la salida. El tipo de ambas fronteras es patch.
Las propiedades de transporte, que en este caso sólamente es la viscosidad cinemática, la obte-
nemos de la literatura, según Bird a 20oC la viscosidad cinemática es:

ν = 15.05 × 10−2 cm2 /s = 15.05 × 10−6 m2 /s (5.1)

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


27

5.2. Definición de las condiciones de frontera e iniciales


Empezaremos por el archivo p. Las dimensiones permanecen sin modificación, al igual que
el internalField. Las fronteras movingWall, fixedWalls e inlet llevan tipo zeroGradient, mientras
que la frontera outlet es de tipo fixedValue con un valor uniforme de 0. La frontera frontAndBack
permanece igual. El valor de gradiente cero a la entrada del ducto hace que no haya movimiento
del fluido debido a la presión, mientras que la condición de presión 0 a la salida hace que exista un
diferencial del presión entre la entrada y la salida permitiendo ası́ el flujo en esa dirección.
Para el archivo de la velocidad el campo interno está en reposo al inicio por lo que no hay que
modificarlo. A la frontera movingWall simplemente le cambiamos la velocidad de 1m/s a 0.3m/s.
La frontera fixedWalls permanece igual como pared fija, ası́ como la frontera frontAndBack. Las
fronteras inelt y outlet serán de tipo zeroGradient, esto significa que tanto antes de entrar como
después de salir su velocidad será igual a la de la frontera, por lo tanto tampoco hay movimiento
del fluido por efectos externos. Al definir estas fronteras estamos limitando el flujo a que se mueva
únicamente por efecto del movimiento de la placa inferior.
En este momento ya podemos generar la malla y la geometrı́a para observar si en realidad es
lo que esperamos. Como ya mencionamos tenemos que entrar en la terminal y cambiarnos al di-
rectorio couette dando la instrucción run para que nos lleve a dicha carpeta y posteriormente cd
tutorials/incompressible/icoFoam/couette. Estando ahı́ tecleamos blockMesh para generar la geo-
metrı́a y la malla, y finalmente paraFoam para observar los resultados (Figuras 5.1 y 5.2).

Figura 5.1: Geometrı́a para el problema de flujo de Couette.

5.3. Configuración de la carpeta system


Para este nuevo caso tenemos que calcular nuevamente el paso de tiempo que cumpla con un
número de Courant menor a 1. A partir de la malla sabemos que el elemento más chico está en la

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


28

Figura 5.2: Malla para el problema de flujo de Couette.

dirección y, entonces δy = 2cm/20 = 0.1cm = 1 × 10− 3m, y por lo tanto

δy × |U| (1 × 10−3 m)(0.3m/s)


δt = = = 3 × 10−4 s (5.2)
Co 1
Por efectos prácticos de escritura estableceremos el paso de tiempo como δt = 0.0005 y el
intervalo de escritura en 200 ası́ se escribirán los resultados cada 0.1s.
Debido a la baja velocidad de la placa y la baja viscosidad cinemática del aire, este fenómeno
tarda mucho tiempo en desarrollarse, por lo tanto estableceremos el tiempo final en 10s. De esta
forma podremos observar el desarrollo completo hasta llegar al estado estable.

5.4. Ejecución e interpretación de resultados


Ya que tenemos todo configurado podemos correr la simulación. En la terminal tecleamos en-
tonces icoFoam para correrla. Debido a que esta malla tiene el doble de elementos que el caso
pasado, aunado a que el tiempo de la simulación es veinte veces mayor, la simulación tardará más
tiempo en terminar, por lo que hay que darle tiempo de que trabaje. Una vez que termine la si-
mulación tecleamos paraFoam y cargamos los resultados (Mesh Parts → Apply. Escogemos ver
los resultados en forma superficial, escogemos la velocidad U y damos click en el botónPlay en la
parte superior para observar la evolución temporal de la distribución de velocidades. En la Figura
5.3 observamos la distribución de velocidades después de 10 segundos.

Figura 5.3: Distribución de velocidad entre las dos placas después de 10 segundos.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


29

Para resolver el problema que se planteó al principio del capı́tulo escogemos el paso de tiempo
20 (2s) y tenemos que utilizar el filtro Plot Over Line. Escogemos una linea a lo largo del eje y y
click en Apply. Oservamos que se despliega una gráfica del lado izquierdo (Figura 5.4). En el eje de
las x aparece la distancia desde la placa inferior hasta la placa superior y en el eje de las y aparece
la velocidad del fluido. Posicionamos el mouse sobre la gráfica en el punto medio (0.01m) y nos
despliega la velocidad correspondiente a esta distancia:

u(y = 1cm, t = 2s) = 5.92cm/s

Figura 5.4: Velocidad en el centro de las dos placas a 2 segundos

El segundo inciso nos pide determinar a qué tiempo la velocidad en el centro alcanza los
14cm/s. Para lograr esto tenemos que implementar un método de prueba y error: cambiamos el
paso de tiempo en la parte superior y monitoreamos la velocidad en la gráfica de igual manera
que hicimos para el problema anterior. Después de varios intentos se observa que el tiempo al cual
ocurre una velocidad más cercana a los 14cm/s es a 8s (Figura 5.5)

5.5. Modificación de un caso existente


Ahora que hemos creado un caso por nuestra cuenta es muy facil hacer variantes de ese caso,
por ejemplo, un problema muy conocido en mecánica de fluidos es el Flujo de Poiseuille que

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


30

Figura 5.5: Velocidad en el centro de las dos placas a 8 segundos

consiste en un flujo debido a un gradiente de presión. Otro problema interesante es el Flujo de


Couette-Poiseuille que consiste en una combinación de flujo debido al movimiento de una placa y
a un gradiente de presión.

5.5.1. Flujo de Poiseuille


Consideremos la misma geometrı́a que el problema de Flujo de Couette: Un fluido que pasa por
un espacio entre dos placas paralelas, sólo que en este caso ambas placas están fijas y el fluido se
mueve gracias a un gradiente de presión. Observamos que para resolver el problema lo único que
hay que cambiar son las condiciones de frontera. Para no modificar directamente los archivos del
flujo de Couette, copiamos las carpetas 0, constant y system a una nueva carpeta que llamaremos
poiseuille.
Las condiciones de velocidad deben ser:

movingWall: velocidad cero (Nótese que le dejamos el mismo nombre aunque ahora sea pared
fija)

fixedWall: velocidad cero

inlet: gradiente cero

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


31

outlet: gradiente cero

frontAndBack: empty

Las condiciones de presión deben ser:

movingWall: gradiente cero

fixedWall: gradiente cero

inlet: valor fijo de 0.1

outlet: valor fijo de cero

frontAndBack: empty

Una vez cambiadas las condiciones, repetimos los pasos para correr la simulación:

1. Abrir la terminal y cambiarnos al caso poiseuille

2. La geometrı́a y la malla se copiaron del caso couette y no es necesario generarlas nuevamente

3. Teclear el nombre del solver, en este caso: icoFoam

4. Al terminar la simulación teclear paraFoam para ver los resultados.

La distribución de velocidades del Flujo de Poiseuille debe quedar como en la Figura 5.6. Se
observa que se forma un perfil parabólico, tal como se reporta en la literatura [4].

5.5.2. Flujo de Couette-Poiseuille


Este tipo de flujo es una combinación entre el flujo de Couette y el flujo de Poiseuille, esto es,
el flujo se debe tanto a un gradiente de presión como al movimiento de una de las fronteras, en este
caso de la placa inferior.
Para llevar a cabo la simulación de este caso copiamos las carpetas 0, constant y system del
caso couette al una nueva carpeta que llamaremos couettePoiseuille.
Igual que en el caso pasado lo único que debemos modificar son las condiciones de frontera. La
geometrı́a y la malla quedan igual, ası́ como la configuración de la carpeta system.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


32

Figura 5.6: Distribución de velocidades en flujo de Poiseuille

Para la presión se cambia únicamente la condición de la frontera inlet a un valor fijo de 0.3.
Para la velocidad se modifica la frontera movingWall a un valor fijo de (0.200).
Una vez cambiadas estas condiciones se procede a correr la simulación como de costumbre.
Se abren los resultados en paraview y la distribución de velocidades a los 5 segundos debe quedar
como en la Figura 5.7.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


33

Figura 5.7: Distribución de velocidades en flujo de Couette-Poiseuille

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


Capı́tulo 6

Modificación de un solver existente: adición


de la ecuación de energı́a a icoFoam

Ahora que hemos desarrollado y corrido varios casos para un solver veremos como modificar
dicho folder. Digamos que en el caso de flujo de Couette tenemos que la placa fija está a cierta
temperatura y la placa movil a una temperatura diferente, en este caso el solver icoFoam no nos
sirve ya que solamente resuelve flujo laminar transitorio pero no tiene la capacidad de resolver
la ecuación de la energı́a. Para resolver nuestro problema añadiremos la ecuación de la energı́a a
icoFoam para que a partir de la distribución de velocidades calcule la distribución de temperaturas
[5].

6.1. Descripción de los archivos básicos de un solver


Los solvers se encuentran separados del código fuente de OpenFOAM en una carpeta llamada
applications. Entramos al disco duro File → System → opt → OpenFOAM222 → applications →
solvers. En esta carpeta se encuentran todos los solvers con que cuenta OpenFOAM. A nosotros nos
interesa modificar el solver icoFoam. Abrimos una terminal y tecleamos cd $FOAM SOLVERS/incompressible.
Ya estando ahı́ tenemos que crear un nuevo directorio en nuestra carpeta de usuario para luego co-
piar el solver a esa carpeta. Para esto tecleamos:

mkdir -p $WM PROJECT USER DIR/applications/solvers

cp -r icoFoam $WM PROJECT USER DIR/applications/solvers/icoFoamT

cd $WM PROJECT USER DIR/applications/solvers/icoFoamT

34
35

Ahora entramos en la carpeta del solver que acabamos de crear yendo a: Home → OpenFOAM
→ user-2.2.2 → applications → solvers → icoFoamT. Podemos ver 2 archivos y una carpeta, el
archivo icoFoam.C es el que contiene la información sobre las ecuaciones que tiene que resolver
ası́ como instrucciones para resolverlas. El archivo createFields.H es el que se encarga de crear
los campos de presión y velocidad ası́ como de leer las propiedades fı́sicas. Dentro de la carpeta
Make existe el archivo files que contiene los archivos que se usaran en la compilación y options que
contiene las librerı́as que utiliza el solver.

6.2. Modificación de los archivos


Para lograr compilar un solver nuevo tenemos que modificar los archivos del solver viejo y ten-
dremos que cambiarle el nombre para que no lo reescriba sobre el ya existente. Después habrá que
agregar las ecuaciones nuevas que habrá de resolver ası́ como añadir el campo de temperaturas y la
difusividad térmica como constante.

6.2.1. icoFoam.C
Lo primero que hay que hacer es cambiar el nombre, lo podemos hacer simplemente dando
click derecho en el archivo y escoger ”rename...”. La otra opción es desde la terminal, estando
en la carpeta del solver, teclear: mv icoFoam.C icoFoamT.C. Cabe mencionar que nosotros hemos
escogido el nombre icoFoamT para el nuevo solver, sin embargo se puede escoger cualquier nom-
bre, siempre y cuando se sea consistente y se ponga el mismo nombre en todos los archivos que
correspondan.
Una vez que se ha cambiado el nombre de este archivo procedemos a abrirlo con el editor
de textos. Observamos que inicia con un encabezado con la descripción del solver, en esta parte,
aunque no es necesario, es bueno cambiar el nombre del solver y agregar en la descripción la
solución de la temperatura. Después inicia el time loop y declara la ecuación de la velocidad (Figura
):

∂U
+ ∇ · φU − ∇ · ν∇U = −∇p (6.1)
∂t
Después de esto comienza el PISO loop que resuelve la cantidad de movimiento. Debido a que
la distribución de temperaturas depende de la distribución de velocidades colocaremos la ecuación
de la energı́a justo al terminar el PISO loop. Esta ecuación es:

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


36

Figura 6.1: Archivo icoFoamT.C parte 1

∂T
+ ∇ · φT − ∇ · α∇T = 0 (6.2)
∂t
Una vez añadido esto guardamos el archivo y lo cerramos.

6.2.2. createFields.H
El archivo createFields crea los campos correspondientes a cada una de las variables, además
de leer las propiedades de transporte del fluido en cuestión. Al abrir el archivo, observamos que lo
primero que hace es leer las propiedades de transporte, indica el diccionario del cual las va a leer
(tranrportProperties) y finalmente indica la propiedad que va a leer (nu). Aquı́ lo que tenemos que
hacer es agregar una nueva propiedad ya que para resolver la ecuación de la energı́a necesitamos la
difusividad térmica, DT (Figura 6.3).
Después de las propiedades de transporte viene la creación de los campos de las variables. El
campo de presión es un campo escalar y el de la velocidad es un campo vectorial. En el caso de la
temperatura debemos añadir un nuevo campo escalar (Figura 6.4).

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


37

Figura 6.2: Archivo icoFoamT.C parte 2

6.2.3. make/files
Dentro de la carpeta Make encontramos el archivo files, el cual contiene la información de
los archivos que se usarán para la compilación del solver. Para nuestro nuevo solver tenemos que
modificarlo de manera que quede como en la Figura 6.5.
El archivo options no es necesario editarlo. Ahora que ya modificamos los archivos necesarios
para el nuevo solver tenemos que compilarlo para poder utilizarlo.

6.3. Compilación del solver nuevo


Para compilar nuestro nuevo solver entramos a la terminal y nos cambiamos a la carpeta del
solver tecleando en la terminal:

cd OpenFOAM/user-2.2.2/applications/solvers/icoFoamT

wclean

wmake

El comando wclean sirve para limpiar los archivos compilados que pudieran existir antes y es
necesario quitarlos para poder crear los nuevos. El comando wmake compila todos los archivos

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


38

Figura 6.3: Archivo createFields.H para el solver icoFoamT parte 1

que modificamos para crear el ejecutable del solver nuevo. Si no hay nigún error el archivo binario
de icoFoamT debe aparecer en la carpeta FOAM USER APPBIN. Para corroborar tecleamos ls
$FOAM USER APPBIN en la terminal y debe aparecer el archivo icoFoam. En la Figura 6.6 se
muestra el procedimiento de compilación.

6.4. Validación del solver: flujo de Couette con temperatura


Para validar que el solver de resultados coherentes tenemos que correr un caso. Tomaremos el
caso de flujo de Couette que ya hemos corrido con anterioridad y le añadiremos el campo de tem-
peraturas. El campo interno será de 300K, la pared fija tendrá 500K y la pared móvil tendrá 300K.
Entramos a la carpeta OpenFOAM → user-2.2.2 → run → tutorials → incompressible y crea-
mos una nueva carpeta que se llame icoFoamT, ahı́ creamos una carpeta que se llame couette y
copiamos las carpetas 0, constant y system del caso de couette original.

6.4.1. Creación del campo de temperaturas


Para crear el campo de temperaturas entramos desde la terminal a la carpeta 0 del caso couette
del solver icoFoamT (cd $FOAM RUN/tutorials/incompressible/icoFoamT/couette/0) y tecleamos
cp p T. Con esto observamos que se creó un nuevo archivo T, lo abrimos y tenemos que cambiar

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


39

Figura 6.4: Archivo createFields.H para el solver icoFoamT parte 2

las unidades a grados Kelvin (K). Cambiamos el campo interno y las condiciones de frontera tal y
como ya mencionamos y lo guardamos (Figura 6.7).

6.4.2. Modificación de las propiedades de transporte


Para poder correr el caso debemos agregar una nueva propiedad de transporte, la difusividad
térmica, que en el entorno de OpenFOAM se denota como DT. Entramos a la carpeta constant y
abrimos el archivo transportProperties. Copiamos la linea de la viscosidad cinemática y la pegamos
en una linea más abajo. Cambiamos donde diga nu por DT, las unidades son las mismas y finalmente
le asignamos un valor de 1.9 × 10−5 que es la difusividad del aire a 300K. Guardamos y cerramos.

6.4.3. Configuración de la carpeta system


Entramos a la carpeta system y abrimos el archivo fvSchemes. Observamos que los métodos
de solución están organizados por el tipo de términos, esto es, derivadas temporales, gradientes,
divergentes y laplacianos. Si recordamos, en la ecuación de temperatura que agregamos, incluimos
un divergente y un laplaciano, por lo tanto hay que agregar un término bajo cada uno de estos
encabezados. En la Figura 6.8 observamos las lineas que hay que agregar.
Posteriormente abrimos el archivo fvSolution y vemos que se encuentran los criterios de conver-

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


40

Figura 6.5: Archivo files para el solver icoFoamT

gencia bajo cada una de las variables a resolver. Como agregamos una nueva variable, T, debemos
agregar un nuevo paquete de criterios de solución. La Figura 6.9 muestra dichos criterios.

6.4.4. Ejecución e interpretación de resultados


Una vez que hemos modificado dichos archivos podemos correr el caso. En la terminal entramos
a la carpeta del caso couette del solver icoFoamT. Ya que copiamos la carpeta polyMesh del caso
original, ya tenemos la geometrı́a y la malla generadas, por lo que no es necesario teclear block-
Mesh. Procedemos a correr directamente el caso tecleando icoFoamT. Al terminar la simulación
tecleamos paraFoam para ver los resultados.
Esta vez, además de aplicar todas las partes de la malla, tenemos que aplicar todos los campos
ya que por default sólo se cargan la presión y la temperatura. Observamos de forma superficial
y dejamos correr el tiempo, se observa un perfil parecido al de la velocidad pero con los colores
invertidos ya que la temperatura mayor se encuentra en la parte superior. Si utilizamos el filtro Plot
Over Line observamos un perfil lineal, correspondiente a la difusión de calor entre dos placas.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


41

Figura 6.6: Procedimiento de compilación de icoFoamT.

6.4.5. Modificación del solver pisoFoam


El solver pisoFoam, al igual que el icoFoam, es para fluidos incompresibles en estado transito-
rio. La diferencia radica en que pisoFoam perminte utilizar modelos de turbulencia RAS (Reynolds-
averages stress) y LES (Large-eddy simulation), ası́ como régimen laminar, por lo que es más fle-
xible a la hora de simular.
Debido a esta flexibilidad se utilizará dicho solver en los siguientes capı́tulos, por lo que se
recomienda como ejercicio que se modifique de la misma manera, añadiendo la ecuación de la
temperatura.
Después de modificar el solver procedemos a crear una carpeta en los tutoriales bajo el tipo in-
compressible llamada pisoFoamT (o como se haya nombrado el pisoFoam modificado) y copiamos
las carpetas 0, constant y system de algún tutorial de pisoFoam. Una vez copiados se sugiere que
se proceda a recrear el flujo de Couette con temperatura.
En la carpeta 0 aparecen algunos parámetros extra correspondientes a los modelos de turbulen-
cia. En este caso utilizaremos régimen laminar, por lo que en la carpeta constant abrimos el archivo
turbulenceProperties y establecemos el tipo de simulación como laminar. Posteriormente en el ar-
chivo RASProperties establecemos el modelo RAS como laminar, la turbulencia off y la impresión
de los coeficientes off. Con esto evitamos que el solver requiera los parámetros extra como datos
de entrada y lo limitamos a que lea solamente los archivos p, U y T.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


42

Figura 6.7: Campo de temperaturas para el caso de Couette.

Después de correr el caso con el pisoFoam modificado, debe resultar una distribución de velo-
cidades y de temperaturas idénticas a aquellas obtenidas con el icoFoamT

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


43

Figura 6.8: Archivo fvSchemes para el caso de Couette con temperatura.

Figura 6.9: Archivo fvSolution para el caso de Couette con temperatura.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


44

Figura 6.10: Distribución de temperatura en flujo de Couette.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


Capı́tulo 7

Flujo al rededor de un tubo con temperatura

Ahora que hemos hecho algunos ejemplos con geometrı́as sencillas procederemos a realizar un
ejercicio más complicado en cuanto a la geometrı́a y la malla se refiere. Haremos la simulación del
flujo de aire al rededor de un tubo circular dentro del cual fluye refrigerante a una menor tempe-
ratura, de esta manera observaremos las perturbaciones en el aire debido al tubo y de qué manera
se enfrı́a dicho aire. Llevaremos a cabo la simulación mediante el solver pisoFoamT, por lo que
crearemos una carpeta llamda tube dentro de la carpeta del solver en los tutoriales y copiamos las
carpetas de costumbre.

7.1. Descripción de la geometrı́a y técnica de mallado


La geometrı́a consiste en un tubo de 1cm de diámetro ubicado en un canal de 5cm de alto y
20cm de largo, el tubo está ubicado en el centro del canal y a 2.5cm de la entrada. La geometrı́a
se divide de tal forma que resulten secciones más o menos rectangulares para que el mallado sea
lo más uniforme posible. En la Figura 7.1 se muestra la geometrı́a con sus divisiones y los vértices
de una cara numerados en color negro, los vértices de la otra cara se numeran siguiendo la misma
secuencia. En color amarillo se numeran los bloques de la geometrı́a.

7.2. Construcción de la geometrı́a y malla en OpenFOAM a


partir de datos de SolidWorks
En total se tienen 74 vértices y 24 bloques, además de los 32 arcos que hay que definir debido
a los bordes curvos. Debido a la complejidad y lentitud de calcular las coordenadas de cada uno de

45
46

Figura 7.1: Geometrı́a del flujo al rededor de un tubo.

los vértices y de los puntos medios de los arcos, se optó por hacer la geometrı́a en SolidWorks, ya
que al hacer click en cualquier punto se muestran sus coordenadas. En base a estas coordenadas se
va construyendo la geometrı́a en OpenFOAM de acuerdo a los criterios establecidos en la sección
3.1.1.
Primeramente se definen todos los vértices de la geometrı́a seleccionando cada uno de los pun-
tos en SolidWorks y copiando sus coordenadas en OpenFOAM. Como estrategia de agilización se
pueden definir los vértices del plano z = 0 (Figura 7.2), después copiarlos y pegarlos enseguida de
éstos para solamente modificar la coordenada z.
Posteriormente se definen los bloques como ya se estableció, tomando el primer vértice como
origen local, el segundo como dirección positiva en x, el tercero como dirección positiva y, el cuarto
para completar el plano, el quinto como dirección positiva z y los últimos 3 en el mismo orden que
los primeros (Figura 7.2).
Para definir los bordes circulares hay que definir 8 arcos para la frontera del tubo y 8 arcos para
el circulo externo, esto para el plano z = 0 y además otros 16 arcos para la cara frontal. De igual
manera que con los vértices, se pueden definir los primeros 16 arcos y los siguientes sólamente
requieren una modificación en la coordenada z (Figura 3.3).
Finalmente se definen las fronteras con sus caras correspondientes. No definimos las fronteras
frontal y posterior ya que el mismo OpenFOAM las toma por default como de tipo empty (Figura
7.3). La Figura 7.4 muestra la malla que se genera.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


47

Figura 7.2: Primer grupo de vértices y bloques para la geometrı́a del tubo.

Frontera Nombre Tipo Número de caras


Izquierda inlet patch 4
Derecha oulet patch 4
Inferior y Superior UpDown wall 10
Tubos tube wall 8
Cuadro 7.1: Nombres y tipos de frontera para el tubo.

7.3. Definición de las condiciones de frontera e iniciales


Ahora que hemos definido la geometrı́a, la malla y las fronteras procederemos a definir las
condiciones de frontera e iniciales.
Para la velocidad definiremos un campo interno de 0.1505m/s en dirección x, lo que quiere
decir que desde el principio todas las partı́culas se estarán moviendo a dicha veloidad, esto para
no ocupar tiempo de cómputo en desarrollar el flujo de aire y ası́ observar más rápidamente las
perturbaciones debidas al tubo. Esta velocidad aunque parezca aleatoria corresponde a un número
de Reynolds de 100 en base al diámetro del tubo y la viscosidad del aire:

D|U|
ReD = (7.1)
ν

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


48

Figura 7.3: Bordes y fronteras para la geometrı́a del tubo.

ReD ν (100)(15.05 × 10−6 m2 /s)


|U| = = = 0.1505m/s (7.2)
D 0.01m
Las condiciones de frontera de velocidad deben ser:

inlet: velocidad de 0.1505m/s en dirección x

outlet: Gradiente cero

UpDown: Velocidad cero

tube: Velocidad cero

Le campo interno de presión es un valor uniforme de 0m2 /s2 Las condiciones de frontera de
presión deben ser:

inlet: Gradiente cero

outlet: Presión cero

UpDown: Gradiente cero

tube: Gradiente cero

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


49

Figura 7.4: Geometrı́a y malla del tubo.

Para la temperatura definimos un campo interno de 300K, apróximadamente 27◦C. Las condi-
ciones de frontera de temperatura deben ser:

inlet: Gradiente cero

outlet: Gradiente cero

UpDown: Gradiente cero

tube: Temperatura de 250K

7.4. Determinación de las propiedades de transporte


Al igual que el ejemplo de flujo de Couette, en este caso tenemos aire como fluido de trabajo,
por lo tanto utilizaremos las mismas propiedades. La viscosidad cinemática ν = 15.05 × 10−6 m2 /s
y la difusividad térmica α = 19 × 10−5 . Si abrimos el archivo transortProperties observamos que
existen nuevos parámetros. Estos parámetros o coeficientes corresponden al modelo de viscosidad
a utilizar. En nuestro caso queremos un modelo Newtoniano que no utiliza dichos coeficientes, por
lo que en el apartado transportModel definimos Newtonian.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


50

7.5. Configuración de la carpeta system


En la carpeta system lo único que necesitamos configurar es el archivo controlDict, especı́fi-
camente el paso de tiempo y el tiempo total a simular. En base a las medidas de la geometrı́a y
las divisiones que hicimos en la malla se puede encontrar un δx mı́nimo, que es 0.07071cm. La
velocidad establecida fue de 0.1505m/s por lo que para obtener un número de Courant aceptable,
el paso de tiempo debe ser: 4.72 × 10−3 , sin embargo, para darle un margen de error, escogeremos
2 × 10−3 . El tiempo final lo dejaremos en 5s y el intervalo de escritura lo establecemos en 50 para
que escriba los resultados cada 0.1s.

7.6. Ejecución e interpretación de resultados


Como de costumbre entramos en la terminal a la carpeta del ejemplo y tecleamos blockMesh.
Si se desea se puede entrar a ParaView a corroborar que la geometrı́a y la malla sean correctas.
Posteriormente tecleamos pisoFoamT para correr la simulación y al terminar lo abrimos tecleando
paraFoam.
La Figura 7.5 muestra las distribuciones de velocidad y temperatura del flujo al rededor del
tubo a los 5 segundos. En la velocidad se observa la formación de los vórtices de Von Karman
caracterı́sicos en este tipo de sistemas [4].

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


51

Figura 7.5: Distribución de velocidad y temperatura a 5 segundos.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


Capı́tulo 8

Flujo a través de un banco de tubos con


temperatura

Ya que hemos hecho el estudio del flujo al rededor de un tubo deseamos extender nuestro
estudio a un banco de tubos como el que se encunetra en los evaporadores de los refrigeradores.

8.1. Descripción de la geometrı́a y sus complicaciones en Open-


FOAM
Se eligió el diseño de un evaporador comercial que consta de 18 tubos en grupos intercalados
de dos en dos con diámetro de 0.805cm. La separación entre tubos se encuentra en la Figura 8.1. El
dominio de la simulación será de una altura de 5 veces la separación entre el tubo inferior y el tubo
superior (16.5cm) por 70cm de longitud, ubicando el banco de tubos a una distancia de 5cm de la
entrada con respecto al centro del primer tubo, y al centro del canal.
Como ya vimos en el capı́tulo pasado el desarrollo de la geometrı́a y el mallado para un tubo
requirió definir 74 puntos, para 18 tubos tendrı́amos que definir por lo menos 1332 vértices lo que
hace la tarea practicamente imposible. Debido a la complejidad de hacer la geometrı́a y malla de
un banco de 18 tubos vértice por vértice se decidió elaborar la geometrı́a y el mallado en ANSYS
15.0.
Debido a que nuestro fenómeno se simula en sólo dos dimensiones, se hace la malla bidimen-
sional en ANSYS y posteriormente al importar la malla en OpenFOAM, este se encarga de añadir
la tercera dimensión que necesita para correr.

52
53

Figura 8.1: Geometrı́a del banco de tubos en SolidWorks.

8.2. Generación de la geometrı́a y la malla en ANSYS


En el capı́tulo pasado nos encargamos de hacer la geometrı́a en SolidWorks y de ahı́ obtuvi-
mos las coordenadas necesarias. En este caso, debido a que SolidWorks solamente puede exportar
figuras tridimensionales, tendremos que hacer la geometrı́a bidimensional en el DesignModeler de
ANSYS (Figura 8.2) para posteriormente hacer el mallado. Para hacer las cosas más fáciles se nom-
bran las fronteras en ANSYS de manera que OpenFOAM las reconozca al momento de importar
la malla. Estas fronteras deben ser las mismas que en el caso de un tubo: inlet, outlet, UpDown y
tubos

Figura 8.2: Geometrı́a del banco de tubos en ANSYS 15.0.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


54

8.3. Exportación de la malla en ANSYS e importación en Open-


FOAM
Una vez que se tiene una buena malla se procede a exportarla desde ANSYS, esta malla debe
estar en formato ASCII, ya que es el formato aceptado por OpenFOAM. Para cambiar esta configu-
ración entramos a la pestaña tools → Options → Meshing → Export → Format of input file (Figura
8.3). Finalmente se guarda con la extensión .msh y se le da el nombre evaporador.

Figura 8.3: Configuración del formato de exportación en ANSYS 15.0.

Una vez que se tiene el archivo .msh se crea una carpeta en Linux dentro de la carpeta piso-
FoamT de los tutoriales llamada evaporador. Ahı́ dentro copiamos las carpetas de costumbre 0,
constant y system, además de colocar el archivo .msh. Entramos a la carpeta polyMesh y borramos
todos los archivos incluyendo el archivo blockMeshDict. Finalmente entramos en la terminal a la
carpeta del caso evaporador y tecleamos fluentMeshToFoam evaporador.msh. Con esto queda la
malla lista para simular en OpenFOAM. La Figura 8.4 muestra la comparación entre la malla ge-
nerada en ANSYS y la convertida por OpenFOAM, en la cual podemos observar que la conversión
es muy buena.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


55

Figura 8.4: Comparación entre la malla generada en ANSYS y la convertida por OpenFOAM.

8.4. Preparación de la simulación en OpenFOAM


Si se definieron las fronteras en ANSYS, estas aparecen en la carpeta PolyMesh en el archivo
boundary. Estas fronteras son las que utilizaremos en los archivos p, U y T de la carpeta 0 para
definir las condiciones de frontera. Dichas condiciones son iguales a las del caso de un tubo. Las
propiedades de transporte a utilizar son otra vez las propiedades del aire.
Para el archivo controlDict establecemos un paso de tiempo de 5 ×−4 s, un intervalo de escritura
de 200 y como tiempo final 5s.

8.5. Ejecución e interpretación de resultados


Como de costumbre entramos en la terminal a la carpeta del solver y tecleamos pisoFoamT.
Esta vez la simulación tardará más de lo acostumbrado ya que el dominio es 12 veces más grande
que el de un tubo y el paso de tiempo es 10 veces menor.
Una vez terminada la simulación se cargan los resultados al ParaView y se observan las dis-

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


56

tribuciónes de velocidad (Figura 8.5), presión (Figura 8.6) y temperatura (Figura 8.7) a 1, 2 y 3
segundos de empezada la simulación. Observamos que la perturbación en la velocidad del aire es
muy parecida a la observada con un sólo tubo.

Figura 8.5: Distribución de velocidad a 1, 3 y 5 segundos.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


57

Figura 8.6: Distribución de presión a 1, 3 y 5 segundos.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


58

Figura 8.7: Distribución de temperatura a 1, 3 y 5 segundos.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


Capı́tulo 9

Modificación de un modelo de viscosidad:


Ley de la potencia con viscosidad
dependiente de la temperatura

Como sabemos, las propiedades fı́sicas y de transporte de los fluidos varı́an con la temperatura,
es por eso que para recrear mejor el fenómeno, se modificó uno de los modelos de viscosidad para
hacerlo dependiente de la temperatura.
Se tomaron datos de viscosidad a diferentes temperaturas y se ajustó a un modelo lineal como
primer ejercicio. La Figura 9.1 muestra la comparación de la distribución de temperaturas y la
viscosidad cinemática.

9.1. Definición del modelo de viscosidad

59
60

Figura 9.1: Comparación de la disribución de temperatura y viscocidad después de 2 segundos.

Grupo de Energı́as Térmica y Renovable, Facultad de Ingenierı́a Mecánica y Eléctrica, UANL


Bibliografı́a

[1] http://www.openfoam.com/

[2] http://www.openfoam.org/features/

[3] http://www.openfoam.org/archive/2.2.2/download/ubuntu.php

[4] Frank M. White. Viscous Fluid Flow. Second edition. McGraw-Hill. 1991.

[5] http://openfoamwiki.net/index.php/How to add temperature to icoFoam

61

También podría gustarte