Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Foamtut PDF
Foamtut PDF
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
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
Una vez instalado correctamente, se procede a configurar OpenFOAM para que corra correcta-
5
6
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
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
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:
La primera parte del archivo es meramente informativo y contiene información que en realidad
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
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.
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
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
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.
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,
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:
si estás familiarizado con los métodos numéricos y sabes lo que estás haciendo, puedes cambiar el
método a utilizar.
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
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).
ParaView
21
22
Figura 4.1: Configuración de Para View para visualizar los resultados en forma superficial.
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
Figura 5.3: Distribución de velocidad entre las dos placas después de 10 segundos.
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:
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)
movingWall: velocidad cero (Nótese que le dejamos el mismo nombre aunque ahora sea pared
fija)
frontAndBack: empty
frontAndBack: empty
Una vez cambiadas las condiciones, repetimos los pasos para correr la simulación:
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].
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.
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].
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.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:
∂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).
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.
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
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.
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).
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.
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
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.
45
46
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.
Figura 7.2: Primer grupo de vértices y bloques para la geometrı́a del tubo.
D|U|
ReD = (7.1)
ν
Le campo interno de presión es un valor uniforme de 0m2 /s2 Las condiciones de frontera de
presión deben ser:
Para la temperatura definimos un campo interno de 300K, apróximadamente 27◦C. Las condi-
ciones de frontera de temperatura deben ser:
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.
52
53
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.
Figura 8.4: Comparación entre la malla generada en ANSYS y la convertida por OpenFOAM.
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.
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.
59
60
[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.
61