• No se han encontrado resultados

Estudio computacional de la aerodinámica de un cuerpo Ahmed con OpenFOAM

N/A
N/A
Protected

Academic year: 2020

Share "Estudio computacional de la aerodinámica de un cuerpo Ahmed con OpenFOAM"

Copied!
76
0
0

Texto completo

(1)

ESTUDIO COMPUTACIONAL DE LA AERODINAMICA DE UN CUERPO AHMED CON OPENFOAM

IVÁN DARÍO GÓMEZ RODRÍGUEZ

Proyecto de grado para optar al título de ingeniero Mecánico

Asesor:

Andrés Leonardo González Mancera, PhD.

UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERÍA

DEPARTAMENTO DE INGENIERÍA MECÁNICA BOGOTA D.C

(2)

1

AGRADECIMIENTOS

Al profesor Andrés Gonzáles Mancera por permitirme desarrollar un proyecto en mi área de interés y el asesoramiento para cumplir con mi trabajo.

Al mis padres, José William Gómez y Luz Marina Rodríguez por su constante apoyo y confianza, que me permitieron cumplir con todo lo que he logrado en mi vida.

(3)

2

Contenido

1. Nomenclatura ... 3

2. Introducción ... 4

3. Objetivos ... 5

3.1 Objetivo general ... 5

3.2 Objetivos específicos... 5

4. Marco teórico ... 6

4.1 Conceptos básicos de mecánica de fluidos computacional (CFD) ... 6

4.1.1 Componentes de un método de solución numérica ... 6

4.1.2 Modelos de turbulencia ... 7

4.2 Cuerpo Ahmed ... 8

4.2.1 Coeficiente de arrastre y sustentación ... 9

4.2.2 Coeficiente de presión ... 10

4.3 OpenFoam como software CFD ... 10

5. Metodología ... 11

5.1 Datos de referencia ... 11

5.2 Dominio computacional ... 12

5.3 Generación de la malla ... 12

5.4 Condiciones de simulación ... 13

5.4.1 Condiciones de frontera e iniciales ... 13

5.4.2 Parámetros de solución ... 14

7. Resultados ... 15

7.1 Análisis cuerpo Ahmed 0 ... 15

7.2 Análisis de modelos de turbulencia, Ahmed 0 ... 16

7.1 Análisis cuerpo Ahmed 25 ... 17

ANEXOS... 21

(4)

3

1. Nomenclatura 𝑣̂: Variable de Spalar-Allmaras

𝑈: Magnitud del vector velocidad

𝐼: Intensidad de turbulencia

𝑙: Longitud de referencia

𝐾: Energía de turbulencia

𝜔: Disipación de turbulencia Omega

𝜌: Densidad

𝜇: Viscosidad estática

𝜇𝑡

𝜇: Razón de viscosidad de Eddy

𝐶𝜇: Constante de turbulencia

𝜖: Disipación de turbulencia épsilon

𝐶𝑑: Coeficiente de arrastre

𝐷: Arrastre total sobre el cuerpo

𝐴: Área de referencia

𝑣: Velocidad a una distancia “infinita” del cuerpo

𝐶𝑙: Coeficiente de sustención

𝐿: Sustentación total sobre el cuerpo

𝐶𝑝: Coeficiente de presión

𝑃: Presion en el punto

𝑃∞: Presión a una distancia “infinita” del cuerpo

𝜌∞: Densidad a una distancia “infinita” del cuerpo

(5)

4

2. Introducción

La mecánica de fluidos computacional por sus siglas en ingles CFD (Computational Fluid Dynamics). es una rama de la mecánica de fluidos que usa el análisis numérico y algorítmico para resolver problemas relacionados con el flujo de fluidos. Los software de CFD a nivel básico son instrumentos que modelan y resuelven las ecuaciones de Navier-Stokes; ecuaciones que describen el comportamiento de los fluidos. Una de los primeros cálculos usando CFD lo desarrolló Lewis Fry Richardson con el objetivo de predecir el clima. Aunque sus resultados divergieron de forma dramática con la realidad, esto estableció las primeras bases de la mecánica de fluidos computacional [1]. Con el desarrollo de los instrumentos de cómputo y los algoritmos de análisis, los análisis obtenidos actualmente se aproximan a lo experimental y el uso de estos instrumentos es estándar en algunas aplicaciones de ingeniería. Una las aplicaciones más frecuentes se presenta en el análisis de flujo aerodinámico en el cual se implementan tanto para el análisis de vehículos terrestre como aéreos, hoy por hoy existe mucha documentación y consigo una gran variedad de modelos estándar implementados en diferentes condiciones. En el mercado actual hay una gran variedad de software que cumple con esos propósitos [2]; como ANSYS Fluent que se usa en la universidad de los andes [3]. Sin embargo, Aunque por medio de los softwares comerciales se puedan obtener buenos resultados de simulación, la mayoría no son gratuitos e inclusive la licencia obtenida por la compra está limitada a un número específico de computadores. Por otra parte, es posible disponer de softwares gratuitos en algunos casos con código abierto, en el cual no tienen nada que envidiar en capacidades y resultados a los productos comerciales.

En este proyecto se documenta el uso de un software estándar en el mercado actual llamado OpenFOAM 2.4. Para corroborar las capacidades del software, se usara un cuerpo estándar en el análisis de flujo libre; llamado cuerpo Ahmed, modelo estándar que en la actualidad está documentado tanto por resultados experimentales como de simulación.

(6)

5

3. Objetivos 3.1 Objetivo general

Desarrollar un estudio computacional usando el software OpenFOAM para predecir el desempeño aerodinámico de un cuerpo Ahmed.

3.2 Objetivos específicos

 Investigar y desarrollar el mallado de cuerpos con la herramienta “SnappyHexMesh”.

 Investigar y desarrollar algunos de los diferentes modelos de solución de flujo aerodinámico en OpenFOAM.

(7)

6

4. Marco teórico

4.1 Conceptos básicos de mecánica de fluidos computacional (CFD)

A pesar de que las ecuaciones de mecánicas de fluidos fueron formuladas en el siglo XIX [4] actualmente solo son aplicables para un numero de limitados de flujos, si bien permiten entender el comportamiento que tendrá un fluido no es posible implementarlas como herramientas de diseño e ingeniería. Por ello, se hace uso de simplificaciones de estas con modelos experimentales como el análisis dimensional. Sin embargo, estos análisis son aplicables en casos donde ya hay suficiente documentación experimental y las simplificaciones no alteran de forma significativa los resultados. A partir de lo anterior nace el problema de implementarlo cuando no hay documentación experimental o es imposible obtener un modelo experimental, como es en el caso de flujo aerodinámico donde la dependencia de muchos números adimensionales hace imposible hacer un modelo a escala. Evitando todo los inconvenientes nombrados anteriormente se encuentra la alternativa y en algunos casos complementarias de aplicar la CFD.

Los fenómenos de la mecánica de fluidos pueden ser descritos con ecuaciones diferenciales; las cuales no tienen solución analítica, pero existen métodos alternativos para aproximar la solución de estas numéricamente. Esto es lo que principalmente hace la CFD. Aun con los conocimientos básicos, es necesario hacer un breve resumen de los componentes necesarios para aplicarla; especialmente en programas de CFD como OpenFOAM el cual no dispones de una interfaz además de dar la libertad de alterar los modelos de solución en el código base. 4.1.1 Componentes de un método de solución numérica

La siguiente lista está basada en la lista propuesta por Joel H. Ferziger y Milovan perić [17].

4.1.1.1 Modelo matemático

Todo métodos de aproximación numéricos requiere principalmente de la ecuaciones bases que puedan especificar modelo. Existen diferentes modelos matemáticos que pueden usarse en la mecánica de fluidos y estos se seleccionan de acuerdo a las condiciones del problema; ya sea por las condiciones de compresibilidad, de turbulencia o de dependencia temporal. Resulta impráctico usar la ecuación más general ya que resultan ser poco eficientes con situaciones específicas. Para este documento las ecuaciones que se aplican son planteadas a partir de las ecuaciones de Navier-Stokes en su modelo diferencial, ecuaciones que se pueden encontrar en cualquier referencia de mecánica de fluidos.

𝜌 ∗ 𝑔 − ∇𝑝 + 𝜇 ∗ (∇2𝑉) = 𝜌 ∗𝑑𝑉 𝑑𝑡

Ecuación 1. Ecuación diferencial de momento lineal flujo newtoniano [18]

4.1.1.2 Método de discretización

Para la solución numérica de las ecuaciones que modelan el problema, es necesario seleccionar un esquema de discretización de las variables que componen el problema. Existen muchos métodos, los más importantes y conocidos son las diferencias finitas, volúmenes finitos y elementos finitos. OpenFOAM funciona con el método de volúmenes finitos, además de tener algoritmos que emparejan ecuaciones y mejoran los resultados como los algoritmos PISO y SIMPLE. [5] por otra parte queda a disposición del usuario la selección del esquema de discretización para cada variable.

(8)

7 4.1.1.3 La malla

La ubicación de las variables está definidas por una malla numérica que es esencialmente una representación del dominio geométrico, generalmente este se define en coordenadas cartesianas para geometrías complejas. La forma en que están divididos los subdominios define el tipo unidad de control, ya sean elementos, volúmenes etc. Existen diferentes tipos de mallas de la cuales se pueden resaltar las estructuradas y las no estructuradas. La selección de la malla tiene efectos en la convergencia, precisión, estabilidad de la simulación. En este documento para la generación de la malla se usó la herramienta de OpenFOAM SnappyHexMesh el cual requiere de una malla estructurada, la cual se usó para modelar el problema.

Gráfica 1. A. malla estructurada en bloques B. malla no estructurada. [6]

4.1.1.4 Método de solución

Con las ecuaciones discretas en el dominio geométrico representado como la malla, se selecciona el método de solución. Este depende principalmente de la definición problema ya sea si es estacionario (funcionan con el número de iteraciones) o transitorio (requieren de pasos de tiempo). Los sistemas discretos se solucionan generalmente por métodos iterativos y su selección además depende de la cantidad de nodos y del tipo de malla. OpenFOAM al igual que con los métodos de discretización deja a disposición del usuario la selección del método para cada variable.

4.1.1.5 Criterio de convergencia

El criterio del método de solución para detener la iteración de una variable es el criterio de convergencia. Este factor tiene repercusiones en la precisión y eficiencia de la simulación. 4.1.2 Modelos de turbulencia

La mayoría de los fluidos de en la ingeniera se encuentran en régimen turbulento, En este tipo de fluidos se caracterizan por tener gran vorticidad, presentar fenómenos disipaditos y que su comportamiento varié fuertemente por los tamaños, cargas e intervalos de tiempo. Por esta razón, son difíciles de modelar y simular. Existen una gran variedad de esquemas para predecir este tipo de flujos, en la mecánica de fluidos computacional los modelos que generalmente se usan son los denominados RANS, LES, DNS y DES; cada uno de estos modelos tienen sus ventajas y desventajas dependiendo de la aplicación. OpenFOAM dispone de todos los modelos nombrados anteriormente, aun así el único modelo que se usó en este documento fue el modelo RANS con diferentes modelos de turbulencia. No se entrara en detalle con es el modelo RANS a nivel matemático, pero este modelo nace de la aproximación de las ecuaciones de Navier-Stokes para flujos turbulentos propuesta por Reynolds. Por otra parte, los modelos de turbulencia se usan para definir términos de la ecuación propuesta por Reynolds, como los esfuerzos de Reynolds y el flujo turbulento por medio de las viscosidades

(9)

8

de eddy. En este documento los modelos de turbulencia que se usaron fueron: Spalart-Allmaras, SST k-omega y K-epsilon. Cada modelo incorpora ecuaciones y variables adicionales y por ello se hace necesario definir otras condiciones iniciales para las nuevas variables. Además, la calidad de resultados aplicando un modelo de turbulencia se ve fuertemente influenciada por la calidad de la malla y las condiciones iniciales, específicamente el yPLUS y las funciones de pared que no se desarrollaron fuertemente en este documento.

4.1.2.1 Spalart-Allmaras

Creado para aplicaciones aeroespaciales, es un modelo de turbulencia de una sola ecuación, el cual incorpora la variable de Spalar-Allmaras (𝑣̂). OpenFOAM lo describe “nut” y la ecuación que se puede usar para definir su condición inicial es:

𝑣̂ = √3

2(𝑈 ∗ 𝐼 ∗ 𝑙) = 𝐼 ∗

Ecuación 2. Ecuación variable Spalart-Allmaras. [7]

4.1.2.2 SST k-omega

Creado con la idea de combinar dos modelas de turbulencia y aplicarlas dependiendo del reynold donde se desempeñan mejor [8], es un modelo de turbulencia de dos ecuaciones el cual incorpora la variable de energía de turbulencia (𝐾) y rata de disipación de turbulencia (𝜔). OpenFOAM lo describe “k” y “omega” respectivamente, y las ecuaciones que se pueden usar para definir sus condiciones iniciales son:

𝐾 =2

3∗ (𝑈 ∗ 𝐼) 2

Ecuación 3. Ecuación energía de turbulencia. [7]

𝜔 =𝜌 ∗ 𝑘 𝜇 ∗ (

𝜇𝑡 𝜇)

−1

Ecuación 4. Ecuación rata de disipación de turbulencia omega. [7]

4.1.2.3 k-epsilon

Es uno de los modelos de turbulencia más comunes, presenta buen desempeño en modelos de flujo libre con la excepción de grandes gradientes de presión [9], es un modelo de turbulencia de dos ecuaciones el cual incorpora la variable de energía de turbulencia (𝐾) y rata de disipación de turbulencia (𝜖). OpenFOAM lo describe “k” y “epsilon” respectivamente. La variable 𝐾 se define igual que en la ecuación 2 del modelo SST k-Omega y la ecuación que se puede usar para épsilon es:

𝜖 = 𝐶𝜇∗ 𝜌 ∗ 𝑘2

𝜇 ∗ ( 𝜇𝑡

𝜇) −1

Ecuación 5. Ecuación rata de disipación de turbulencia épsilon. [7]

4.2 Cuerpo Ahmed

Un cuerpo Ahmed es un modelo simplificado de un vehículo, fue descrito por primera vez en 1986 [10] y actualmente se usa como referencia para pruebas experimentales y computacionales por su nivel de documentación. Para el análisis de estos cuerpos hay dos factores importantes que se deben tener en cuenta si se quieren comparar resultados. Uno de

(10)

9

estos es el ángulo en la parte posterior del cuerpo Ahmed (Angulo ϕ en la gráfica 2); el cual es un ángulo variable en la geometría y afecta directamente en el fenómeno de separación de la capa limite. El fenómeno de separación tiene una gran relevancia en los resultados, por ello en la documentación los resultados se especifican de acuerdo al ángulo posterior. El segundo factor como todo proceso de comparación es que las condiciones sean similares respecto a la prueba original; en estos caso los números adimensionales sean similares, para análisis cinemático de flujo externo como el cuerpo Ahmed el factor más importante es el número de Reynolds.

En general para problemas de flujo externo sobre cuerpos como el cuerpo Ahmed, las variables de comparación de resultados son el coeficiente de arrastre, sustentación y en menor medida pero no menos importante los coeficiente de presión.

Gráfica 2. Dimisiones esquemáticas de un cuerpo Ahmed. [10]

4.2.1 Coeficiente de arrastre y sustentación

Son medidas adimensionales que definen el comportamiento de las fuerzas de un cuerpo en un fluido. El arrastre es una fuerza de resistencia al movimiento del cuerpo en el fluido, se define en dirección paralela a la dirección del flujo y es principalmente un producto de la interacción del fluido con la superficie (fricción superficial) y el movimiento del fluido en la superficie (gradientes de presión) [11]. La sustentación al igual que el arrastre es una fuerza producto del movimiento del fluido, se define en dirección perpendicular a la dirección del flujo y esta principalmente influenciada por el movimiento del flujo en la geometría del cuerpo [12].

(11)

10

El coeficiente de arrastre es un número adimensional que relaciona el arrastre del cuerpo y el arrastre que tendría si fuera una placa plana con el mismo área proyectada (en muchos casos el área proyectada en la dirección del flujo). Está definida como:

𝐶𝐷= 2 ∗ 𝐷 𝜌 ∗ 𝑣2∗ 𝐴

Ecuación 6. Coeficiente de arrastre [13].

El coeficiente de sustentación es un número adimensional que relaciona la sustentación del cuerpo y la presión dinámica de acuerdo a un área de referencia. Está definida como:

𝐶𝑙 =

2 ∗ 𝐿 𝜌 ∗ 𝑣2∗ 𝐴

Ecuación 7. Coeficiente de sustentación [14].

4.2.2 Coeficiente de presión

Es un numero adimensional que describe la presión relativa en relación al presión dinámica en el dominio, esta valor se aplica para conocer valores de presión en puntos de alta importancia en modelos experimentales. Está definida como:

𝐶𝑝=

𝑃 − 𝑃∞ 0.5 ∗ 𝜌∞∗ 𝑉∞2

Ecuación 8. Coeficiente de presión [15]

4.3 OpenFoam como software CFD

Es un software de código abierto para la operación y manipulación de campos (“Field Operation And Manipulation”). Este se copila en código C++ y cuenta con una gran variedad de aplicaciones y utilidades para el “PreProcessing”, “Solving” y “PostProcessing” de problemas de mecánica computacional en especial CFD. El software no cuenta con una interfaz gráfica además del uso de software externos para tratar de recrearlos. Para el uso de este, hay que usar una estructura de directorios para configurarlo y poder ejecutarlo. El anexo de este documento contiene una guía para la ejecución de algunas de sus utilidades más importantes en especial snappyHexMesh y realizar una simulación en estacionaria.

(12)

11

5. Metodología

En el proyecto se siguió un proceso que se encuentra resumida en el diagrama a continuación, En la mayoría de los análisis que se desarrollaron, se realizaron procesos de refinamiento en cuanto a la calidad de la malla, la convergencia y la validación de los resultados de acuerdo al documento que se usó de referencia para los datos experimentales.

Gráfica 4. Metodología del proyecto.

5.1 Datos de referencia

A partir de que el objetivo principal de este proyecto es primariamente la implementación del software OpenFOAM y como se ha mencionó en el documento; el cuerpo Ahmed es un modelo estándar, por ello dispone de muchas referencias para sus coeficientes aerodinámicos. Para el desarrollo de este proyecto se usó como referencia principal el documento de la SAE “Experimental and Computational Investigation of Ahmed Body for Ground Vehicle Aerodynamic”. En el documento principalmente se obtuvo información experimental de los coeficientes del cuerpo Ahmed además de datos computacionales los cuales se compararon. Algunas características del documento se encuentran enlistada a continuación:

 En el documento se obtuvieron datos para tres ángulos posteriores 0°,12.5° y 25°.

 El Reynolds se calculó con la distancia longitudinal del cuerpo (1.044 m).

 se manejaron Reynolds desde 2.2 a 13.2 millones.

 Se usó un modelo con las dimensiones del cuerpo Ahmed original, con la excepción de que el cuerpo se encontraba a 0.172 m del suelo en vez de los 0.05 m del cuerpo original (grafica 2).

 Para el análisis computacional en el documento no se tuvieron en cuenta las patas del Ahmed original.

 se usó un modelo de turbulencia k-epsilon.

 En el documento se encuentra un análisis de convergencia del coeficiente de arrastre para un Reynolds de 4.4 Millones.

A partir de la información anterior se establecieron las bases para el desarrollo del proyecto:

 Solo se analizaron los cuerpos Ahmed a 0° y 25° de ángulo posterior por ser ángulos límites.

 Estos cuerpos se evaluaron con un Reynolds de 4.4 millones por ser el único valor donde se documenta la cantidad de elementos que debe contener la malla.

 se supusieron condiciones del aire a 15 °C y 1 atm, ya que en el documento no se definió (la suposición es una condiciones de referencia para este tipo de simulaciones). Con esto se calculó la velocidad en flujo libre del modelo de

(13)

12

aproximadamente de 61.538 m/s, la cual se usó para las condiciones iniciales en las fronteras.

 El modelo de turbulencia inicial para evaluar fue el K-epsilon como en el documento.

5.2 Dominio computacional

El dominio computacional usado se basó en el documento de referencia. El tamaño del dominio implemento fue de 9.5 m, 2 m y 1.5 m en las direcciones X, Y y Z respectivamente. El cuerpo se ubicó centrado en el eje Y, a 0.172 m en el eje Z y a una distancia desde la entrada (inWall) a la parte frontal del cuerpo Ahmed de 2.4 m. El dominio con el cuerpo se encuentra representado en la gráfica 4.

Gráfica 5.Dominio computacional con el cuerpo Ahmed a 0° de ángulo posterior.

5.3 Generación de la malla

Uno de los objetivos de este documento es la implementación de la herramienta SnappyHexMesh, el proceso de generación de malla se realizó con el objetivo de aprovechar al máximo lo que dispone la utilidad. El proceso se realizó de forma iterativa generando mallas con números de elementos próximos o mayores a los del documento de referencia y analizando la convergencia de los resultados. Se generaron 4 mallas para el cuerpo Ahmed a 0°, 3 con una condición de simetría transversa al cuerpo y una cuarta malla con cuerpo completo para corroborar los efectos de la condición de simetría; todas con una sola capa en la superficie del cuerpo y diferentes número de elementos. Se generaron 5 mallas para el cuerpo Ahmed a 25°; la primera usando las mismas condiciones que se implementaron en la herramienta SnappyHexMesh para el cuerpo a 0° con una capa y 4 mallas aumentado la cantidad de capas en la superficie del cuerpo.

Todas las mallas que se desarrollaron fueron mallas estructuradas por restricción de la utilidad SnappyHexMesh, estas se desarrollaron con dos cajas de refinamiento alrededor del cuerpo Ahmed, la gráfica 5 muestra dos mallas que se usaron para el cuerpo a 0° y 25° respectivamente.

(14)

13

Gráfica 6. Mallas generadas para cuerpo Ahmed con diferentes ángulos.

5.4 Condiciones de simulación

En todas las simulaciones se asumió flujo incompresible y condiciones isotérmicas. Para el cuerpo Ahmed a 0° se realizaron simulación en estado estacionario. El cuerpo Ahmed a 25° grados presento una condición de inestabilidad en las simulaciones estacionarias y por ello se realizaron simulación en tambien condiciones transitorias. Todas las simulaciones se realizaron con modelo de turbulencia k-epsilon con la excepción de dos realizadas con el cuerpo Ahmed a 0° donde se usaron los modelos SST k-omega y el Spalart-Allmaras en mallas iguales, para probar otras condiciones de simulación.

5.4.1 Condiciones de frontera e iniciales

La grafica 5 muestra el dominio completo con las fronteras, sin embargo esta solo se simuló una vez, ya que se usó un plano de simetría en casi todas las simulaciones para ahorrar tiempo computacional. La grafica 7 muestra las fronteras que se usaron generalmente.

Gráfica 7. Dominio computacional con plano de simetría con el cuerpo Ahmed a 25°.

 inWall: Frontera de entrada del flujo a dominio computacional, se usó un valor uniforme de velocidad de 61.538 m/s en dirección del eje X. las presiones se dejaron con gradiente 0 respecto al campo interno.

 outWall: Frontera de salida del flujo del dominio computacional, se usó un valor uniforme de presión relativa de 0 Pa. Las velocidades se dejaron con gradiente 0 respecto al campo interno.

 fixedWalls: Son las fronteras en el cual se les puso condición de deslizamiento, gradiente 0 para las presiones y velocidades.

 floor: frontera usada para representar el suelo, se usó una condición de no deslizamiento.

 Ahmed0 o Ahmed25: Frontera usada para representar el cuerpo Ahmed, se usó una condición de no deslizamiento con funciones de pared.

(15)

14

 Campo Interno: Es todo el dominio que no son fronteras, se inicializo con velocidad de 0 m/s y presión relativa de 0 Pa.

Para todas las fronteras, Las condiciones iniciales para los modelos de turbulencia se calcularon con las ecuaciones especificadas en la sección 4.1.2.

5.4.2 Parámetros de solución

El parámetro principal para considerar la convergencia de los resultados fue el coeficiente de arrastre. Sin embargo, se usaron diferentes criterios para los análisis que se desarrollaron en este documento. En total se realizaron 3 análisis que se encuentra enlistados en la tabla 1.

Análisis cuerpo Ahmed 0

Análisis de modelos de turbulencia, Ahmed 0

Análisis cuerpo Ahmed 25

Geometría Ahmed 0° Ahmed 0° Ahmed 25°

Tipo de

simulación Estacionaria Estacionaria

Estacionaria, Transitoria Criterios de convergencia Invariación del coeficiente de arrastre. Invariación del coeficiente de arrastre.

Residuales menores a 1e-6

Invariación del coeficiente de arrastre de acuerdo a

su inestabilidad. Numero de

iteraciones 1800 - 3000 2500-10000 2000

Pasos de

tiempo - -

numero de Courant ≤1

~3-e7 s

Tiempo total - - 0.2-0.3 s

Modelo de

turbulencia k-epsilon

k-epsilon, Spalart

allmaras, SST k-omega k-epsilon Cantidad de

simulaciones 4 3 5

Herramientas simpleFoam simpleFoam simple-pimpleFoam

(16)

15

7. Resultados

Todos los valores experimentales fueron extraídos del documento de referencia [16]. 7.1 Análisis cuerpo Ahmed 0

La tabla 2 muestra los resultados del coeficiente de arrastre y sustentación obtenidos para tres mallas diferentes, cada una con su diferencia respecto a los resultados experimentales del documento de referencia.

Experimental C. Arrastre C. sustentación

0.2400 -0.0500

Malla Celdas

1 738440 0.2543 -0.0872

diferencia 0.0143 0.0372

2 2294049 0.2419 -0.0830

diferencia 0.0019 0.0330

3 4019981 0.2399 -0.0856

diferencia 0.0001 0.0356

Tabla 2. Resumen de resultados obtenidos en el análisis de convergencia 1.

La malla 2.1 está hecha con el mismo algoritmo de la malla 2, pero contiene el cuerpo completo Ahmed, es decir sin plano de simetría. Esta malla contiene 4521712 celdas y sus coeficientes son simlares.

Gráfica 8. Convergencia del coeficiente de arrastre respecto al número de iteraciones.

Gráfica 9. Coeficientes de presión para distintas mallas.

0.240 0.254 0.242 0.242 0.00 0.50 1.00 1.50 2.00 2.50 3.00 3.50

0 1000 2000 3000 4000

C. Arra stre iteracion Malla 3 Malla 1 malla2.1 Malla 2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 6 6.2 6.4 6.6 6.8 7 7.2 Cp

Posicion X [m]

Cp malla3

Cp malla2

Cp malla2.1

(17)

16

Gráfica 10. Campo de velocidades para la malla 1. En el eje de simetría.

7.2 Análisis de modelos de turbulencia, Ahmed 0

La tabla 3 muestra los resultados del coeficiente de arrastre y sustentación obtenidos para tres modelos de turbulencia diferentes, cada una con su diferencia respecto a los resultados experimentales del documento de referencia. La malla 1 de 4019981 se usó para cada simulación.

Modelo C. Arrastre C. sustentación

Experimental 0.2400 -0.0500

SST k-omega 0.2359 -0.0874

diferencia 0.0040 0.0374

Spalart Allmaras 0.3110 -0.0980

diferencia 0.0710 0.0480

k-epsilon 0.2399 -0.0856

diferencia 0.0001 0.0356

Tabla 3. Resumen de resultados obtenidos en el análisis de los modelos de turbulencia.

Gráfica 11. Convergencia del coeficiente de arrastre respecto al número de iteraciones.

0.240

0.236 0.311

0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50

0 2000 4000 6000 8000 10000

C. Arra

stre

iteracion

k-epsilon

SST k-omega

(18)

17 7.1 Análisis cuerpo Ahmed 25

La tabla 4 muestra los resultados del coeficiente de arrastre y sustentación obtenidos para el cuerpo Ahmed a 25°, se usó el mismo algoritmo con el que se realizó la malla 1 de 4019981 celdas para la malla de 1 capa. Las mallas de 6, 7, 8 y 10 capas se realizaron con un algoritmo nuevo, optimizando la cantidad de elementos y el yPlus.

Modelo C. Arrastre C. sustentación

Experimental 0.290 0.490

Malla yPlus Celdas Estacionario Transitorio Estacionario Transitorio

1 capa 35.47 3964706 0.303

Diverge 0.474 Diverge

diferencia 0.013 0.016

Malla yPlus Celdas Estacionario Transitorio Estacionario Transitorio

6 capas 29.57 3131343 0.288 >0.278 0.458 >0.449

diferencia 0.002 <0.012 0.032 <0.041

Malla yPlus Celdas Estacionario Transitorio Estacionario Transitorio

7 capas 25.05 3323369 0.292 0.279 0.481 0.481

diferencia 0.002 0.011 0.009 0.009

Malla yPlus Celdas Estacionario Transitorio Estacionario Transitorio

8 capas 21.17 3514627 0.293 0.286 0.486 0.487

diferencia 0.003 0.004 0.004 0.003

Malla yPlus Celdas Estacionario Transitorio Estacionario Transitorio

10 capas 15.23 3893596 0.293 0.291 0.489 0.494

diferencia 0.003 0.001 0.001 0.004

Tabla 4. Resumen de resultados obtenidos en el análisis de convergencia 2.

Gráfica 12. Convergencia del coeficiente de arrastre respecto al número de iteraciones mallas de 1,6 y 7 capas.

0.280 0.285 0.290 0.295 0.300 0.305 0.310 0.315 0.320

400 600 800 1,000 1,200 1,400 1,600 1,800 2,000 2,200

C. Arra

stre

iteracion

(19)

18

Gráfica 13. Convergencia del coeficiente de arrastre respecto al número de iteraciones mallas de 8 y 10 capas.

Gráfica 14. Convergencia del coeficiente de arrastre respecto al tiempo de las mallas de 6, 7, 8 y 10 capas.

Gráfica 15. Campo de velocidades para la malla de 10 capas.

0.280 0.285 0.290 0.295 0.300 0.305 0.310 0.315 0.320

400 600 800 1,000 1,200 1,400 1,600 1,800 2,000 2,200

C

. Arras

tre

Iteracion

8 capas 10 capas

0.270 0.275 0.280 0.285 0.290 0.295 0.300

0.00 0.05 0.10 0.15 0.20 0.25

C

. Arras

tre

Tiempo [s]

6 capas

7 capas

8 capas

(20)

19

8. Conclusiones

Desde un punto de vista general se cumplió el objetivo principal; desarrollar un estudio computacional de un cuerpo Ahmed con el software OpenFOAM. Los resultados obtenidos fueron similares a los experimentales del documento de referencia. Los coeficientes de arrastres obtenidos en relación a lo experimental tuvieron una diferencia mínima de 0.0001 para el cuerpo a 0° y de 0.001 para el cuerpo a 25°. Por otra parte, se obtuvieron mejores resultados para el coeficiente de sustentación que los computacionales del documento de referencia; En el documento de referencia no se pudo obtener una diferencia menor a 0.36 con el cuerpo a 25°, a diferencia de los resultados obtenidos en el proyecto donde la diferencia mínima fue de 0.004. Todo lo anterior permite concluir que se cumplió con el objetivo principal además del objetivo específico de comparar los resultados con datos experimentales. En transcurso del proyecto la herramienta la herramienta para el mallado SnappyHexMesh se implementó a fondo. En total se desarrollaron más de 8 mallas diferentes en el transcurso del proyecto las cuales se simularon. Se lograron implementar todas las utilidades de la herramienta en cada análisis que se desarrolló y por ultimo esto fue documentado en el Apéndice A del documento. Concluyendo que se logró cumplir con el objetivo de investigar e implementar la herramienta SnappyHexMesh.

En el proyecto se desarrollaron varios análisis donde se probaron además de modelos de mallas diferentes métodos de solución del software, obteniendo una variedad de resultados. Se probaron 3 modelos de turbulencia donde se obtuvo que para la malla desarrollada el mejor modelo de turbulencia es el k-epsilon. Se realizaron simulación de flujo incompresible en caso estacionario para el cuerpo a 0° donde los resultados eran próximos a lo experimental, sin embargo para el cuerpo a 25° presentaban una fuerte condición de inestabilidad además de resultados un poco alejados del experimental. Por último, por la condición de inestabilidad se realizaron simulación en estado transitorio para el cuerpo a 25° donde los fueron a lo experimental. Por lo nombrado anteriormente es posible concluir que se logró cumplir con el objetivo de investigar e implementar algunos de los diferentes modelos de solución de flujo aerodinámico del software.

(21)

20

9. Recomendaciones y trabajo futuro

En el transcurso del proyecto además de solucionarse dudas con la implementación del software quedaron algunas cuestiones que por no ser parte fundamental de los objetivos no se desarrollaron. En primera instancia se probaron diferentes modelos de turbulencia con el fin de probar otros métodos de solución del software, el hecho de que se quisieran aplicar otros modelos no significó que estos se implementaron para las condiciones que fueron desarrollados; ya sean las condiciones, calidad de la malla o inclusive los métodos de discretización correctos, Dejando en duda cual sería el mejor modelo de turbulencia para aplicar a estos casos de simulación. Por otra parte, para facilidad de la implementación de la herramienta SnappyHexMesh, toda la malla base del dominio computacional fue estructurada regular; la zona donde se insertara la geometría debe tener esa característica para implementar correctamente la herramienta. Sin embargo, esto se realizó no en la zona sino en todo el dominio computacional. Sería recomendable como trabajo futuro desarrollar una malla hibrida con estructura regular solo en la zona donde se implementaría la herramienta SnappyHexMesh y el resto con una malla no estructura obteniendo mejoras principalmente en tiempos de simulación. Por otro lado, todos los análisis desarrollados en el documento usaron modelos de simulación RANS que son solo una parte de los que dispone el software, Implementar modelos LES o DES serian una continuación del proyecto que se realizó. Finalmente, sería idóneo que además de aplicar lo desarrollado en este proyecto en modelos estándar se aplicara con vehículos comerciales.

(22)

21 ANEXOS Anexo A: Guía de OpenFoam

Aclaración: este capítulo es una guía paso a paso con detalles de cómo desarrollar una simulación de flujo externo e incompresible, usando la versión 2.4 de OpenFoam en algunos “Unix-like OS”. Cabe resaltar que este parte del documento está basado en la información de las fuentes enlistadas a continuación y experiencia propia, no profundiza más allá de la información que se puede disponer con la lectura completa de los documentos y consultas en el foro.

 Guía de OpenFoam: http://www.dicat.unige.it/guerrero/OpenFOAM_course2015b.html

 Guía de OpenFoam:

http://cfd.direct/openfoam/user-guide

 SnappyHexMesh:

https://openfoamwiki.net/images/f/f0/Final-AndrewJacksonSlidesOFW7.pdf

 Foro de OpenFoam:

http://www.cfd-online.com/Forums/openfoam

Definición de OpenFoam: es un software de código abierto para la operación y manipulación de campos (“Field Operation And Manipulation”). Este se copila en código C++ y cuenta con una gran variedad de aplicaciones y utilidades para el “PreProcessing”, “Solving” y “PostProcessing” de problemas de mecánica computacional en especial CFD.

Estructura para la resolución de un problema: Este software no dispone de una interfaz propia (“GUI”) por defecto y por ello hay que entender la estructura para poder plantear y resolver un problema. A continuación se detalla una estructura general donde los bloques amarillos son directorios o carpetas y los bloques azules son un archivo o conjuntos de archivos de texto en formato ASCII sin extensión como él “.txt” que es el formato tradicional de un archivo de texto, luego se hará una breve descripción de cada uno de ellos.

Gráfica 16. Estructura de archivos en un problema.

<Caso problema>: es el directorio del problema en general contiene todos los elementos necesarios para poder ejecutar aplicaciones y utilidades con OF (OpenFoam) en la gráfica anterior solo hay tres directorios pero durante el proceso de la simulación se pueden ir generando más

<Caso problema>

system

controlDict

fvSchemes

fvSolutions

constant

polyMesh

Propiedades de la

malla

Directorios de

tiempo

Campos de

variables

(23)

22

directorios como “postProcessing” si se extraen datos específicos durante la simulación o “processorX” si se quiere usar una aplicación de OF en paralelo, todo esto se explicara más adelante.

system: directorio que contiene todos los archivos para el control en el recorrido de la simulación, los esquemas de discretización y métodos de solución de las matrices discretas. Además puede contener algunos archivos adicionales para la ejecución de algunas aplicaciones y utilidades de OF, como el “snappyHexMeshDict” el cual es un archivo esencial para el uso de la utilidad snappyHexMesh o el “decomposeParDict” un archivo para la división de dominios y poder realizar procesos en paralelo.

 controlDitc: archivo donde se definen los parámetros para correr una simulación con cualquier “solver” estándar de OF. Define los tiempos de simulación, tiempos de guardado para cada iteración, control para los pasos de iteración etc. Además se pueden incluir en este directorio “Funtions objects” las cuales son utilidades para el “postProcessing” y existen una gran variedad de “Function objects” para calcular el promedio de una variable en un dominio, obtener valores en un plano en específico o calcular fuerzas en una superficie para el cálculo del arrastre (Drag) o la sustentación (lift).

 fvSchemes: archivo donde se definen los métodos de discretización para los gradientes, divergencias, laplacianos etc. Que componen las ecuaciones que modelan el sistema.

 fvSolutions: archivo donde se definen el método de solución y aproximación de las variables con sus tolerancias, Además se define la cantidad de correctores que tendrá el “solver” de OF. Si se está desarrollando una simulación estacionaria también se pueden definir los factores de relajación (relaxation factors).

constant: directorio que principalmente contiene la malla del problema en formato OF, algunas propiedades de la malla y la simulación; como el modelo de turbulencia y las propiedades del fluido de simulación. Además puede contener algunos archivos adicionales para la ejecución de algunas aplicaciones, como el triSurface donde se guarda el archivo CAD para la utilidad snappyHexMesh.

 polyMesh: directorio que contiene toda la información de la malla del problema en formato OF. Este directorio también puede contener el “blockMeshDict” esencial para usar “BlockMesh” que es la utilidad de enmallado más básica que dispone OF.

 Propiedades de la malla: son todos los archivos que contienen todas las propiedades del fluido del trabajo; viscosidades, modelos de turbulencia etc.

Directorios de tiempo: Contiene la información de los campos vectoriales y escalares de las variables de la simulación. El nombre de un directorio de tiempo es siempre un número que puede ser el número de la iteración o el tiempo en la simulación, por ejemplo el directorio con nombre “0” seria generalmente el directorio de condiciones iniciales.

 Campos de variables: son todos los archivos de texto con el nombre de la propiedad que contienen los valores correspondientes para cada celda. Pueden ser velocidades, presiones, temperaturas etc.

(24)

23

Se realizara la simulación de flujo externo en estado estacionario y transitorio en un cuerpo Ahmed con 25 grados de Angulo posterior, el cuerpo no tendrá las patas, tendrá las medidas del cuerpo Ahmed original con la excepción de que la distancia respecto al suelo es de 172 mm en vez de 50 mm.

Gráfica 17. Medidas del cuerpo Ahmed [1]

Este cuerpo se ubicara en un dominio computacional de 9.5 m, 2 m y 1.5 m en las direcciones X, Y y Z respectivamente. El origen se encuentra en la esquina inferior de la salida como se señala en la gráfica 3.

Gráfica 18. Dominio computacional.

El cuerpo se encuentra centrado en el eje Y, a 0.172 m en el eje Z y a una distancia desde la entrada (inWall) a la parte frontal del cuerpo Ahmed de 2.4 m.

(25)

24

Gráfica 19.ubicación en X del cuerpo

Las condiciones del aire en el modelo serán a 15 °C y 1 atm constantes a una velocidad de 61.538 m/s en dirección -X en la entrada, con el modelo de turbulencia K-épsilon y una intensidad de turbulencia del 1% y una razón de viscosidad de Eddy de 0.2.

Guía pasa a paso:

Desde este punto se asumirá que el usuario dispone de OpenFoam 2.4 con paraview en un Unix-like OS.

1. Abrir el terminal

Ctrl + alt + t

Lo primero que debemos hacer es abrir el terminal, si estas usando un sistema operativo como Ubuntu puedes presionar “Ctrl + Alt + t”.

2. Crear el directorio o carpeta de nuestro tutorial

En el terminal escribir lo siguiente y presionar “Enter” al final de cada línea:

(26)

25

mkdir tutoriales

cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike tutoriales mv tutoriales/motorBike/ tutoriales/ahmed

El comando “of240” activa todos los comandos que dispone la aplicación OF en algunas versiones instaladas de este. En caso de que estos ya estén disponibles el terminal ignorara la operación y si la instalación que se realizó ya ejecuta los comandos de OF el terminal mostrara que esta orden no existe como se muestra en la imagen anterior.

El comando “mkdir tutoriales” hace una nueva carpeta con el nombre tutoriales. En este caso como recién se abrió el terminal el directorio se encuentra en la HOME.

El comando “cp –r $FOAM_TUTORIALS/incompressible/simpleFoam/motorbike tutoriales” copia el directorio “motorbike” en la nueva carpeta que hemos creado vamos a usar este documento para escribir el nuestro.

El comando “mv tutoriales/motorBike/ tutoriales/ahmed” renombra el archivo que acabamos de copiar con el nombre de “ahmed”

3. Eliminar archivos innecesarios para este tutorial En el terminal escribir:

cd tutoriales/ahmed/ rm system/cuttingPlane rm system/forceCoeffs rm system/streamLines rm system/readFields

rm constant/triSurface/README rm Allclean

rm Allrun

(27)

26

El comando “cd tutorials/ahmed/” nos lleva al directorio ahmed por medio de la consola

Todos los comandos del tipo “rm <dirección>” eliminan el archivo con la dirección escrita. Estos archivos eliminados para el desarrollo de este tutorial no son necesarios o se usaran de forma diferente.

El comando “rm –r <dirección>” cumple la misma función de eliminar con la excepción del “-r” que activa la función de recursividad en el comando y permite eliminar carpetas con todos sus archivos internos.

4. Utilidades para hacer mallas

OF dispone de tres utilidades para la generación de mallas en formato en formato estructural que maneja OF conocido como “polyMesh”, la primera es el “BlockMesh” es la aplicación más básica que dispone y permite construir mallas hexaédricas para geometrías simples, el “snappyHexMesh” que es una aplicación semiautomática para la generación de mallas hexaédricas con geometrías complejas y el “foamyHexMesh” para la formación de mallas voronoi la cual no se usara en este tutorial.

La principal aplicación de generación de malla que se va a usar es el snappyHexMesh. Esta aplicación a partir de una malla base y una geometría superficial corta las celdas cercanas a la geometría y las triangula a la superficie, pero para ello es necesario cumplir tres condiciones:

a. Tener una malla base en formato “polyMesh” hexaédrica y que preferencialmente las celdas sean cubicas y uniformes en tamaño en las zona donde se ubicara la geometría. b. La geometría en formato .stl o .object donde se triangulara la malla.

c. El archivo snappyHexMeshDict el cual contiene toda la información de cómo va a correr la utilidad.

5. BlockMesh

Sabiendo las condiciones necesarias vamos a proceder a construir la malla base con la utilidad “BlockMesh”.

En el terminal escribir:

cd constant/polyMesh/ gedit blockMeshDict

(28)

27

El archivo “blockMeshDict” es el único archivo necesario para la ejecución de la utilidad blockMesh. En este archivo contiene toda la información necesaria para hacer una malla, si observamos el archivo en detalle podemos distinguir información que resalta en el archivo como FoamFile, convertToMeters, vertices etc. OF maneja un sistema jerárquico de palabras claves en el cual cada archivo para su ejecución debe contenerlas. Cada palabra clave detalla información para un proceso en la utilidad además en algunos archivos una palabra clave puede contener sus propias palabras claves, por supuesto manteniendo la jerarquía.

La tabla a continuación muestra una breve descripción de las palabras claves del “blockMeshDict”:

Palabra Clave Descripción Ejemplo

FoamFile

palabra clave necesaria para todo archivo en OF, esta contiene un conjunto estándar de palabras claves sobre el archivo en cuestión

convertToMeters es un factor de escalado para la unidades del documento

convertToMeters 1; es equivalente a decir que 1 en el documento equivale a un metro

convertToMeters 0.01; es equivalente a decir que 1 en el documento se escalara a 0.01 o que todas la

unidades están en cm

vertices

como su nombre lo indica son los vértices que se encuentra en el documento, estos tienen un orden de lista; el primer vértice escrito es el vértice 0, el segundo es el vértice 1 etc.

si quisiera describir los vértices de un cubo unitario en el origen seria:

vértices (

(0 0 0) (1 0 0) (1 1 0) (0 1 0) (0 0 1) (1 0 1) (1 1 1) (0 1 1) );

(29)

28 blocks

usando el orden como lista de los vértices une los vértices y construye un bloque de una malla

usando los vertices definidos en el ejemplo anterior y quisiera hacer un bloque de malla hexahedrica con 2 x 2 x 2 elementos seria:

blocks (

hex (0 1 2 3 4 5 6 7) (2 2 2) simpleGrading (1 1 1) );

si quiero que el bloque tenga 4 x 4 x 4 elementos y que la longitud de las celdas cresca con un factor de 2 en la direccion Y seria:

blocks (

hex (0 1 2 3 4 5 6 7) (4 4 4) simpleGrading (1 2 1) );

edges similar a la creación de bloques

une dos puntos y crea un eje

boundary

define el nombre y tipo de las fronteras usando los valores según el orden de los vértices

si solo quisiera definir el nombre la cara superior de mi malla hexaédrica 2 x 2 x 2 con el nombre "superior"

seria: boundary (

superior {

type patch; faces (

(4 5 6 7) );

} );

Tabla 5. Palabras claves del blockMeshDict

Si quieres una descripción más detallada de este directorio puede visitar esta dirección: http://cfd.direct/openfoam/user-guide/blockMesh/#x25-1430005.3.1

(30)

29

Ahora que entendemos un poco, reemplazamos toda la información del archivo en el editor de texto con esta información y lo guardamos:

/*---*- C++ -*---*\ | ========= | |

| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.4.0 |

| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | |

\*---*/ FoamFile

{

version 2.0; format ascii; class dictionary; object blockMeshDict; }

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

convertToMeters 1;

vertices (

(0 0 0) (9.5 0 0) (9.5 1 0) (0 1 0) (0 0 1.5) (9.5 0 1.5) (9.5 1 1.5) (0 1 1.5) );

blocks (

hex (0 1 2 3 4 5 6 7) (304 32 48) simpleGrading (1 1 1) );

edges ( );

boundary (

inWall {

type wall; faces (

(1 5 6 2) );

(31)

30 fixedWalls

{

type wall; faces (

(0 4 5 1) (4 7 6 5) );

} floor {

type wall; faces (

(0 3 2 1) );

} sim {

type symmetryPlane; faces

(

(3 7 6 2) );

} outWall {

type wall; faces (

(0 4 7 3) );

} );

// ************************************************************************* //

El archivo editado define medio dominio que el especificado en la Gráfica 18. Dominio computacional. Debido a que en esta simulación se va aprovechar la condición de simetría del cuerpo con un plano que corta en el eje Y para disminuir el tiempo de simulación.

(32)

31

La sección de código de la palabra clave “vertices” genera los puntos resaltados con rojo mostrados en el grafico a continuación:

La sección de código de la palabra clave “blocks” genera la malla mostrados en el siguiente grafico

Por último la sección de código de la palabra clave “Boundary” genera los nombres de las fronteras que más adelante se usaran para definir sus condiciones iniciales.

Es necesario resaltar que el “boundary” nombrado como “sim” su tipo está definido como “symmetryPlane” lo cual indica que es un plano de simetría.

(33)

32 Ctrl + C

Esto automáticamente cerrara el editor de texto y nos habilitara para poder seguir escribiendo en este, este comando se puede usar para cerrar cualquier aplicación abierta directamente en el terminal.

Ahora que ya tenemos el archivo “blockMeshDict” editado podemos usar la utilidad “blockMesh”. Sin embargo la mayoría de utilidades en OF leen el “controlDict” ubicado en la carpeta “system“; aunque este directorio no tenga información necesaria para crear la malla este es el directorio más importante en cualquier simulación de OF y por lo menos no debe tener errores de sintaxis. En los pasos anteriores se eliminaron algunos archivos y este hacia uso de estos, por ello vamos a editarlo para que no presente errores de sintaxis, este directorio lo veremos con más detalle en uno pasos más adelante.

En el terminal escribir:

cd ../../system gedit controlDict

Borrar las palabras claves “libs” y “funtions” con todo el contenido dentro de los paréntesis incluyendo los paréntesis y el “;”. El directorio debería quedarles como el texto a continuación (también pueden reemplazarlo con el siguiente texto).

/*---*- C++ -*---*\ | ========= | |

| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.4.0 |

| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | |

\*---*/ FoamFile

{

version 2.0; format ascii; class dictionary; object controlDict;

(34)

33

}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

application simpleFoam;

startFrom latestTime;

startTime 0;

stopAt endTime;

endTime 500;

deltaT 1;

writeControl timeStep;

writeInterval 100;

purgeWrite 0;

//- Uncomment to have regular (every 2 hours of run time) restart files //secondaryWriteControl cpuTime; // runtime

//secondaryWriteInterval 7200; // seconds

//secondaryPurgeWrite 1; // keep all but last dump

writeFormat binary;

writePrecision 6;

writeCompression uncompressed;

timeFormat general;

timePrecision 6;

runTimeModifiable true;

// ************************************************************************* //

Guardar el documento y en el terminal presionar: Ctrl + C

Ahora se puede correr sin ningún error la utilidad “blockMesh”.

En el terminal escribir:

cd ../ blockMesh

(35)

34

Hay que resaltar que la mayoría de utilidades en OF deben ser ejecutadas en el directorio principal en este caso en la carpeta llamada “ahmed” que por medio del comando “cd ../” Terminal pasa de la carpeta “system” a la carpeta “ahmed” ya que al usarlo el terminal se direcciona al directorio que lo contiene.

El comando blockMesh ejecuta la utilidad del mismo nombre, al ejecutarlo se puede observar que aparecen líneas de código en terminal esto significa que se está ejecutando la aplicación, la información mostrada son detalles de lo que se está haciendo como el número de celdas, el tamaño de las celdas o el nombre de las fronteras, la malla generada se guarda en el directorio “constant/polyMesh”. Cuando la aplicación se termina de ejecutar se puede volver escribir en el terminal.

Ahora que tenemos la malla base en formato “polymesh” nos resta la geometría superficial en formato .stl o .object y editar el snappyHexMeshDict.

Descargar la geometría de la siguiente dirección:

https://drive.google.com/file/d/0B6Z5SCxSqULnZ25qdmNIRnBTeFU/view?usp=sharing

(36)

35 6. Visualización con Paraview

Antes de continuar vamos a visualizar la malla base y la geometría con la herramienta paraview que viene incluido en la instalación de OF.

En el terminal escribir:

paraFoam

El comando paraFoam abrirá paraview

(37)

36

Con el mouse rotar la figura, acercar y visualizar la malla que acabamos de hacer con blockMesh

(38)

37

Ahora incorporamos el archivo .stl que queremos usar con el snappyHexMesh, seguir las instrucciones:

(39)

38

Presionar . Como se puede ver la geometría no se proyecta en el visor ni dentro de la malla donde debe estar, esto se debe a que algunos programas al exportar una geometría en formato .stl no lo exportan con el escalado correcto (como lo es en este caso) por ello es necesario confirmar que las geometrías se encuentran correctamente con herramientas como paraview. A continuación vamos a ver cuánto necesita escalarse la geometría y escalarlo con una utilidad de OF.

Seguir las instrucciones:

Como se puede ver la geometría .stl debe escalarse con un factor de 0.01 en todas las direcciones, procedemos a escalarlo.

En el terminal presionar:

Ctrl + C

En el terminal escribir:

cd constant/triSurface

surfaceTransformPoints ahmed25.stl ahmed25.stl -scale '(0.01 0.01 0.01)' cd ../../

Con la secuencia de comandos anterior nos direccionamos a la carpeta donde teníamos la geometría ahmed25.stl y la escalamos con la utilidad “surfaceTransformPoints” la cual además de escalar geometrías .stl las puede desplazar y rotar; Si quieren saber más del uso de esta utilidad pueden escribir en el terminal surfaceTransformPoints –help les dará instrucciones del uso y otras funciones adicionales. Ahora que se tiene la geometría escalada correctamente podemos observar la geometría dentro de la malla cuando la cargamos siguiendo la instrucciones mencionadas anteriormente (Recordar, el comando paraFoam al igual que blockMesh debe usarse en la carpeta principal en este caso la carpeta “ahmed” por ello antes hay que direccionarse escribiendo en el terminal cd ../../ ).

(40)

39 7. SnappyHexMesh

En este momento cumplimos con dos de los requisitos para usar la utilidad “snappyHexMesh”, solo falta editar el archivo “snappyHexMeshDict” que se encuentra en el directorio “system”. En el terminal presionar:

Ctrl + C

En el terminal escribir:

cd system

gedit snappyHexMeshDict

Se nos abrirá el editor de texto con el archivo “snappyHexMeshDic”. Al detallar el documento viene con una breve descripción de lo que es cada palabra clave y sub palabras claves. Procederemos a editar el documento, reemplazamos toda la información del archivo en el editor de texto con la información del archivo en la siguiente dirección y guardarlo (el archivo se puede abrir con cualquier editor de texto y pueden reemplazar el archivo por este nuevo):

https://drive.google.com/file/d/0B6Z5SCxSqULncjdWMzZpOUZhX3M/view?usp=sharing

La utilidad snappyHexMesh funciona en tres pasos:

1. Con la superposición del archivo de superficie en la malla base, elimina las celdas que estén fuera o dentro de la superficie (ya sea si quiero recortar la superficie de la malla base o quiero hacer una malla con la forma de la superficie).

(41)

40

2. Con las celdas eliminadas, desplaza algunos nodos de las celdas restantes y las aproxima a la superficie, alinea la malla respecto a la superficie.

(42)

41 castellatedMesh true;

snap true; addLayers true;

Esta sección del código indica cuales pasos se van a hacer, si quisiera omitir el paso de incorporar capas solo tendría que poner “addLayers false;”.

geometry {

ahmed25.stl {

type triSurfaceMesh; name ahmed25; }

box1 {

type searchableBox; min (4.5 0.6 0); max (8 1 0.8); }

box2 {

type searchableBox; min (5 0.7 0); max (7.4 1 0.6); }

};

Esta sección del código se indican las geometrías que se van a usar. En primera instancia tenemos la superficie “ahmed25.stl” donde se debe definir el tipo como triSurfaceMesh y un nombre; en este caso ahmed25, este nombre es el que se usara en el archivo para referenciar a la superficie y será el nombre de la nueva frontera. Por otra parte se pueden definir otras geometrías estándares como las dos cajas hexaédricas con el nombre de “box#” que se usaran para refinamiento en la malla base, estas se construyen definiendo con el tipo searchableBox e indicando dos vértices opuestos del hexaedro como min y max, es posible hacer otras geometrías que no sean hexaédricas como esferas.

castellatedMeshControls {

… }

Toda la información dentro de esta palabra clave define como se realiza el primer paso de la función snappyHexMesh. Este paso usa un concepto de nivel de refinamiento entre celdas donde el nivel 0 son celdas con el mismo tamaño que la malla base y los niveles posteriores son celdas de menor tamaño en todas las direcciones.

(43)

42

La tabla a continuación es un resumen de las palabras claves más importantes en este paso:

Palabra Clave Descripción Ejemplo

nCellsBetweenLevels

Cantidad de celdas de transición que hay de un nivel a otro. Comúnmente se ponen 1 o 2 celdas

nCellsBetweenLevels 1;

features

Para algunas geometrías se necesita refinamiento en los bordes, acá se pueden definir algunas opciones de refinamiento, si no se requiere se deja vacío el contenido de esta.

refinementSurfaces

Define el nivel de refinamiento de la superficie para crear la malla de frontera y a su vez la geometría de recorte, tiene dos entradas las cuales son el nivel mínimo posible y nivel máximo posible si el nivel mínimo no cumple con el "resolveFeatureAngle" se aplica el siguiente nivel hasta llegar al nivel máximo.

refinementSurfaces {

ahmed25 {

level (4 4); }

}

resolveFeatureAngle Angulo en grados de control. resolveFeatureAngle 30;

refinementRegions

Define las regiones de refinamiento con nivel de refinamiento y su modo. "mode inside" hace que todo elemento dentro de la geometría será refinado con el nivel especificado refinementRegions { box2 { mode inside; levels ((2 2)); }

box1 {

mode inside; levels ((1 1)); }

(44)

43 locatioInMesh

Vector que indica que celdas se van a eliminar dada la geometría, si el vector indica cualquier punto dentro de la malla base y fuera de la geometria se recortan todas las celdas que quedan dentro de la geometría si el vector indica un punto dentro de la geometría se recorta todas las celdas fuera de la geometría y se tendría una malla con forma de la geometría. Recordar que es la geometría definida en "refinementSurfaces".

Tabla 6. Palabras clave dentro de castellatedMeshControls.

snapControls {

… }

Toda la información dentro de esta palabra clave define como se realiza el segundo paso de la función snappyHexMesh. Sus palabras claves definen la cantidad de iteraciones en este paso y opciones de desplazamiento de los nodos respecto a la superficie las cuales están descritas junto a sus palabras claves en el documento.

addLayersControls {

… }

Toda la información dentro de esta palabra clave define como se realiza el tercer paso de la función snappyHexMesh. En general sus palabras claves definen como se van a hacer las capas. Si quieres una descripción más detallada que la información de las palabras claves del documento “snappyHexMeshDict” puede visitar esta dirección:

https://openfoamwiki.net/images/f/f0/Final-AndrewJacksonSlidesOFW7.pdf

8. Ejecución de utilidades en paralelo

Ahora que ya tenemos todas las condiciones necesarias podemos ejecutar la utilidad “snappyHexMesh” escribiendo en el terminal el comando snappyHexMesh, sin embargo esta como muchas utilidades de OF se pueden ejecutar en paralelo lo cual vamos a hacer para ahorrar tiempo de simulación. Para poder realizar simulaciones en paralelo obligatoriamente hay que dividir en partes el domino por medio de otra utilidad la cual se configura con el archivo “decomposeParDict” que también se encuentra en el directorio “system”.

En el terminal presionar:

Ctrl + C

En el terminal escribir:

(45)

44

A continuación se abre el archivo donde podemos distinguir varias palabras clave descritas en la siguiente tabla:

Palabra Clave Descripción Ejemplo

numberOfSubdomains

Cantidad de partes en el cual se va a dividir el dominio.

si quiero usar 4 núcleos de mi procesador, lo tendría que dividir en 4 dominios y la línea de código seria:

numberOfSubdomains 4;

method Método de división del dominio

si voy a usar el método simple la línea de código seria:

method simple;

<nombreDelMetodo>coeffs

Coeficientes para la ejecución del método en específico, los métodos más comunes son el simple, hierarchical, manual.

si quiero usar el método simple y dividir mi dominio en 2 partes en la dirección X y otras 2 en Y, las líneas de código serían:

simpleCoeffs {

n ( 2 2 1 ); delta 0.001; }

Tabla 7. Palabras claves dentro del archivo decomposeParDict.

Si quieren entender más sobre este directorio dirigirse a esta dirección:

http://cfd.direct/openfoam/user-guide/running-applications-parallel/#x12-820003.4

En esta guía se va a dividir el dominio en 4 partes con el método simple por ende el archivo debe quedar como el texto a continuación (también pueden reemplazarlo con el siguiente texto).

/*---*- C++ -*---*\ | ========= | |

| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.4.0 |

| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | |

\*---*/ FoamFile

{

version 2.0; format ascii; class dictionary; location "system";

object decomposeParDict; }

(46)

45 numberOfSubdomains 4;

method simple;

simpleCoeffs {

n ( 2 2 1 ); delta 0.001; }

Guardar el documento y en el terminal presionar: Ctrl + C

Ahora vamos a dividir en subdominios: En el terminal escribir:

cd ../

decomposePar

Automáticamente aparecerán líneas de código en el terminal especificando como se ejecutó el proceso y en el directorio principal aparecerán 4 carpetas con el nombre de “processor#”. Estas carpetas contienen información de la malla en cada subdominio.

A continuación vamos a ejecutar la utilidad SnappyHexMesh. En el terminal escribir:

mpirun -np 4 snappyHexMesh -parallel

Automáticamente empezará a ejecutar la utilidad “snappyHexMesh” en paralelo, en el terminar aparecerán líneas de código especificando como se ejecuta la utilidad. Esperar unos minutos o una hora dependiendo de tu ordenador hasta que termine de ejecutarse.

(47)

46

Cuando termine la simulación, al igual que la malla inicial los resultados quedan partes por ello hay que reunir las partes.

En el terminal escribir:

reconstructParMesh

Esto reconstruye las partes y en el directorio principal aparecerán 3 directorios adicionales. Cada uno contiene una carpeta PolyMesh las cuales contienen la malla que se obtuvo en cada paso de la utilidad “SnappyHexMesh”. Vamos a sobrescribir la malla base que tenemos en el directorio “constant/polyMesh” y eliminar los archivos que no son necesarios.

En el terminal escribir:

cp -r 3/polyMesh constant/ rm -r 1

rm -r 2 rm -r 3

rm -r processor0 rm -r processor1 rm -r processor2 rm -r processor3

Con la herramienta paraview podemos ver la malla final junto a la nueva geometría. En el terminal escribir:

(48)

47 paraFoam

Presionar e incorporar el .stl, como se hiso anteriormente con paraview.

La razón de que algunas celdas se vean “erróneas” es problema de renderisado de paraview. Actualmente estamos viendo la malla interna sin las fronteras y es posible ver las fronteras individualmente que definimos mientras hacíamos la malla.

Seguir las instrucciones:

Podemos ver las otras fronteras seleccionándola y presionando , como por ejemplo “sim” que es el plano de simetría.

9. definiendo las condiciones iniciales

Ahora que tenemos la malla definida y entendemos las fronteras procedemos a definir las condiciones iniciales. Hay dos tipos de condiciones iniciales que maneja OF, las constantes de

Referencias

Documento similar