Simulación URANS 2D del flujo alrededor de un cilindro para 104 ≤ Re ≤ 106 con tratamiento de paredes
Abstract
Máster Universitario en Sistemas Inteligentes y Aplicaciones Numéricas en Ingeniería (SIANI)
Full text
Universidad de Las Palmas de Gran Canaria Instituto Universitaro de Sistemas Inteligentes y Aplicaciones Num´ericas en Ingenier´ıa M´ aster Universitario Sistemas Inteligentes y Aplicaciones Num´ ericas en Ingenier ´ ıa TRABAJO FINAL DE M ´ ASTER Simulaci´on URANS 2D del flujo alrededor de un cilindro para 104≤Re ≤106con tratamiento de paredes. Autor: Tutor: D. Miguel ´ Angel Moreno D ´ ıaz D. Luis Alberto Padr´ on Hern´ andez 4 de diciembre de 2015
´ Indice general 1. Introducci´on 8 1.1. Motivaci´on.................................... 8 1.2. Antecedentes .................................. 9 1.3. Objetivos .................................... 10 2. Conceptos b´asicos de din´amica de fluidos 11 2.1. Introducci´on .................................. 11 2.2. Ecuaci´on de conservaci´on de la masa . . . . . . . . . . . . . . . . . . . . . 11 2.3. Ecuaci´on general de conservaci´on . . . . . . . . . . . . . . . . . . . . . . . 12 2.4. Flujoturbulento................................. 14 2.4.1. Introducci´on............................... 14 2.4.2. Modelo RANS turbulento k−ǫyk ω−SST ............. 14 2.4.2.1. La ecuaci´on de Reynolds . . . . . . . . . . . . . . . . . . . 14 2.4.2.2. Hip´otesis Boussinesq . . . . . . . . . . . . . . . . . . . . . 16 2.4.2.3. La cascada de energ´ıa . . . . . . . . . . . . . . . . . . . . 17 2.4.2.4. Ecuaci´on de la energ´ıa turbulenta cin´etica . . . . . . . . . 17 2.4.2.5. Aproximaciones . . . . . . . . . . . . . . . . . . . . . . . . 19 2.4.2.6. El modelo k−ǫ........................ 20 2.4.2.7. Modelo k−ωdeWilcox .................. 21 2.4.2.8. Modelo k ω−SST de Menter . . . . . . . . . . . . . . . . 23 2.4.2.9. El problema de las dos dimensiones . . . . . . . . . . . . . 25 2.5. CapaL´ımite................................... 25 2.5.1. Capa l´ımite laminar . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.5.2. Capa l´ımite turbulenta . . . . . . . . . . . . . . . . . . . . . . . . . 26 3. Metodolog´ıa 27 3.1. El m´etodo de los vol´umenes finitos . . . . . . . . . . . . . . . . . . . . . . 27 3.1.1. Discretizaci´on num´erica por el m´etodo de vol´umenes finitos . . . . . 28 1
3.1.1.1. Definiciones generales de la metodolog´ıa num´erica . . . . . 28 3.1.1.2. Fundamentos del m´etodo de vol´umenes finitos . . . . . . . 30 3.2. Herramienta num´erica OpenFOAM . . . . . . . . . . . . . . . . . . . . . . 33 3.2.1. Estructura de archivos del estudio . . . . . . . . . . . . . . . . . . . 33 3.2.2. Ejecuci´on de una simulaci´on . . . . . . . . . . . . . . . . . . . . . . 35 3.2.3. Ejecuci´on de una simulaci´on en paralelo . . . . . . . . . . . . . . . 35 3.2.4. Descomposici´on de la malla y campos iniciales . . . . . . . . . . . . 36 3.2.5. Ejecuci´on de un caso descompuesto . . . . . . . . . . . . . . . . . . 37 3.2.6. Post-procesado de un caso descompuesto . . . . . . . . . . . . . . . 37 3.3. Funciones de muro (wall function) . . . . . . . . . . . . . . . . . . . . . . . 38 3.3.1. Funciones de muro est´andar . . . . . . . . . . . . . . . . . . . . . . 38 3.3.2. Formulaci´on de la WFBC standard . . . . . . . . . . . . . . . . . . 42 3.3.3. Implementaci´on de la Wall Function en OpenFOAM . . . . . . . . 45 3.3.4. C´alculo de y+enOpenFOAM..................... 46 3.3.5. Tratamiento autom´atico de paredes . . . . . . . . . . . . . . . . . . 48 3.3.6. C´alculo del tratamiento autom´atico en paredes en OpenFOAM . . . 48 3.3.7. C´odigo de la funci´on de pared est´andar en OpenFOAM . . . . . . . 50 4. Resultados 51 4.1. Definici´on del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2. Caracter´ısticas del dominio computacional y de la discretizaci´on . . . . . . 52 4.2.1. Mallados................................. 52 4.2.2. Condiciones de contorno e iniciales . . . . . . . . . . . . . . . . . . 54 4.2.3. Presiones ................................ 54 4.2.4. Velocidades ............................... 54 4.2.5. k..................................... 55 4.2.6. epsilon.................................. 55 4.2.7. omega .................................. 55 4.2.8. viscosidad ν............................... 56 4.2.9. viscosidad ν′............................... 56 4.3. Definici´on de las magnitudes de estudio . . . . . . . . . . . . . . . . . . . . 57 4.3.1. Coeficiente de resistencia . . . . . . . . . . . . . . . . . . . . . . . . 58 4.3.2. Coeficiente de sustentaci´on . . . . . . . . . . . . . . . . . . . . . . . 58 4.3.3. N´umero de Strouhal . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.4. Par´ametros que caracterizan el efecto de los flujos transversales . . . . . . 59 4.4.1. Coeficiente de resistencia . . . . . . . . . . . . . . . . . . . . . . . . 59 2
4.4.2. Coeficiente de sustentaci´on . . . . . . . . . . . . . . . . . . . . . . . 60 4.4.3. N´umero de Strouhal . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.4.4. Valores del y+.............................. 62 4.4.5. Patrones de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.4.5.1. Campos de velocidades obtenidos . . . . . . . . . . . . . . 63 4.4.5.2. Campos de presiones obtenidos . . . . . . . . . . . . . . . 67 4.5. Estimaci´on de la velocidad de fricci´on para el dise˜no de mallas . . . . . . . 71 5. Conclusiones y desarrollos futuros 74 Referencias 76 Ap´endices 78 5.1. Fichero de datos para el caso k−ǫaRe = 104................ 78 5.1.1. Capeta0................................. 78 5.1.1.1. Archivo epsilon . . . . . . . . . . . . . . . . . . . . . . . . 78 5.1.1.2. Archivok ........................... 79 5.1.1.3. Archivo nut . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.1.1.4. Archivo nuTilda . . . . . . . . . . . . . . . . . . . . . . . 82 5.1.1.5. Archivop........................... 83 5.1.1.6. ArchivoU........................... 84 5.1.2. Carpeta constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.1.2.1. Archivo RASProperties . . . . . . . . . . . . . . . . . . . 85 5.1.2.2. Archivo transportProperties . . . . . . . . . . . . . . . . . 85 5.1.2.3. Archivo turbulenceProperties . . . . . . . . . . . . . . . . 86 5.1.3. Carpeta polyMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.1.3.1. Archivo blockMeshDict.m4 . . . . . . . . . . . . . . . . . 86 5.1.4. Carpetasystem............................. 94 5.1.4.1. Archivo controlDict . . . . . . . . . . . . . . . . . . . . . 94 5.1.4.2. Archivo decomposePartDict . . . . . . . . . . . . . . . . . 95 5.1.4.3. Archivo fvSchemes . . . . . . . . . . . . . . . . . . . . . . 96 5.1.4.4. Archivo fvSolution . . . . . . . . . . . . . . . . . . . . . . 97 5.2. Fichero de datos para el caso k−ǫaRe = 5 ·104..............100 5.2.1. Capeta0.................................100 5.2.1.1. Archivo epsilon . . . . . . . . . . . . . . . . . . . . . . . . 100 5.2.1.2. Archivok ...........................102 5.2.1.3. Archivo nut . . . . . . . . . . . . . . . . . . . . . . . . . . 103 3
5.2.1.4. Archivo nuTilda . . . . . . . . . . . . . . . . . . . . . . . 104 5.2.1.5. Archivop...........................105 5.2.1.6. ArchivoU...........................106 5.2.2. Carpeta constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.2.2.1. Archivo RASProperties . . . . . . . . . . . . . . . . . . . 107 5.2.2.2. Archivo transportProperties . . . . . . . . . . . . . . . . . 108 5.2.2.3. Archivo turbulenceProperties . . . . . . . . . . . . . . . . 108 5.2.3. Carpeta polyMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 5.2.3.1. Archivo blockMeshDict.m4 . . . . . . . . . . . . . . . . . 109 5.2.4. Carpetasystem.............................116 5.2.4.1. Archivo controlDict . . . . . . . . . . . . . . . . . . . . . 116 5.2.4.2. Archivo decomposePartDict . . . . . . . . . . . . . . . . . 118 5.2.4.3. Archivo fvSchemes . . . . . . . . . . . . . . . . . . . . . . 119 5.2.4.4. Archivo fvSolution . . . . . . . . . . . . . . . . . . . . . . 120 5.3. Fichero de datos para el caso k−ǫaRe = 105................122 5.3.1. Capeta0.................................122 5.3.1.1. Archivo epsilon . . . . . . . . . . . . . . . . . . . . . . . . 122 5.3.1.2. Archivok ...........................123 5.3.1.3. Archivo nut . . . . . . . . . . . . . . . . . . . . . . . . . . 124 5.3.1.4. Archivo nuTilda . . . . . . . . . . . . . . . . . . . . . . . 125 5.3.1.5. Archivop...........................126 5.3.1.6. ArchivoU...........................127 5.3.2. Carpeta constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 5.3.2.1. Archivo RASProperties . . . . . . . . . . . . . . . . . . . 128 5.3.2.2. Archivo transportProperties . . . . . . . . . . . . . . . . . 129 5.3.2.3. Archivo turbulenceProperties . . . . . . . . . . . . . . . . 129 5.3.3. Carpeta polyMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.3.3.1. Archivo blockMeshDict.m4 . . . . . . . . . . . . . . . . . 130 5.3.4. Carpetasystem.............................138 5.3.4.1. Archivo controlDict . . . . . . . . . . . . . . . . . . . . . 138 5.3.4.2. Archivo decomposePartDict . . . . . . . . . . . . . . . . . 139 5.3.4.3. Archivo fvSchemes . . . . . . . . . . . . . . . . . . . . . . 140 5.3.4.4. Archivo fvSolution . . . . . . . . . . . . . . . . . . . . . . 141 5.4. Fichero de datos para el caso k ω−SST a Re = 104.............143 5.4.1. Capeta0.................................143 5.4.1.1. Archivo epsilon . . . . . . . . . . . . . . . . . . . . . . . . 143 4
5.4.1.2. Archivok ...........................144 5.4.1.3. Archivo nut . . . . . . . . . . . . . . . . . . . . . . . . . . 145 5.4.1.4. Archivo nuTilda . . . . . . . . . . . . . . . . . . . . . . . 146 5.4.1.5. Archivo omega . . . . . . . . . . . . . . . . . . . . . . . . 147 5.4.1.6. Archivop...........................149 5.4.1.7. ArchivoU...........................150 5.4.2. Carpeta constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.4.2.1. Archivo RASProperties . . . . . . . . . . . . . . . . . . . 151 5.4.2.2. Archivo transportProperties . . . . . . . . . . . . . . . . . 151 5.4.2.3. Archivo turbulenceProperties . . . . . . . . . . . . . . . . 152 5.4.3. Carpeta polyMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 5.4.3.1. Archivo blockMeshDict.m4 . . . . . . . . . . . . . . . . . 152 5.4.4. Carpetasystem.............................160 5.4.4.1. Archivo controlDict . . . . . . . . . . . . . . . . . . . . . 160 5.4.4.2. Archivo decomposePartDict . . . . . . . . . . . . . . . . . 161 5.4.4.3. Archivo fvSchemes . . . . . . . . . . . . . . . . . . . . . . 162 5.4.4.4. Archivo fvSolution . . . . . . . . . . . . . . . . . . . . . . 163 5.5. Fichero de datos para el caso k−ǫaRe = 5 ·104..............165 5.5.1. Capeta0.................................165 5.5.1.1. Archivo epsilon . . . . . . . . . . . . . . . . . . . . . . . . 165 5.5.1.2. Archivok ...........................166 5.5.1.3. Archivo nut . . . . . . . . . . . . . . . . . . . . . . . . . . 167 5.5.1.4. Archivo nuTilda . . . . . . . . . . . . . . . . . . . . . . . 169 5.5.1.5. Archivo omega . . . . . . . . . . . . . . . . . . . . . . . . 170 5.5.1.6. Archivop...........................171 5.5.1.7. ArchivoU...........................172 5.5.2. Carpeta constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 5.5.2.1. Archivo RASProperties . . . . . . . . . . . . . . . . . . . 173 5.5.2.2. Archivo transportProperties . . . . . . . . . . . . . . . . . 173 5.5.2.3. Archivo turbulenceProperties . . . . . . . . . . . . . . . . 174 5.5.3. Carpeta polyMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 5.5.3.1. Archivo blockMeshDict.m4 . . . . . . . . . . . . . . . . . 174 5.5.4. Carpetasystem.............................182 5.5.4.1. Archivo controlDict . . . . . . . . . . . . . . . . . . . . . 182 5.5.4.2. Archivo decomposePartDict . . . . . . . . . . . . . . . . . 184 5.5.4.3. Archivo fvSchemes . . . . . . . . . . . . . . . . . . . . . . 184 5
5.5.4.4. Archivo fvSolution . . . . . . . . . . . . . . . . . . . . . . 186 5.6. Fichero de datos para el caso k−ǫaRe = 105................187 5.6.1. Capeta0.................................187 5.6.1.1. Archivo epsilon . . . . . . . . . . . . . . . . . . . . . . . . 187 5.6.1.2. Archivok ...........................189 5.6.1.3. Archivo nut . . . . . . . . . . . . . . . . . . . . . . . . . . 190 5.6.1.4. Archivo nuTilda . . . . . . . . . . . . . . . . . . . . . . . 191 5.6.1.5. Archivo omega . . . . . . . . . . . . . . . . . . . . . . . . 193 5.6.1.6. Archivop...........................194 5.6.1.7. ArchivoU...........................195 5.6.2. Carpeta constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 5.6.2.1. Archivo RASProperties . . . . . . . . . . . . . . . . . . . 196 5.6.2.2. Archivo transportProperties . . . . . . . . . . . . . . . . . 197 5.6.2.3. Archivo turbulenceProperties . . . . . . . . . . . . . . . . 197 5.6.3. Carpeta polyMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 5.6.3.1. Archivo blockMeshDict.m4 . . . . . . . . . . . . . . . . . 198 5.6.4. Carpetasystem.............................206 5.6.4.1. Archivo controlDict . . . . . . . . . . . . . . . . . . . . . 206 5.6.4.2. Archivo decomposePartDict . . . . . . . . . . . . . . . . . 208 5.6.4.3. Archivo fvSchemes . . . . . . . . . . . . . . . . . . . . . . 209 5.6.4.4. Archivo fvSolution . . . . . . . . . . . . . . . . . . . . . . 211 5.7. Fichero de datos para el caso k−ǫaRe = 106................212 5.7.1. Capeta0.................................212 5.7.1.1. Archivo epsilon . . . . . . . . . . . . . . . . . . . . . . . . 212 5.7.1.2. Archivok ...........................214 5.7.1.3. Archivo nut . . . . . . . . . . . . . . . . . . . . . . . . . . 215 5.7.1.4. Archivo nuTilda . . . . . . . . . . . . . . . . . . . . . . . 216 5.7.1.5. Archivo omega . . . . . . . . . . . . . . . . . . . . . . . . 217 5.7.1.6. Archivop...........................218 5.7.1.7. ArchivoU...........................219 5.7.2. Carpeta constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 5.7.2.1. Archivo RASProperties . . . . . . . . . . . . . . . . . . . 220 5.7.2.2. Archivo transportProperties . . . . . . . . . . . . . . . . . 221 5.7.2.3. Archivo turbulenceProperties . . . . . . . . . . . . . . . . 221 5.7.3. Carpeta polyMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 5.7.3.1. Archivo blockMeshDict.m4 . . . . . . . . . . . . . . . . . 222 6
5.7.4. Carpetasystem.............................229 5.7.4.1. Archivo controlDict . . . . . . . . . . . . . . . . . . . . . 229 5.7.4.2. Archivo decomposePartDict . . . . . . . . . . . . . . . . . 231 5.7.4.3. Archivo fvSchemes . . . . . . . . . . . . . . . . . . . . . . 232 5.7.4.4. Archivo fvSolution . . . . . . . . . . . . . . . . . . . . . . 233 7
Cap´ıtulo 1 Introducci´on 1.1. Motivaci´on La predicci´on num´erica de las vibraciones inducidas por el desprendimiento de v´ortices ha sido el foco de numerosas investigaciones hasta la fecha, usando para investigar tal fin herramientas como la din´amica de fluidos computacional. En particular, el flujo alrededor de un cilindro circular ha acaparado mucha atenci´on ya que representa un problema cr´ıtico en ingenier´ıa como podemos ver en los cables marinos y en los drilling risers. Conocer la frecuencia a la que se desprenden estos v´ortices nos permitir´ıa conocer de antemano si ´esta coincide con la frecuencia natural de oscilaci´on de la estructura en estudio. En el presente trabajo se realiza un estudio sobre la adecuaci´on de los modelos de turbulencia k−ǫyk ω−SST , a diversos n´umeros de Reynolds para la predicci´on de fuerzas sobre un cilindro infinito sumergido en el seno de una masa fluida e incompresible. Los resultados obtenidos ser´an comparados por los presentados por otros investigadores. ´ Este trabajo final de m´aster se encuentra dividido en las siguientes secciones: Introducci´on. Conceptos b´asicos. Resultados. Conclusiones. 8
Si el flujo no es estacionario, no se puede promediar en el tiempo y debe ser reemplazado por un promedio del grupo (ensemble averaging). Este ´ultimo concepto ser´ıa imaginar un conjunto de fluidos en el que todas las variables que pueden ser controladas (energ´ıa, condiciones de contorno, etc.) son id´enticas pero las condiciones iniciales se generan de manera aleatoria. Esto dar´a flujos que difieren considerablemente unos de otros. Un promedio sobre un gran conjunto de estos flujos es un ensemble average. Escrita en forma matem´atica: ui(xi, t) = 1 N N X n=1 uni(xi, t) (2.11) El t´ermino Reynolds average aplicado la ecuaci´on de continuidad para fluidos incompresibles, ∂ui ∂xj = 0 (2.12) Tomando medias de la parte izquierda de la ecuaci´on 2.7 Dui Dt =∂ui ∂t +∂(uiuj) ∂xj (2.13) Usando la descomposici´on de 2.9 para el t´ermino no linear resulta en: uiuj= (ui+u′ i)(uj+u′ j) =uiui+u′ jui+u′ iuj+u′ iu′ j =uiui+u′ jui+u′ iuj+u′ iu′ j =uiuj+u′ iu′ j(2.14) ya que u′ jui=u′ iuj= 0 (2.15) Si unimos los resultados de las ecuaciones 2.13 y 2.14 obtendremos Dui Dt ≡∂ui ∂t +uj ∂ui ∂xj +ui ∂uj ∂xj +∂(u′ iu′ j) ∂xj (2.16) Como el flujo es incompresible, el gradiente ∂uj ∂xjes igual a cero, entonces nos queda que 15
Dui Dt =∂ui ∂t +uj ∂ui ∂xj +∂(u′ iu′ j) ∂xj (2.17) Tomar las medias del resto de t´erminos en la ecuaci´on de momento es simple, ya que la derivada espacial conmuta con el operador de tomar-media. ∂ui ∂t +uj ∂ui ∂xj =−1 ρ ∂p ∂xi +ν∂ui ∂xj∂xj−∂(u′ iu′ j) ∂xj (2.18) La ecuaci´on 2.18 se puede escribir como ρ∂ui ∂t +uj ∂ui ∂xj=∂ ∂xj−pδij +µ∂ui ∂xj +∂uj ∂xi−ρu′ iu′ j(2.19) El t´ermino entre corchetes representa la suma de tres tensiones; pδij de la media del campo de presiones, las tensiones viscosas de la transferencia de momento a nivel molecular, y el t´ermino de tensiones −ρu′ iu′ jque proviene de las fluctuaciones en el campo de velocidades. Este t´ermino es el llamado tensiones de Reynolds. Las tensiones de Reynolds son son las componentes de un tensor sim´etrico de segundo orden. Las componentes diagonales son tensiones normales y el resto son las tensiones cortantes. La energ´ıa cin´etica turbulenta kes un medio de la traza del tensor de tensiones de Reynolds, k=1 2ρu′ iu′ j(2.20) 2.4.2.2. Hip´otesis Boussinesq La hip´otesis de la turbulencia viscosa fue introducida por Boussinesq en 1877 y es an´aloga a relaci´on de las tensiones cortantes para un fluido newtoniano. De acuerdo con esta hip´otesis, la relaci´on es (ver [13]): −u′ iu′ j=νT∂ui ∂xj +∂uj ∂xi−2 3kδij (2.21) donde el campo escalar positivo, νT=νT(xi, t), es la viscosidad turbulenta. Sustituyendo la la viscosidad turbulenta dentro de 2.18 se obtiene: ∂ui ∂t +uj ∂ui ∂xj =∂ ∂xjνef ui ∂xj +uj ∂xi−1 ρ ∂ ∂xip+2 3ρk(2.22) donde 16
νef (xi, t) = ν+νT(xi, t) (2.23) (Viscosidad Efectiva) La ecuaci´on 2.22 tiene la misma apariencia como la ecuaci´on para el caso incompresible de Navier–Stokes, con uiyνef en lugar de uiyν, y con p+2 3ρk modificando la presi´on. La ventaja de este modelo radica en su extrema simpleza. Desafortunadamente, para muchos tipos de flujo su precisi´on es m´as bien pobre. Esto viene a demostrar que la f´ısica de la turbulencia es diferente de la f´ısica de procesos moleculares que conducen a las relaciones de las tensiones viscosas en un fluido newtoniano. Sin embargo, para flujos simples cortantes, donde el gradiente medio de la velocidades y turbulencia caracter´ıstica se desarrollan lentamente, la hip´otesis es razonablemente v´alida. 2.4.2.3. La cascada de energ´ıa El fen´omeno de la turbulencia se considera que est´a compuesto por v´ortices de diferentes tama˜nos. Los v´ortices m´as grandes del flujo son inestables y tienden a romperse, transfiriendo su energ´ıa a v´ortices m´as peque˜nos. ´ Estos a su vez se van rompiendo y transmitiendo su energ´ıa a sucesivos v´ortices de menor tama˜no. Esta cascada de energ´ıa contin´ua hasta que el n´umero de Reynolds Re ≡u(l)l/ν es lo suficientemente peque˜no, de tal manera que el movimiento y la viscosidad molecular es efectiva disipando la energ´ıa cin´etica. Esto es importante ya que sit´ua la disipaci´on de energ´ıa en el ´ultimo tramo de la cascada de energ´ıa. El ratio de disipaci´on denotado como ǫ, est´a determinado por el primer proceso de la secuencia, el cual es la transferencia de energ´ıa de los v´ortices m´as grandes. Estos v´ortices est´an determinados por la longitud de escala l0, la velocidad de escala u0, el tiempo de escala τ0=l0/u0y posee una energ´ıa de 1 2ρu2 0. Por lo que el ratio de transferencia de energ´ıa puede ser supuesto como u2 0/τ0=u3 0/l0. Consecuentemente, ǫes u3 0/l0, independientemente de la ν(ver [13]). 2.4.2.4. Ecuaci´on de la energ´ıa turbulenta cin´etica En esta secci´on se deriva una ecuaci´on diferencial que describe el comportamiento de la energ´ıa cin´etica turbulenta, siguiendo la l´ınea propuesta en [13]. Empezando por multiplicar las ecuaciones incompresibles de Navier–Stokes por uiy a continuaci´on tomando medias de los campos resultantes. ∂ui ∂t ui+uj ∂ui ∂xj ui=−1 ρ ∂p ∂xi ui+νui∇2ui(2.24) Multiplicando la ecuaci´on de Reynolds por uida, 17
∂ui ∂t ui+uj ∂ui ∂xj ui=−∂u′ iu′ j ∂xj ui−1 ρ ∂p ∂xj ui+νui∇2ui(2.25) Teniendo en cuenta las siguientes propiedades de las medias, uiuj=uiuj+u′ iu′ j(2.26) ∂ui ∂xj =∂ui ∂xj (2.27) ∂ui ∂xj ui=∂ui ∂xj ui+∂u′ i ∂xj u′ i(2.28) uiujuk=u′ iu′ ju′ k+u′ iu′ juk+u′ ju′ kui+u′ ku′ iuj+uiujuk(2.29) Sustrayendo 2.29 de 2.24 obtenemos, ρ∂u′ i ∂t u′ i+ρuj ∂ui ∂xj ui−uj ∂ui ∂xj ui=−∂p′ ∂xi u′ i+νu′ i∇2u′ i+ρ∂u′ iu′ j ∂xj ui(2.30) De las propiedades de las medias tenemos, uj ∂ui ∂xj ui−uj ∂ui ∂xj ui=u′ i ∂u′ i ∂xj uj+∂u′ i ∂xj u′ iu′ j+∂u′ i ∂xj u′ ju′ i+u′ iu′ j ∂ui ∂xj (2.31) Usando la ecuaci´on 2.30, la ecuaci´on 2.31, la regla de la cadena de la derivadas, y la incompresibilidad de la media del campo de velocidades, llegamos a que, ρ ∂u′ i ∂t u′ i+u′ i ∂u′ i ∂xj uj+∂u′ i ∂xj u′ iu′ j+∂u′ iu′ j ∂xj ui+u′ iu′ j ∂ui ∂xj!=−∂p′ ∂xi u′ i +νu′ i∇2u′ i+ρ∂u′ iu′ j ∂xj ui(2.32) El cuarto t´ermino del primer miembro, y el ´ultimo t´ermino del segundo miembro son iguales y se cancelan mutuamente. Usando nuevamente la regla de la cadena tenemos que, 18
1 2 ∂u′ iu′ i ∂t +uj ∂u′ iu′ i ∂xj +∂u′ iu′ iu′ j ∂xj!=−u′ iu′ j ∂u′ iu′ iu′ j ∂xj−1 ρ ∂p′u′ i ∂xj +ν∂ ∂xj1 2 ∂u′ iu′ i ∂xj−∂u′ i ∂xj ∂u′ i ∂xj (2.33) Usando la definici´on de energ´ıa cin´etica turbulenta de acuerdo con la ecuaci´on 2.20, y la definici´on del ratio de disipaci´on de energ´ıa turbulenta dada por ǫ=ν∂u′ i ∂xj ∂u′ i ∂xj (2.34) se llega finalmente a que, ∂k ∂t +uj ∂k ∂xj =−∂ ∂xj1 2u′ iu′ iu′ j+1 ρu′ jp′−ν∂k ∂xj−u′ ju′ i ∂ui ∂xj−ǫ(2.35) La suma de los dos t´erminos en el lado izquierdo, el t´ermino no estacionario y el convectivo, es la derivada material sobre k, que da el ratio de cambio de ksiguiendo al elemento fluido. El primer t´ermino del lado derecho es conocido como el transporte turbulento, y es debido al ratio al cual la energ´ıa turbulenta es transportada a trav´es del fluido por fluctuaciones turbulentas. El segundo t´ermino del lado derecho se conoce como difusi´on por la presi´on, y es otra forma de transporte turbulento resultado de la correlaci´on de las fluctuaciones de presiones y velocidades. El tercer t´ermino en el lado derecho representa la difusi´on de energ´ıa turbulenta causada por procesos naturales a nivel molecular. El cuarto t´ermino del lado derecho es conocida como producci´on, y representa el ratio al cual la energ´ıa cin´etica es transportada desde el flujo medio a la turbulencia. Finalmente, ǫes el ratio de disipaci´on de la energ´ıa cin´etica turbulenta. 2.4.2.5. Aproximaciones La parte izquierda de la ecuaci´on 2.35, y el t´ermino que representa la difusi´on molecular son exactos, mientras que la producci´on, la disipaci´on, el transporte turbulento y la difusi´on por la presi´on, requieren de correlaciones desconocidas. Para cerrar la ecuaci´on, estos t´erminos deben ser aproximados. La manera est´andar de aproximar el transporte turbulento de cantidades escalares es usar la hip´otesis de gradiente-difusi´on. En analog´ıa con procesos de transporte molecular, decimos que −u′ jφ′≈µT∂φ ∂xj, donde φes alg´un escalar, pokpor ejemplo. As´ı (ver [13]), 1 2u′ iu′ iu′ j+1 ρu′ jp′=−νT σk ∂k ∂xj (2.36) 19
donde σkes el n´umero de Prandtl turbulento para la energ´ıa cin´etica, el cual es generalmente tomado como la unidad. La hip´otesis de gradiente-difusi´on afirma que existe un flujo de kgradiente abajo de k. Matem´aticamente, esto asegura un suavizado en las soluciones, y que una condici´on de contorno se puede imponer sobre ken cualquier contorno. Usando este modelo para el transporte turbulento y la difusi´on por presi´on, junto con la ecuaci´on 2.21 para el t´ermino de producci´on, finalizamos en el siguiente modelo del transporte de k: ∂k ∂t +uj ∂k ∂xj =∂ ∂xjν+νT σk∂k ∂xj+νT∂ui ∂xj +∂uj ∂xi−2 3kδi,j∂ui ∂xj−ǫ(2.37) Puesto el campo de las velocidades medias es incompresible, 2 3δi,j ∂ui ∂xj =2 3 ∂uj ∂xj = 0 (2.38) por lo que la ecuaci´on 2.37 se reduce a ∂k ∂t +uj ∂k ∂xj =∂ ∂xjν+νT σk∂k ∂xj+νT∂ui ∂xj +∂uj ∂xi∂ui ∂xj−ǫ(2.39) Puesto que el ratio de disipaci´on escala como u3 0/l0, es razonable modelar ǫcomo ǫ=C·k3/2/l(xi) (2.40) donde l(xi) es la escala de longitud de la turbulencia, y Ces una constante. En la hip´otesis de viscosidad turbulenta, la ecuaci´on 2.21, se introduce la viscosidad turbulenta νT. Para cerrar el sistema de ecuaciones, ´esta debe ser especificada. Bas´andose enteramente en argumentos dimensionales, la viscosidad turbulenta est´a dada por ν=k1/2l(xi) (2.41) 2.4.2.6. El modelo k−ǫ Para eliminar la necesidad de especificar la longitud de escala turbulenta l(xi), en adici´on a la ecuaci´on de k, una ecuaci´on de transporte para otra cantidad turbulenta m´as se puede usar. Este tipo de modelos es llamado modelo de dos ecuaciones y la est´andar es el modelo k−ǫ. En este modelo, una ecuaci´on adicional se resuelve para el transporte de ǫ. La ecuaci´on exacta de ǫse puede derivar de manera similar a la ecuaci´on de k, pero no es un punto de partida muy ´util para la resoluci´on del modelo. Esto es debido a que ǫse ve mejor como un ratio de flujo de energ´ıa turbulenta al comienzo de la cascada de energ´ıa, el cual era la transferencia de energ´ıa desde los torbellinos m´as grandes del fluido hacia los m´as peque˜nos. En contraste, la ecuaci´on exacta de ǫpertenece al proceso en rango de disipaci´on, es decir, al final de la cascada. Entonces el modelo est´andar para ǫse ve mejor como si fuese enteramente emp´ırica. La ecuaci´on es [13] 20
∂ǫ ∂t +uj ∂ǫ ∂xj =∂ ∂xjνT σk ∂ǫ ∂xj+Cǫ1 ǫ kνT∂ui ∂xj +∂uj ∂xi−2 3kδij∂ui ∂xj−Cǫ2 ǫ2 k(2.42) Debido a la incompresibilidad del campo medio de velocidades, esta expresi´on se simplifica a ∂ǫ ∂t +uj ∂ǫ ∂xj =∂ ∂xjνT σk ∂ǫ ∂xj+Cǫ1 ǫ kνT∂ui ∂xj +∂uj ∂xi∂ui ∂xj−Cǫ2 ǫ2 k(2.43) Combinando la ecuaci´on 2.40 y la ecuaci´on 2.41, se puede escribir la viscosidad turbulenta como νT=Cµk2/ǫ (2.44) y por lo tanto l(xi) se obtiene de k y de ǫ. Aqu´ı Cµes una constante del modelo. La ecuaci´on de k y ǫjunto con la especificaci´on de νT, forman el modelo de turbulencia k−ǫ. Se dice que este modelo est´a completo ya que no requiere ninguna especificaci´on adicional salvo la escala de longitud l(xi). El modelo k−ǫconsta de cuatro componentes; dos modelos de ecuaciones se resuelvan para ky para ǫ. La viscosidad turbulenta se define por νT=Cµk2/ǫ. Las tensiones de Reynolds las encontramos en la hip´otesis de la viscosidad turbulenta, y se resuelven las ecuaciones de Reynolds para uiyp. Los valores estandarizados de las constantes que aparecen en el modelo de turbulencia k−ǫson: Cµ= 0,09, Cǫ1= 1,44, Cǫ2= 1,92, σk= 1, σǫ= 1,3 (2.45) 2.4.2.7. Modelo k−ωde Wilcox En el modelo k−ǫ, la viscosidad turbulenta cinem´atica νtes expresada como el producto de una velocidad u=√k, y una longitud l=k3/2/ǫ. El ratio de disipaci´on de la energ´ıa turbulenta cin´etica ǫno es la ´unica variable de longitud determinante. De hecho, muchos otros modelos de dos ecuaciones se han postulado. La m´as prominente es el modelo k− ωpropuesto por Wilcox, el cual usa la frecuencia turbulenta ω=ǫ/k [s−1] como la segunda variable. Si usamos esta variable, la escala de longitud ser´ıa l=√k/ω. La viscosidad turbulenta viene dada por (ver [1]) µt=ρk/ω (2.46) Las tensiones de Reynolds se computan como se hace en modelos de dos ecuaciones con la expresi´on de Boussinesq: 21
τij =−ρu′ iu′ j= 2νtSij −2ρkδij =νt∂ui ∂xj +∂uj ∂xi−2 3ρkδij (2.47) donde Sij es el tensor de deformaciones. La ecuaci´on del transporte para ky para ω, para flujos de Reynolds altos, es como sigue: (ρk) ∂t +div(ρku) = div µ+µt σkgrad(k)+Pk−β∗ρkω (2.48) donde Pk=2µtSij ·Sij −2 3ρk ∂ui ∂xj δij(2.49) es el ratio de producci´on de energ´ıa cin´etica turbulenta, y ∂(ρω) ∂t +div(ρωu) = div µ+µt σωgrad(ω) +γ12ρSij ·Sij −2 3ρω ∂ui ∂xj δij−β1ρω2(2.50) En otras palabras, el ratio de cambio de kyω, m´as el transporte de kyωpor convecci´on, es igual al transporte de kyωpor difusi´on turbulenta, m´as el ratio de producci´on de ko ω, menos el ratio de disipaci´on de k o ω. Las constantes del modelo son: σk= 2,0 σω= 2,0 γ1= 0,553 β1= 0,075 β∗= 0,09 El modelo k−ωinicialmente atrajo la atracci´on porque la integraci´on de las paredes no requiere de funciones de salto en aplicaciones para bajos Reynolds. El valor de la energ´ıa cin´etica turbulenta ken las paredes se pone a valor cero. La frecuencia ωtiende a infinito en las paredes, pero podemos especificar un valor muy grande en la pared, o siguiendo a Wilcox, aplicando una variaci´on hiperb´olica ω= 6ν/(β1y2 P) en los puntos adyacentes a paredes. La experiencia ha demostrado que los resultados no dependen mucho en el tratamiento preciso de este detalle. 22
En los contornos del tipo inlet se deben especificar valores de kyω, y en los contornos de tipo outlet usar condiciones del tipo gradiente zero. La condici´on de ωpara flujo libre de turbulencias, donde ktiende a cero y la frecuencia ωtiende a cero, es la m´as problem´atica. La ecuaci´on 2.46 muestra que la viscosidad turbulenta µtes indeterminada o infinita cuando ωtiende a cero, por lo que es necesario darle un valor peque˜no pero distinto de cero. Desafortunadamente, los resultados del modelo tienden a ser dependientes del valor de ωasumido en estas zonas libres de turbulencias, lo cual es un serio problema en flujos externos como los que se tienen en el campo de la aerodin´amica y aplicaciones aeroespaciales, donde las condiciones de contorno libre son usadas de manera obligatoria. 2.4.2.8. Modelo k ω−SST de Menter Menter not´o que los resultados del modelo k−ǫson mucho menos sensibles a los valores arbitrarios en las corrientes libres, pero su bondad en el tratamiento de paredes era insatisfactorio para capas l´ımites con gradientes de presiones adversos. Esto le condujo a sugerir un modelo h´ıbrido usando: 1. Una transformaci´on del modelo k−ǫen el modelo k−ωen las regiones cercanas a paredes. 2. El modelo k−ǫest´andar en las regiones alejadas de las paredes. El c´alculo de las tensiones de Reynolds, y de la ecuaci´on de k, son las mismas que en el modelo k−ωoriginal de Wilcox, pero la ecuaci´on de ǫse transforma en una ecuaci´on de ωasumiendo que ǫ=kω. Esto conduce a (ver [1]) ∂(ρω) ∂t +div(ρωu) = div µ+µt σω,1grad(ω) +γ22ρSij ·Sij −2 3ρω ∂ui ∂xj δij −β2ρω2+ 2 ρ σω,2ω ∂k ∂xk ∂ω ∂xk (2.51) Compar´andola con la ecuaci´on 2.49, se ve que 2.51 tiene un t´ermino fuente extra en el lado derecho, el t´ermino de difusi´on cruzada, que surge durante la transformaci´on del t´ermino de la difusi´on en la ecuaci´on de ǫ. Menter y compa˜n´ıa resumieron una serie de modificaciones para optimizar la bondad del modelo k ω−SST bas´andose en la experiencia con el modelo. Las principales mejoras son: Revisi´on de las constantes del modelo: σk= 1,0 σω,1= 2,0 σω,2= 1,17 23
γ2= 0,44 β2= 0,083 β∗= 0,09 Funciones de mezcla (Blending Function). Inestabilidades num´ericas pueden ser causadas por existir diferencias en los valores calculados de la viscosidad turbulenta, con el k−ǫest´andar en las zonas alejadas por las afecciones turbulentas, y el modelo k−ǫtransformado para el tratamiento de paredes. Las funciones de mezcla se usan para alcanzar transiciones suaves entre ambos modelos. Las funciones de mezcla se introducen en la ecuaci´on para modificar el t´ermino de difusi´on cruzada, y tambi´en son introducidas en las constantes del modelo que toman el valor C1para el modelo original k−ω, y el valor C2en el modelo k−ǫtransformado de Menter: C=FCC1+ (1 −FC)C2(2.52) T´ıpicamente las funciones de mezcla FC=FC(lt/y, Rey) son una funci´on del ratio de turbulencia lt=√k/ω, la distancia ya la pared, y del Reynolds local Re = y2ω/µ. La funci´on de forma FCes escoge de tal manera que: Es cero en las paredes. Tiende a la unidad en el campo alejado de la influencia de turbulencias. Produzca transiciones suaves a una distancia intermedia entre la pared y la zona donde termina la capa l´ımite. De esta manera el m´etodo combina ahora el buen comportamiento entorno a paredes del modelo k−ω, con la robustez de los modelos k−ǫen cuanto a su estabilidad num´erica en las zonas libre de afecciones turbulentas. Limitadores: La viscosidad turbulenta est´a limitada a dar rendimientos mejorados en flujos con gradientes de presi´on adversa y regiones d´ebiles, y la producci´on de energ´ıa cin´etica turbulenta est´a limitada para prevenir la aparici´on de turbulencias en regiones de estancamiento. Los limitadores son: µt=a1ρk max(a1ω, SF2)(2.53) donde S=p2Sij ·Sij,a1= constante, F2es una funci´on de mezcla, y Pk=min 10β∗ρkω, 2µtSijSij −2 3ρk ∂ui ∂xj δij(2.54) 24
∂ ∂t(UjΩj) + X caras #» J·∇ #» S=QjΩj(3.4) La figura 3.2 muestra una discretizaci´on bidimensional t´ıpica centrada en las celdas (izquierda). En este caso (cell-based), se identificar´ıa la celda 1 (i, j) con el dominio Ωj (superficie total ABCD en 2-D) y la variable Ujcorresponder´ıa con Ui,j. El t´ermino de flujo debe sumar las contribuciones de los cuatro lados: AB, BC, CD y DA. La ecuaci´on 3.4 es la expresi´on general del m´etodo de vol´umenes finitos y debe ser el usuario el que defina, para cada volumen Ωjseleccionado, c´omo se definen las caras y vol´umenes de cada elemento (esto es, cell-based o node-based) y c´omo se calculan los flujos en las caras. Adem´as, esta ecuaci´on presenta una serie de caracter´ısticas interesantes, que diferencia la interpretaci´on del MVF de los m´etodos en diferencias o elementos finitos: 3 2 9 4 1 8 5 6 7 (i,j-1) (i,j) (i,j+1) (i-1,j) (i+1,j) C B F A ED HK G (a) Volumen de control centrado en la celda. 1 6 7 8 (i,j-1) (i,j) (i,j+1) (i-1,j) (i+1,j) C B F A ED HK G (b) Volumen de control centrado en los nodos. Figura 3.2: Configuraci´on del volumen de control centrado en celda y en nodo. Las coordenadas del punto J, asociadas a la localizaci´on exacta de Ujdentro del volumen de control, no aparecen expl´ıcitamente en la ecuaci´on. Por lo tanto, Uj no est´a necesariamente anclado a un punto fijo dentro del volumen de control, sino que se puede considerar como un valor medio de la variable del flujo Uen dicho volumen. Las coordenadas de los puntos de la malla aparecen ´unicamente en la obtenci´on del volumen de la celda y de las ´areas de las caras. Por ejemplo, en referencia a la figura 3.2, para la celda ABCD, que comprende el punto 1, s´olo se requieren las coordenadas de A, B, C y D. Cuando no haya t´erminos fuente, la formulaci´on por MVF expresa que la variaci´on del valor promediado de U sobre un intervalo de tiempo ∆tes igual a la suma de 31
flujos que intercambia la celda considerada con sus vecinas. Para flujos estacionarios, la soluci´on num´erica se obtiene como resultado del balance de todos los flujos entrantes o salientes al volumen de control, es decir: X caras #» J·∆ #» S= 0 (3.5) El m´etodo de vol´umenes finitos permite una implementaci´on directa de las condiciones de contorno, por ejemplo en los contornos s´olidos en los que determinadas componentes normales han de ser cero. As´ı, en el caso de la ecuaci´on de conservaci´on de masa para la que #» J=ρ#» v, la condici´on de contorno en una pared ser´a #» J·d #» S= 0. La ecuaci´on 3.1, adem´as de reemplazarse por su forma discreta, requiere de una integraci´on temporal debido a la existencia del t´ermino no estacionario. Si se integra dicha ecuaci´on desde el instante anterior (n−1)∆thasta el instante final n∆tpara cada volumen de control Ωjasociado a la celda Jse obtiene: ZΩj U·dΩj|n=ZΩj U·dΩj|n−1−X caras Zn n−1#» J·∆ #» Scdt +Zn n−1 dt ZΩj Q·dΩj(3.6) Introduciendo la variable promedio en el interior de la celda, Un−1 j, as´ı como la fuente Qn−1 j, ambas evaluadas en el instante (n−1)∆t; y definiendo las cantidades promediadas en el tiempo para el volumen de control como Q∗ jpara la fuente y #» J∗para el flujo num´erico se tiene: Un−1 j=1 ΩjZΩj UdΩ|n−1#» J∗·∆ #» S=1 ∆tZn n−1 #» J∆ #» Sdt (3.7) Qn−1 j=1 ΩjZΩj QdΩQ∗ j=1 ∆tZn n−1 Qjdt (3.8) Por tanto, la discretizaci´on conservativa toma la forma: UjΩj|n=UjΩj|n−1−∆tX caras #» J∗·∆ #» S+ ∆tQ∗ jΩj(3.9) La ecuaci´on 3.9 es una relaci´on exacta para la evoluci´on temporal de las variables conservativas Un−1 jy promediadas en el interior de la celda I. Obs´ervese nuevamente c´omo no hay ning´un punto de la malla asociado a Un−1 j(la variable est´a ´unicamente anclada a la celda I). La forma en que se calcule el flujo num´erico #» J∗ser´a la que permita identificar el esquema de discretizaci´on empleado (v. ejemplos en 4.4), pues la definici´on de #» J∗es la que permite aproximar el flujo real promediado en el tiempo para cada cara de una celda. 32
Es evidente que en aras de satisfacer el principio de conservaci´on a este nivel discreto, la estimaci´on del flujo num´erico en una determinada cara de una celda debe ser independiente de la celda a la que pertenece. La ausencia en la ecuaci´on 3.9 de un ´ındice temporal tanto en el sumatorio de los flujos num´ericos como en el t´ermino fuente indica que es posible elegir en qu´e instante se quieren evaluar: bien en el instante anterior (n - 1) -esquema expl´ıcito-, bien en instante actual n-esquema impl´ıcitocomo se ver´a en el pr´oximo apartado. 3.2. Herramienta num´erica OpenFOAM OpenFOAM es en primer lugar, y ante todo, una librer´ıa de C++ usada principalmente para crear ejecutables conocidos como aplicaciones. Estas aplicaci´on se separan en dos categor´ıas: los solvers, que est´an dise˜nados cada uno para resolver un problema espec´ıfico dentro de la mec´anica de los medios continuos; y las utilidades, que est´an dise˜nadas para mejorar las tares que incluyen el manejo de datos. La distribuci´on de OpenFOAM contiene gran cantidad de solvers yutilidades que cubren un gran abanico de problemas. Uno de los puntos fuertes que tiene OpenFOAM es que los usuarios pueden aportar nuevos solvers yutilidades, siempre y cuando tenga los conocimientos de programaci´on y de f´ısica necesarios para ello. 3.2.1. Estructura de archivos del estudio El estudio de un caso particular usando la herramienta OpenFOAM requiere de una carpeta principal y un m´ınimo de tres subcarpetas. La carpeta principal puede tener cualquier nombre decidido por el usuario, normalmente, coincide con el nombre de un caso similar encontrado en los tutoriales del OpenFOAM. Por otro lado las subcarpetas que se hallan dentro de la carpeta de nuestro estudio tienen nombres que no pueden ser alterados, de lo contrario, OpenFOAM no podr´a encontrarlas al ser ejecutado, y por tanto, ´este se detendr´a mostrando por pantalla un mensaje de error. /miCarp. /0 /constant /system Figura 3.3: Organizaci´on de la carpeta con el estudio. Esta carpeta a su vez alberga a otras tres subcarpetas que ser´an las que guarden la configuraci´on del estudio, tanto condiciones iniciales como esquemas num´ericos, algoritmos de acoplamientos etc. Estas subcarpetas son: 33
/0 Upk epsilon omega nut nuTilda Figura 3.4: Organizaci´on de la carpeta las condiciones iniciales. Carpeta 0: En ella se configura las condiciones iniciales del problema en archivos separados, cada variable viene definida por un archivo con su mismo nombre. Carpeta constant: En esta carpeta se configura en modelo de turbulencia como el valor de la viscosidad. En su interior se encuentra la carpeta poliMesh quien almacena la informaci´on relevante a la construcci´on y geometr´ıa de la malla por medio del archivo blockMeshDict. El archivo blockMeshDict.m4 es un archivo opcional que nos ayuda, en caso de as´ı requerirlo, a construir la malla de manera param´etrica, ya que blockMeshDict por s´ı mismo no contempla esta opci´on. Esto se hace mediante la instrucci´on m4 blockMeshDict.m4 >blockMeshDict. /constant turbulenceProperties RASproperties transportProperties /polyMesh blockMeshDict blockMeshDict.m4 Figura 3.5: Organizaci´on de la carpeta constant. Carpeta system: Esta es la carpeta donde definiremos los esquemas, solver, tiempo de ejecuci´on, paso de tiempo, interpolaciones, etc, de nuestro estudio. 34
/system controlDict fvSchemes fvSolutions decomposeParDict Figura 3.6: Organizaci´on de la carpeta system. 3.2.2. Ejecuci´on de una simulaci´on Cada aplicaci´on est´a dise˜nada para ser ejecutada desde la terminal de Linux, t´ıpicamente leyendo y escribiendo un conjunto de datos asociados a un caso en particular. Para cualquier aplicaci´on podemos encontrar su descripci´on escribi´endola en la consola de comandos seguido del argumento -help. Por ejemplo, blockMesh -help que devuelve el mensaje, Usage: blockMesh [-region region name] [-case dir] [-blockTopology] [-help] [-doc] [-srcDoc] Los argumentos entre corchetes, [ ], son opcionales. Si la aplicaci´on es ejecutada desde el interior de un caso, OpenFOAM operar´a dentro de ´el. Alternativamente, la opci´on -case <caseDir>permite a la aplicaci´on ejecutarse desde cualquier directorio. Como cualquier otro ejecutable UNIX/Linux, las aplicaciones se pueden ejecutar en segundo plano,esto es, no es necesario esperar a que la aplicaci´on haya terminado de ejecutarse para poder seguir utilizando el terminal con otros comandos. Si quisi´eramos ejecutar blockMesh en segundo plano y almacenar la salida en un fichero log, escribir´ıamos: blockMesh > log & 3.2.3. Ejecuci´on de una simulaci´on en paralelo Esta secci´on describe c´omo ejecutar OpenFOAM en paralelo. El m´etodo que utiliza OpenFOAM para el c´alculo en paralelo es conocido como descomposici´on del dominio, en el cual la geometr´ıa se despieza en varias partes, enviando cada una a un procesador distinto. El proceso del c´alculo en paralelo implica: descomposici´on del dominio (malla y campos); ejecuci´on en paralelo del caso; reconstrucci´on del dominio y post-procesado. Para la ejecuci´on en paralelo se necesita la implementaci´on est´andar de dominio p´ublico openMPI. 35
3.2.4. Descomposici´on de la malla y campos iniciales Tanto la malla como los campos escalares y vectoriales se descomponen haciendo uso de la utilidad decomopsePar. Su principal prop´osito es descomponer el dominio con el m´ınimo esfuerzo pero de tal manera que garantice una buena soluci´on. Geometr´ıa y campos se descomponen de acuerdo con un conjunto de par´ametros que se encuentran en un diccionario llamado decomposeParDict que puede ser copiado desde el directorio interFoam/icoFoam del tutorial. Un ejemplo es: numberOfSubdomains 8; method simple; simpleCoeffs { n (2 4 1); delta 0.001; } hierarchicalCoeffs { n (1 1 1); delta 0.001; order xyz; } manualCoeffs { dataFila ""; } distributed no; roots (); Aqu´ı se puede elegir entre cuatro m´etodos de descomposici´on, especificada por la palabra clave method como se describe a continuaci´on. simple. Descomposici´on simple en el cual el dominio es dividido en distintos subdominios siguiendo una direcci´on, por ejemplo dos subdominios siguiendo la direcci´on x, cuatro subdominios siguiendo la direcci´on y, y un ´unico subdominio en la direcci´on z. hierarchical. Descomposici´on geom´etrica jerarquizada, la cual es igual que el m´etodo simple, excepto que en esta ocasi´on el usuario puede elegir en qu´e orden se realiza la divisi´on del dominio, por ejemplo, primero en el eje x, seguido del eje y, y finalizando en el eje z. scotch. En esta descomposici´on no se requiere de ninguna entrada sobre la geometr´ıa por parte del usuario e intenta minimizar el n´umero de contornos a procesar. El 36
usuario puede especificar unos pesos para la descomposici´on entre procesadores, processorWeights, si los procesadores poseen rendimientos distintos entre ellos. Tambi´en est´a la palabra reservada strategy que controla la descomposici´on a trav´es de una string que se suministra a la entrada scotch. manual. Descomposici´on manual, donde el usuario directamente especifica qu´e celda se asigna a qu´e procesador. La utilidad decomposePar se llama desde consola tecleando simplemente en la carpeta donde se ejecuta el estudio. decomposePar 0system constant processor0 processor1 processor2 processor3 Figura 3.7: Vista de la carpeta una vez descompuesto el dominio en cuatro subdominios. Las carpetas violeta contienen los datos pertenecientes a cada subdominio, tanto la malla como los valores iniciales de los campos escalares y vectoriales; como sus condiciones de contorno. 3.2.5. Ejecuci´on de un caso descompuesto Para ejecutar un caso ya preparado en paralelo usando mpirun escribimos en consola mpirun --hostfile <machines> -np <nProcs> <foamExec> <otherArgs> -parallel > log & donde <nProcs>es el n´umero de procesadores; <foamExec>es el ejecutable, por ejemplo icoFoam; y, la salida es redirigida a un fichero llamado log. 3.2.6. Post-procesado de un caso descompuesto Despu´es de que una simulaci´on haya terminado de ejecutarse en paralelo se debe recomponer los datos almacenados en las carpetas processorX donde X es un n´umero que va desde 0 hasta el n´umero de subdominios en los que hayamos dividido la malla menos 1, 0≤X≤numProc. −1 Esto se realiza con el comando 37
reconstructPar Una vez reconstruido el caso, podemos visualizar el resultado de nuestro estudio en paraView llamando desde la consola a la funci´on paraFoam ´ Este crear´a un archivo temporalmente con la extensi´on .OpenFOAM con los datos de la simulaci´on en su interior que puede ser ya interpretado por el programa paraView. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 postProcessing Figura 3.8: Vista de las nuevas carpetas creadas una vez reconstruida la descomposici´on donde se ha realizado una simulaci´on de un segundo con un paso temporal de 0.1 segundos. Las carpetas amarillas contienen los datos de los campos escalares y vectoriales para cada paso de tiempo, mientras que la carpeta posProcessing almacena en un fichero de texto plano las fuerzas medidas sobre el cilindro. Esta ´ultima carpeta se crea durante el proceso de simulaci´on. 3.3. Funciones de muro (wall function) 3.3.1. Funciones de muro est´andar El primer punto para el estudio y desarrollo de la Wall Function Boundary Condition (WFBC) es recordar la estructura te´orica de la capa l´ımite, resumida en la figura 3.9, donde se definen; Coordenada normal adimensional. Para diferenciar cada una de las subcapas se utiliza el par´ametro adimensional y+que se define como: y+=uτy ν(3.10) 38
viscosa buffer logar´ıtmica capa externa zona interna Frontera externa de la capa l´ımite −→ Ue y y+ δ Pared Figura 3.9: Estructura de la capa l´ımite donde uτes la velocidad de fricci´on. Velocidad de fricci´on en la pared. uτ=rτpared ρ=⇒(τpared =u2 τρ) (3.11) siendo τla tensi´on cortante en la pared. Velocidad tangencial adimensional. u+=u uτ =f(y+) (3.12) (Ley de la pared) Subcapa viscosa (y+<5, Re =u uτ .1)=⇒fuerzas viscosas predominan. En este caso podemos decir que τ(y)≈cte/τ(y) = µ∂u ∂y ≈τpared −→ ∀ 0≤y+≤5 (3.13) Integrando, y teniendo en cuenta que u(y+= 0) = 0 39
u=τpared y µ⇒u+=u uτ =τpared y µuτ =u2 τy µ ρuτ =y+=⇒u+=y+(3.14) (Variaci´on lineal) Subcapa logar´ıtmica (30 < y+<300) Aqu´ı el flujo es dominado por las fuerzas de inercia, y las tensiones turbulentas son m´as importantes que las viscosas. Aqu´ı se demuestra que: ∂u+ ∂y+=1 κy+=⇒u+=1 κln(Ey+) (3.15) donde κ= 0,41 y E=9.793 para paredes suaves. Para ver c´omo var´ıa τ(y) ∂u+ ∂y+=1 κy+=⇒1 uτ ∂u ∂y+=1 uτ 1 uτ u ∂u ∂y =1 κy+ µ τpared ∂u ∂y =1 κy+=⇒τ(y) τpared =1 κy+ τ(y) = τpared κy+(3.16) En resumen; podemos esquematizar la capa l´ımite como se aprecia en la figura 3.10; u+ y+ viscosa buffer logar´ıtmica y+<5; u+=y+;τ(y) = τ(pared) 10 20 5 30 300 200 30 < y+<300; u+=1 κln(Ey+); τ(y) = τpared κy+; Figura 3.10: Estructura de la capa l´ımite. Como se ve, la variaci´on de ues muy grande cerca de la pared, por lo que resolver este problema num´ericamente directamente implicar´ıa discretizar adecuadamente esta zona, haciendo que las celdas cercanas al contorno sean de tama˜no no mayor a y+= 1. 40
A trav´es de un bucle for se recorren todas las celdas, patches, que colindan con la superficie de tipo Wall donde se desea calcular y+yuτ, esto es en nuestro caso las celdas adyacentes al cilindro. Dentro del bucle aparece una bifurcaci´on if-else donde se separa los c´alculos de y+yuτen funci´on de si el fluido es compresible o no. Puesto que estamos estudiando el caso de un fluido incompresible se ha eliminado la parte del if-else donde se eval´ua este caso, dejando intacto el caso incompresible que es el que estamos analizando. La definici´on de y+aparece en la ecuaci´on 3.10 que repetimos a continuaci´on y+=uτy ν donde uτviene definida en 3.11 que repetimos a continuaci´on para mayor comodidad del lector. uτ=rτpared ρ Puesto que en la subcapa viscosa se cumple que τ(y) = µ∂u ∂y Combinando las ecuaciones tenemos que uτ=rτpared ρ=v u u u t µ∂u ∂y ρ=sν∂u ∂y (3.36) La ecuaci´on 3.36 la podemos ver implementada en el c´odigo donde: utau es uTau.boundaryField()[patchi] νes nuEff.boundaryField()[patchi] ∂u ∂y es mag(U.boundaryField()[patchi].snGrad()) Con este valor de utau es f´acil calcular y+desde la ecuaci´on 3.11 sabiendo que: yes la distancia normal desde el nodo perteneciente a la celta adyacente a una superficie a dicha superficie. νes la viscosidad del fluido en la subcapa viscosa, esto es, nuLam.boundaryField()[patchi]; 47
3.3.5. Tratamiento autom´atico de paredes Las funciones de pared est´andar no son siempre deseables ya que con ellas se elimina la influencia de la subcapa viscosa. Especialmente para flujos a bajo n´umero Reynolds, o cuando estamos interesados en realizar un estudio sobre la transferencia de calor de paredes a fluidos, la omisi´on de esta subcapa puede tener un impacto muy significativo en la soluci´on. Por ejemplo, el ratio de flujo m´asico en una tuber´ıa, o para flujos en canales a bajos n´umeros de Reynolds puede acarrear un error de un 10 % y m´as, debido a la relativamente alta influencia de la porci´on viscosa de la capa l´ımite. Para flujos externos, el efecto es generalmente menor, ya que el desplazamiento de flujos externos tiene un efecto de segundo orden. Sin embargo, es deseable tener una formulaci´on robusta y precisa en la formulaci´on de las subcapas para ser capaces de resolver las ecuaciones a lo largo de toda la superficie. Los modelos basados en low-Re k−ǫgeneralmente no resuelven los requisitos impuestos por la complejidad de los fluidos industriales. El siguiente m´etodo est´a, por lo tanto, basado en la formulaci´on del modelo k−ωpara paredes. Mientras que el tratamiento de las ecuaciones de ωson conocidas, la formulaci´on ´optima podr´ıa evitar los requisitos de una malla r´ıgida. La idea detr´as del tratamiento autom´atico de paredes es que el modelo se mueva gradualmente entre la subcapa viscosa y la subcapa logar´ıtmica bas´andonos en la densidad de malla. La ecuaci´on de ωes muy buena para esta tarea, ya que ella nos provee de una soluci´on anal´ıtica tanto para la subcapa viscosa como para la logar´ıtmica. Para esto se define una funci´on de mezcla (blending function) dependiendo del valor de la y+. Las soluciones para ωen las subcapas viscosa y logar´ıtmica en paredes son (ver [3][4]): ωvisc =6ν 0,075y2;ωlog =1 0,3κ uτ y(3.37) ´ Estas pueden ser reformuladas en t´erminos de la y+mediante una funci´on de mezcla. ω1(y+) = ω2 visc(y+) + ω2 log(y+)0,5(3.38) Una formulaci´on similar se usa para el perfil de velocidades cerca de paredes: µvis τ=U1 y+;µlog τ=U1 1 κln(y+) + C ;µτ=hµvis τ4+µlog τ4i0,25 (3.39) 3.3.6. C´alculo del tratamiento autom´atico en paredes en OpenFOAM (...) 235 // Set omega and G 236 forAll(nutw, faceI) 237 { 48
238 label cellI = patch.faceCells()[faceI]; 239 240 scalar w = cornerWeights[faceI]; 241 242 scalar omegaVis = 6.0*nuw[faceI]/(beta1_*sqr(y[faceI])); 243 244 scalar omegaLog = sqrt(k[cellI])/(Cmu25*kappa_*y[faceI]); 245 246 omega[cellI] += w*sqrt(sqr(omegaVis) + sqr(omegaLog)); 247 248 G[cellI] += 249 w 250 *(nutw[faceI] + nuw[faceI]) 251 *magGradUw[faceI] 252 *Cmu25*sqrt(k[cellI]) 253 /(kappa_*y[faceI]); 254 } (...) Como se vio en la ecuaci´on 3.29 la velocidad de fricci´on se puede poner como funci´on de la energ´ıa turbulenta cin´etica kcomo: uτ=C1/4 µk1/2=uτ(k) Sustituyendo esta velocidad de fricci´on en funci´on de ken la ecuaci´on 3.37 para obtener la ωde la subcapa logar´ıtmica llegamos a la siguiente ecuaci´on: ωlog =1 0,3κ C1/4 µk1/2 y(3.40) Al ser Cµ= 0,09 su ra´ız cuadrada vale C1/2 µ= 0,3, por lo que sustitu´ımos el valor de 0.3 de la ecuaci´on 3.40 por C1/2 µ, obteniendo ωlog =1 C1/2 µκ C1/4 µk1/2 y(3.41) Simplificando 3.41 llegamos a la expresi´on final de ωen la subcapa logar´ıtmica. ωlog =√k C1/4 µκy (3.42) El valor de ωen la subcapa viscosa aparece como omegaVis donde: ωvisc es omegaVis νes nuw[faceI] 49
beta1 es 0.075 y2es sqr(y[faceI]) As´ı mismo vemos que el valor de ωen la subcapa logar´ıtmica aparece definida en el c´odigo de tal manera que: ωlog es omegaLog k1/2es sqrt(k[cellI]) C1/4 µes Cmu25 y es y[faceI] 3.3.7. C´odigo de la funci´on de pared est´andar en OpenFOAM // Set epsilon and G 232 forAll(nutw, facei) 233 { 234 label celli = patch.faceCells()[facei]; 235 236 scalar w = cornerWeights[facei]; 237 238 epsilon[celli] += w*Cmu75*pow(k[celli], 1.5)/(kappa_*y[facei]); 239 240 G[celli] += 241 w 242 *(nutw[facei] + nuw[facei]) 243 *magGradUw[facei] 244 *Cmu25*sqrt(k[celli]) 245 /(kappa_*y[facei]); 246 } En la l´ınea 238 de la funci´on epsilonLowReWallFunctionFvPatchScalarField.C vemos c´omo se implementa la ecuaci´on 3.28, donde: ǫes epsilon[celli] C3/4 µes Cmu75 k3/2 pes pow(k[celli], 1.5) κy es kappa *y[facei] ǫ=C3/4 µk3/2 p κy 50
Cap´ıtulo 4 Resultados 4.1. Definici´on del problema Se pretende realizar un estudio sobre el comportamiento fluidodin´amico de un cilindro de longitud infinita (problema 2D) al ser sumergido en una corriente a distintos n´umeros de Reynolds. La figura 4.1 refleja las dimensiones geom´etricas que se manejan en el actual estudio. Los par´ametros del estudio son: D=1 10 10 20 Figura 4.1: Dominio computacional. Unidades en [m]. Viscosidad cinem´atica: ν= 10−6[m2/s]. Di´ametro del cilindro: = 1 [m]. N´umeros de Reynolds usados: Re = 104;Re = 5 ·104;Re = 105;Re = 106. Densidad del fluido: ρ= 103[kg/m3]. 51
4.2. Caracter´ısticas del dominio computacional y de la discretizaci´on 4.2.1. Mallados Los mallados usados son de tipo hexah´edrico estructurado, con distinta cantidad de celdas seg´un el estudio a realizar. Los mallados se dividen en 12 zonas representadas en la figura 4.2, donde zonas del mismo color indica que ´estas tienen el mismo n´umero de celdas. El c´ırculo interior de color blanco es el cilindro. Figura 4.2: Descomposici´on del mallado. Las zonas del mismo color presentan las mismas cantidades de celdas. Las figuras 4.4, 4.3 y 4.5 dan muestra del detalle de mallado entorno al cilindro seg´un el n´umeros de Reynolds, y la tabla 4.1 visualiza las caracter´ısticas de cada mallado. Se puede observar c´omo a menor Reynolds las celdas entorno al cilindro son m´as esbeltas. Esto se debe a que a al disminuir en n´umero de Reynolds las subcapas de la capa l´ımite tienden a expandirse provocando que la zona logar´ıtmica se encuentre muy alejada de la superficie, y puesto que es en el centroide de estas celdas quien debe caer en zona logar´ıtmica da como resultado unas celdas esbeltas. Malla Puntos Caras Caras internas Celdas Malla 1 270040 537710 267670 134230 Malla 2 482784 962400 479616 240336 Malla 3 273736 545102 271366 136078 Tabla 4.1: Caracter´ısticas de cada malla 52
Figura 4.3: Malla 1 para Re = 104 Figura 4.4: Malla 2 para Re = 5 ·104yRe = 105. Figura 4.5: Malla 3 para Re = 106. 53
4.2.2. Condiciones de contorno e iniciales En la figura 4.6 podemos ver los nombres que se le ha puesto en los contornos del dominio. Inlet upSide downSide OutletWall Figura 4.6: Nombre de los contornos. Las condiciones de contorno para cada variable son las siguientes: 4.2.3. Presiones Inlet: Gradiente cero. Outlet: Valor fijo P=0. upSide: Gradiente cero. downSide: Gradiente cero. Wall: Gradiente cero. Dominio: Valor fijo P=0. 4.2.4. Velocidades Inlet: Valor fijo (distinto en cada simulaci´on). Outlet: Gradiente cero. upSide: Superficie deslizante. downSide: Superficie deslizante. Wall: Valor fijo U=0. 54
Dominio: Valor fijo U=0. 4.2.5. k Inlet: Valor fijo (distinto en cada simulaci´on). Outlet: Gradiente cero. upSide: Gradiente cero. downSide: Gradiente cero. Wall: Wall Function para k. Dominio: Valor fijo (distinto en cada simulaci´on). 4.2.6. epsilon Inlet: Valor fijo (distinto en cada simulaci´on). Outlet: Gradiente cero. upSide: Gradiente cero. downSide: Gradiente cero. Wall: Wall Function para ǫ. Dominio: Valor fijo (distinto en cada simulaci´on). 4.2.7. omega Inlet: Valor fijo (distinto en cada simulaci´on). Outlet: Gradiente cero. upSide: Gradiente cero. downSide: Gradiente cero. Wall: Wall Function para ω. Dominio: Valor fijo (distinto en cada simulaci´on). 55
4.2.8. viscosidad ν Inlet: Calculada por OpenFOAM. Outlet: Calculada por OpenFOAM. upSide: Calculada por OpenFOAM. downSide: Calculada por OpenFOAM. Wall: Wall Function para ν. Dominio: Valor fijo ν=0. 4.2.9. viscosidad ν′ Inlet: Gradiente cero. Outlet: Gradiente cero. upSide: Gradiente cero. downSide: Gradiente cero. Wall: Gradiente cero. Dominio: Valor fijo ν′=0. Los valores de epsilon, omega y velocidades en los contornos se calculan de la siguiente manera. Primero se impone un valor para la viscosidad, por ejemplo, ν= 10−6[m2/s], a continuaci´on se puede calcular la velocidad haciendo uso del n´umero de Reynolds, donde la longitud caracter´ıstica que se ha de tomar en este caso es el di´ametro del cilindro, as´ı, Re =U∞·L ν−→ U∞=Re ·ν L[m/s] (4.1) donde L== 1 [m]. La longitud de mezcla (mixing length) se impone un valor de l= 7 % del di´ametro, y la intensidad turbulenta se escoge un valor de I= 2,5 %, eligiendo en ambos casos los mismos valores que se recogen en el art´ıculo de Stringer et al [2]. Con esto podemos ya calcular k,ǫ,ω. k=3 2(U∞·I)2(4.2) 56
Reynolds 1045·104105 y+ min 11,3058 14,5724 29,2568 y+ max 64,284 120,953 230,379 y+ med 43,4938 74,3594 142,13 Tabla 4.9: Valores obtenidos del y+para el modelo k−ǫ. Reynolds 1045·104105106 y+ min 7,72658 12,0316 24,4487 7,67761 y+ max 35,3342 77,8201 153,689 113,601 y+ med 27,0922 48,6111 92,3227 57,5029 Tabla 4.10: Valores obtenidos del y+para el modelo k ω−SST. 4.4.5. Patrones de flujo En este apartado se presentar´a los campos de presiones obtenidos de las distintas simulaciones realizadas durante el estudio. Se puede observar en ellos c´omo se desprenden los v´ortices justo detr´as del obst´aculo, y c´omo al aumentar el n´umero de Reynolds los v´ortices se encuentran m´as juntos. 4.4.5.1. Campos de velocidades obtenidos 0.004 0.008 0.012 U Magnitude 0 0.0147 Figura 4.11: Campo de velocidades para Re = 104con el modelo k−ǫ. 63
0.004 0.008 0.012 U Magnitude 0 0.0157 Figura 4.12: Campo de velocidades para Re = 104con el modelo k−ω. 0.02 0.04 0.06 U Magnitude 0 0.0794 Figura 4.13: Campo de velocidades para Re = 5 ·104con el modelo k−ǫ. 64
0.02 0.04 0.06 0.08 U Magnitude 0 0.0895 Figura 4.14: Campo de velocidades para Re = 5 ·104con el modelo k−ω. 0.04 0.08 0.12 U Magnitude 0 0.16 Figura 4.15: Campo de velocidades para Re = 105con el modelo k−ǫ. 65
0.04 0.08 0.12 0.16 U Magnitude 0 0.178 Figura 4.16: Campo de velocidades para Re = 105con el modelo k−ω. 0.4 0.8 1.2 1.6 U Magnitude 0 1.77 Figura 4.17: Campo de velocidades para Re = 106con el modelo k−ω. 66
4.4.5.2. Campos de presiones obtenidos -8e-5 -4e-5 0 4e-5 p -9.27e-05 5.01e-05 Figura 4.18: Campo de presiones para Re = 104con el modelo k−ǫ. -8e-5 -4e-5 0 4e-5 p -0.000114 5e-05 Figura 4.19: Campo de presiones para Re = 104con el modelo k−ω. 67
-0.002 -0.001 0 0.001 p -0.00272 0.00131 Figura 4.20: Campo de presiones para Re = 5 ·104con el modelo k−ǫ. -0.003 -0.002 -0.001 0 0.001 p -0.00354 0.0013 Figura 4.21: Campo de presiones para Re = 5 ·104con el modelo k−ω. 68
-0.008 -0.004 0 0.004 p -0.0111 0.00524 Figura 4.22: Campo de presiones para Re = 105con el modelo k−ǫ. -0.012 -0.008 -0.004 0 0.004 p -0.0137 0.00513 Figura 4.23: Campo de presiones para Re = 105con el modelo k−ω. 69
-0.8 -0.4 0 0.4 p -1.14 0.522 Figura 4.24: Campo de presiones para Re = 106con el modelo k−ω. 70
4.5. Estimaci´on de la velocidad de fricci´on para el dise˜no de mallas Con los resultados obtenidos se puede buscar una ley que nos permita, de manera aproximada, obtener una relaci´on emp´ırica entre el valor de la posici´on del primer centroide y la velocidad U∞. Recordando la definici´on de y+desde la ecuaci´on 3.10, y+=y·uτ ν donde y es la distancia normal del primer nodo a la pared, uτla velocidad tangencial y ν la viscosidad cinem´atica. Por tanto, uτ=y+·ν y Una vez obtenidos los valores de uτimponemos la hip´otesis de la existencia de una relaci´on lineal entre la velocidad libre de perturbaciones y la velocidad tangencial uτ. De esta manera tenemos que, uτ=U∞·Cx(4.10) En las gr´aficas (4.25) y (4.26) se observa que Cxsigue una par´abola frente al n´umero de Reynolds. Estas par´abolas son: Modelo k−ǫ. Cx,min =0,035100 −3,6505 ·10−7·Re + 2,4454 ·10−12 ·Re2 Cx,max =0,17517 + 5,5300 ·10−7·Re −4,8974 ·10−12 ·Re2 Cx,med =0,12320 −1,2930 ·10−7·Re + 1,7000 ·10−13 ·Re2(4.11) Modelo k ω−SST. Cx,min =0,0043869 + 1,9027 ·10−6·Re −1,7540 ·10−11 ·Re2 Cx,max =0,089721 + 1,0022 ·10−6·Re −6,8863 ·10−12 ·Re2 Cx,med =0,075270 + 7,8300 ·10−8·Re −1,0367 ·10−12 ·Re2(4.12) Fern´andez Oro [6] (p´agina 306) aporta una f´ormula emp´ırica para obtener las velocidades de fricci´on en funci´on del n´umero de Reynolds tanto para flujos en conductos interno como para flujos externos. Esta expresi´on es 71
uτ=ueqCf/2 (4.13) donde uees la velocidad del fluido libre de perturbaciones. Cf/2≈0,037Re−0,2 Lpara placa plana, (flujo externo). Cf/2≈0,039Re−0,25 Dpara conductos, (flujo interno). En las gr´aficas 4.25 y 4.26 se compara los valores de Cxobtenidos en nuestro estudio con el valor obtenido de la ecuaci´on 4.13 donde Cx=qCf/2. Se puede ver en dichas gr´aficas que el valor medio y+ med que hemos obtenido se encuentra muy pr´oximo al propuesto por Fern´andez Oro en [6], encontrando en el modelo k ω−SST menores diferencias que en el modelo k−ǫ. Estos valores y los errores con respecto al obtenido usando la expresi´on de Fern´andez Oro las vemos cuantificadas en las tablas 4.11 y 4.12 respectivamente. 0.01 0.1 1 10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 Cx Re y+min y+max y+med F. Oro [6] Figura 4.25: Valores de Cxa distintos Reynolds para el modelo k−ǫ. Reynolds 1045·104105 Cx,med (kω−SST) 0,075949 0,076593 0,072733 Cx,med (kǫ) 0,121926 0,117162 0,111972 Fern´andez Oro 0,076577 0,065193 0,060828 Tabla 4.11: Valores de Cxpara y+ med obtenido de los modelos de turbulencia k−ǫy k ω−SST y el propuesto por Fern´andez Oro [6]. 72
type fixedValue; value uniform 6.7382e-11; } up { type zeroGradient; } outlet { type zeroGradient; } down { type zeroGradient; } hole { type epsilonWallFunction; value uniform 6.7382e-11; } } // ************************************************************************* // 5.1.1.2. Archivo k /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; location "0"; object k; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -2 0 0 0 0]; internalField uniform 9.375e-8; boundaryField 79
{ fontAndBack { type empty; } inlet { type fixedValue; value uniform 9.375e-8; } up { type zeroGradient; } outlet { type zeroGradient; } down { type zeroGradient; } hole { type kqRWallFunction; value uniform 9.375e-8; } } // ************************************************************************* // 5.1.1.3. Archivo nut /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; location "0"; 80
object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; boundaryField { fontAndBack { type empty; } inlet { type calculated; value uniform 0; } up { type calculated; value uniform 0; } outlet { type calculated; value uniform 0; } down { type calculated; value uniform 0; } hole { type nutkWallFunction; value uniform 0; } } // ************************************************************************* // 81
5.1.1.4. Archivo nuTilda /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; object nuTilda; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; boundaryField { fontAndBack { type empty; } inlet { type zeroGradient; } up { type zeroGradient; } outlet { type zeroGradient; } down { type zeroGradient; } hole { type zeroGradient; } } 82
// ************************************************************************* // 5.1.1.5. Archivo p /*--------------------------------*- 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 volScalarField; object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -2 0 0 0 0]; internalField uniform 0; boundaryField { inlet { type zeroGradient; } outlet { type fixedValue; value uniform 0; } hole { type zeroGradient; } up { type zeroGradient; } down { type zeroGradient; } 83
fontAndBack { type empty; } } // ************************************************************************* // 5.1.1.6. Archivo U /*--------------------------------*- 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 volVectorField; object U; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 1 -1 0 0 0 0]; internalField uniform (0.01 0 0); boundaryField { inlet { type fixedValue; value uniform (0.01 0 0); } outlet { type zeroGradient; } hole { type fixedValue; value uniform (0 0 0); } up { type slip; } 84
down { type slip; } // ************************************************************************* // 5.1.2. Carpeta constant 5.1.2.1. Archivo RASProperties /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object RASProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // RASModel kEpsilon; turbulence on; printCoeffs on; // ************************************************************************* // 5.1.2.2. Archivo transportProperties /*--------------------------------*- 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 "constant"; 85
object transportProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // transportModel Newtonian; nu nu [ 0 2 -1 0 0 0 0 ] 1e-6; // ************************************************************************* // 5.1.2.3. Archivo turbulenceProperties /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object turbulenceProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // simulationType RASModel; // ************************************************************************* // 5.1.3. Carpeta polyMesh 5.1.3.1. Archivo blockMeshDict.m4 /*--------------------------------*- 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; } 86
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // changecom(//)changequote([,]) define(calc, [esyscmd(perl -e ’use Math::Trig; print ($1)’)]) define(VCOUNT, 0) define(vlabel, [[// ]Vertex $1 = VCOUNT define($1, VCOUNT)define([VCOUNT], incr(VCOUNT))]) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // PARAMETROS // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Mathematicalconstants: define(pi, 3.1415926536) // Numeros de nodos define(n1, 5) define(n2, 21) define(n3, 139) define(n4, 139) define(n5, 289) // Radios define(Rint, 0.5) define(Rext, 1) // Longitudes del dominio define(backLength, calc(20*Rint*2)) define(frontLength, calc(10*Rint*2)) define(highLength, calc(10*Rint*2)) // Origen de coordenadas define(ox, -backLength) define(oy, -highLength) // Angulo define(alpha, calc(45*pi/180)) // Puntos alrededor de hole define(PintX1, calc(Rint*cos(-alpha))) define(PintY1, calc(Rint*sin(-alpha))) define(PextX1, calc(Rext*cos(-alpha))) define(PextY1, calc(Rext*sin(-alpha))) define(PextX2, calc(Rext*cos(alpha))) define(PextY2, calc(Rext*sin(alpha))) define(PintX2, calc(Rint*cos(alpha))) define(PintY2, calc(Rint*sin(alpha))) 87
define(PextX3, calc(Rext*cos(3*alpha))) define(PextY3, calc(Rext*sin(3*alpha))) define(PintX3, calc(Rint*cos(3*alpha))) define(PintY3, calc(Rint*sin(3*alpha))) define(PextX4, calc(Rext*cos(5*alpha))) define(PextY4, calc(Rext*sin(5*alpha))) define(PintX4, calc(Rint*cos(5*alpha))) define(PintY4, calc(Rint*sin(5*alpha))) // Coordenada Z define(z0, 0.0) define(z1, 1.0) // Pendiente y gradiente define(pend, 0) define(pend2, calc(0.5*pend)) define(grad, 1) define(grad2, 0.5) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // VERTICES // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // vertices ( // Arco Derecho //************* // Bottom (PintX1 PintY1 z0) vlabel(v1b) (PextX1 PextY1 z0) vlabel(v2b) (PextX2 PextY2 z0) vlabel(v3b) (PintX2 PintY2 z0) vlabel(v4b) // Top (PintX1 PintY1 z1) vlabel(v1t) (PextX1 PextY1 z1) vlabel(v2t) (PextX2 PextY2 z1) vlabel(v3t) (PintX2 PintY2 z1) vlabel(v4t) // Arco Superior //************** // Bottom (PextX3 PextY3 z0) vlabel(v5b) (PintX3 PintY3 z0) vlabel(v6b) // Top (PextX3 PextY3 z1) vlabel(v5t) (PintX3 PintY3 z1) vlabel(v6t) 88
purgeWrite 2; writeFormat binary; writePrecision 6; writeCompression on; timeFormat general; timePrecision 6; runTimeModifiable true; // ************************************************************************* // functions { forces { type forceCoeffs; functionObjectLibs ( "libforces.so" ); outputControl timeStep; outputInterval 1; patches ( "hole" ); pName p; UName U; rhoName rhoInf; log true; rhoInf 1000; liftDir (0 1 0); dragDir (1 0 0); pitchAxis (0 0 1); CofR (0 0 0); magUInf 1e-2; lRef 1; Aref 1; } } // ************************************************************************* // 5.1.4.2. Archivo decomposePartDict /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.3.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ 95
FoamFile { version 2.0; format ascii; class dictionary; location "system"; object decomposePartDict; } numberOfSubdomains 16; method simple; simpleCoeffs { n (4 4 1); delta 0.001; } hierarchicalCoeffs { n (1 1 1); delta 0.001; order xyz; } manualCoeffs { dataFila ""; } distributed no; roots (); // ************************************************************************** // 5.1.4.3. Archivo fvSchemes /*--------------------------------*- 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"; 96
object fvSchemes; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ddtSchemes { default Euler; } gradSchemes { default Gauss linear; } divSchemes { default none; div(phi,U) Gauss limitedLinearV 1; div(phi,k) Gauss limitedLinear 1; div(phi,epsilon) Gauss limitedLinear 1; div(phi,R) Gauss limitedLinear 1; div(R) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; div((nuEff*dev(T(grad(U))))) Gauss linear; } laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; } snGradSchemes { default corrected; } fluxRequired { default no; p ; } // ************************************************************************* // 5.1.4.4. Archivo fvSolution /*--------------------------------*- C++ -*----------------------------------*\ 97
| ========= | | | \\ / 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 fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // solvers { p { solver GAMG; tolerance 1e-06; relTol 0.1; smoother GaussSeidel; nPreSweeps 0; nPostSweeps 2; cacheAgglomeration on; agglomerator faceAreaPair; nCellsInCoarsestLevel 10; mergeLevels 1; } pFinal { $p; tolerance 1e-06; relTol 0; } "(U|k|epsilon|R|nuTilda)" { solver smoothSolver; smoother GaussSeidel; tolerance 1e-05; relTol 0; } } PISO { nCorrectors 2; nNonOrthogonalCorrectors 0; pRefCell 0; pRefValue 0; 98
} // ************************************************************************* // relaxationFactors { fields { p 0.3; } equations { U 0.7; k 0.7; epsilon 0.7; /*R 0.7; nuTilda 0.7; */ } } /*--------------------------------*- 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 fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // solvers { p { solver GAMG; tolerance 1e-06; relTol 0.1; smoother GaussSeidel; nPreSweeps 0; nPostSweeps 2; cacheAgglomeration on; agglomerator faceAreaPair; nCellsInCoarsestLevel 10; mergeLevels 1; } pFinal { 99
$p; tolerance 1e-06; relTol 0; } "(U|k|epsilon|R|nuTilda)" { solver smoothSolver; smoother GaussSeidel; tolerance 1e-05; relTol 0; } } PISO { nCorrectors 2; nNonOrthogonalCorrectors 0; pRefCell 0; pRefValue 0; } // ************************************************************************* // relaxationFactors { fields { p 0.3; } equations { U 0.7; k 0.7; epsilon 0.7; /*R 0.7; nuTilda 0.7; */ } } 5.2. Fichero de datos para el caso k−ǫaRe = 5 ·104 5.2.1. Capeta 0 5.2.1.1. Archivo epsilon /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | 100
| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; location "0"; object epsilon; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -3 0 0 0 0]; internalField uniform 8.4227e-09; boundaryField { fontAndBack { type empty; } inlet { /*type turbulentMixingLengthDissipationRateInlet; mixingLength 0.01; phi phi; k k;*/ type fixedValue; value uniform 8.4227e-09; } up { type zeroGradient; } outlet { type zeroGradient; } down { type zeroGradient; } hole { type epsilonWallFunction; value uniform 8.4227e-09; } 101
} // ************************************************************************* // 5.2.1.2. Archivo k /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; location "0"; object k; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -2 0 0 0 0]; internalField uniform 2.3438e-06; boundaryField { fontAndBack { type empty; } inlet { type fixedValue; value uniform 2.3438e-06; } up { type zeroGradient; } outlet { type zeroGradient; } down 102
{ type zeroGradient; } hole { type kqRWallFunction; value uniform 2.3438e-06; } } // ************************************************************************* // 5.2.1.3. Archivo nut /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; location "0"; object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; boundaryField { fontAndBack { type empty; } inlet { type calculated; value uniform 0; } up 103
{ type calculated; value uniform 0; } outlet { type calculated; value uniform 0; } down { type calculated; value uniform 0; } hole { type nutkWallFunction; value uniform 0; } } // ************************************************************************* // 5.2.1.4. Archivo nuTilda /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; object nuTilda; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; boundaryField { fontAndBack { 104
vertices ( // Arco Derecho //************* // Bottom (PintX1 PintY1 z0) vlabel(v1b) (PextX1 PextY1 z0) vlabel(v2b) (PextX2 PextY2 z0) vlabel(v3b) (PintX2 PintY2 z0) vlabel(v4b) // Top (PintX1 PintY1 z1) vlabel(v1t) (PextX1 PextY1 z1) vlabel(v2t) (PextX2 PextY2 z1) vlabel(v3t) (PintX2 PintY2 z1) vlabel(v4t) // Arco Superior //************** // Bottom (PextX3 PextY3 z0) vlabel(v5b) (PintX3 PintY3 z0) vlabel(v6b) // Top (PextX3 PextY3 z1) vlabel(v5t) (PintX3 PintY3 z1) vlabel(v6t) // Arco Izquierdo //************** // Bottom (PextX4 PextY4 z0) vlabel(v7b) (PintX4 PintY4 z0) vlabel(v8b) // Top (PextX4 PextY4 z1) vlabel(v7t) (PintX4 PintY4 z1) vlabel(v8t) // Inlet //****** (-frontLength highLength z0) vlabel(v9b) (-frontLength calc(PextY3+frontLength*(pend)) z0) vlabel(v10b) (-frontLength calc(PextY4-frontLength*(pend)) z0) vlabel(v11b) (-frontLength -highLength z0) vlabel(v12b) (-frontLength highLength z1) vlabel(v9t) (-frontLength calc(PextY3+frontLength*(pend)) z1) vlabel(v10t) (-frontLength calc(PextY4-frontLength*(pend)) z1) vlabel(v11t) (-frontLength -highLength z1) vlabel(v12t) // Down 111
//***** (calc(PextX4-highLength*pend) -highLength z0) vlabel(v13b) (calc(PextX1+highLength*pend) -highLength z0) vlabel(v14b) (backLength -highLength z0) vlabel(v15b) (calc(PextX4-highLength*pend) -highLength z1) vlabel(v13t) (calc(PextX1+highLength*pend) -highLength z1) vlabel(v14t) (backLength -highLength z1) vlabel(v15t) // Outlet //******* (backLength calc(PextY1-backLength*pend2) z0) vlabel(v16b) (backLength calc(PextY2+backLength*pend2) z0) vlabel(v17b) (backLength highLength z0) vlabel(v18b) (backLength calc(PextY1-backLength*pend2) z1) vlabel(v16t) (backLength calc(PextY2+backLength*pend2) z1) vlabel(v17t) (backLength highLength z1) vlabel(v18t) // Up //*** (calc(PextX2+highLength*pend) highLength z0) vlabel(v19b) (calc(PextX3-highLength*pend) highLength z0) vlabel(v20b) (calc(PextX2+highLength*pend) highLength z1) vlabel(v19t) (calc(PextX3-highLength*pend) highLength z1) vlabel(v20t) ); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // BLOQUES // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // blocks ( // Arco derecho hex (v1b v2b v3b v4b v1t v2t v3t v4t) (n1 n2 1) simpleGrading (grad2 1 1) // Arco superior hex (v4b v3b v5b v6b v4t v3t v5t v6t) (n1 n2 1) simpleGrading (grad2 1 1) // Arco izquierdo hex (v6b v5b v7b v8b v6t v5t v7t v8t) (n1 n2 1) simpleGrading (grad2 1 1) // Arco inferior 112
hex (v8b v7b v2b v1b v8t v7t v2t v1t) (n1 n2 1) simpleGrading (grad2 1 1) // Bloque 9 hex (v5b v10b v11b v7b v5t v10t v11t v7t) (n3 n2 1) edgeGrading (grad grad grad grad 1 1 1 1 1 1 1 1) // Bloque 10 hex (v7b v11b v12b v13b v7t v11t v12t v13t) (n3 n4 1) edgeGrading (grad 1 1 grad grad 1 1 grad 1 1 1 1) // Bloque 11 hex (v7b v13b v14b v2b v7t v13t v14t v2t) (n4 n2 1) edgeGrading (grad grad grad grad 1 1 1 1 1 1 1 1) // Bloque 12 hex (v2b v14b v15b v16b v2t v14t v15t v16t) (n4 n5 1) edgeGrading (grad 1 1 grad grad 1 1 grad 1 1 1 1) // Bloque 5 hex (v2b v16b v17b v3b v2t v16t v17t v3t) (n5 n2 1) edgeGrading (grad grad grad grad 1 1 1 1 1 1 1 1) // Bloque 6 hex (v3b v17b v18b v19b v3t v17t v18t v19t) (n5 n4 1) edgeGrading (grad 1 1 grad grad 1 1 grad 1 1 1 1) // Bloque 7 hex (v3b v19b v20b v5b v3t v19t v20t v5t) (n4 n2 1) edgeGrading (grad grad grad grad 1 1 1 1 1 1 1 1) // Bloque 8 hex (v5b v20b v9b v10b v5t v20t v9t v10t) (n4 n3 1) edgeGrading (grad 1 1 grad grad 1 1 grad 1 1 1 1) ); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // EJES // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // edges ( // Arco Derecho //************** 113
arc v2b v3b (Rext 0 z0) // Arco exterior arc v4b v1b (Rint 0 z0) // Arco interior arc v2t v3t (Rext 0 z1) // Arco exterior arc v4t v1t (Rint 0 z1) // Arco interior // Arco Superior //************** arc v3b v5b (0 Rext z0) // Arco exterior arc v6b v4b (0 Rint z0) // Arco interior arc v3t v5t (0 Rext z1) // Arco exterior arc v6t v4t (0 Rint z1) // Arco interior // Arco Izquierdo //************** arc v5b v7b (-Rext 0 z0) // Arco exterior arc v8b v6b (-Rint 0 z0) // Arco interior arc v5t v7t (-Rext 0 z1) // Arco exterior arc v8t v6t (-Rint 0 z1) // Arco interior // Arco Inferior //************** arc v7b v2b (0 -Rext z0) // Arco exterior arc v1b v8b (0 -Rint z0) // Arco interior arc v7t v2t (0 -Rext z1) // Arco exterior arc v1t v8t (0 -Rint z1) // Arco interior ); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // CONTORNOS // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // boundary ( hole { type wall; faces ( (v1b v4b v4t v1t) // Arco derecho (v4t v6t v6b v4b) // Arco superior (v6b v8b v8t v6t) // Arco izquierdo (v1b v8b v8t v1t) // Arco inferior ); } frontAndBack { type empty; faces ( 114
// Arco derecho (v1b v2b v3b v4b) (v1t v2t v3t v4t) // Arco superior (v4t v3t v5t v6t) (v4b v3b v5b v6b) // Arco izquierdo (v6b v5b v7b v8b) (v6t v5t v7t v8t) // Arco inferior (v8b v7b v2b v1b) (v8t v7t v2t v1t) // Bloque 5 (v3b v2b v16b v17b) (v3t v2t v16t v17t) // Bloque 6 (v18b v19b v3b v17b) (v18t v19t v3t v17t) // Bloque 7 (v19b v20b v5b v3b) (v19t v20t v5t v3t) // Bloque 8 (v20b v9b v10b v5b) (v20t v9t v10t v5t) // Bloque 9 (v10b v11b v7b v5b) (v10t v11t v7t v5t) // Bloque 10 (v11b v12b v13b v7b) (v11t v12t v13t v7t) // Bloque 11 (v7b v13b v14b v2b) (v7t v13t v14t v2t) // Bloque 12 (v2b v14b v15b v16b) (v2t v14t v15t v16t) ); } inlet { type patch; faces 115
( (v9b v10b v10t v9t) (v10b v11b v11t v10t) (v11b v12b v12t v11t) ); } outlet { type patch; faces ( (v18b v17b v17t v18t) (v17b v16b v16t v17t) (v16b v15b v15t v16t) ); } up { type patch; faces ( (v20b v9b v9t v20t) (v19b v20b v20t v19t) (v18b v19b v19t v18t) ); } down { type patch; faces ( (v12b v13b v13t v12t) (v13b v14b v14t v13t) (v14b v15b v15t v14t) ); } ); mergePatchPairs ( ); 5.2.4. Carpeta system 5.2.4.1. Archivo controlDict /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.4.0 | 116
| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "system"; object controlDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // application pisoFoam; startFrom latestTime; startTime 8000; stopAt endTime; endTime 10000; deltaT 0.2;// Con 2.5 funciona writeControl timeStep; writeInterval 500; purgeWrite 2; writeFormat binary; writePrecision 6; writeCompression on; timeFormat general; timePrecision 6; runTimeModifiable true; // ************************************************************************* // functions { forces { type forceCoeffs; functionObjectLibs ( "libforces.so" ); outputControl timeStep; outputInterval 1; 117
patches ( "hole" ); pName p; UName U; rhoName rhoInf; log true; rhoInf 1000; liftDir (0 1 0); dragDir (1 0 0); pitchAxis (0 0 1); CofR (0 0 0); magUInf 5e-2; lRef 1; Aref 1; } } // ************************************************************************* // 5.2.4.2. Archivo decomposePartDict /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.3.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "system"; object decomposePartDict; } numberOfSubdomains 10; method simple; simpleCoeffs { n (2 5 1); delta 0.001; } hierarchicalCoeffs { n (1 1 1); delta 0.001; order xyz; } 118
manualCoeffs { dataFila ""; } distributed no; roots (); // ************************************************************************** // 5.2.4.3. Archivo fvSchemes /*--------------------------------*- 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 fvSchemes; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ddtSchemes { default Euler; } gradSchemes { default Gauss linear; } divSchemes { default none; div(phi,U) Gauss limitedLinearV 1; div(phi,k) Gauss limitedLinear 1; div(phi,epsilon) Gauss limitedLinear 1; div(phi,R) Gauss limitedLinear 1; div(R) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; div((nuEff*dev(T(grad(U))))) Gauss linear; } 119
laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; } snGradSchemes { default corrected; } fluxRequired { default no; p ; } // ************************************************************************* // 5.2.4.4. Archivo fvSolution /*--------------------------------*- 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 fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // solvers { p { solver GAMG; tolerance 1e-06; relTol 0.1; smoother GaussSeidel; nPreSweeps 0; nPostSweeps 2; 120
version 2.0; format ascii; class volScalarField; object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -2 0 0 0 0]; internalField uniform 0; boundaryField { inlet { type zeroGradient; } outlet { type fixedValue; value uniform 0; } hole { type zeroGradient; } up { type zeroGradient; } down { type zeroGradient; } fontAndBack { type empty; } } // ************************************************************************* // 5.3.1.6. Archivo U /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.4.0 | 127
| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volVectorField; object U; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 1 -1 0 0 0 0]; internalField uniform (0.1 0 0); boundaryField { inlet { type fixedValue; value uniform (0.1 0 0); } outlet { type zeroGradient; } hole { type fixedValue; value uniform (0 0 0); } up { type slip; } down { type slip; } // ************************************************************************* // 5.3.2. Carpeta constant 5.3.2.1. Archivo RASProperties /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | 128
| \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object RASProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // RASModel kEpsilon; turbulence on; printCoeffs on; // ************************************************************************* // 5.3.2.2. Archivo transportProperties /*--------------------------------*- 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 "constant"; object transportProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // transportModel Newtonian; nu nu [ 0 2 -1 0 0 0 0 ] 1e-6; // ************************************************************************* // 5.3.2.3. Archivo turbulenceProperties /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | 129
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object turbulenceProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // simulationType RASModel; // ************************************************************************* // 5.3.3. Carpeta polyMesh 5.3.3.1. Archivo blockMeshDict.m4 /*--------------------------------*- 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; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // changecom(//)changequote([,]) define(calc, [esyscmd(perl -e ’use Math::Trig; print ($1)’)]) define(VCOUNT, 0) define(vlabel, [[// ]Vertex $1 = VCOUNT define($1, VCOUNT)define([VCOUNT], incr(VCOUNT))]) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // PARAMETROS // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 130
// Mathematicalconstants: define(pi, 3.1415926536) // Numeros de nodos define(n1, 10) define(n2, 28) define(n3, 186) define(n4, 186) define(n5, 386) // Radios define(Rint, 0.5) define(Rext, 1) // Longitudes del dominio define(backLength, calc(20*Rint*2)) define(frontLength, calc(10*Rint*2)) define(highLength, calc(10*Rint*2)) // Origen de coordenadas define(ox, -backLength) define(oy, -highLength) // Angulo define(alpha, calc(45*pi/180)) // Puntos alrededor de hole define(PintX1, calc(Rint*cos(-alpha))) define(PintY1, calc(Rint*sin(-alpha))) define(PextX1, calc(Rext*cos(-alpha))) define(PextY1, calc(Rext*sin(-alpha))) define(PextX2, calc(Rext*cos(alpha))) define(PextY2, calc(Rext*sin(alpha))) define(PintX2, calc(Rint*cos(alpha))) define(PintY2, calc(Rint*sin(alpha))) define(PextX3, calc(Rext*cos(3*alpha))) define(PextY3, calc(Rext*sin(3*alpha))) define(PintX3, calc(Rint*cos(3*alpha))) define(PintY3, calc(Rint*sin(3*alpha))) define(PextX4, calc(Rext*cos(5*alpha))) define(PextY4, calc(Rext*sin(5*alpha))) define(PintX4, calc(Rint*cos(5*alpha))) define(PintY4, calc(Rint*sin(5*alpha))) // Coordenada Z define(z0, 0.0) define(z1, 1.0) 131
// Pendiente y gradiente define(pend, 0) define(pend2, calc(0.5*pend)) define(grad, 1) define(grad2, 1) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // VERTICES // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // vertices ( // Arco Derecho //************* // Bottom (PintX1 PintY1 z0) vlabel(v1b) (PextX1 PextY1 z0) vlabel(v2b) (PextX2 PextY2 z0) vlabel(v3b) (PintX2 PintY2 z0) vlabel(v4b) // Top (PintX1 PintY1 z1) vlabel(v1t) (PextX1 PextY1 z1) vlabel(v2t) (PextX2 PextY2 z1) vlabel(v3t) (PintX2 PintY2 z1) vlabel(v4t) // Arco Superior //************** // Bottom (PextX3 PextY3 z0) vlabel(v5b) (PintX3 PintY3 z0) vlabel(v6b) // Top (PextX3 PextY3 z1) vlabel(v5t) (PintX3 PintY3 z1) vlabel(v6t) // Arco Izquierdo //************** // Bottom (PextX4 PextY4 z0) vlabel(v7b) (PintX4 PintY4 z0) vlabel(v8b) // Top (PextX4 PextY4 z1) vlabel(v7t) (PintX4 PintY4 z1) vlabel(v8t) // Inlet //****** 132
(-frontLength highLength z0) vlabel(v9b) (-frontLength calc(PextY3+frontLength*(pend)) z0) vlabel(v10b) (-frontLength calc(PextY4-frontLength*(pend)) z0) vlabel(v11b) (-frontLength -highLength z0) vlabel(v12b) (-frontLength highLength z1) vlabel(v9t) (-frontLength calc(PextY3+frontLength*(pend)) z1) vlabel(v10t) (-frontLength calc(PextY4-frontLength*(pend)) z1) vlabel(v11t) (-frontLength -highLength z1) vlabel(v12t) // Down //***** (calc(PextX4-highLength*pend) -highLength z0) vlabel(v13b) (calc(PextX1+highLength*pend) -highLength z0) vlabel(v14b) (backLength -highLength z0) vlabel(v15b) (calc(PextX4-highLength*pend) -highLength z1) vlabel(v13t) (calc(PextX1+highLength*pend) -highLength z1) vlabel(v14t) (backLength -highLength z1) vlabel(v15t) // Outlet //******* (backLength calc(PextY1-backLength*pend2) z0) vlabel(v16b) (backLength calc(PextY2+backLength*pend2) z0) vlabel(v17b) (backLength highLength z0) vlabel(v18b) (backLength calc(PextY1-backLength*pend2) z1) vlabel(v16t) (backLength calc(PextY2+backLength*pend2) z1) vlabel(v17t) (backLength highLength z1) vlabel(v18t) // Up //*** (calc(PextX2+highLength*pend) highLength z0) vlabel(v19b) (calc(PextX3-highLength*pend) highLength z0) vlabel(v20b) (calc(PextX2+highLength*pend) highLength z1) vlabel(v19t) (calc(PextX3-highLength*pend) highLength z1) vlabel(v20t) ); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // BLOQUES // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // blocks ( // Arco derecho hex (v1b v2b v3b v4b v1t v2t v3t v4t) (n1 n2 1) simpleGrading (grad2 1 1) 133
// Arco superior hex (v4b v3b v5b v6b v4t v3t v5t v6t) (n1 n2 1) simpleGrading (grad2 1 1) // Arco izquierdo hex (v6b v5b v7b v8b v6t v5t v7t v8t) (n1 n2 1) simpleGrading (grad2 1 1) // Arco inferior hex (v8b v7b v2b v1b v8t v7t v2t v1t) (n1 n2 1) simpleGrading (grad2 1 1) // Bloque 9 hex (v5b v10b v11b v7b v5t v10t v11t v7t) (n3 n2 1) edgeGrading (grad grad grad grad 1 1 1 1 1 1 1 1) // Bloque 10 hex (v7b v11b v12b v13b v7t v11t v12t v13t) (n3 n4 1) edgeGrading (grad 1 1 grad grad 1 1 grad 1 1 1 1) // Bloque 11 hex (v7b v13b v14b v2b v7t v13t v14t v2t) (n4 n2 1) edgeGrading (grad grad grad grad 1 1 1 1 1 1 1 1) // Bloque 12 hex (v2b v14b v15b v16b v2t v14t v15t v16t) (n4 n5 1) edgeGrading (grad 1 1 grad grad 1 1 grad 1 1 1 1) // Bloque 5 hex (v2b v16b v17b v3b v2t v16t v17t v3t) (n5 n2 1) edgeGrading (grad grad grad grad 1 1 1 1 1 1 1 1) // Bloque 6 hex (v3b v17b v18b v19b v3t v17t v18t v19t) (n5 n4 1) edgeGrading (grad 1 1 grad grad 1 1 grad 1 1 1 1) // Bloque 7 hex (v3b v19b v20b v5b v3t v19t v20t v5t) (n4 n2 1) edgeGrading (grad grad grad grad 1 1 1 1 1 1 1 1) // Bloque 8 hex (v5b v20b v9b v10b v5t v20t v9t v10t) (n4 n3 1) edgeGrading (grad 1 1 grad grad 1 1 grad 1 1 1 1) 134
); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // EJES // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // edges ( // Arco Derecho //************** arc v2b v3b (Rext 0 z0) // Arco exterior arc v4b v1b (Rint 0 z0) // Arco interior arc v2t v3t (Rext 0 z1) // Arco exterior arc v4t v1t (Rint 0 z1) // Arco interior // Arco Superior //************** arc v3b v5b (0 Rext z0) // Arco exterior arc v6b v4b (0 Rint z0) // Arco interior arc v3t v5t (0 Rext z1) // Arco exterior arc v6t v4t (0 Rint z1) // Arco interior // Arco Izquierdo //************** arc v5b v7b (-Rext 0 z0) // Arco exterior arc v8b v6b (-Rint 0 z0) // Arco interior arc v5t v7t (-Rext 0 z1) // Arco exterior arc v8t v6t (-Rint 0 z1) // Arco interior // Arco Inferior //************** arc v7b v2b (0 -Rext z0) // Arco exterior arc v1b v8b (0 -Rint z0) // Arco interior arc v7t v2t (0 -Rext z1) // Arco exterior arc v1t v8t (0 -Rint z1) // Arco interior ); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // CONTORNOS // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // boundary ( hole { type wall; faces ( (v1b v4b v4t v1t) // Arco derecho 135
(v4t v6t v6b v4b) // Arco superior (v6b v8b v8t v6t) // Arco izquierdo (v1b v8b v8t v1t) // Arco inferior ); } frontAndBack { type empty; faces ( // Arco derecho (v1b v2b v3b v4b) (v1t v2t v3t v4t) // Arco superior (v4t v3t v5t v6t) (v4b v3b v5b v6b) // Arco izquierdo (v6b v5b v7b v8b) (v6t v5t v7t v8t) // Arco inferior (v8b v7b v2b v1b) (v8t v7t v2t v1t) // Bloque 5 (v3b v2b v16b v17b) (v3t v2t v16t v17t) // Bloque 6 (v18b v19b v3b v17b) (v18t v19t v3t v17t) // Bloque 7 (v19b v20b v5b v3b) (v19t v20t v5t v3t) // Bloque 8 (v20b v9b v10b v5b) (v20t v9t v10t v5t) // Bloque 9 (v10b v11b v7b v5b) (v10t v11t v7t v5t) // Bloque 10 (v11b v12b v13b v7b) (v11t v12t v13t v7t) // Bloque 11 (v7b v13b v14b v2b) (v7t v13t v14t v2t) 136
epsilon 0.7; /*R 0.7; nuTilda 0.7; */ } } 5.4. Fichero de datos para el caso k ω−SST a Re = 104 5.4.1. Capeta 0 5.4.1.1. Archivo epsilon /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; location "0"; object epsilon; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -3 0 0 0 0]; internalField uniform 6.74e-11; boundaryField { fontAndBack { type empty; } inlet { /*type turbulentMixingLengthDissipationRateInlet; mixingLength 0.01; phi phi; k k;*/ type fixedValue; value uniform 6.74e-11; } up 143
{ type zeroGradient; } outlet { type zeroGradient; } down { type zeroGradient; } hole { type epsilonWallFunction; value uniform 6.74e-11; } } // ************************************************************************* // 5.4.1.2. Archivo k /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; location "0"; object k; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -2 0 0 0 0]; internalField uniform 9.375e-8; boundaryField { fontAndBack { type empty; 144
} inlet { type fixedValue; value uniform 9.375e-8; } up { type zeroGradient; } outlet { type zeroGradient; } down { type zeroGradient; } hole { type kqRWallFunction; value uniform 9.375e-8; } } // ************************************************************************* // 5.4.1.3. Archivo nut /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; location "0"; object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -1 0 0 0 0]; 145
internalField uniform 0; boundaryField { fontAndBack { type empty; } inlet { type calculated; value uniform 0; } up { type calculated; value uniform 0; } outlet { type calculated; value uniform 0; } down { type calculated; value uniform 0; } hole { type nutkWallFunction; value uniform 0; } } // ************************************************************************* // 5.4.1.4. Archivo nuTilda /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | 146
| \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class volScalarField; object nuTilda; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; boundaryField { fontAndBack { type empty; } inlet { type zeroGradient; } up { type zeroGradient; } outlet { type zeroGradient; } down { type zeroGradient; } hole { type zeroGradient; } } // ************************************************************************* // 5.4.1.5. Archivo omega /*--------------------------------*- C++ -*----------------------------------*\ 147
| ========= | | | \\ / 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 volScalarField; location "0"; object omega; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [ 0 0 -1 0 0 0 0 ]; internalField uniform 4.86e-2; boundaryField { inlet { type fixedValue; value uniform 4.86e-2; } outlet { type zeroGradient; } hole { type omegaWallFunction; //U Urel; value uniform 4.86e-2; } up { type zeroGradient; } down { type zeroGradient; } } 148
5.4.1.6. Archivo p /*--------------------------------*- 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 volScalarField; object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -2 0 0 0 0]; internalField uniform 0; boundaryField { inlet { type zeroGradient; } outlet { type fixedValue; value uniform 0; } hole { type zeroGradient; } up { type zeroGradient; } down { type zeroGradient; } fontAndBack { type empty; } 149
} // ************************************************************************* // 5.4.1.7. Archivo U /*--------------------------------*- 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 volVectorField; object U; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 1 -1 0 0 0 0]; internalField uniform (0.01 0 0); boundaryField { inlet { type fixedValue; value uniform (0.01 0 0); } outlet { type zeroGradient; } hole { type fixedValue; value uniform (0 0 0); } up { type slip; } down { type slip; 150
} // ************************************************************************* // 5.4.2. Carpeta constant 5.4.2.1. Archivo RASProperties /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object RASProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // RASModel kOmegaSST; turbulence on; printCoeffs on; // ************************************************************************* // 5.4.2.2. Archivo transportProperties /*--------------------------------*- 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 "constant"; object transportProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 151
transportModel Newtonian; nu nu [ 0 2 -1 0 0 0 0 ] 1e-6; // ************************************************************************* // 5.4.2.3. Archivo turbulenceProperties /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object turbulenceProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // simulationType RASModel; // ************************************************************************* // 5.4.3. Carpeta polyMesh 5.4.3.1. Archivo blockMeshDict.m4 /*--------------------------------*- 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; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // changecom(//)changequote([,]) 152