Professional Documents
Culture Documents
1
Del inglés Computational Fluid Dynamics, ‘dinámica de fluidos computacional’, parte de la asignatura
en la que se engloba este proyecto.
1
2
Índice
Índice 3
Índice de figuras 4
Índice de cuadros 4
1. Objetivo 6
1.1. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3. Entorno de OpenFOAM 12
3.1. Carpeta system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.1. blockMeshDict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.2. controlDict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.3. fvSchemes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.4. fvSolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.5. Archivos adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2. Carpeta constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.1. transportProperties . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.2. transportProperties . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3. Carpeta 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4. Condiciones de contorno 16
4.1. Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.2. Variables turbulentas y funciones de pared . . . . . . . . . . . . . . . . . . . 17
6. Resultados 22
6.1. Caso Re = 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.2. Caso Re = 100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.3. Caso Re = 300 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.4. Caso Re = 1000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.5. Casos Re = 200 mil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.5.1. Modelo K − ω . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.5.2. Modelo K − ω SST . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Referencias 48
3
Índice de figuras
1. Niveles de refinamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2. Esquema dominio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3. Residuos Re 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4. Residuos finales Re 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5. Coeficientes Re 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6. Coeficientes ampliados Re 10. . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7. Animación flujo Re 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
8. Residuos Re 100. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
9. Residuos finales Re 100. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
10. Coeficientes Re 100. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
11. Señal CL Re 100. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
12. Señal CL transformada Re 100. . . . . . . . . . . . . . . . . . . . . . . . . . 28
13. Animación flujo Re 100. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
14. Residuos Re 300. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
15. Residuos finales Re 300. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
16. Coeficientes Re 300. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
17. Señal CL Re 300. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
18. Señal CL transformada Re 300. . . . . . . . . . . . . . . . . . . . . . . . . . 33
19. Animación flujo Re 300. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
20. Residuos Re 1000. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
21. Residuos finales Re 1000. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
22. Coeficientes Re 1000. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
23. Señal CL Re 1000. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
24. Señal CL transformada Re 1000. . . . . . . . . . . . . . . . . . . . . . . . . . 37
25. Animación flujo Re 1000. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
26. Residuos Re 200 mil (K − ω). . . . . . . . . . . . . . . . . . . . . . . . . . . 39
27. Residuos finales Re 200 mil (K − ω). . . . . . . . . . . . . . . . . . . . . . . 39
28. Coeficientes Re 200 mil (K − ω). . . . . . . . . . . . . . . . . . . . . . . . . 40
29. Coeficientes ampliados Re 200 mil (K − ω). . . . . . . . . . . . . . . . . . . 40
30. Animación flujo Re 200 mil (K − ω). . . . . . . . . . . . . . . . . . . . . . . 41
31. Residuos Re 200 mil (K − ω SST). . . . . . . . . . . . . . . . . . . . . . . . 42
32. Residuos finales Re 200 mil (K − ω SST). . . . . . . . . . . . . . . . . . . . 42
33. Coeficientes Re 200 mil (K − ω SST). . . . . . . . . . . . . . . . . . . . . . 43
34. Señal CL Re 200 mil (K − ω SST). . . . . . . . . . . . . . . . . . . . . . . . 43
35. Señal CL transformada Re 200 mil (K − ω SST). . . . . . . . . . . . . . . . 44
36. Animación flujo Re 200 mil (K − ω SST). . . . . . . . . . . . . . . . . . . . 44
37. Animación K Re 200 mil (K − ω SST). . . . . . . . . . . . . . . . . . . . . . 45
Índice de cuadros
1. Funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2. Lista cond. contorno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3. Funciones de pared. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4. Valores medios de CD dominios. . . . . . . . . . . . . . . . . . . . . . . . . . 19
5. Variación % CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6. Valores medios de CD mallas. . . . . . . . . . . . . . . . . . . . . . . . . . . 20
7. % sin refinementBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
8. % refinementBox 1, refinementSurface 2. . . . . . . . . . . . . . . . . . . 20
9. % refinementBox 1, refinementSurface 3. . . . . . . . . . . . . . . . . . . 20
4
10. % refinementSurface 2/3. . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
11. Valores medios de y + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5
NOTA PRELIMINAR
El enlace con los archivos de la simulación se puede encontrar aquí debido a su tamaño.
Además, se recomienda mantener las animaciones en la misma carpeta del informe para una
visualización correcta desde el mismo.
1. Objetivo
Calcular el flujo alrededor de un prisma cuadrado de sección 0.06 m x 0.06 m situado en
el interior de un túnel de viento. La sección transversal inicial de trabajo del túnel de
viento es de 0.6 m x 0.6 m y su longitud de 1.25 m, con el prisma en el centro de la
misma. Para simplificar, la simulación está hecha en 2 dimensiones.
Obtener el coeficiente de resistencia (o arrastre) y sustentación del prisma bajo estas con-
diciones de operación del túnel: Re = 10, 100, 300, 1000, 200000.
Realizar un análisis de sensibilidad de los resultados tanto a la malla como al dominio
computacional escogido.
Comparar los resultados de los modelos K −ω y K −ω SST de las simulaciones con flujo
turbulento.
Hallar el número de Strouhal en los casos con calle de Kármán.
6
Dominio computacional: Modelo de la realidad donde se va a simular estableciendo unas
ecuaciones de gobierno.
que se pueden representar en notación compacta para ⃗vC = 0 (volumen de control cte.)
como ∫ ∫ ∫ ∫
∂ρϕ
dV + ρϕ⃗v⃗η dS = Γϕ ∇ϕ⃗ · ⃗η dS + Sϕ dV, (8)
∂t
VC SC SC VC
∑
nf
∑
nf
7
Número de Courant: Número adimensional muy importante en las simulaciones que de-
termina el paso de tiempo ∆t a considerar respecto de la velocidad y el tamaño de
celda.
v0 ∆t
Co = <1,
∆x
donde ∆x es el cociente entre la longitud del dominio en la dirección de v0 y el número
de celdas (por la división de estas en dicha dirección si hubiera refinamiento). En el
proyecto se simuló para un Courant teórico ≤ 0.5.
∂⟨vi ⟩
=0 (15)
∂xi
∂⟨vi ⟩ ∂⟨vi ⟩ 1 ∂P 1 ∂
+ ⟨vi ⟩ + = (τi j + τiRj ), (16)
∂t ∂xj ρ ∂xi ρ ∂xj
( ) ( ) ( )
∂⟨T ⟩ ∂⟨T ⟩ ∂ ∂⟨T ⟩ ′ ′
ρc + vi = Φv + k − ρ c⟨vi T ⟩ ,
∂t ∂xi ∂xi ∂xi
∑ ( )2 ∑ ⟨( )2 ⟩ (17)
∂⟨vi ⟩ ∂⟨vj ⟩ ∂vi′ ∂vj′
con Φv = µ + + µ + .
∂xj ∂xi ∂xj ∂xi
2
Valor medio temporal de una magnitud fluida ϕ(⃗x, t):
∫ t+ T2
1
⟨ϕ⟩(⃗x) = lím ϕ(⃗x, t)dt. (11)
T →∞ T t− T2
3
Ecuaciones de Navier-Stokes en notación diferencial:
∂ρ ⃗
+ ∇·(ρ⃗v ) = 0, (12)
∂t
∂⃗v ⃗ v = ρf⃗m − ∇P ⃗ τ̄¯′ ,
ρ + ρ⃗v ∇⃗ ⃗ + ∇· (13)
∂t
∂e ⃗ τ̄¯′⃗v ) − ⃗v (∇·
⃗ τ̄¯′ ) + ∇·(k
ρ + ρ⃗v ∇e
⃗ = −P ∇·⃗
⃗ v + ∇·( ⃗ ∇T
⃗ ) + Q̇vol . (14)
∂t
4
Para fluidos compresibles el criterio de promediado de Favre (ϕ = ϕ̃ + ϕ′′ ) nos facilita la resolución al
tener la densidad variable. Están escritas en la segunda sección de la referencia [2].
8
Así quedarían promediadas las ecuaciones de Navier-Stokes, apareciendo un tensor de
esfuerzos aparentes de Reynolds, el término de cierre τiRj = −⟨ρvi′ vj′ ⟩, en la ecuación
(13) promediada que según se va operando aparecen muchas incógnitas nuevas. Para
resolver esto, se usan los modelos de turbulencia, describiendo a continuación los usados
aquí, modelos RANS de 1er orden y 2 ecuaciones.
Se hace la hipótesis de que el tensor de esfuerzos aparentes de Reynolds es
igual al de esfuerzos viscosos según la aproximación de Boussinesq5 , introduciéndose
una viscosidad cinemática turbulenta νT quedando finalmente el tensor como
( )
∂⟨vi ⟩ ∂⟨vj ⟩ ρ
R
τ i j = ρ νT + − ⟨vk′ vk′ ⟩δi j . (18)
∂xj ∂xi 3
K
con la viscosidad cinemática turbulenta como νT = . Los coeficientes de cierre [3]
ω
serían
5 3 9 1
α= , β= , β∗ = , σ = = σ∗. (21)
9 40 100 2
Modelo K −ω SST (Shear Stress Transport): Un modelo que com-
bina el K −ω de Wilcox con el K −ε de Menter [4]. Con ello se consigue simular en la
subcapa viscosa y en la zona de corriente libre, evitando los problemas que el K −ω
tiene en esa zona en las entradas mejorando los resultados con grandes gradientes de
presión. Se basa en las siguientes ecuaciones para K
[ ]
∂K ∂K ∗ ∂ ∂K
+ ⟨vj ⟩ = PK − β Kω + (ν + σK νT ) , (22)
∂t ∂xj ∂xj ∂xj
y para ω
[ ]
∂ω ∂ω ∂ ∂ω 1 ∂K ∂ω
+ ⟨vj ⟩ = αS − βω +
2 2
(ν + σω νT ) + 2(1 − F1 )σω2 , (23)
∂t ∂xj ∂xj ∂xj ω ∂xi ∂xi
5
Descomposición del tensor de esfuerzos aparentes de Reynolds en 2 términos, relacionando el tensor de
esfuerzos viscosos (término que acompaña a νT ) con las magnitudes medias, siendo el término que acompaña
a la delta de Kronecker δi j la media de los valores de la diagonal principal de τiRj .
9
a1 K
con νT = y a1 = cte. Los coeficientes de cierre serían
máx(a1 ω, SF2 )
5 3 9
α= , β= , β∗ = ,
9 40 100
1
σK = 0.85 , σω = , σω2 = 0.856,
2
( )
∂⟨vi ⟩ ∗
PK = mín τi j , 10β Kω , S := tensor de deformaciones de la velocidad,
xj
[ [ (√ ) ]]4
K 500ν 4σω2 K
F1 = tanh mín máx , , ,
β ∗ ωy y 2 ω CDKω y 2
( )
1 ∂K ∂ω −10
CDKω = máx 2ρσω2 , 10 .
ω ∂xi ∂xi
(24)
Existen más modelos de 2 ecuaciones, como el K − ε, de 1 ecuación, el
Spalart-Allmaras, y algebraicos como el modelo de mezcla de Prandtl; además de mo-
delos más costosos de 2º orden, RST y ARS.
Solver: Código que toma como entradas la malla, las ecuaciones de gobierno del problema,
condiciones iniciales y de contorno, las constantes físicas del fluido, parámetros y tipo
de discretización de las ecuaciones, y las condiciones de control temporal y datos a
mostrar/guardar. Con esto, da como salida los campos indicados que serían incógnitas
de las ecuaciones introducidas. En este proyecto se han usado 2 solvers distintos para
flujo no estacionario, icoFoam para el laminar y transitorio, y pisoFoam para el caso
turbulento.
Lleva a confusión el término solver en el código de OpenFOAM, debiéndose
aclarar que lo usa indistintamente tanto para referirse a métodos de resolución de
ecuaciones matriciales (linear solvers) en el archivo fvSolution (apartado 3.1.4), como
para el tipo de código de resolución de las variables fluidas (PISO, SIMPLE, PIMPLE)
llamados application solvers.
Ley de pared: Cuando estamos en régimen turbulento, cerca de una pared se hacen dis-
tinciones al comportamiento del fluido en relación a su distancia a ella, así como en
laminar existe la capa límite, en turbulento también, pero esta generalmente se divide
en 3 subcapas.
Subcapa viscosa (y + < 5): Es la zona más cercana a una pared,en la que
predominan los esfuerzos viscosos y la condición de no deslizamiento, no habiendo
efectos turbulentos. Se definen unas magnitudes adimensionales como u+ , velocidad:
⟨ui ⟩
u+ = , (25)
uτ
e y + , distancia a la pared:
uτ y
y+ = , (26)
ν
√ ( )
siendo u = y con uτ ∼ ν ∂⟨u⟩
+ +
∂y
.
y=0
10
Subcapa intermedia (5 < y + < 30): A esta distancia los efectos turbulentos
van haciéndose notar cambiando el perfil de velocidades. Ahora la velocidad de fricción
toma en consideración la viscosidad cinemática turbulenta quedando como
√ ( )
∂⟨u⟩
uτ ∼ (ν + νT ) . (27)
∂y y>0
Subcapa logarítmica (30 < y + < 300): Zona de la capa límite turbulenta
más alejada de la pared, donde los esfuerzos turbulentos y viscosos comparten gran
importancia. Aquí se define u+ como
1
u+ = ln y + + C , (28)
κ
e
uτ y
y+ = , (29)
ν
siendo ahora ( )
∂⟨u⟩
uτ ∼ κy . (30)
∂y
2.1. Caso Re = 10
Velocidad incidente dirección OX v0 ≡ u0 ≃ 0.00118 m s−1
11
2.5. Caso Re = 200000
(Valores iniciales, no aplicables necesariamente a todos los contornos, ver subsección 4.2.)
3. Entorno de OpenFOAM 6
El funcionamiento del programa se basa en código en terminal, que llama a archivos que
crean el dominio computacional y la malla, la refinan, recortan una figura concreta en el
dominio, simulan, visualizan los resultados, etc. Estos archivos se encuentran en diferentes
carpetas del caso a simular, siendo las tres imprescindibles, system, constant, y la carpeta
que contiene las condiciones iniciales y de contorno de nuestro problema, que tendrá de
nombre el tiempo donde comience la simulación. Se detallan a continuación su contenido e
importancia a fin de aclarar terminología y conceptos que se usaren en siguientes secciones.
3.1.1. blockMeshDict
Con este archivo de código se construye nuestro dominio computacional y se define su
discretización indicando el número de celdas en cada eje. Para crear el dominio, en nuestro
caso se da valores a 6 variables, que indican la coordenada menor y mayor en cada eje
–con el grosor en OZ ≪ que en OX y OY para simular en 2D (véase apartado 3.1.5)–. A
continuación pasamos a definir los vértices, en este caso que compondrían la geometría de un
túnel de viento cuadrangular, con las coordenadas anteriormente determinadas de manera
que se indica la posición de los 4 vértices de cada base del hexaedro que sería el dominio.
El apartado blocks fija una numeración a los vértices del hexaedro (hex) que se usarán
para definir las caras del contorno; se ajusta también el número de celdas en cada dirección, y
si se quiere que estas adquieran un tamaño progresivo en alguna dirección (simpleGrading),
que en este proyecto no usaríamos esta funcionalidad. El aparatado edges queda vacío dado
que no nos es necesario crear geometrías curvas.
En boundary es donde se dan nombre a las caras del hexaedro y el tipo de contorno
que serían. En este problema están definidos 6 contornos, 4 como patch y 2 como empty:
Los 4 primeros tienen el tipo general patch que nos permitiría aplicar unas condiciones de
contorno en esas caras, y los 2 empty indica al programa que esas caras, perpendiculares al
3er eje (OZ) y como la simulación es en 2D se obviaría, serían irrelevantes en la simulación no
siendo necesario resolver ahí nuestro problema, quedan “vacías”. Los nombre a las caras son
de suma importancia a la hora de ajustar correctamente las condiciones de contorno, y se
indican encima de cada contorno antes del entorno entre llaves {}. En nuestro caso contamos
con los contornos patch (inlet, oulet, top, bottom), y empty (front, back). Por último, la
numeración de los cuatro vértices conforma la cara en el contexto faces.
6
Open Field Operation And Manipulation.
12
3.1.2. controlDict
Este archivo controla los parámetros temporales de la simulación así como el intervalo de
escritura de los resultados y el modo. Comienza especificando el solver a utilizar, en nuestro
caso icoFoam o pisoFoam, y el tiempo inicial, que no siempre tiene por qué ser 0 ya que
se puede comenzar una simulación en el tiempo deseado con tal de tener la carpeta con
esas condiciones iniciales. A continuación se indica el tiempo final en el que debe concluir
la simulación, y el paso de tiempo entre iteraciones, muy importante para nuestros solvers
dado que en flujo no estacionario dependemos del número de Courant (visto en 1.1) y ∆t
es algo a definir cautelosamente para que no nos explote la simulación. Las dos siguientes
líneas controlan la escritura de resultados, con writeControl se indica el intervalo de tiempo
que se escribirán resultados, siendo los comandos más comunes timeStep, escribiendo datos
cada deltaT, y adjustableRunTime para que lo haga cada segundo de tiempo de simulación
ajustando los pasos de tiempo si fuera necesario para que coincidan. En la línea debajo
podemos definir cada cuánto nos muestre los valores calculados en el directorio principal del
caso como carpetas del intervalo de tiempo escogido, una cada uno.
Para que además de calcular los campos de presiones y velocidades del problema, el
entorno functions sirve para incluir funciones definidas en OpenFOAM y que habrá que
configurar con archivos específicos para cada función a llamar. Los datos se guardarán en
una carpeta postProcessing que se creará al efecto.
3.1.3. fvSchemes
Este archivo define las operaciones y el modo de discretización que el solver usaría, los
modelos de cálculo de los operadores de las ecuaciones de gobierno discretizadas. En ddtSche-
mes se indica el tipo de discretización del término no estacionario de la ecuación 8, eligiendo
el método de Euler implícito. La discretización de los operadores ∇ ⃗ , ∇·
⃗ , ∇⃗ 2 se determi-
na en los siguientes tres entornos (gradSchemes, divShemes, laplacianSchemes) con ϕ la
variable que acompaña al operador (p, U, k, omega...) y el método de cálculo Gauss-linear
que es el modo estándar de discretización del MVF para integración de Gauss (teorema de
Gauss-Ostrogradsky), aun habiendo más que se podrán escoger en base a ese.
7
Coeficiente de momento:
M
CM = , (31)
2 ρv0 S ·c
1 2
donde las nuevas variables serían M como el momento que provocan la fuerzas aerodinámicas (cabeceo en
un avión), y c que podría extrapolarse al perímetro del prisma en este proyecto (normalmente es la longitud
de la cuerda de un ala en aeronáutica).
13
3.1.4. fvSolution
Aquí se definen los solvers y tolerancias que se usará para la simulación. Hay que es-
pecificar para cada variable el tipo de solver, el preacondicionador de matriz –para solvers
de gradiente conjugado–, tolerancia de soluciones y la relativa del solver. Estos dos últimos
parámetros son muy importantes ya que configuran el orden de magnitud de los residuos de
las iteraciones internas –para resolver la matriz inversa– y las soluciones de la ecuación (32),
indicando primero en tolerance el valor del residuo inicial menor con el cual se consideraría
que la simulación habría convergido y pararía automáticamente. En relTol se fija el ratio
entre el residuo inicial y final en cada iteración, cuanto más se acerca a 0 más próximos
estarán, obligando con 0 a obtener el valor de tolerance en cada ∆t. Cuando se use un
solver con suavizante para reducir las iteraciones de la resolución del sistema de ecuaciones
(smoothSolver) se deberá indicar el modo, con preferencia por el Gauss-Seidel y el simétri-
co (GaussSeidel y symGaussSeidel). Para el caso de usar código PISO, SIMPLE, o PIMPLE,
relacionados con la resolución del campo de presiones de manera iterativa, se deben indicar
unos correctores como las veces que se resuelve el caso y la ecuación de la presión8 en cada
paso de tiempo para actualizar resultados. Adicionalmente también se indica una presión
de referencia en las celdas (pRefCell y pRefValue) para que el problema dé un rango de
presiones relativas y no la absoluta (caso incompresible).
14
En refinementRegions, si hemos especificado previamente en el apartado geo-
metry una geometría distinta del .stl, podremos elegir el nivel y lugar de refinamiento
respecto a la geometría. Existen 3 modos: inside refina las celdas del interior de la
geometría con el nivel tomado del segundo número del paréntesis, outside es igual pe-
ro refinando el exterior, y distance refina de acuerdo a una distancia de la geometría
indicada en el primer valor del paréntesis con un nivel del segundo valor. El primer
número es ignorado en los otros 2 modos.
El comando locationInMesh da una coordenada que es importante que esté fuera
de la figura cerrada a recortar y refinar, dado que indica la región que mantendrá
las celdas inalteradas. Los demás entornos definen el recorte (snap) y demás ajustes
avanzados de añadidura de celdas y alisado y otros ajustes avanzados.
extrudeMeshDict: Este código brinda la funcionalidad de, usando la malla resultado de las
operaciones del snappyHexMesh y dado que nuestro caso se simulará en 2D, convertir
el dominio a un estado bidimensional que cumple ahora las condiciones del tipo de
contorno empty definidas en las paredes frontal y trasera del dominio en el archivo
blockMeshDict.
probes: Aquí configuramos la función del mismo nombre llamada en controlDict, asig-
nando un nombre a la carpeta donde se guardarán los datos, la frecuencia de escritura
y su intervalo, en este caso timeStep y 1, escribe cada ∆t. Por último hay que especi-
ficar los campo que quieras que calcule y dónde, asignando uno o varios puntos con su
coordenada.
15
forceCoeffs: Al igual que probes, es un archivo de configuración en este caso de la función
que calcula los coeficientes de las fuerzas. El control del tiempo de escritura es el mismo
que el anterior, y se indica el contorno donde se quiera calcular los coeficientes, la
incompresibilidad o no del fluido, la dirección de FL y FD , así como el módulo de la
velocidad incidente, lc , y el área de referencia (grosor del dominio en OZ·altura figura).
3.2.1. transportProperties
Archivo breve pero imprescindible, pues define el valor de la viscosidad cinemática ν del
fluido de trabajo, entre corchetes9 las dimensiones (m2 s−1 ) seguidas de su valor numérico.
3.2.2. transportProperties
Solo necesario para simulaciones en régimen turbulento, configura el modelo computacio-
nal a usar. Primero se especifica el tipo de modelo, RAS o LES, y dentro de este el modelo
según el orden (visto en mayor profundidad en 1.1), en nuestro caso kOmega y kOmegaSST.
Dejando turbulence on, y printCoeffs on, pudiendo definir los coeficientes de cierre dis-
tintos de los implícitos con el entorno kOmegaCoeffs {} o kOmegaSSTCoeffs {} (de igual
modo para otros modelos).
4. Condiciones de contorno
4.1. Generalidades
Imprescindibles para la resolución de las ecuaciones de gobierno, estas condiciones res-
tringen el comportamiento del fluido a lo largo del dominio computacional definiendo unas
condiciones en los contornos que atraviesa. Estas, que están resumidas en la tabla 2, se
9
Dimensiones: [kg m s K mol A cd].
16
indican para cada variable fluida en sendos archivos en la carpeta constant en el entorno
boundaryField con el nombre del contorno encabezando cada tipo de condición.
∂ϕ
zeroGradient El gradiente de la variable es 0 en esa pared ∂xi
= 0.
17
Comando función Interpretación
Cuadro 3: Funciones de pared como condiciones de contorno para las variables turbulentas.
Y máx
0.6 m X
mín
0.625 m 2.5 m
Figura 2: Esquema del dominio computacional. (No se muestra el refinamiento del cuadrado).
Con ello, fui definiendo distintas longitudes del eje OX positivo del dominio en el archivo
blockMeshDict, haciendo simulaciones para túneles de 0.9375, 1.25, 1.5625, 1.875, 2, 2.25,
2.5625, 2.8125 metros hacia atrás (a sumar 0.625 m de la parte anterior del túnel). Para
decidir cuál sería la configuración más óptima, calculé el CD y saqué la media con cada
longitud (véase código en el anexo A). Ahora fui comparando el % de variación de dichas
medias con respecto a las longitudes de 1.5625, 1.875, 2, y 2.25 metros, y llegué a la conclusión
que, partiendo un umbral de 2 % de diferencia, el de 1.875 tenía una media de los porcentajes
de variación menor de entre las 4 longitudes, no haciendo más datos debido a que con los
dos túneles más largos analizados la variación es muy pequeña, así que por economizar opté
por el túnel de 2.5 m en total. A continuación se detallan los valores calculados y usados.
18
Longitud parte posterior (m) CD
0.9375 168,3626698
1.25 152,0802478
1.5625 146,5984022
1.875 144,764155
2 147,6985533
2.25 142,6960067
2.5625 140,8252618
2.8125 143,7543066
Longitud (m) % sobre 1.5625 m % sobre 1.875 m % sobre 2 m % sobre 2.25 m Medias %
1.5625 0 1,267058943 -0,744862491 2,73476154 1,282755101
1.875 1,251205432 0 -1,986748164 1,44933862 0,817431473
2 -0,75045233 -2,027019945 0 -3,50573695 1,595890434
2.25 2,661963196 1,428632897 3,386997722 0 0,95069076
2.5625 1,311000171 2,720903688 4,653594347 1,31100017 −
2.8125 1,940059036 0,697581785 2,670470755 -0,74164652 −
Como se ve, en verde está indicado el porcentaje medio menor de variación del CD para las
4 primeras longitudes (se lee horizontalmente), interpretado como que para el túnel de 1.875
m de longitud posterior, las variaciones porcentuales medias del coeficiente para distintos
tamaños del dominio serían menores con esa longitud, habiendo más saltos con las demás
analizadas.
5.2. Malla
Para el estudio de la sensibilidad de malla, la relación de aspecto de las celdas es crucial,
por lo que se calculó la relación del dominio decidido anteriormente y se aplicó a cada celda
para que fueran lo más cuadradas posible. Se decidió comenzar por un tamaño inicial de celda
de 1 cm, aumentando dos veces y disminuyendo una el número de celdas en cada dirección en
grupos de 20, con lo que quedarían tamaños iniciales de 230x40, 250x60, 270x80 y 290x100
celdas en sendos archivos blockMeshDict. Además, para cada uno de estos se realizaron
distintas operaciones de refinado a la malla inicial con niveles 0 (sin refinar) y 1 para una
caja de refinamiento (refinementBox), y 2 y 3 para la superficie del prisma (véase el apartado
3.1.5 para mejor entendimiento). Eventualmente se decidió también configuarar un nivel 2
de refinamiento en la caja, pero se descartó por la cantidad de recursos computacionales y
tiempo necesarios al aumentar la velocidad, y también por ser un problema bidimensional
que consideramos las mallas obtenidas como suficientemente fiables. Con ello se presentan los
siguientes datos extraídos como medias de los valores del coeficiente de resistencia calculado
en la superficie del prisma, y sus variaciones en % para cada malla.
11
Cálculo de la variación porcentual:
B
% = 100 1 − , (35)
A
con A la variable sobre la que se calcula la variación, la de referencia, y B la variable que varió.
19
Tamaño malla CD
Malla 230x40 rb 0 rs 2 136,234681150800
Malla 230x40 rb 1 rs 2 145,146465686001
Malla 230x40 rb 1 rs 3 172,421297139202
Malla 250x60 rb 0 rs 2 161,358762184321
Malla 250x60 rb 1 rs 2 177,908563021761
Malla 250x60 rb 1 rs 3 190,129225123040
Malla 270x80 rb 0 rs 2 174,788575214201
Malla 270x80 rb 1 rs 2 192,429907767201
Malla 270x80 rb 1 rs 3 185,169297404481
Malla 290x100 rb 0 rs 2 164,202959367399
Malla 290x100 rb 1 rs 2 182,068090377002
Malla 290x100 rb 1 rs 3 185,772561136896
20
Malla 230x40 Malla 250x60 Malla 270x80 Malla 290x100
rb 1 rs 2 0 15.8187 0 6.4276 0 3.9211 0 1.9941
rb 1 rs 3 18.7912 0 6.8691 0 3.7731 0 2.0347 0
Cuadro 10: Diferencias porcentuales de las medias de CD en las mismas mallas pero con
distintos refinementSurface (niveles 2 y 3).
Una vez presentados los datos en la tabla 6, se caracterizan para cada nivel de refina-
miento12 con el fin de hallar valores medios de CD del orden del 2 % de diferencia o menos
en las distintas mallas. Como se ve, en la tabla 7 se alcanza ese umbral, pero decidimos que
es una malla bastante gruesa que no tiene caja de refinamiento que daría mayor fiabilidad a
los resultados obtenidos en la estela (calle de Kármán).
21
6. Resultados
6.1. Caso Re = 10
Para el primer caso, con una velocidad de 0.00118 m s−1 , una partícula fluida en mo-
vimiento rectilíneo uniforme tarda en recorrer la longitud total del túnel 2118.64 segundos
(t = l(túnel)
v0
), por lo que ajustamos el tiempo final en el controlDict a 2200 con un ∆t = 0.1 s
(22000 iteraciones), a sabiendas que debería dejar más tiempo pero con la finalidad de ob-
servar la evolución de los residuos iniciales hasta ese tiempo para ver si necesitaba continuar
simulando.
Como en fvSolution se ajustó el valor de tolerance en 1·10−8 (para todos los casos,
además de relTol a 0, salvo para este que es 0.001 menos en la iteración final de la presión),
cuando el residuo llega a esos órdenes de magnitud da por convergidos los cálculos, y se ve
como la fig. 3 no llega a las 22000 iteraciones, parando sobre la 11 mil. Por tanto, se decide
obviamente no proseguir la simulación más allá de 2200 s y se extraen los datos.
Figura 3: Gráfico con los valores de los residuos iniciales de esas tres variables.
También se representarán los valores de los residuos iniciales (fig. 4), lo cuales responden
de la resolución de las ecuaciones de las variables fluidas por el algoritmo PISO y la ecuación
de Piosson. Estos vemos como, una vez superada la figura por el flujo, se estabilizan en
valores por debajo del umbral de tolerance de 1·10−8 .
22
Figura 4: Gráfico con los valores de los residuos finales de esas tres variables.
Figura 5: Gráfico con los valores de los coeficientes aerodinámicos calculados en la superficie
del prisma.
23
Dado que los valores de CL y CM están solapados debido al dominio en OY, se muestra
a continuación la zona ampliada, del orden de 10−4 .
Como se ve, no se produce calle de Kármán y el flujo se estabiliza, por lo que no habría
que calcular el número de Strouhal según el enunciado, pero ya se aprecia que a partir de
los 1000 segundos el flujo podría considerarse estacionario por ser f ∼ 0.
24
6.2. Caso Re = 100
Subiendo 10 veces el valor de la velocidad a 0.0118 m s−1 , el tiempo que demora la par-
tícula en recorrer la longitud se reduce en ese orden de magnitud hasta un t = 211.86 s, por
lo que, y al contrario que en el caso anterior, sabiendo que la calle de Kármán comienza a
aparecer en el entorno de un Re de 90 a 100 se ajusta primeramente un tiempo de simu-
lación de 500 segundos esperando que para esos instantes ya haya comenzado a notarse el
efecto de la estela. Y en efecto esto comienza sobre los 250 s, creciendo la amplitud hasta
cerca de los 400 s cuando se estable el movimiento armónico simple. En cuanto al paso tem-
poral, este será de 0.02 s, por lo que inicialmente nos quedarían 25000 iteraciones temporales.
En cuanto a los residuos, observamos en la fig. 8 como reflejan estos también la perio-
dicidad que adoptan los valores de las variables fluidas debido a dicha estela en el flujo.
Además, vemos como sus valores quedan demasiado elevados respecto a lo configurado en
fvSolution del orden de 10−8 , aun siendo residuos iniciales que reflejan operaciones de la
matriz y no en la resolución de la ecuación de Poisson, que serían los residuos finales del
archivo log.icoFoam y que tienen valores significativamente menores como se ve en la fig. 9
no superando el umbral de las tolerancias impuestas.
Figura 8: Gráfico con los valores de los residuos iniciales en cada iteración temporal (paso
de tiempo).
Cabe aclarar que el dominio del eje X sobrepasa la iteración 25 mil como habíamos
indicado antes, y la razón, si bien viene explicada posteriormente, es que sobre el primer
archivo log.icoFoam se trasladaron los datos de un segundo que llegaba hasta las 27500
iteraciones.
25
Figura 9: Gráfico con los valores de los residuos finales de la resolución de la ecuación (32)
en cada paso de tiempo.
Respecto de los coeficientes aerodinámicos, dado que existe calle de Kármán y hay que
calcular la frecuencia del movimiento armónico del fluido, se decidió que el tiempo final de
la primera simulación de 500 s era insuficiente ya que arrojaba pocos periodos, se determinó,
partiendo del último valor temporal como condición inicial de esta segunda simulación, llegar
hasta los 550 s. Como se definió en la ecuación (2), el número de Strouhal depende de la
velocidad media de oscilación del fluido –caracterizada como el producto de la frecuencia y
la longitud característica– y de su velocidad media –la incidente–. Tanto lc como v0 nos son
conocidas, por lo que procederemos a hallar f .
Para ello necesitamos unos valores que describan un movimiento armónico, y dado que
el cálculo de los coeficientes aerodinámicos es un objetivo de este proyecto serán los datos
que usemos. A la hora de elegir con cual de los 3 coeficientes calcular la frecuencia, llegamos
a la conclusión que, sabiendo que para un cilindro la frecuencia de CD es el doble que la
de los torbellinos (la de oscilación del fluido) y la frecuencia de CL es la misma, se podría
usar el mismo razonamiento aunque no sea un cilindro nuestra figura, pero suponemos el
concepto el mismo dado que la fuerza de resistencia no es sensible al signo de cada uno de
los torbellinos de signo opuesto que se forman en cada periodo.
Una vez teniendo los datos, habría que procesarlos con algún programa para obtener la
frecuencia por medio del análisis en series de Fourier, un análisis de una señal discreta con
un algoritmo basado en la transformada de Fourier como el FFT13 que está implementado
13
Fast Fourier Transform, ‘Transformada rápida de Fourier’. La función fft calcula la transformada de
26
en MATLAB 14 . El código utilizado está en el anexo B y devuelve 2 gráficas, siendo en la
segunda (fig. 12) en la que se representa el valor de la frecuencia de oscilación de los valores
de CL .
F = W x, (38)
siendo x los valores a transformar introducidos. Más información en las siguientes referencias: [6], [7], [8], y
[9].
14
En la documentación del programa se puede encontrar su implementación, en la cual está basado el
código aquí utilizado. Documentación web.
27
Figura 11: Representación de los valores de CL frente al tiempo.
28
Figura 13: Campo de velocidades visualizado en el instante t = 350 s. La animación completa
se puede ver aquí .
29
6.3. Caso Re = 300
Para esta velocidad de 0.0354 m s−1 , una partícula fluida tardaría 70.62 segundos en reco-
rrer el túnel, y por conservadurismo se redujo solo en 100 s el tiempo final de la simulación,
por lo que en esos 405 s (debido al ∆t se corrigió añadiendo 5 s más para tener un número
natural de iteraciones, 27000) una partícula recorrería más de 5 veces la longitud completa
del túnel de viento. Esto se aprecia como excesivo en la fig. 14, ya que los residuos se esta-
bilizan desde la iteración 1300 aproximadamente, pudiendo haberse reducido el tiempo de
simulación. El paso de tiempo para este caso se calculó de 0.015 s manteniendo Co < 0.5.
Seguimos con el inconveniente de lo elevados que resultan los residuos iniciales, sobre
todo los de la presión, caballo de batalla en todo nuestro trabajo. Aun así, los finales dan
valores mucho más óptimos, y es que cabe la posibilidad de que, a medida que se aumenta la
velocidad del fluido, le sea más difícil al solver lineal resolver la matriz –sobre todo para la
variable de presión susceptible a gradientes altos– y por eso nos muestre mayores residuos que
implicarían mayores errores. Una posible mejora podría ser aumentar el número de iteraciones
para actualizar los valores de la presión mediante el valor de la línea nCorrectors (ver última
parte del apartado 3.1.4), ya que en todos los casos se fijó en 2 (2 iteraciones internas en
cada una temporal) salvo en el del flujo a Re 10 que está en 3. Es precisamente en ese caso
donde vemos que esa iteración extra mejora en un orden de 10 el resultado de la presión,
pero no se puede extrapolar a los demás casos ya que en ese no habría calle de Kármán y el
fluido es más estable. Habría que probarlo para velocidades mayores, aunque por limitación
temporal no se realizó en este proyecto menor.
Figura 14: Gráfico con los valores de los residuos iniciales de esas tres variables.
30
Figura 15: Gráfico con los residuos finales de las variables de la ecuación de Poisson en cada
∆t.
31
En la fig. 16 se aprecia lo indicado en el caso anterior de cómo la frecuencia de los valores
de CD es mayor que la de CL , probablemente relacionado con lo expuesto entonces.
32
Figura 18: Potencia de la señal con el valor máximo de la frecuencia en la señal de CL . El
eje X va hasta 33.3̄ s−1 , se muestra reducido para que se aprecien los picos en la señal.
33
6.4. Caso Re = 1000
Con una velocidad de 0.118 m s−1 , el tiempo empleado por una partícula fluida para
alcalzar la salida en línea recta sería de 21.19 segundos, por lo que aquí se limitó drásti-
camente el tiempo de simulación a 40 s considerando con los anteriores casos que debería
ser suficiente para alcanzar y obtener pasos temporales suficientes con el movimiento osci-
lante para calcular la frecuencia. El intervalo de tiempo para esta simulación se calculó ya
sensiblemente menor que los anteriores, de 0.002 s, ya que se disparaba ya rápidamente el
Courant si ajustábamos más por encima.
De nuevo la fig. 20 nos muestra como los residuos iniciales siguen siendo elevados, sin
embargo los de la velocidad se han reducido algo. En cuanto a los finales, también los de la
velocidad han disminuido, apreciándose claramente un amortiguamiento en la dispersión de
los mismos, lo que podría indicar que fue una simulación numéricamente más estable.
34
Figura 21: Residuos finales en cada paso de tiempo.
35
Observamos como los resultados de los coeficientes se vuelven más erráticos alejándose
de la forma de una onda senoidal a medida que se aumenta la velocidad, incluso teniendo
varias frecuencias y desde luego dejando ya de mantener cierta amplitud constante.
36
Figura 24: Valores de la transformada según el algoritmo FFT. El eje X va hasta 250 s−1 , se
muestra reducido para que se aprecien los picos que aparecen en la señal.
37
6.5. Casos Re = 200 mil
En este régimen los efectos del flujo turbulento son evidentes, por lo que predominan las
leyes de pared en la capa límite(apartado 1.1). Según estas, el valor máximo de la distancia
a la pared de la capa sería de 300 (distancia adimensional, y + ), por lo que es un factor
limitante a la hora de configurar las simulaciones.
Para los dos modelos de turbulencia se realizó la simulación en las mismas condiciones
del dominio computacional y malla de los anteriores casos, ignorando los valores de y + que
resultaren. Como se ve en la tabla 11, estos sobrepasan el límite de la subcapa logarítmica (y
por tanto la capa límite) en la paredes superior e inferior de nuestro dominio,consecuencia
de que la celda menor en esas paredes tiene un tamaño excesivo.
Cuadro 11: Valores medios de y + para los diferentes modelos y mallas en el tiempo final.
ref ≡ refinamiento paredes.
Entonces se decidió refinar un nivel (dividir a la mitad el tamaño de la celda) la celda más
cercana a las paredes top y bottom que son las conflictivas. Para ello se crearon 2 geometrías
nuevas (refinementBox, véase apartado 3.1.5) con el grosor de una celda calculado teniendo
en cuenta la altura del túnel (0.6 m) y el número de celdas en esa dirección (100). Entonces
0.6
el grosor de la zona refinada sería de 100 = 0.006 m, por lo que se fijarían las zonas de
refinamiento a 0.294 m del origen. Tras esto ya se podrían considerar válidos los resultados
dado que y + < 300.
6.5.1. Modelo K − ω
A la velocidad de 23.57 m s−1 , el tiempo necesitado por una partícula fluida para recorrer
el túnel sería de 0.105 segundos, configurándose un tiempo de simulación de cerca del doble,
0.2 s. En estos regímenes de velocidades del fluido, el número de Courant es crítico debido
a dicha magnitud, por lo que el paso de tiempo tiene que ser muy pequeño, en nuestro caso
de 1·10−5 s, y por lo tanto obteniendo un total de 20000 iteraciones temporales.
Vemos en la fig. 26 como los residuos iniciales se van reduciendo paulatinamente aun
no llegando a los valores de la tolerancia, por lo que la simulación, a pesar de que según
ese criterio el programa no la considera convergida, nosotros sí aceptamos esos valores tan
bajos como válidos y no continuamos la simulación más allá. Contrastan estos resultados
con la tendencia que veníamos teniendo a lo largo de los últimos 3 casos, aquí los residuos
no se estabilizan en torno a un valor al cabo de un tiempo tras un valle y ascenso, sino que
continúan su descenso. Esto es debido al modelo de turbulencia usado para la resolución de
las variables fluidas, K − ω no es de fiable en los efectos de la subcapa viscosa en las paredes
del dominio computacional como el modelo K − ω SST (ver apartado 1.1), por lo que, y
según muestra la animación 30, no existirá calle de Kármán al no poder simular el despren-
dimiento de la capa límite del fluido en la pared del prisma. El fluido, tras unos instantes
iniciales de establecimiento de la coriente, se estabiliza en una corriente ∼ unidimensional
cuasiestacionaria con un zona de mínima presión tras el prisma.
Respecto de los residuos iniciales, estos sí siguen la tónica de mantenerse por debajo del
valor de tolerance que arrojarían resultados fiables de las ecuaciones fluidas.
38
Figura 26: Residuos iniciales obtenidos en cada iteración temporal.
39
Figura 28: Representación de los tres coeficientes aerodinámicos.
40
Como en el caso de Re 10, los coeficientes aerodinámicos se estabilizan tras un corto
instante, aunque en la fig. 29 se ve como el de sustentación realiza un movimiento armónico
con una amplitud muy pequeña, probablemente producida por cierta oscilación del fluido
que en la animación se es incapaz de apreciar. De todos modos tendría valores despreciables
como se ve.
Los residuos iniciales ahora sí tienen la forma que venían adoptando los otros casos,
y es que la elección del modelo de turbulencia según las condiciones de trabajo se torna
fundamental a la hora de obtener los resultados deseados. Aquí, la posibilidad que da el
K − ω SST de simular los desprendimientos de la capa límite del fluido en el prisma brindan
los efectos reales al mostrar, como consecuencia, la calle de Kármán que aparece. Como
siempre, los residuos de la presión son los que adoptan mayores valores, cabiendo destacar
los picos que se muestran en los de la tasa de disipación de energía turbulenta ω y que en
la fig. 32 se ven como variaciones de los residuos finales, lo que da a entender que es una
variable sensible a los cambios en el fluido.
41
Figura 31: Residuos iniciales obtenidos en cada iteración temporal.
42
Figura 33: Representación de los tres coeficientes aerodinámicos.
43
Tenemos una señal de CL bastante estable en periodo, por lo que la fig. 35 no nos mostrá
muchos picos de potencia, lo que sí tenemos es, como cabía esperar, una frecuencia que
nuevamente ha aumentado en 56 unidades. Esto implica un movimiento oscilatorio más
rápido que se debería reflejar en la animación de la fig. 25, viendo cómo se producen y
disipan los torbellinos más rápidamente. Con estos datos calculamos el número de Strouhal,
St ≃ 0.202. Vuelve disminuir, teniendo el caso mismo que con Re 1000 en el que el orden de
magnitud de aumento de la frecuencia es menor que el de la velocidad del fluido incidente.
Figura 35: Valores de la transformada según el algoritmo FFT. El eje X va hasta 5·104 s−1 .
44
A continuación se muestran la animación del campo energía cinética turbulenta.
45
ANEXOS
A. Código gnuplot para extraer las medias del CD
set print "Medias_Cd.dat"
stats '230x40/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf %lf %*lf
%*lf %*lf" name 'D' nooutput
stats '230x40_rb1_rs2/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf
%lf %*lf %*lf %*lf" name 'E' nooutput
stats '230x40_rb1_rs3/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf
%lf %*lf %*lf %*lf" name 'F' nooutput
stats '250x60/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf %lf %*lf
%*lf %*lf" name 'P' nooutput
stats '250x60_rb1_rs2/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf
%lf %*lf %*lf %*lf" name 'Q' nooutput
stats '250x60_rb1_rs3/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf
%lf %*lf %*lf %*lf" name 'R' nooutput
stats '270x80/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf %lf %*lf
%*lf %*lf" name 'N' nooutput
stats '270x80_rb1_rs2/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf
%lf %*lf %*lf %*lf" name 'O' nooutput
stats '270x80_rb1_rs3/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf
%lf %*lf %*lf %*lf" name 'S' nooutput
stats '290x100/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf %lf %*lf
%*lf %*lf" name 'A' nooutput
stats '290x100_rb1_rs2/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf
%lf %*lf %*lf %*lf" name 'B' nooutput
stats '290x100_rb1_rs3/postProcessing/forceCoeffs/0/forceCoeffs.dat' using 2 " %lf %*lf
%lf %*lf %*lf %*lf" name 'C' nooutput
print "Medias de los valores del coeficiente de arrastre en las distintas ma-
llas (rb: nivel refinamiento caja interior, rs: nivel refinamiento superficie
cuadrado)"
print ""
print "Malla 230x40 rs 2 = ", D_mean
print "Malla 230x40 rb 1 rs 2 = ", E_mean
print "Malla 230x40 rb 1 rs 3 = ", F_mean
print ""
print "Malla 250x60 rs 2 = ", P_mean
print "Malla 250x60 rb 1 rs 2 = ", Q_mean
print "Malla 250x60 rb 1 rs 3 = ", R_mean
print ""
print "Malla 270x80 rs 2 = ", N_mean
print "Malla 270x80 rb 1 rs 2 = ", O_mean
print "Malla 270x80 rb 1 rs 3 = ", S_mean
print ""
print "Malla 290x100 rs 2 = ", A_mean
print "Malla 290x100 rb 1 rs 2 = ", B_mean
print "Malla 290x100 rb 1 rs 3 = ", C_mean
46
B. Código FFT MATLAB
clear all
load forceCoeffs100.txt; %Sustituir por el nombre de cada archivo
t=forceCoeffs100(:,1); %t como variable de los tiempos (1.ª columna)
Cl=forceCoeffs100(:,4); %Cl como variable de los valores de C_L (4.ª columna)
figure(1) %Gráfica de C_L
grid on
plot(t,Cl)
grid on
axis auto
title('Coeficiente de sustentación')
xlabel('Tiempo (s)')
ylabel('Amplitud de los valores del coeficiente')
Fs = 1/(t(2)-t(1)); % Frecuencia de muestreo (inversa del periodo)
l = length(t);
Y = fft(Cl);
P2 = abs(Y/l);
P1 = P2(1:l/2+1);
P1(2:end-1) = 2*P1(2:end-1); % Saca la potencia de la señal sin ruido
f = Fs*(0:(l/2))/l;
maxP1 = max(P1)
maxP1f = f(P1==maxP1)
figure(2)
plot(f,P1)
grid on
title('Espectro de potencia de la señal Cl(t)')
xlabel('f (1/s)')
ylabel('|P1(f)|')
axis([-1 25 -.05 .25])
hold on
plot(f(P1==maxP1),maxP1,'+r')
text(f(P1==maxP1),maxP1,[' (' num2str(f(P1==maxP1)) ' , ' num2str(maxP1) ')'])
hold off
47
Referencias
[1] E. B. Martín, “Apuntes teoría cfd y turbulencia.” 2018.
[3] D. Wilcox, Turbulence Modeling for CFD. No. v. 1 in Turbulence Modeling for CFD,
DCW Industries, 2006.
[5] K. Hoffmann and S. Chiang, “Computational fluid dynamics, vol. 3,” Wichita, KS: En-
gineering Education System, 2000.
48