Ejercicios OpenFOAM - Universidad de Buenos Aires

Anuncio
Facultad de Ciencias Exactas y Naturales
Universidad de Buenos Aires
Sistemas Complejos en Máquinas Paralelas
Introducción a OpenFOAM
Ejercicios
Nicolas D. Badano
Noviembre 2014
1.
Introducción
1.1.
Configuración del entorno
Para poder utilizar los comandos y librerı́as de OpenFOAM es necesario
cargar las rutas correspondientes en el entorno de Bash. Para eso, vamos a
editar el script donde se inicializa el entorno de la terminal. Podemos utilizar
cualquier editor de texto (nano, gedit , vim, etc). Por ejemplo:
$ g e d i t $HOME/ . b a s h r c
En la linea final de ese archivo agregar la linea:
. / opt / openfoam230 / e t c / b a s h r c
Luego de guardar el archivo, es necesario cerrar la terminal y abrir una
nueva. Esta cargará en su inicialización los directorios de los ejecutables y
las librerı́as de OpenFOM.
Para verificar que la ruta a los ejecutables están correctamente configurada puede ejecutarse el comando:
$ which blockMesh
que deberı́a devolver el siguiente resultado:
/ opt / openfoam230 / p l a t f o r m s / linux64GccDPOpt / b i n / blockMesh
1.2.
Directorios de utilidad
Manual de usuario y programador:
/ opt / openfoam230 / doc
Casos listos para correr
/ opt / openfoam230 / t u t o r i a l s
Código fuente de los solvers y utilidades
/ opt / openfoam230 / a p p l i c a t i o n s
Código fuente de las librerı́as
/ opt / openfoam230 / s r c
Directorio donde se compilan los solvers de usuario
$HOME/OpenFOAM/ u s u a r i o − 2 . 3 . 0 / p l a t f o r m s / linux64GccDPOpt /
bin /
1
2.
Trabajando con la ecuación de difusión
A continuación dentro de la carpeta de usuario vamos a crear un directorio
para almacenar las corridas de la clase:
$ mkdir c o r r i d a s && cd c o r r i d a s
Luego descargamos el primero de los casos para trabajar, lo descomprimimos y entramos al nuevo directorio:
$ wget h t t p s : / / d l . d r o p b o x u s e r c o n t e n t . com/u /19198096/
c a s o D i f u s i o n . t a r . gz
$ t a r −x z f c a s o D i f u s i o n . t a r . gz
$ cd c a s o D i f u s i o n
Una vez dentro del caso, el primer paso consiste en generar la malla
de cálculo, en este caso utlizando la utilizad blockMesh. Esta lee el archivo constant/polyMesh/blockMeshDict, que contiene una estructura de nodos,
aristas y bloques, ası́ como la definición de los nombres que reciben cada uno
de los bordes.
$ blockMesh
Una vez generada la malla, ya podemos hacer una primera visualización
del caso en Paraview, para ver la geometrı́a ya los nombres de las condiciones
de borde. Para poder abrir el caso en Paraview es necesario crear un archivo
vacio con el nombre de la corrida y extensión .foam :
$ touch c a s o D i f u s i o n . foam
Y luego podemos abrir ese archivo:
$ paraview c a s o D i f u s i o n . foam
Una vez revisado, la simulación se realiza ejecutando el solver correspondiente:
$ laplacianFoam
Los resultados pueden observarse abriendo nuevamente el caso en paraview.
2.1.
Ejercicios
2.1.1.
Ejercicio 1
Visualizar los resultados de temperatura con paraview. ¿Cuantos segundos dura la simulación? ¿Puede considerarse que se halla alcanzado el estado
2
estacionario? Volver a correr la simulación durante más tiempo hasta obtener
una mejor estabilización.
Ayuda: El perı́odo de simulación se encuentra configurado en system/controlDict
.
2.1.2.
Ejercicio 2
Utilizar la misma geometrı́a para ensayar otro juego de condiciones de
borde. Suponer las siguientes condiciones de borde:
Temperatura constante de 273 K en los bordes up y left .
Gradiente de temperatura entrante de 1000K/m en el borde.
Ningún flujo de calor en el resto de los bordes (gradiente cero).
Repetir la simulación bajo esas condiciones y comparar los resultados.
Ayuda: La condición de borde de gradiente se expresa como:
hole
{
type
gradient
}
2.1.3.
fixedGradient ;
uniform 2 0 0 ;
Ejercicio 3
El código fuente del solver laplacianFoam está ubicado en:
/ opt / openfoam230 / a p p l i c a t i o n s / s o l v e r s / b a s i c / l a p l a c i a n F o a m /
Analizar el código fuente. ¿Donde se lee el campo de T con sus condiciones
de borde? ¿Donde se resuelve la ecuación en derivadas parciales?
Ayuda: La ecuación diferencial del problema es:
∂T
= ∇ · (Dt ∇T )
∂t
3
(1)
2.1.4.
Ejercicio 4
Correr alguno de los casos de las ecuación de difusión en paralelo.
Copiar alguna de las corridas y borrar todos los pasos de tiempo simulados (dejar solo el 0)
Colocar el archivo decomposeParDict en el directorio system de la corrida.
$ wget h t t p s : / / d l . d r o p b o x u s e r c o n t e n t . com/u /19198096/
decomposeParDict
$ mv decomposeParDict system /
Editar en ese archivo el número de procesadores a usar.
Descomponer el dominio y la condición inicial:
$ decomposePar
Ejecutar el solver correspondiente en paralelo:
$ mpirun −np 4 l a p l a c i a n F o a m − p a r a l l e l
3.
Trabajando con la ecuación de transporte
Ubicarse en la terminal dentro de la carpeta de corridas antes creada.
Luego copiar uno de los ejemplos presentes en la carpeta de OpenFOAM:
$ cp −r / opt / openfoam230 / t u t o r i a l s / b a s i c /
scalarTransportFoam / p i t z D a i l y / .
$ cd p i t z D a i l y
Este caso corresponde a un flujo dentro de una geometrı́a en que existe
un escalón. El campo de velocidades en sı́ no se resuelve, sino que se toma
como un resultado previo, de un solver distinto. Lo que se simula en este
caso es el transporte advectivo y la difusión de un escalar en ese campo de
velocidades.
Al igual que en el caso anterior, el caso está prácticamenete listo para
correr. Solo hace falta crear la malla y lanzar la corrida:
$ blockMesh
$ scalarTransportFoam
4
Y para observar los resultados:
$ touch p i t z D a i l y . foam
$ paraview p i t z D a i l y . foam
3.1.
Ejercicios
El solver scalarTransportFoam solo resuelve el transporte de un escalar
pasivo.
∂T
− ∇ · (U T ) − ∇ · (Dt ∇T ) = 0
(2)
∂t
En este ejercicio vamos a modificar el solver para agregar un decaimiento
lineal al escalar.
∂T
− ∇ · (U T ) − ∇ · (Dt ∇T ) = −Cd T
∂t
3.1.1.
(3)
Ejercicio 1
Modificar el solver. Para eso es necesario:
Copiar el código del solver por defecto a la carpeta de usuario y cambiarle el nombre a scalarTransportDecayFoam. Por ejemplo:
$ cp −r / opt / openfoam230 / a p p l i c a t i o n s / s o l v e r s / b a s i c /
s c a l a r T r a n s p o r t F o a m / $HOME/
scalarTransportDecayFoam
Cambiar el nombre del archivo principal del solver (scalarTransportDecayFoam
.C)
Dentro del archivo Make/files:
• Corregir el nombre del archivo fuente y del archivo ejecutable resultante
• Reemplazar en el directorio de destino FOAM APPBIN por FOAM USER APPBIN
. Esto indica a OpenFOAM que el archivo compilado debe colocarse en una carpeta dentro del home del usuario, y no en donde están
los binarios originales de OpenFOAM (que el usuuario normal no
tiene privilegios para escribir).
5
Dentro del código fuente ( createFields .H) agregar un nuevo parámetro
que se lee desde el diccionario transportProperties:
I n f o << ” Reading d i f f u s i v i t y DT\n” << e n d l ;
d i m e n s i o n e d S c a l a r DT
(
t r a n s p o r t P r o p e r t i e s . lookup ( ”DT” )
);
I n f o << ” Reading decay c o e f f i c i e n t Cd\n” << e n d l ;
d i m e n s i o n e d S c a l a r CD
(
t r a n s p o r t P r o p e r t i e s . lookup ( ”CD” )
);
Dentro de la rutina principal agregar el término de decaimiento. Simplemente:
solve
(
fvm : : ddt (T)
+ fvm : : d i v ( phi , T)
− fvm : : l a p l a c i a n (DT, T)
+ CD ∗ T
==
f v O p t i o n s (T)
);
Compilar el solver
$ wmake
3.1.2.
Ejercicio 2
Modificar el caso para correrlo con el nuevo solver:
Copiar la corrida con otro nombre.
Borrar los pasos de cálculo anteriores si es necesario.
6
En el archivo constant/transportProperties agregar:
CD
CD [ 0 0 −1 0 0 0 0 ] 1 0 ;
Correr el solver con decaimiento:
$ scalarTransportDecayFoam
Comparar los resultados con los simulados sin decaimiento. Experimentar
con distintos valores de Dt y Cd .
4.
Archivos adicionales
$ wget h t t p s : / / d l . d r o p b o x u s e r c o n t e n t . com/u /19198096/
c a s o D i f u s i o n . t a r . gz
$ wget h t t p s : / / d l . d r o p b o x u s e r c o n t e n t . com/u /19198096/
p i t z D a i l y . t a r . gz
$ wget h t t p s : / / d l . d r o p b o x u s e r c o n t e n t . com/u /19198096/
p i t z D a i l y D e c a i m i e n t o . t a r . gz
$ wget h t t p s : / / d l . d r o p b o x u s e r c o n t e n t . com/u /19198096/
scalarTransportDecayFoam . t a r . gz
$ wget h t t p s : / / d l . d r o p b o x u s e r c o n t e n t . com/u /19198096/
decomposeParDict
7
Descargar