0% encontró este documento útil (0 votos)
90 vistas242 páginas

Modelado CFD

MODELADO CFD DEL FLUJO NO REACTIVO EN LA CÁMARA DE COMBUSTIÓN DE MOTORES AERODERIVADOS MEDIANTE MALLADO ADAPTATIVO

Cargado por

Leinad Sc
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
90 vistas242 páginas

Modelado CFD

MODELADO CFD DEL FLUJO NO REACTIVO EN LA CÁMARA DE COMBUSTIÓN DE MOTORES AERODERIVADOS MEDIANTE MALLADO ADAPTATIVO

Cargado por

Leinad Sc
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Trabajo Fin de Máster en Ingeniería Aeronáutica

MODELADO CFD DEL FLUJO


NO REACTIVO EN LA CÁMARA
DE COMBUSTIÓN DE MOTORES
AERODERIVADOS MEDIANTE
MALLADO ADAPTATIVO

Autor
Carlos Moreno Montagud
Tutor
Marcos Carreres Talens
Cotutor
Mario Belmar Gil

Universidad Politécnica de Valencia


Escuela Técnica Superior de Ingeniería del Diseño
Departamento de Máquinas y Motores Térmicos

Valencia - Septiembre de 2018


Resumen

En la sociedad actual existe cada vez mayor preocupación por las emisiones con-
taminantes, especialmente el 𝑁 𝑂𝑥 , y eso se traduce en la creciente concienciación de
la población sobre dicho problema así como en leyes cada vez más estrictas. En este
contexto surgen estrategias de inyección y combustión diferentes que tratan de corregir
este problema, como la Lean Direct Injection (LDI) para motores de flujo contínuo.

En el presente Trabajo Fin de Máster se pretende avanzar en el estudio de dicha


estrategia mediante resolución numérica con códigos CFD. Los pasos a seguir son: ana-
lizar la inyección de combustible, su atomización y posterior evaporación, su interacción
con el flujo turbulento en la cámara de combustión, la eficiencia global y las emisiones
vinculadas a este proceso. A partir de unos resultados experimentales, obtenidos de la
cámara de combustión LDI diseñada en CORIA para el proyecto KIAI, se tratará de
caracterizar el campo de velocidades turbulento que se produce en el interior. Para ello
se simularán y compararán casos no reactivos, premezclado (inyectando una mezcla
pobre de aire y combustible) y posteriormente no premezclado (inyectando combusti-
ble gaseoso directamente sobre el flujo de aire turbulento). Los códigos CFD utilizados
son CONVERGE (con mallado adaptativo) y OpenFOAM (con mallado tradicional),
haciendo uso de aproximaciones RANS y LES.

III
Resum

En la societat actual hi ha cada vegada una major preocupació per les emissions
contaminants, especialment el 𝑁 𝑂𝑥 , fet que es tradueix en la concienciació de la po-
blació sobre aquest problema així com en lleis cada vegada més estrictes. En aquest
context, sorgeixen estratègies d’injecció i combustió diferents que tracten de corregir el
problema, com la Lean Direct Injection (LDI) per a motors de flux continu.

En el present Treball Fi de Màster es pretén avançar en l’estudi d’aquesta estratègia


mitjançant resolució numèrica amb codis CFD. Els passos a seguir són: analitzar la in-
jecció de combustible, la seua atomització i posterior evaporació, la seua interacció amb
el flux turbulent a la cambra de combustió, l’eficiència global i les emissions vinculades
a aquest procés. A partir d’uns resultats experimentals, obtinguts de la cambra de com-
bustió LDI dissenyada en CORIA per al projecte KIAI, es tractarà de caracteritzar el
camp de velocitats turbulent que es produeix a l’interior. Per a això es simularan i com-
pararan casos no reactius, premesclat (injectant una barreja pobra d’aire i combustible)
i posteriorment no premesclat (injectant combustible gasós directament sobre el flux
d’aire turbulent). Els codis CFD utilitzats són CONVERGE (amb mallat adaptatiu) i
OpenFOAM (amb mallat tradicional), fent ús d’aproximacions RANS i LES.

V
Abstract

There is growing concern in today’s society about polluting emissions, especially


the 𝑁 𝑂𝑥 , and in consequence people are growing in awareness of this problem as well
as competent authorities are making more restrictive laws. In this context different
injection and combustion strategies arise trying to fix this problem, such as the Lean
Direct Injection (LDI) for continuous flow engines.

In this Final Master’s Project, we intend to make progress in the study of this
strategy through numerical resolution with CFD codes. The steps to follow are: analy-
zing the fuel injection, its atomization and subsequent evaporation, its interaction with
the turbulent flow in the combustion chamber, the global efficiency and the emissions
produced in this process. Based on experimental results, obtained from the LDI com-
bustion chamber designed in CORIA for the KIAI project, an attempt will be made
to characterize the turbulent velocity field that is produced internally. To do this, non-
reactive cases will be simulated and compared, premixed (injecting a poor mixture of
air and fuel) and not premixed (injecting gaseous fuel directly into the turbulent air
flow). The CFD codes used are CONVERGE (with adaptive mesh) and OpenFOAM
(with traditional mesh), using RANS and LES approaches.

VII
Great works are performed not by strength
but by perseverance.
Samuel Johnson

If you think you’re too small to make a difference,


you haven’t spent a night with a mosquito.
African Proverb
Agradecimientos

En primer lugar, al tutor Marcos Carreres y cotutor Mario Belmar por guiarme
durante este proyecto, así como en mi estancia en el CMT. Me han brindado las he-
rramientas necesarias para sacarlo adelante, me han ayudado con sus acertadas co-
rrecciones y gracias a ellos recordaré siempre con cariño la experiencia vivida y los
conocimientos adquiridos en ella.

En segundo lugar, a mis compañeros de carrera Jose Manuel Sellés e Iván Olmeda
que han hecho más llevaderos estos años de universidad, los trabajos en grupo, el
período de prácticas, los descansos a mediodía para comer y las horas de gimnasio.

En tercer lugar, también quiero agradecer a mi perpetuo grupo de amigos (Adri,


Carlos, Gabi, JC, JS, Juan y Tono) su paciencia cada vez que he tenido que rechazar un
plan por trabajar y/o redactar, así como de hacerme disfrutar de su compañía en cada
quedada. También a Lidia por soportar mis dolores de cabeza, por abrirme su casa, por
su sonrisa perenne y su inagotable capacidad de darme conversación para distraerme de
tanto trabajo; y a Irene por su apoyo incondicional, por creer en mí siempre dándome
la fuerza y ánimo necesarios para no abandonar y seguir esforzándome.

Y finalmente, pero no menos importante, a mis padres Diego y Ana, así como a
mi hermano Diego, por su dedicación e insistencia para que pueda llegar lo más lejos
posible en la vida.

XI
Índice general

Resumen III

Resum V

Abstract VII

Agradecimientos XI

Índice general XIII

Índice de figuras XVII

Documento I Memoria 1

1 Introducción 7
1.1. Contexto histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Fundamentos de combustión en motores aeroderivados 11


2.1. Productos de la combustión . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2. Esquemas de combustión con bajas emisiones . . . . . . . . . . . . . . 12
2.3. Requerimientos de la cámara de combustión . . . . . . . . . . . . . . . 17
2.4. Elementos básicos de la cámara de combustión . . . . . . . . . . . . . . 18

3 Modelado mediante Mecánica de Fluidos Computacional 25


3.1. Contexto histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2. Ecuaciones fundamentales . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3. Modelos de turbulencia . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.4. Métodos de discretización . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.5. Etapas de la simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4 Metodología 47
4.1. Configuración experimental . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2. Software empleado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
XIII
ÍNDICE GENERAL

4.3. Cálculo de errores y desviación . . . . . . . . . . . . . . . . . . . . . . 55


4.4. Configuración numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.5. Rutinas de posprocesado . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.6. Estudio de independencia de malla . . . . . . . . . . . . . . . . . . . . 63

5 Resultados 69
5.1. Caso premezclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.2. Caso no premezclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

6 Conclusiones y trabajos futuros 93

Bibliografía 95

A Perfiles y contornos de velocidades y energía cinética turbulenta 105


A.1. Casos premezclados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

B Código Matlab para posprocesar resultados 111


B.1. lanza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
B.2. importProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
B.3. plotProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
B.4. plotConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
B.5. path_names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
B.6. upperFirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
B.7. loadCases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
B.8. importCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
B.9. importCVG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

Documento II Pliego de condiciones 179

1 Introducción 183

2 Obligaciones y derechos de los trabajadores 185

XIV
ÍNDICE GENERAL

3 Seguridad estructural 187

4 Superficie y cubicación 189

5 Suelos, techos y paredes 191

6 Disposiciones generales 193

7 Iluminación de emergencia 195

8 Ventilación, temperatura y humedad 197

9 Ruidos, vibraciones y trepidaciones 199

10 Protección contra contactos en equipos eléctricos 201

11 Electricidad estática 203

12 Recomendaciones sobre materias inflamables 205

13 Prevención y extinción de incendios 207

Documento III Presupuesto 209

1 Introducción 213

2 Costes referidos a los recursos humanos 215


2.1. Metodología aplicada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
2.2. Presupuesto de recursos humanos . . . . . . . . . . . . . . . . . . . . . 216

3 Coste referidos a los equipos 217


3.1. Metodología aplicada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
3.2. Presupuesto de los equipos . . . . . . . . . . . . . . . . . . . . . . . . . 218

4 Costes generales 219

5 Presupuesto total 221

XV
Índice de figuras

1.1. Emisiones de 𝐶𝑂2 del sector de aviación en seis escenarios diferentes según
estimaciones del uso de combustible . . . . . . . . . . . . . . . . . . . . . . 8
1.2. Número de vuelos realizados por la industria global de aerolíneas desde 2004
hasta 2018 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3. Distribución geográfica de flujos NOx en el año 2000 . . . . . . . . . . . . . 9

2.1. Índice de emisiones NOx en relación al dosado relativo, temperatura de


llama, y tiempo de residencia . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2. Esquema quemador RQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3. Cámaras de combustión escalonadas. . . . . . . . . . . . . . . . . . . . . . 15
2.4. Esquema de combustor MPLDI. . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5. Campo de velocidades provocado por el swirler . . . . . . . . . . . . . . . 19
2.6. Esquema de swirler axial y radial. . . . . . . . . . . . . . . . . . . . . . . . 21
2.7. Pressure Swirl Atomiser SIMPLEX . . . . . . . . . . . . . . . . . . . . . . 23
2.8. Air-blast Atomiser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.1. Campo de velocidades del flujo a la entrada de una cámara de combustión


calculado mediante CFD. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2. Espectro de energía turbulenta . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3. Ley de pared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4. Mallado bidimensional de un perfil alar. . . . . . . . . . . . . . . . . . . . 42
3.5. Esquema del algoritmo SIMPLE para casos incompresibles. . . . . . . . . . 44
3.6. Esquema del algoritmo PISO para casos incompresibles. . . . . . . . . . . 45

4.1. Quemador KIAI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48


4.2. El sistema de inyección del quemador KIAI. . . . . . . . . . . . . . . . . . 49
4.3. Estrategias de inyección gaseosa. . . . . . . . . . . . . . . . . . . . . . . . 49
4.4. Estructura de un flujo torbellinado en el interior de la cámara de combustión
del proyecto KIAI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.5. Estructura general de OpenFOAM. . . . . . . . . . . . . . . . . . . . . . . 51
4.6. Estructura del directorio de un caso en OpenFOAM© . . . . . . . . . . . . . 52
4.7. Ejemplo de modelo 3D triangulado por CONVERGE© Studio . . . . . . . 53
4.8. Aplicación de las herramientas de control sobre el mallado de CONVERGE© 54
XVII
ÍNDICE DE FIGURAS

4.9. Diferencia entre mallado sin y con aplicación de AMR. . . . . . . . . . . . 54


4.10. Comparación entre RPD y error relativo. . . . . . . . . . . . . . . . . . . . 56
4.11. Ejemplo de estructura de mallado del quemador KIAI con 6 millones de
celdas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.12. Tabla con los parámetros de las mallas utilizadas en OpenFOAM. . . . . . 58
4.13. Triangulación del quemador KIAI en CONVERGE© Studio, zoom en el
swirler y entrada a la cámara de combustión. . . . . . . . . . . . . . . . . . 59
4.14. Tipos de celda tras el mallado automático . . . . . . . . . . . . . . . . . . 59
4.15. Posición de las estaciones donde tomar las medidas en el quemador. . . . . 61
4.16. Diagrama de funcionamiento de las rutinas de posprocesado. . . . . . . . . 62
4.17. Configuración de los casos RANS y URANS con premezcla en OpenFOAM. 63
4.18. RPD de la velocidad en la línea central en función del número de celdas en
la malla de OpenFOAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.19. RPD de la velocidad en las estaciones de la entrada a la cámara de com-
bustión en función del número de celdas en la malla de OpenFOAM. . . . 64
4.20. Configuración de los casos RANS con premezcla en CONVERGE. . . . . . 66
4.21. RPD de la velocidad en la línea central en función del número de celdas en
la malla de CONVERGE. . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.22. RPD de la velocidad en las estaciones de la entrada a la cámara de com-
bustión en función del número de celdas en la malla de CONVERGE. . . . 67

5.1. Caso premezclado en OpenFOAM, comparación modelos de turbulencia


RANS y LES mediante las velocidades en la línea central. . . . . . . . . . 70
5.2. Caso premezclado en OpenFOAM, comparación modelos de turbulencia
RANS y LES mediante las velocidades medias en las estaciones. . . . . . . 70
5.3. Caso premezclado en OpenFOAM, comparación modelos de turbulencia
RANS y LES mediante las RMS en las estaciones. . . . . . . . . . . . . . . 71
5.4. Caso premezclado en CONVERGE, inicialización del dominio. . . . . . . . 72
5.5. Caso premezclado en CONVERGE, modelo de turbulencia RANS. . . . . . 73
5.6. Cilindros donde se emplea fixed embedding. . . . . . . . . . . . . . . . . . . 74
5.7. Caso premezclado en CONVERGE, fixed embedding. . . . . . . . . . . . . 74
5.8. Caso premezclado en CONVERGE, modelo de turbulencia LES. . . . . . . 75
5.9. Caso premezclado, comparación de velocidades axiales en la línea central
entre los mejores modelos de turbulencia y los diferentes códigos CFD con
los datos experimentales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.10. Caso premezclado, comparación de velocidades axiales en las estaciones en-
tre los mejores modelos de turbulencia y los diferentes códigos CFD con los
datos experimentales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.11. Caso premezclado, comparación de velocidades radiales en las estaciones
entre los mejores modelos de turbulencia y los diferentes códigos CFD con
los datos experimentales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
XVIII
ÍNDICE DE FIGURAS

5.12. Caso premezclado, comparación de velocidades tangenciales en las estacio-


nes entre los mejores modelos de turbulencia y los diferentes códigos CFD
con los datos experimentales. . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.13. Contornos de velocidades del caso premezclado LES_3_CG. . . . . . . . . 80
5.14. Contorno de energía cinética turbulenta del caso premezclado LES_3_CG. 81
5.15. Visualización de vórtices turbulentos mediante Q-Criterion obtenida en En-
Sight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.16. Caso no premezclado en CONVERGE, velocidades según inicialización del
dominio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.17. Caso no premezclado en CONVERGE, especies según inicialización del do-
minio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.18. Caso no premezclado en CONVERGE, velocidades según modelo de turbu-
lencia RANS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.19. Caso no premezclado en CONVERGE, especies según modelo de turbulencia
RANS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.20. Caso no premezclado, comparación de velocidades axiales en la línea central
entre el mejor modelo RANS y los datos experimentales. . . . . . . . . . . 85
5.21. Caso no premezclado, comparación de velocidades axiales en las estaciones
entre el mejor modelo RANS y los datos experimentales. . . . . . . . . . . 86
5.22. Caso no premezclado, comparación de velocidades radiales en las estaciones
entre el mejor modelo RANS y los datos experimentales. . . . . . . . . . . 87
5.23. Caso no premezclado, comparación de velocidades tangenciales en las esta-
ciones entre el mejor modelo RANS y los datos experimentales. . . . . . . 88
5.24. Caso no premezclado, comparación de concentraciones en las estaciones en-
tre el mejor modelo RANS y los datos experimentales. . . . . . . . . . . . 89
5.25. Figura 5.24 con zoom en la escala para mejor visualización. . . . . . . . . . 89
5.26. Contornos de velocidades del caso no premezclado URANS_15_CG. . . . 91
5.27. Contorno de energía cinética turbulenta del caso no premezclado
URANS_15_CG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

A.1. Contorno de energía cinética turbulenta del caso premezclado LES_17_OF. 105
A.2. Contornos de velocidades del caso premezclado LES_17_OF. . . . . . . . 106
A.3. Contorno de energía cinética turbulenta del caso premezclado RANS_17_CG.107
A.4. Contornos de velocidades del caso premezclado RANS_17_CG. . . . . . . 108
A.5. Contorno de energía cinética turbulenta del caso premezclado
URANS_18_OF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
A.6. Contornos de velocidades del caso premezclado URANS_18_OF. . . . . . 110

XIX
Documento I

MEMORIA
Índice de documento

1 Introducción
1.1. Contexto histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1. Impacto Ambiental De Las Aeronaves . . . . . . . . . . . . . . . 7
1.1.2. Reducción De Emisiones Contaminantes . . . . . . . . . . . . . 10
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Fundamentos de combustión en motores aeroderivados


2.1. Productos de la combustión . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1. Mecanismos De Formación NOx . . . . . . . . . . . . . . . . . . 12
2.2. Esquemas de combustión con bajas emisiones . . . . . . . . . . . . . . 12
2.2.1. Rich Burn/Quick-Quench/Lean-Burn (RQL) Combustion . . . . 13
2.2.2. Combustión Escalonada (Staged Combustion) . . . . . . . . . . 14
2.2.3. Lean Premixed Combustion . . . . . . . . . . . . . . . . . . . . 15
2.2.4. Lean Direct Injection . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3. Requerimientos de la cámara de combustión . . . . . . . . . . . . . . . 17
2.4. Elementos básicos de la cámara de combustión . . . . . . . . . . . . . . 18
2.4.1. Difusor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.2. Swirler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.3. Inyector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3 Modelado mediante Mecánica de Fluidos Computacional


3.1. Contexto histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2. Ecuaciones fundamentales . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2.1. Conservación De La Masa . . . . . . . . . . . . . . . . . . . . . 26
3.2.2. Cantidad De Movimiento . . . . . . . . . . . . . . . . . . . . . . 27
3.2.3. Energía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.4. Ecuaciones De Estado . . . . . . . . . . . . . . . . . . . . . . . 28
3.3. Modelos de turbulencia . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.1. RANS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.2. URANS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.3. LES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.4. DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4. Métodos de discretización . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.5. Etapas de la simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

3
Índice de documento

3.5.1. Pre-procesado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5.2. Solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.5.3. Post-procesado . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

4 Metodología
4.1. Configuración experimental . . . . . . . . . . . . . . . . . . . . . . . . 47
4.1.1. Geometría Del Quemador KIAI . . . . . . . . . . . . . . . . . . 47
4.1.2. Condiciones Iniciales Y De Contorno . . . . . . . . . . . . . . . 49
4.2. Software empleado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.2.1. OpenFOAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.2.2. CONVERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.3. Cálculo de errores y desviación . . . . . . . . . . . . . . . . . . . . . . 55
4.4. Configuración numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.4.1. Geometría En OpenFOAM . . . . . . . . . . . . . . . . . . . . . 57
4.4.2. Geometría En CONVERGE . . . . . . . . . . . . . . . . . . . . 58
4.4.3. Modelado De La Turbulencia . . . . . . . . . . . . . . . . . . . 60
4.4.4. Variables De Estudio . . . . . . . . . . . . . . . . . . . . . . . . 60
4.5. Rutinas de posprocesado . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.6. Estudio de independencia de malla . . . . . . . . . . . . . . . . . . . . 63
4.6.1. Malla OpenFOAM . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.6.2. Malla CONVERGE . . . . . . . . . . . . . . . . . . . . . . . . . 65

5 Resultados
5.1. Caso premezclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.1.1. Simulaciones En OpenFOAM . . . . . . . . . . . . . . . . . . . 69
5.1.2. Simulaciones En CONVERGE . . . . . . . . . . . . . . . . . . . 72
5.1.3. Perfiles De Velocidades . . . . . . . . . . . . . . . . . . . . . . . 76
5.1.4. Contornos De Velocidad Y Energía Cinética Turbulenta . . . . 79
5.2. Caso no premezclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.2.1. Simulaciones En CONVERGE . . . . . . . . . . . . . . . . . . . 82
5.2.2. Perfiles De Velocidades Y Especies . . . . . . . . . . . . . . . . 85
5.2.3. Contornos De Velocidad Y Energía Cinética Turbulenta . . . . 90

6 Conclusiones y trabajos futuros

Bibliografía

A Perfiles y contornos de velocidades y energía cinética turbulenta 105


A.1. Casos premezclados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

B Código Matlab para posprocesar resultados 111


B.1. lanza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

4
Índice de documento

B.2. importProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113


B.3. plotProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
B.4. plotConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
B.5. path_names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
B.6. upperFirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
B.7. loadCases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
B.8. importCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
B.9. importCVG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

5
Capítulo 1

Introducción

1.1. CONTEXTO HISTÓRICO

Los primeros motores a reacción de uso aeronáutico fueron concebidos antes de la II


Guerra Mundial, y en sus primeros desarrollos no eran capaces de proporcionar un gran
empuje. Por este motivo, el principal desafío durante la época fue el de incrementar la
cantidad de empuje obtenido en ellos, tratando de reducir su peso y tamaño, así como
de hacerlos funcionar a altitudes elevadas.
Más adelante, en los años 80, un acusado incremento en el precio del combustible llevó a
la industria a tratar de descubrir nuevas ideas para mejorar la eficiencia de los motores,
pudiendo así disminuir el consumo de este tipo de máquinas.
Sin embargo, a partir de los años 90 y hasta la actualidad, el objetivo fundamental de
la investigación en este campo pasa por reducir los niveles de emisiones contaminantes
por debajo de los límites regulados por las autoridades.

Este cambio de perspectiva se debe a organizaciones como la OACI que, desde la


primera regulación de emisiones NOx en 1981, ha publicado a lo largo de los años
diferentes estándares cada vez más exigentes para controlar la huella ambiental [1].

1.1.1. Impacto Ambiental De Las Aeronaves


No hay duda del inmenso beneficio económico y social que ha reportado el desarrollo
de la aviación a nivel mundial. La conquista de los cielos ha supuesto un gran progreso
en el transporte de pasajeros y bienes a gran velocidad, tumbando las fronteras geo-
gráficas y abriendo nuevas rutas a la economía global y las relaciones internacionales.
[2]

No obstante, todas estas ventajas conllevan un coste, la repercusión en el medio


ambiente y la salud. Ya en el año 1999 se advertía del peligro que suponía la aviación
para el clima y la capa de ozono, teniendo en cuenta diferentes escenarios de crecimiento
del sector y estimando las consecuencias hasta el año 2050 (figura 1.1). [3]

7
Memoria

Figura 1.1: Emisiones de 𝐶𝑂2 del sector de aviación en seis esce-


narios diferentes según estimaciones del uso de combustible. Las
emisiones se dan en Gt C (109 toneladas de carbono) al año, que se
pueden convertir a Gt 𝐶𝑂2 multiplicando por 3’67.

En la actualidad se estima que el tráfico aéreo continuará creciendo durante al me-


nos 10 años más, como lo ha estado haciendo desde 2010 (ver figura 1.2), con tasas de
crecimiento anuales mayores del 5 % debidas al impulso económico de países en desa-
rrollo y a la reducción de tarifas. Este hecho contribuiría así al aumento de emisiones
y seguiría afectando de forma negativa al entorno.

Figura 1.2: Número de vuelos realizados por la industria global de


aerolíneas desde 2004 hasta 2018 (en millones) [4].

8
1. INTRODUCCIÓN

Aunque las aeronaves únicamente participan en un pequeño porcentaje sobre el


total de emisiones NOx generadas en el planeta como se puede observar en la figura
1.3, su efecto se multiplica debido a que son emitidas en regiones muy concentradas: en
las cercanías de los aeropuertos provocando nieblas tóxicas y en la atmósfera a grandes
altitudes [5]. Además, como muestra la tabla 1.1, las emisiones están relacionadas con
los regímenes de operación del motor.

Figura 1.3: Distribución geográfica de flujos NOx en el año 2000 en


kg/mes para: (A) aviación, (B) envíos internacionales, (C) emisiones
antropogénicas no relacionadas con el transporte y (D transporte
por carretera [6, 7].

Tabla 1.1: Emisiones que más afectan de los motores aeroderivados


[8]

Categoría Operación del motor a la que se asocia principalmente


Humo (hollín) Despegue y ascenso
Hidrocarburos sin quemar (HC)
Baja potencia, especialmente ralentí en tierra
Monóxido de carbono (CO)
Óxidos de nitrógeno (NOx ) Alta potencia, incluyendo crucero
Dióxido de carbono (CO2 ) Todos los ajustes de operación

Por estos motivos es importante contribuir al desarrollo de motores de aviación más


eficientes, silenciosos y seguros, capaces de emitir menos contaminantes sin disminuir
sus prestaciones.

9
Memoria

1.1.2. Reducción De Emisiones Contaminantes


Recientemente, en la 10ª reunión celebrada en 2016 por su Comité en Protección
Ambiental en Aviación (CAEP/10), se ha incluido una limitación en las emisiones de
partículas de hollín ultra-finas y CO2 de las aeronaves, además de una propuesta de
reducción anual del 2 % en el consumo de combustible hasta 2050 [9].
De la misma manera, el ACARE en su programa Visión 2020, ha impuesto objetivos
ambiciosos para el crecimiento sostenible del transporte aéreo: reducción del 50 % en
emisiones de CO2 y del 80 % en NOx desde 2001 hasta 2020 [2].

Una de las líneas de investigación que más se está imponiendo en la actualidad en


cuanto a combustión en los motores turbina de gas es el LDI (Lean Direct Injection),
de la que se hablará en la sección 2.2.4, ya que ha conseguido alcanzar unos objetivos
ambiciosos en la reducción de emisiones de NOx . Esto la convierte en una tecnología
apropiada para continuar con el desarrollo del transporte aéreo.

1.2. OBJETIVOS

Los objetivos del presente trabajo se enumeran a continuación:

La calibración y validación de dos modelos CFD, uno con mallado tradicional


(OpenFOAM© ) y otro con técnicas más modernas (CONVERGE© ), mediante
comparación de resultados con los obtenidos de manera experimental.
Caracterización de estructuras turbulentas del flujo no reactivo en el interior de
una cámara de combustión en quemadores LDI. Las simulaciones se llevarán a
cabo con modelos RANS y LES, obteniendo información sobre flujo premezclado y
no premezclado para el posterior estudio de la atomización, mezcla y combustión.
Sentar las bases de una herramienta potente que permita el estudio de atomi-
zación, mezcla y combustión con relativamente pocos recursos. El uso de esta
herramienta podrá utilizarse en la búsqueda de geometrías y mecanismos que
resulten en reducción de emisiones y mejor eficiencia para los objetivos que la
legislación propone en el futuro de la aviación.

10
Capítulo 2

Fundamentos de combustión
en motores aeroderivados

La tecnología aplicada al proceso de combustión se ha ido desarrollando de forma


gradual y continuada, sin cambios drásticos, dejando tras de sí motores aeronáuticos
cuyas cámaras de combustión son muy similares en tamaño, forma y apariencia general.

2.1. PRODUCTOS DE LA COMBUSTIÓN

El escape de una turbina de gas se compone de CO, dióxido de carbono (CO2 ),


vapor de agua (H2 O), hidrocarburos sin quemar (UHC), partículas (principalmente
carbón), óxidos de nitrógeno (NOx ) y exceso de oxígeno y nitrógeno atmosféricos.

El CO2 y H2 O no son considerados contaminantes porque son una consecuencia


natural de la combustión de hidrocarburos. Sin embargo, ambos contribuyen al calen-
tamiento global y sólo pueden reducirse quemando menos combustible. Ahí reside la
importancia de mejorar la eficiencia térmica, que además de disminuir la contamina-
ción tiene el mismo efecto sobre los costes.
El CO reduce la capacidad de la sangre de absorber oxígeno y puede causar asfixia y
hasta la muerte en altas concentraciones.
Los UHC, además de ser tóxicos, se combinan con los NOx formando niebla al nivel
del suelo, causando daños a la vegetación y contribuyendo a la lluvia ácida.
Las partículas (hollín y humo) causan problemas de visibilidad y suciedad en la atmóst-
fera. Aunque no es considerado tóxico a los pequeños niveles que se emiten, existen es-
tudios que relacionan el asma y otras enfermedades respiratorias a la concentración de
estas partículas en el aire [10]. Además, algunos supresores de humo contienen metales
pesados (como el bario) que suponen más polución por los gases de escape.

11
Memoria

2.1.1. Mecanismos De Formación NOx


La mayoría del óxido nítrico (NO) que se forma en la combustión se oxida posterior-
mente generando NO2 , de modo que conviene juntar ambos y expresar los resultados
en términos de NOx . Éste puede ser producido por 3 mecanismos diferentes: thermal
NOx , prompt NOx y fuel NOx . [11, 12]

Thermal NOx . Es producido por la oxidación del nitrógeno atmosférico en


regiones con gases a alta temperatura. Es un proceso endotérmico y ocurre de manera
significativa por encima de 1850K [13]. La reacción se representa mediante el Mecanismo
Extendido de Zeldovich:

Óxido Nítrico Óxido Nitroso


𝑂2 ↔ 2 𝑂 𝑁2 + 𝑂 ↔ 𝑁2 𝑂
𝑁2 + 𝑂 ↔ 𝑁 𝑂 + 𝑁 𝑁2 𝑂 + 𝑂 ↔ 𝑁 𝑂 + 𝑁 𝑂
𝑁 + 𝑂2 ↔ 𝑁 𝑂 + 𝑂 𝑁2 𝑂 + 𝐻 ↔ 𝑁 𝑂 + 𝑁 𝐻
𝑁 + 𝑂𝐻 ↔ 𝑁 𝑂 + 𝐻 𝑁2 𝑂 + 𝐶𝑂 ↔ 𝑁 𝑂 + 𝑁 𝐶𝑂

Prompt NOx . Es una forma de thermal NOx que se forma en lugares cercanos
al frente de llama cuando se oxidan productos intermedios de la combustión como el
HCN.

Mecanismo Prompt
𝑁2 + 𝐶𝐻 ↔ 𝐻𝐶𝑁 + 𝑁
𝑁 + 𝑂2 ↔ 𝑁 𝑂 + 𝑂
𝐻𝐶𝑁 + 𝑂𝐻 ↔ 𝐶𝑁 + 𝐻2 𝑂
𝐶𝑁 + 𝑂2 ↔ 𝑁 𝑂 + 𝐶𝑂

Fuel NOx . Se produce al quemar combustible que contiene nitrógeno. Algunos


ejemplos típicos son tipos de gas natural que llevan nitrógeno molecular y algunos
combustibles sintéticos que lo contienen en forma de amoníaco. Cuando combustionan,
los enlaces del nitrógeno se rompen y algunos pueden formar NOx .

2.2. ESQUEMAS DE COMBUSTIÓN CON BAJAS EMI-


SIONES

En la Figura 2.1 se observa que el índice de emisiones NOx es función de la tem-


peratura de llama, del dosado relativo de la mezcla aire-combustible y del tiempo de
residencia. De esta manera, se pueden tomar algunas estrategias para reducirlo: uti-
lizando mezclas aire-combustible ricas (𝜑 > 1.2) o pobres (𝜑 < 0.8), o reduciendo el

12
2. FUNDAMENTOS DE COMBUSTIÓN EN MOTORES AERODERIVADOS

tiempo de residencia en condiciones estequiométricas. Por su parte, el efecto de la pre-


sión en la producción de NOx es bastante menor y función de la configuración particular
del motor, tal y como ha quedado constatado en diversos estudios [14, 15].
Otra forma de disminuir las emisiones de NOx consiste en evitar altas temperaturas,
añadiendo más aire a la mezcla o consiguiendo homogeneizarla para eliminar los puntos
calientes. Sin embargo, aunque son muy útiles y está probada su eficacia, estas estra-
tegias no son ideales ya que generalmente pueden reavivar los problemas de emisiones
de CO y UHC [11].

Figura 2.1: Índice de emisiones NOx en relación al dosado relativo,


temperatura de llama, y tiempo de residencia (cortesía de Pratt &
Whitney).

2.2.1. Rich Burn/Quick-Quench/Lean-Burn (RQL) Combus-


tion
Este diseño es el más común y fue desarrollado en 1980 [16] con el objetivo de
reducir las emisiones de NOx en las turbinas de gas empleadas en aviación.

El principio de la combustión RQL se muestra en la figura 2.2. En primer lugar se


genera una zona de dosado rico (1.2 < 𝜑 < 1.8) para asegurar la estabilidad de las
reacciones, que por las concentraciones de oxígeno y temperaturas relativamente bajas,
consigue minimizar la producción de NOx thermal y prompt.
A continuación, la mezcla abandona esta zona primaria e interacciona con chorros de
aire secundario que la enfrían rápidamente y reducen el dosado. Si se hace con suficien-
te eficacia, se consigue evitar la formación de regiones localmente estequiométricas, y
con ello se mantiene baja la generación de NOx .

13
Memoria

Finalmente, en la zona de mezcla pobre (0.5 < 𝜑 < 0.7) se oxidan las altas concen-
traciones de hidrocarburos y otros productos intermedios de la combustión, tratando
de no sobrepasar temperaturas de 1900K que conllevarían una elevadísima formación
de NOx . No obstante, se debe asegurar una temperatura lo suficientemente alta que
permita consumir los restos de CO, UHC y hollín que no pueden ser expulsados en el
escape [17].

Figura 2.2: Esquema quemador RQL.

Sin embargo, este esquema presenta algunos inconvenientes. En primer lugar su


tamaño, peso y complejidad no son factores beneficiosos para la aeronáutica. También
tienen un potencial limitado para cumplir con las futuras normativas, ya que aumentar
el dosado rico podría resultar más beneficioso en cuanto a emisiones de NOx , pero el
exceso de combustible perjudicaría las emisiones de hollín. Además, la fase de mezcla
rápida es crucial para mantener bajos los índices de NOx , y este proceso no es trivial.
Otra desventaja es la dificultad para mantener un elevado rendimiento en el ciclo
termodinámico del motor, debiéndose encontrar un compromiso entre el rendimiento y
las emisiones.

2.2.2. Combustión Escalonada (Staged Combustion)


En este tipo de esquemas la distribución del flujo de aire es constante a lo largo de
la cámara de combustión, no así el flujo de combustible que varía para tratar de man-
tener la temperatura fija en cada etapa. Su principal modelo de inyección es conocido
como Inyección de Combustible Selectiva [18], por el cual se suministra el combustible
mediante combinaciones concretas de inyectores.

Este método permite reducir la cantidad mínima de combustible necesaria para


mantener una llama estable (lean blowout limit), permitiendo operar con mezclas más
pobres y reduciendo de esta manera las emisiones de CO y UHC, aunque no las de
NOx . Además, esta técnica puede causar un enfriamiento en las regiones exteriores de
las zonas de combustión, provocando una distribución no uniforme de la temperatura
de salida y afectando por tanto a la eficiencia del motor.

14
2. FUNDAMENTOS DE COMBUSTIÓN EN MOTORES AERODERIVADOS

Con el objetivo de paliar estas limitaciones, se desarrollaron cámaras de combustión


escalonadas en las que se emplean dos o más etapas:

En serie, como muestra la figura 2.3(a). [19, 20]


En paralelo, como muestra la figura 2.3(b). [21, 22]

Cada una está diseñada para optimizar aspectos concretos del rendimiento de la cámara
de combustión.

(a) En serie (b) En paralelo

Figura 2.3: Cámaras de combustión escalonadas.

2.2.3. Lean Premixed Combustion


Este esquema comparte con los anteriores la combustión a un dosado bajo en su
objetivo de reducir las emisiones de NOx . Cuanto más cercano es el umbral para una
llama estable al límite de apagado de llama, menores son las posibilidades de producir
óxidos de nitrógeno. A diferencia de los otros esquemas, éste incluye el concepto de la
premezcla, por el cual se introduce una mezcla homogénea de aire y combustible en la
zona de combustión. [12]
En las turbinas de gas industriales se ha demostrado su eficacia en comparación con el
resto de filosofías que operan con llamas de difusión, no obstante, esto ha sido posible
con combustible gaseoso (concepto LPM). Como la mayoría de motores de aviación
operan con combustible líquido y funcionan en condiciones de operación más exigentes,
la aplicación de este esquema requiere de algunas adaptaciones.

Lean Premixed Prevaporized. Fue concebido a principios de los años


1970, e incluye una sección de premezcla justo antes de la zona primaria de combus-
tión. En ella se mezcla aire y combustible, en lugar de tenerlo ya almacenado, para
después inyectarlo junto. Sin embargo, los quemadores que utilizan LPP requieren una
conversión de llama premezclada a difusiva en condiciones de intensidad reducida para

15
Memoria

mantenerla estable. Esta capacidad para cambiar de un tipo de operación a otro in-
troduce complejidad en el diseño y aumenta los costes. Además existen varios peligros
potenciales, nada deseables en aviación general y menos todavía en aviación comercial:
un límite de estabilidad estrecho, alta generación de ruido y posibilidad de auto-ignición
y retroceso de llama en la zona premezclada. [23]

2.2.4. Lean Direct Injection


Este esquema surge en 1988 [24, 25, 26, 27] como una alternativa a la combustión
LPP y los riesgos operacionales que entraña. En ella se inyectan el aire y el combustible
directamente en la cámara de combustión, sin premezcla previa, de nuevo con un dosado
relativo bajo (entre 0.6 y 0.65) cercano al límite de apagado de llama [28]. De esta
manera se elimina la zona de premezclado, y con ello la posibilidad de que se produzcan
autoencendidos o retrocesos de llama.

El swirler (sección 2.4.2) toma una importancia notable ya que el proceso de mezcla
y combustión depende casi en su totalidad del campo de velocidades generado. El ver-
dadero desafío de los quemadores LDI es conseguir que la mezcla sea lo más homogénea
posible, evitando picos de temperatura locales en la cámara que disparen las emisiones
de NOx .

Al introducir una gran proporción de aire de manera coaxial a la inyección de


combustible, se puede prescindir de las zonas de dilución presentes en las cámaras de
combustión convencionales, reduciendo significativamente las dimensiones del motor
[29]. El diseño de estos quemadores es mucho más simple y ligero, pero requieren
análisis detallados de la dinámica del flujo y la liberación de calor producida en las
regiones de mezclado. [23]

El potencial de bajas emisiones NOx de los quemadores LDI ha sido demostrado


también por [30, 31, 32]. Sus resultados mostraron que las emisiones eran comparables
a las de los quemadores LPP.

Una manera de mejorar el proceso de mezcla es incrementar la diferencia de presión


a través del inyector de combustible, generando mayor turbulencia que lo descomponga.
No obstante, esto supondría una pérdida de eficiencia en el sistema.

Multi-Point Lean Direct Injection. No es de extrañar que, habiendo


comprobado la eficacia de un quemador LDI, surja la idea de ir más allá y probar con
varias entradas para la inyección del combustible. Este concepto es el conocido como
MPLDI (figura 2.4) que ha sido sometido a experimentos en las instalaciones del NASA
Glenn Research Center con varias configuraciones [33, 34, 35].

Dividiendo un inyector de combustible grande en varios pequeños, es posible incre-


mentar la eficacia y uniformidad de la mezcla. Cada uno de ellos está rodeado por un
16
2. FUNDAMENTOS DE COMBUSTIÓN EN MOTORES AERODERIVADOS

Figura 2.4: Esquema de combustor MPLDI.

swirler que crea un alto grado de turbulencia para atomizar los chorros de combustible
en gotas muy finas. La dispersión de éstas y las zonas de cizalladura resultantes de los
swirlers adyacentes contribuyen a la homogeneización de la mezcla, al contrario que en
los LDI de un único inyector limitados por la pared de la cámara. La configuración tam-
bién permite controlar los inyectores individualmente para redistribuir el combustible
y reducir inestabilidades. [36]

2.3. REQUERIMIENTOS DE LA CÁMARA DE COMBUS-


TIÓN

Los requerimientos generales según Lefebvre [11] se detallan a continuación:

Máxima eficiencia en la combustión.


Ignición suave y fiable, tanto en tierra como tras el apagado de llama a gran
altitud.
Amplio rango de estabilidad (para variaciones grandes de la presión y de los
dosados locales).
Pérdidas de presión reducidas.
Distribución de temperatura a la salida de la cámara controlada, para que no
afecte negativamente a la vida de los álabes de turbina y la tobera.
Bajas emisiones contaminantes.
Tamaño y forma adecuados del motor para su aplicación concreta.

17
Memoria

Diseño para costes mínimos de fabricación y mantenimiento.


Durabilidad
Capacidad de funcionamiento con combustibles variados.

Concretamente, en el caso de los motores de aviación el peso y tamaño son muy im-
portantes, mientras que para motores industriales lo es la capacidad para funcionar con
diferentes combustibles. Además, independientemente de su aplicación se consideran
primordiales las bajas emisiones contaminantes.

2.4. ELEMENTOS BÁSICOS DE LA CÁMARA DE COM-


BUSTIÓN

En este apartado se dará una visión general de los elementos básicos de la cámara
de combustión en turbinas de gas. Existen otros elementos a parte de los mencionados
pero que no son relevantes en referencia a los objetivos que se plantean en el presente
trabajo.

2.4.1. Difusor
La pérdida de presión en la cámara de combustión ocurre fundamentalmente cuando
se añade calor a un flujo de gas según la fórmula 2.1, donde 𝑇3 y 𝑇4 son respectivamente
las temperaturas a la entrada y salida de la cámara. Como ésta es proporcional al
cuadrado de la velocidad del aire, con velocidades a la salida del compresor de 170
m/s y un ratio de temperaturas de 2.5, las pérdidas originadas pueden llegar a suponer
el 25 % de la presión alcanzada. Para reducirlas a un nivel aceptable (hasta la quinta
parte) se utiliza el difusor [11].

𝑇4
(︂ )︂
Δ𝑃ℎ𝑜𝑡 = 0.5𝜌𝑈 2 −1 (2.1)
𝑇3
En su forma más simple, el difusor es un pasaje divergente por donde el flujo se
decelera, convirtiendo la velocidad en presión estática. La eficiencia de este proceso es
muy importante ya que las pérdidas ocurridas se manifiestan en una pérdida de presión
total, y por tanto, en el rendimiento del ciclo.

Por una parte, en difusores largos con ángulo de divergencia pequeño, la pérdida de
presión se debe principalmente a la fricción con las paredes. Por otro lado, los difusores
cortos con mayor ángulo de divergencia, tienen menor longitud y fricción, pero sufren
principalmente las pérdidas por separación de la capa límite. Lo ideal en el diseño de
estos componentes es un equilibrio entre ambas geometrías, ya que para una relación
de áreas determinada existe un ángulo de divegencia óptimo con pérdidas mínimas que
suele estar entre 6-12°.
18
2. FUNDAMENTOS DE COMBUSTIÓN EN MOTORES AERODERIVADOS

2.4.2. Swirler
Para posibilitar la combustión es necesario un flujo recirculatorio de aire y productos
quemados que cumple dos funciones: evitar el desprendimiento de llama (por el campo
de velocidades, figura 2.5) y mantener una fuente contínua de ignición para la mezcla
entrante [37]. Esto puede obtenerse mediante varias soluciones, pero concretamente en
este trabajo se optará por el swirler, porque es el que dispone la geometría a estudiar
y ofrece ventajas como regiones de fuertes tensiones cortantes, alta turbulencia y tasas
de mezcla rápidas.

Figura 2.5: Campo de velocidades provocado por el swirler. El flujo


en forma de espiral es capaz de producir una zona central toroidal
de recirculación con alta turbulencia.

Las características del flujo de aire producido por el swirler y sus aplicaciones prác-
ticas han sido estudiadas en [38, 39], siendo la última de especial interés porque se dirige
directamente a los tipos de swirlers más relevantes en turbinas de gas, proporcionando
información valiosa para el diseño de estos componentes.

Número De Swirl. Las características del flujo rotatorio presente a la salida


del swirler dependen del número de palas, del ángulo de salida de éstas y de la pérdida de
presión experimentada. En [38] se propone un criterio no dimensional para caracterizar
la cantidad de rotación que se transmite al flujo, el número de swirl.

19
Memoria

El número de swirl se define como la proporción entre las componentes tangen-


cial y axial de la cantidad de movimiento del flujo axial normalizado con un radio
característico (ecuación 2.2)

𝐺𝜑
𝑆= (2.2)
𝐺𝑥 𝑟𝑡

donde las componentes de cantidad de movimiento son (ecuaciones 2.3 y 2.4)

∫︁ 𝑟𝑡
𝐺𝜑 = (𝑊 𝑟)𝜌𝑈 (2𝜋𝑟)𝑑𝑟
𝑟ℎ
∫︁ 𝑟𝑡
= (𝑈 𝑡𝑎𝑛𝜃)2𝜋𝜌𝑈 𝑟2 𝑑𝑟 (2.3)
𝑟ℎ
2
= 𝜋𝜌𝑈 2 (𝑟𝑡3 − 𝑟ℎ3 )
3
∫︁ 𝑟𝑡 ∫︁ 𝑟𝑡
𝐺𝑥 = 𝜌𝑈 2 (2𝜋𝑟)𝑑𝑟 + 𝑝(2𝜋𝑟)𝑑𝑟 (2.4)
𝑟ℎ 𝑟ℎ

y 𝑟𝑡 y 𝑟ℎ son, respectivamente, el radio exterior e interior del swirler.

Esta expresión contiene en 𝐺𝑥 el término de presión, que por la dificultad que


plantea de ser calculado se suele omitir, definiendo el número de swirl de esta manera

𝐺𝜑
𝑆= (2.5)
𝐺′𝑥 𝑟𝑡

donde la nueva 𝐺′𝑥 se calcula como

∫︁ 𝑟𝑡
𝐺′𝑥 = 𝜌𝑈 2 (2𝜋𝑟)𝑑𝑟
𝑟ℎ
∫︁ 𝑟𝑡
= 2𝜋𝜌𝑈 2 𝑟𝑑𝑟 (2.6)
𝑟ℎ

= 𝜋𝜌𝑈 2 (𝑟𝑡2 − 𝑟ℎ2 )

Finalmente, operando estos términos y simplificando se obtiene

2 1 − (𝑟ℎ /𝑟𝑡 )3
[︃ ]︃
𝑆 = 𝑡𝑎𝑛𝜃 (2.7)
3 1 − (𝑟ℎ /𝑟𝑡 )2

donde 𝜃 corresponde al ángulo que forman las palas del swirler respecto a la dirección
axial. En los swirlers axiales de álabes planos este ángulo es constante, mientras que
en aquellos con álabes torsionados el ángulo es nulo en la sección de entrada y 𝜃 en la

20
2. FUNDAMENTOS DE COMBUSTIÓN EN MOTORES AERODERIVADOS

sección de salida, presentando un valor intermedio las secciones centrales en función de


la ley de torsión.

Basándose en el número de swirl, se puede dividir el flujo en dos regiones: débil (S <
0.6) y fuerte (S > 0.6). En el flujo rotatorio débil los gradientes de presión axiales son
insuficientes para causar recirculación. Opuestamente, el flujo rotatorio fuerte tiene
gradientes altos de presión en dirección radial y axial cerca de la salida del swirler,
consiguiendo originar dicha zona central de recirculación.

Tipos De Swirler. Existen varios tipos de swirler, pero los dos más comunes
son axial y radial, cuyos esquemas se muestran en la figura 2.6 y se suelen encontrar
dispuestos de manera individual o concéntrica.

El primero de ellos se emplea generalmente en quemadores convencionales de com-


bustible líquido y es relativamente sencillo de fabricar ya que suele ser plano. Sin
embargo añadir curvatura a sus palas puede mejorar su desempeño y propiedades
aerodinámicas. Por otro lado el swirler radial se enfoca tanto a quemadores convencio-
nales como a los DLE (dry low emissions) también llamadas cámaras de combustión
con emisiones bajas.

Figura 2.6: Esquema de swirler axial y radial.

Existen estudios relevantes sobre swirlers axiales como [40], donde emplean 6 palas
con un ángulo 60 grados en combinación con tobera convergente-divergente.

En el caso de los swirlers radiales hay estudios como [24, 25, 26, 27] con aplicación
directa en quemadores LDI. Sus investigaciones incluyen el efecto de uno y varios
swirlers contrarrotantes, y de la inyección del combustible en las emisiones de NOx ,
aunque utilizan gas natural en lugar de combustible líquido.

21
Memoria

Sin embargo, ambos tipos de swirlers se utilizan comúnmente en quemadores de


turbinas de gas. Algunas configuraciones han sido evaluadas experimentalmente en [41]
usando gas natural y en [42] con combustible líquido. En ellos se observa que en cuanto
a emisiones, la actuación del swirler radial es mejor que el axial. Las propiedades de la
zona de recirculación generada por cada uno podría ser el factor que más contribuye.
Aunque ambos tenían el mismo número de swirl, el radial producía una zona central
de recirculación más consistente que su homólogo axial, debido a las diferencias en la
relación de áreas, altura del canal y velocidad de salida del swirler.
Por otro lado, en [43] se lleva a cabo un estudio numérico sobre el efecto de ambas
configuraciones de swirler. En él se advierte que, al contrario que el modelo estrecho y
centralizado que produce el swirler axial, el radial provee un patrón de remolinos más
disperso, haciendo más probable que el combustible llegue a chocar con la pared.

2.4.3. Inyector
Aunque en la sección 2.4.2 se ha hablado de ambos tipos de combustible (gas y
líquido), la gran mayoría de los motores turbina de gas en la industria aeronáutica
operan con combustibles líquidos debido a su elevada densidad energética; el más utili-
zado es el keroseno por su alto poder calorífico y bajo punto de fusión. El combustible
se inyecta en forma de spray, proceso que puede tener lugar en la corriente del flujo de
recirculación (inyección directa) o en una zona anterior a la entrada de la cámara de
combustión (premezclado).

Los sistemas de inyección tienen como objetivos garantizar un suministro de com-


bustible constante e ininterrumpido a la cámara de combustión, generar las condiciones
adecuadas para facilitar la evaporación de las gotas líquidas y agilizar el proceso de
mezclado con el aire para una combustión eficiente.

Teniendo en cuenta lo anterior, una forma de lograr mejorar la transferencia de


masa y calor entre la fase líquida y gaseosa (la evaporación del combustible) consiste
en producir una nube de gotas, maximizando la superficie de contacto entre las fases.
Se precisa un tamaño de gotas reducido, lo que provee un descenso importante de
la energía necesaria para la ignición. Por ello se debe generar una zona altamente
turbulenta en la región cercana a la inyección que facilite los procesos de atomización
y mezclado de ambas fases.

Existen dos tipos de atomización:

La atomización primaria consiste en la desestabilización de la película líquida


emergente del inyector para generar ligamentos.
La atomización secundaria se basa en la rotura de los ligamentos mencionados
en pequeñas gotas.

22
2. FUNDAMENTOS DE COMBUSTIÓN EN MOTORES AERODERIVADOS

Según los procesos mecánicos mediante los cuales se realizan la atomización primaria
y secundaria, existen diversas tecnologías de inyectores:

Pressure Swirl Atomiser (figura 2.7). Esta tipología aprovecha la diferencia de


presión existente entre la línea de combustible presurizada y la cámara de com-
bustión para forzar el paso de la película líquida a través de un pequeño orificio.
Su principal ventaja radica en que el grado de atomización conseguido no es fun-
ción del flujo de aire, es decir, el tamaño final de las gotas es independiente de
las condiciones de operación del motor. Por el contrario, entre las desventajas se
encuentra la posible obstrucción de los orificios de inyección debido a su redu-
cido tamaño, requiriendo de sistemas de presurización adyacentes que elevan la
complejidad y el peso del motor.

Figura 2.7: Variante del Pressure Swirl Atomiser más sencilla, co-
nocida como SIMPLEX. [44]

Vaporizadores. Se trata de unos tubos localizados en la zona de combustión pri-


maria a través de los cuales se inyecta el combustible evaporado a causa del flujo
de calor proveniente de la llama. No obstante, su uso es muy limitado debido a
la corta vida útil del sistema fruto de los elevados esfuerzos térmicos a los que se
encuentra sometido.
Air-blast Atomiser (figura 2.8). El uso de esta tecnología está ampliamente ex-
tendido en la industria por tratarse de un sistema muy simple que solamente
depende del flujo de aire para operar. El combustible líquido se inyecta de forma

23
Memoria

cónica sobre una pared cilíndrica donde se encuentra con un primer chorro de aire
torbellinado que lo rompe en ligamentos y lo arrastra hasta el orificio de salida.
En la sección de salida del inyector un segundo chorro de aire torbellinado en
sentido contrario al primero genera una fuerte zona de cortadura y completa la
atomización secundaria. Por tanto, el combustible inyectado en la cámara de com-
bustión se encuentra totalmente atomizado y parcialmente mezclado, mejorando
así las prestaciones respecto a los inyectores pressure swirl.

Figura 2.8: Air-blast Atomiser. [45]

24
Capítulo 3

Modelado mediante Mecánica


de Fluidos Computacional

La dinámica de fluidos computacional o CFD por sus siglas en inglés (Computatio-


nal Fluid Dynamics) es una técnica de simulación mediante métodos numéricos para
resolver y analizar problemas sobre mecánica de fluidos. Esta disciplina se encuentra
en auge y es muy utilizada en casos donde resulta muy complicado o costoso realizar
experimentos.

3.1. CONTEXTO HISTÓRICO

Comenzó a utilizarse en los años 60, enfocado sobre todo para el diseño y fabricación
en el sector de la industria aeroespacial, pero rápidamente se extendió a otras áreas de
investigación durante los años 80-90 llegando a establecerse como parte esencial en el
desarrollo tecnológico e industrial.

Algunos ejemplos donde se aplican estas simulaciones numéricas son: en el desarrollo


de motores tanto de aviación (figura 3.1) como automoción, en la Fórmula 1 para
mejorar el diseño aerodinámico de los automotores, en climatología para predecir el
movimiento de las corrientes eólicas, en la medicina para investigar el flujo sanguíneo
en vasos y arterias, entre muchas otras áreas.

Se espera que en un futuro éstas sean capaces de reemplazar a los métodos expe-
rimentales debido a que normalmente son muy costosos, a menudo son irrepetibles y
generalmente son muy dependientes de la instrumentación utilizada. Opuestamente,
una simulación puede repetirse innumerables veces, se puede tomar medidas en cual-
quier punto del dominio y se puede generar múltiples visualizaciones muy útiles para
ingenieros y diseñadores.

Sin embargo, existe un importante límite en esta tecnología, y es que el poder


computacional actual es limitado. A pesar de estar en constante evolución desde hace

25
Memoria

Figura 3.1: Campo de velocidades del flujo a la entrada de una


cámara de combustión calculado mediante CFD.

décadas, las simulaciones de CFD necesitan manejar grandes cantidades de datos (la
geometría del problema se divide en millones de elementos, con sus respectivas variables
físicas y las ecuaciones complejas que se deben resolver en cada uno de ellos) haciendo
que lleguen a durar semanas, meses e incluso años.

3.2. ECUACIONES FUNDAMENTALES

Las ecuaciones que gobiernan pueden obtenerse en diferentes formas (diferencial,


integral, etc). Para la mayor parte de la teoría aerodinámica no hay grandes diferencias
entre unas y otras, pero para un algoritmo concreto de CFD puede ser vital utilizar
la más adecuada. La convergencia, las oscilaciones, la estabilidad o los errores pueden
depender exclusivamente de la forma escogida para representar las ecuaciones. [46]

3.2.1. Conservación De La Masa


La ecuación de conservación de la masa o ecuación de continuidad, en su forma no
estacionaria y tridimensional en un flujo compresible se plasma en la ecuación 3.1.
𝜕𝜌 ⃗ 𝜕𝜌 𝜕(𝜌𝑢) 𝜕(𝜌𝑣) 𝜕(𝜌𝑤)
+ ∇ · (𝜌𝑉⃗ ) = + + + =0 (3.1)
𝜕𝑡 𝜕𝑡 𝜕𝑥 𝜕𝑦 𝜕𝑧

El primer término representa la tasa de variación de la densidad en el tiempo, masa


por unidad de volumen, mientras que el segundo (que se divide en tres, uno por cada
dimensión) representa el término convectivo, esto es, el flujo másico neto saliente del
elemento a través de sus fronteras.
26
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

3.2.2. Cantidad De Movimiento


La Segunda Ley de Newton enuncia que la tasa de cambio de la cantidad de mo-
vimiento de una partícula fluida equivale a la suma de las fuerzas ejercidas sobre ella.
Éstas pueden ser tensiones normales o de presión 𝑝, tensiones viscosas 𝜏 y fuerzas volu-
métricas. De ahí se extraen las 3 ecuaciones de cantidad de movimiento (3.2-3.4), una
por cada dimensión.

𝐷𝑢 𝜕(−𝑝 + 𝜏𝑥𝑥 ) 𝜕𝜏𝑦𝑥 𝜕𝜏𝑧𝑥


𝜌 = + + + 𝑆𝑀 𝑥 (3.2)
𝐷𝑡 𝜕𝑥 𝜕𝑦 𝜕𝑧
𝐷𝑣 𝜕𝜏𝑥𝑦 𝜕(−𝑝 + 𝜏𝑦𝑦 ) 𝜕𝜏𝑧𝑦
𝜌 = + + + 𝑆𝑀 𝑦 (3.3)
𝐷𝑡 𝜕𝑥 𝜕𝑦 𝜕𝑧
𝐷𝑤 𝜕𝜏𝑥𝑧 𝜕𝜏𝑦𝑧 𝜕(−𝑝 + 𝜏𝑧𝑧 )
𝜌 = + + + 𝑆𝑀 𝑧 (3.4)
𝐷𝑡 𝜕𝑥 𝜕𝑦 𝜕𝑧

La presión tiene signo negativo por convenio, al tratarse de una fuerza de compre-
sión. En estas ecuaciones se tienen en cuenta las tensiones superficiales y, además, la
presencia de términos fuente (𝑆𝑀 𝑥 , 𝑆𝑀 𝑦 y 𝑆𝑀 𝑧 ), que representan la acción debida a las
fuerzas de volumen como podría considerarse la gravedad.

Considerando un fluido Newtoniano isótropo, reordenando los términos y mode-


lando las tensiones viscosas como función de la tasa local de deformación (tres de
elongación y seis de cizalladura), se obtienen las ecuaciones de Navier-Stokes (3.5-3.7).

𝐷𝑢 𝜕𝑝
𝜌 =− + 𝑑𝑖𝑣(𝜇 𝑔𝑟𝑎𝑑 𝑢) + 𝑆𝑀 𝑥 (3.5)
𝐷𝑡 𝜕𝑥
𝐷𝑣 𝜕𝑝
𝜌 =− + 𝑑𝑖𝑣(𝜇 𝑔𝑟𝑎𝑑 𝑣) + 𝑆𝑀 𝑦 (3.6)
𝐷𝑡 𝜕𝑦
𝐷𝑤 𝜕𝑝
𝜌 = − + 𝑑𝑖𝑣(𝜇 𝑔𝑟𝑎𝑑 𝑤) + 𝑆𝑀 𝑧 (3.7)
𝐷𝑡 𝜕𝑧

3.2.3. Energía
Según la Primera Ley de la Termodinámica, la tasa de variación de energía en una
partícula fluida equivale a la suma de tasa de adición de calor y el trabajo realizado por
la misma. Por un lado, la tasa de trabajo aportado a la partícula fluida ejercido por una
fuerza de superficie es igual al producto de fuerza y velocidad. Además hay que tener
en cuenta el fenómeno de conducción de calor hasta la partícula fluida considerada, así
como la tasa de adición de calor que este mismo fenómeno produce. La ecuación de la
energía queda como se muestra en 3.8, donde el término 𝑆𝐸 representa una fuente de
energía por unidad de volumen y tiempo.

27
Memoria

𝐷𝐸 𝜕(𝑢𝜏𝑥𝑥 ) 𝜕(𝑢𝜏𝑦𝑥 ) 𝜕(𝑢𝜏𝑧𝑥 )


𝜌 = −𝑑𝑖𝑣(𝑝𝑢) + 𝑑𝑖𝑣(𝑘 𝑔𝑟𝑎𝑑(𝑇 )) + 𝑆𝐸 + + + +
𝐷𝑡 𝜕𝑥 𝜕𝑦 𝜕𝑧
𝜕(𝑣𝜏𝑥𝑦 ) 𝜕(𝑣𝜏𝑦𝑦 ) 𝜕(𝑣𝜏𝑧𝑦 )
+ + + (3.8)
𝜕𝑥 𝜕𝑦 𝜕𝑧
𝜕(𝑤𝜏𝑥𝑧 ) 𝜕(𝑤𝜏𝑦𝑧 ) 𝜕(𝑤𝜏𝑧𝑧 )
+ +
𝜕𝑥 𝜕𝑦 𝜕𝑧

3.2.4. Ecuaciones De Estado


En las condiciones que se dan en las simulaciones del presente trabajo, el fluido
siempre permanece en equilibrio termodinámico, pues no se dan fenómenos tales como
la formación de ondas de choque intensas. Las ecuaciones de estado (3.9 y 3.10) rela-
cionan variables termodinámicas entre sí por medio de las ecuaciones del gas perfecto

𝑝 = 𝜌𝑅𝑇 (3.9)
𝑖 = 𝐶𝑣 𝑇 (3.10)

donde 𝑅 es la constante de gases ideales, 𝐶𝑣 la relación de calores específicos a volumen


constante e 𝑖 la energía interna específica.

En flujo compresible estas ecuaciones proporcionan una conexión entre la ecuación


de la energía y las ecuaciones de la continuidad o conservación de masa y de conser-
vación de la cantidad de movimiento. Así, se puede dar la posibilidad de que existan
variaciones en la densidad como consecuencia de las variaciones en la presión y en la
temperatura. Esta conexión se rompe en el flujo incompresible, donde no se conside-
ra variación alguna en la densidad, de modo que el campo fluido puede ser resuelto
considerando únicamente la conservación de la cantidad de movimiento y de masa.

3.3. MODELOS DE TURBULENCIA

Es imprescindible abordar el modelado de la turbulencia que se da en toda clase


de flujos convencionales. Para ello se emplea la descomposición de Reynolds, mediante
la cual todas las propiedades del flujo se dividen en dos términos: un valor medio más
una componente fluctuante estadística.

Estas fluctuaciones turbulentas presentan un carácter tridimensional, además de


un amplio rango de escalas de longitud, incluyendo estructuras de flujo rotacionales
conocidas como eddies o remolinos. Como consecuencia de estas estructuras, los flujos
turbulentos favorecen un intercambio efectivo de masa, cantidad de movimiento y calor
entre las partículas fluidas del dominio, acelerando de esta manera los procesos de
atomización, mezclado y evaporación de las gotas líquidas de combustible. La energía

28
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

cinética se va transmitiendo progresivamente desde los remolinos más grandes hacia


los más pequeños en la denominada cascada de energía.

La velocidad y longitud característica de los remolinos grandes son del mismo or-
den de magnitud que la escala de velocidad y longitud del flujo medio, estando su
comportamiento dominado, por tanto, por los efectos inerciales. La estructura de estos
remolinos es altamente anisótropa, presentando fluctuaciones diferentes en función de
la dirección y afectadas por las condiciones de contorno del problema.

No obstante, los remolinos pequeños presentan unas escalas de longitud del orden
de 0.1-0.01 mm y unas frecuencias en torno a los 10 kHz, predominando los efectos
viscosos. En estas escalas la energía asociada a los remolinos más pequeños se disipa en
forma de energía térmica interna, así que la estructura de los remolinos más pequeños
solamente depende de la tasa de disipación de la energía cinética turbulenta 𝜀 y de la
viscosidad cinemática del fluido 𝜈.

Estos remolinos turbulentos con amplio rango de escalas de longitud y tempora-


les que interactúan de manera dinámica y compleja deben poder capturarse con los
modelos de turbulencia y métodos numéricos desarrollados (ver figura 3.2).

Figura 3.2: Espectro de energía turbulenta [47].

29
Memoria

3.3.1. RANS
Los modelos de turbulencia RANS (Reynolds-Averaged Navier-Stokes) están cen-
trados únicamente en capturar el flujo medio y los efectos que la turbulencia origina en
las propiedades medias del flujo. Las ecuaciones de Navier-Stokes se promedian tempo-
ralmente antes de aplicar los métodos numéricos, descartando los detalles del flujo en
fluctuaciones instantáneas y dando lugar a la aparición de términos extra como conse-
cuencia de las interacciones entre fluctuaciones turbulentas, los esfuerzos de Reynolds:
−𝜌𝑢′2 , −𝜌𝑣 ′2 −𝜌𝑤′2 , −𝜌𝑢′ 𝑣 ′ , −𝜌𝑢′ 𝑤′ y −𝜌𝑣 ′ 𝑤′ .

De esta manera, para ser capaz de calcular flujos turbulentos con las ecuaciones
RANS es necesario desarrollar modelos de turbulencia capaces de predecir los esfuerzos
de Reynolds y los términos de transporte escalar para cerrar el sistema. Los modelos de
turbulencia más comunes se clasifican en base al número de ecuaciones de transporte
adicionales que se necesitan resolver junto a las ecuaciones RANS y se enumeran en la
tabla 3.1.

Tabla 3.1: Principales modelos de turbulencia empleados en simula-


ciones RANS
Nº ECUACIONES TRANSPORTE EXTRA MODELO TURBULENCIA
0 Mixing length
1 Spalart-Allmaras
2 𝑘−𝜀
2 𝑘−𝜔
2 Algebraic stress
7 Reynolds stress

Los recursos computacionales requeridos para llegar a la solución son moderados


y asumibles por cualquier ordenador de la actualidad, razón por la cual ha sido la
aproximación más empleada durante las últimas tres décadas.

Modelo K-epsilon. El modelo 𝑘 − 𝜀 permite tener en cuenta tanto los efec-


tos del transporte de las propiedades turbulentas mediante convección y difusión. En
él incorpora dos ecuaciones basadas en la energía cinética turbulenta 𝑘 y la tasa de
disipación 𝜀 de la misma. La formulación de las ecuaciones de transporte para estas
variables dependen del modelo específico: standard, RNG, realizable.

La energía cinética instantánea 𝑘(𝑡) en un flujo turbulento es la suma de la energía


cinética media y la energía cinética turbulenta (ecuación 3.11)
1 1
𝑘(𝑡) = (𝑈 2 + 𝑉 2 + 𝑊 2 ) + (𝑢′2 + 𝑣 ′2 + 𝑤′2 ) (3.11)
2 2

30
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

Se puede obtener una ecuación para la energía cinética media 𝐾 multiplicando cada
una de las componentes de la ecuación de Reynolds por las correspondientes del vector
de velocidad media [48], obteniendo la ecuación 3.12.

⎛ ⎞
𝜕(𝜌𝐾)
+ 𝑑𝑖𝑣(𝜌𝐾 𝑈
⃗ ) = 𝑑𝑖𝑣 ⎜
⎝−𝑃 ⃗ + 2𝜇𝑈
𝑈 ⃗ 𝑆𝑖𝑗 − 𝜌𝑈 ⎠ − 2𝜇𝑆𝑖𝑗 · 𝑆𝑖𝑗 + 𝜌𝑢′𝑖 𝑢′𝑗 · 𝑆𝑖𝑗
⃗ 𝑢′𝑖 𝑢′𝑗 ⎟
𝜕𝑡 ⏟ ⏞ ⏟ ⏞
𝑐
⏟ ⏞ ⏟ ⏞ ⏟ ⏞ ⏟ ⏞
𝑏 𝑒 𝑔
⏟ ⏞
𝑎 𝑑 𝑓
(3.12)

a Tasa de evolución de la energía cinética media.


b Transporte de 𝐾 por convección.
c Transporte de 𝐾 por diferencias de presión.
d Transporte de 𝐾 por esfuerzos viscosos.
e Transporte de 𝐾 por esfuerzos de Reynolds.
f Tasa de disipación viscosa de 𝐾.
g Tasa de destrucción de 𝐾 debido al trabajo de deformación realizado por los esfuerzos
de Reynolds.

Resulta sencillo demostrar que en flujos con alto Reynolds los términos turbulentos
(e) y (g) son siempre varios ordenes de magnitud mayores que sus correspondientes
términos viscosos (d) y (f).

Operando de manera análoga con la ecuación instantánea de Navier-Stokes, y multi-


plicando cada componente fluctuante de la velocidad por su correspondiente ecuación,
se obtiene una ecuación para la energía cinética turbulenta 𝑘 [49] muy similar a la
anterior:
⎛ ⎞
𝜕(𝜌𝑘)
+ 𝑑𝑖𝑣(𝜌𝑘 𝑈
⃗ ) = 𝑑𝑖𝑣 ⎜ 𝑢′ + 2𝜇⃗𝑢′ 𝑠′𝑖𝑗 − 𝜌𝑢′𝑖 · 𝑢′𝑖 𝑢′𝑗 ⎠ − 2𝜇𝑠′𝑖𝑗 · 𝑠′𝑖𝑗 + 𝜌𝑢′𝑖 𝑢′𝑗 · 𝑆𝑖𝑗
⎝−𝑝′ ⃗

⏟ 𝜕𝑡
⏟ ⏞ ⏟ ⏞ ⏟ ⏞ ⏟ ⏞ ⏟ ⏞ ⏟ ⏞
⏞ 𝑏 𝑐 𝑑 𝑒 𝑓 𝑔
𝑎
(3.13)

La presencia de los términos fluctuantes en el lado derecho de la ecuación establece


que las interacciones turbulentas son las principales causantes de los cambios que se
producen en la energía cinética turbulenta. El término g es igual en ambas ecuaciones,
pero de signo opuesto, de ahí la conversión de energía cinética media en energía cinética
turbulenta. El término de disipación viscosa (f), origina una contribución negativa
debido a la suma de los cuadrados de las tasas de deformación fluctuantes 𝑠′𝑖𝑗 (ecuación
3.14). Esta disipación de la energía cinética turbulenta 𝜀 ocurre porque los torbellinos
más pequeños realizan trabajo contra los esfuerzos viscosos, y es un término totalmente
necesario en el estudio de la turbulencia que no debe despreciarse.

31
Memoria

− 2𝜇𝑠′𝑖𝑗 · 𝑠′𝑖𝑗 = −2𝜇 𝑠′11 2 + 𝑠′11 2 + 𝑠′11 2 + 𝑠′11 2 + 𝑠′11 2 + 𝑠′11 2


(︁ )︁
(3.14)

En [50] se desarrolló una ecuación de transporte exacta similar para la tasa de


disipación viscosa, pero debido a las innumerables incógnitas y términos difíciles de
medir, el modelo 𝑘 − 𝜀 estándar emplea en su defecto las ecuaciones de transporte por
[51] según las cuales la tasa de cambio de 𝑘 o 𝜀 más el transporte de dicha magnitud
por efecto de la convección es igual al transporte debido a difusión más la diferencia
entre ratio de producción y ratio de destrucción (ecuaciones 3.15 y 3.16). La viscosidad
2
turbulenta se define mediante análisis dimensional como 𝜇𝑡 = 𝜌𝐶𝜇 𝜀𝑘 .

𝜕(𝜌𝑘) ⃗ ) = 𝑑𝑖𝑣 𝜇𝑡 𝑔𝑟𝑎𝑑(𝑘) + 2𝜇𝑡 𝑆𝑖𝑗 · 𝑆𝑖𝑗 − 𝜌𝜀


(︂ )︂
+ 𝑑𝑖𝑣(𝜌𝑘 𝑈 (3.15)
𝜕𝑡 𝜎𝑘

𝜕(𝜌𝜀) 𝜇𝑡 𝜀 𝜀2
(︂ )︂
+ 𝑑𝑖𝑣(𝜌𝜀𝑈 ) = 𝑑𝑖𝑣
⃗ 𝑔𝑟𝑎𝑑(𝜀) + 𝐶1𝜀 2𝜇𝑡 𝑆𝑖𝑗 · 𝑆𝑖𝑗 − 𝐶2𝜀 𝜌 (3.16)
𝜕𝑡 𝜎𝜀 𝑘 𝑘

Las ecuaciones contienen cinco constantes 𝐶𝜇 , 𝜎𝑘 , 𝜎𝜀 , 𝐶1𝜀 y 𝐶2𝜀 que deben ser ajus-
tadas mediante experimentos para un amplio rango de flujos turbulentos. Los términos
correspondientes al transporte turbulento se representan mediante la difusión del gra-
diente de la magnitud transportada, donde los números de Prandtl 𝜎𝑘 y 𝜎𝜀 conectan las
difusividades de 𝑘 y 𝜀 con la viscosidad turbulenta 𝜇𝑡 . Además, los términos de produc-
ción y destrucción de energía cinética turbulenta se encuentran fuertemente acoplados,
presentando un valor grande de tasa de disipación 𝜀 allí donde la producción de 𝑘 es
elevada.

Debido a la naturaleza elíptica de las ecuaciones de transporte, se deben imponer


unas condiciones de contorno determinadas en la entrada, salida y paredes del domi-
nio. Ante la ausencia de estudios de sensibilidad de las condiciones de contorno en
los problemas ingenieriles específicos se pueden tomar aproximaciones para establecer
distribuciones realistas a la entrada de 𝑘 y 𝜀 en flujos internos a partir de la intensidad
turbulenta 𝐼 y longitud característica 𝐿, mediante las siguientes relaciones:

2 𝑘 3/2
𝑘 = (𝑈𝑟𝑒𝑓 𝐼)2 𝜀 = 𝐶𝜇3/4 𝑙 = 0.07𝐿 (3.17)
3 𝑙
La principal ventaja de este modelo es que no hay necesidad de ajustar las constan-
tes, y su éxito está demostrado y validado para multitud de flujos turbulentos. Ocurre
incluso en aquellos con zonas de recirculación [52] como el del presente trabajo, donde
la predicción del transporte turbulento es imprescindible para reproducir correctamente
el proceso de combustión.

No obstante, al estar basado en la hipótesis de viscosidad turbulenta isótropa de


Boussinesq, este modelo puede presentar algunas dificultades frente a flujos con alta

32
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

componente de swirl, o frente a aquellos que presenten una deformación rápida como
sucede en capas límites con un elevado grado de curvatura o en secciones divergentes.

El caso estudiado reúne varias de estas características: capa límite curvada en el


swirler, sección divergente en el venturi y algunas zonas de recirculación en la entrada
a la cámara de combustión. En función del grado de impacto de cada zona, el modelo
será más o menos preciso; sin embargo el uso del mismo en este trabajo se hará para
obtener una solución inicial realista, es decir, como punto de partida para modelos más
complejos.

Modelo De Esfuerzos De Reynolds. El RSTM (Reynolds Stress Tur-


bulence Model) es un modelo clásico de turbulencia más complejo, que resuelve una
ecuación extra de transporte para cada una de las seis componentes independientes
del tensor de Reynolds. De esta manera, el modelo es capaz de predecir de forma más
precisa los flujos con campos de deformaciones complejos en los que el modelo 𝑘 − 𝜀
obtiene peores resultados. Definiendo los esfuerzos de Reynolds 𝑅𝑖𝑗 = −𝜏𝑖𝑗 /𝜌 = 𝑢′𝑖 𝑢′𝑗 ,
su tasa de cambio y su transporte debido a convección dependen de la tasa de pro-
ducción, el transporte por difusión, la tasa de disipación, el transporte por presiones
turbulentas y el debido a estructuras rotacionales (ecuación 3.18).

𝐷𝑅𝑖𝑗 𝜕𝑅𝑖𝑗
= + 𝐶𝑖𝑗 = 𝑃𝑖𝑗 + 𝐷𝑖𝑗 − 𝜀𝑖𝑗 + Π𝑖𝑗 + Ω𝑖𝑗 (3.18)
𝐷𝑡 𝜕𝑡
Los términos correspondientes a la convección, producción y rotación se definen
como:
𝜕(𝜌𝑈𝑘 𝑢′𝑖 𝑢′𝑗 )
𝐶𝑖𝑗 = 𝜕𝑥𝑘
= 𝑑𝑖𝑣(𝜌𝑢′𝑖 𝑢′𝑗 𝑈
⃗) (3.19)
𝑃𝑖𝑗 = −(𝑅𝑖𝑚 𝑥𝑈𝑚𝑗 + 𝑅𝑗𝑚 𝑥𝑈𝑚𝑖 ) (3.20)
Ω𝑖𝑗 = −2𝜔𝑘 (𝑢′𝑗 𝑢′𝑚 𝑒𝑖𝑘𝑚 + 𝑢′𝑖 𝑢′𝑚 𝑒𝑗𝑘𝑚 ) (3.21)

mientras que la difusión, tasa de disipación y correlación presión-deformación deben


ser modelados. [53, 54]

El término difusivo se modela bajo la suposición de que la variación del transporte de


los esfuerzos de Reynolds por difusión es proporcional a los propios esfuerzos (ecuación
2
3.22), siendo 𝜐𝑡 = 𝐶𝜇 𝜀𝑘 , 𝐶𝜇 = 0.09 y 𝜎𝑘 = 1.

(︃ )︃
𝜕 𝜐𝑡 𝜕𝑅𝑖𝑗 𝜐𝑡
(︂ )︂
𝐷𝑖𝑗 = = 𝑑𝑖𝑣 𝑔𝑟𝑎𝑑(𝑅𝑖𝑗 ) (3.22)
𝜕𝑥𝑚 𝜎𝑘 𝜕𝑥𝑚 𝜎𝑘

La tasa de disipación se modela asumiendo el comportamiento isótropo de los re-


molinos pequeños disipativos (ecuación 3.23), los cuales afectan únicamente a las com-
ponentes normales de los esfuerzos de Reynolds, teniendo en cuenta que la tasa de
disipación de energía cinética turbulenta es 𝜀 = 2𝜐𝑠′𝑖𝑗 𝑠′𝑖𝑗 .
33
Memoria

2
𝜀𝑖𝑗 = 𝜀𝛿𝑖𝑗 (3.23)
3
Finalmente, el término de interacciones presión-deformación es el más difícil de
modelar con precisión, ya que el efecto que causan se debe a dos fenómenos físicos in-
dependientes: un proceso lento que reduce la anisotropía de los remolinos turbulentos
por sus interacciones mutuas, y un proceso rápido como consecuencia de las interac-
ciones entre las fluctuaciones turbulentas y la deformación del flujo medio. La manera
más simple de representar el proceso lento considera que la transición hacia las condi-
ciones isótropas es proporcional al grado de anisotropía 𝑎𝑖𝑗 de los esfuerzos de Reynolds
dividido por un tiempo característico 𝑘/𝜀. Por el contrario, el efecto rápido únicamente
tiene en cuenta el proceso de producción causante de la generación de anisotropía.

El efecto conjunto de ambos procesos es el de redistribuir la energía entre los es-


fuerzos de Reynolds normales (𝑅11 , 𝑅22 y 𝑅33 ) en busca de un comportamiento más
isótropo, tratando de reducir los esfuerzos tangenciales (𝑅12 , 𝑅13 y 𝑅23 ). La fórmu-
la que representa este término se muestra en la ecuación 3.24, siendo las constantes
𝐶1 = 1.8, 𝐶2 = 0.6 y 𝑘 = 21 (𝑅11 + 𝑅22 + 𝑅33 ).

𝜀 2 2
(︂ )︂ (︂ )︂
Π𝑖𝑗 = −𝐶1 𝑅𝑖𝑗 − 𝑘𝛿𝑖𝑗 − 𝐶2 𝑃𝑖𝑗 − 𝑃 𝛿𝑖𝑗 (3.24)
𝑘 3 3
Las seis ecuaciones para el transporte de los esfuerzos de Reynolds se resuelven
de manera conjunta, modelando además la tasa de disipación de la energía cinética
turbulenta de un modo prácticamente idéntico al modelo 𝑘 − 𝜀 (ecuación 3.25).
𝐷𝜀 𝜐𝑡 𝜀 𝜀2
(︂ )︂
= 𝑑𝑖𝑣 𝑔𝑟𝑎𝑑(𝜀) + 𝐶1𝜀 2𝜐𝑡 𝑆𝑖𝑗 · 𝑆𝑖𝑗 − 𝐶2𝜀 (3.25)
𝐷𝑡 𝜎𝜀 𝑘 𝑘

De igual manera que en el método anterior, se requiere la definición de las con-


diciones de contorno de una manera específica para satisfacer la naturaleza elíptica
del sistema de ecuaciones diferenciales. Por tanto, se debe establecer una distribución
de 𝑅𝑖𝑗 y 𝜀 a la entrada del dominio, imponer las variaciones nulas 𝜕𝑅𝑖𝑗 /𝜕𝑛 = 0 y
𝜕𝜀/𝜕𝑛 = 0 a la salida, y definir las funciones de pared declarando el comportamiento
que toma 𝑅𝑖𝑗 en función de 𝑘 en las zonas cercanas a éstas.

En la actualidad el modelo RSTM no se encuentra tan validado, y por a su elevado


coste computacional la aplicación es escasa en el ámbito industrial. Además, puede
sufrir problemas para alcanzar la convergencia debido al acoplamiento de la velocidad
media y de los esfuerzos turbulentos mediante términos fuente. Sin embargo su gran
ventaja frente al 𝑘 − 𝜀 es la alta precisión a la hora de calcular propiedades del flujo
medio y de todos los esfuerzos de Reynolds en flujos complejos (incluyendo chorros
contra pared, canales axisimétricos o flujos curvados) que de otra manera no podrían
ser predichos con detalle.
34
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

3.3.2. URANS
La aproximación Unsteady Reynolds-Averaged Navier Stokes (URANS) se carac-
teriza por ser una versión más compleja de RANS. En ella se obtiene una solución
temporal para problemas tridimensionales no estacionarios, con o sin tratamiento es-
pecial para inestabilidades del flujo [55].Las ecuaciones de URANS son similares a los
modelos RANS pero incluyendo un término no estacionario adicional. El aspecto más
importante es la selección correcta del modelo de turbulencia adecuado y el esquema
de discretización (que no sea excesivamente disipativo). URANS actúa bien para calles
de vórtices de von Kármán [56], cubos montados sobre superficies [57] y flujo alrededor
de coches [58] entre otras aplicaciones.

3.3.3. LES
El Large Eddy Simulation (LES) se trata de un paso intermedio a la hora de obtener
y calcular las interacciones de las fluctuaciones turbulentas. En este caso únicamente
se modelan los remolinos más pequeños, que presentan un comportamiento isótropo e
independiente del problema, mientras que el comportamiento de los remolinos grandes
sí que es calculado directamente. Éstos son los encargados de interactuar y extraer
energía del flujo medio, se caracterizan por una elevada anisotropía y una fuerte de-
pendencia tanto de la geometría del dominio del problema como de las condiciones de
contorno impuestas.

Esta separación entre los remolinos por sus tamaños se consigue definiendo una lon-
gitud de corte (cutoff width), que permite realizar un filtrado espacial de las ecuaciones
de Navier-Stokes no estacionarias. Para modelar los efectos de los remolinos pequeños
sobre el flujo resuelto se utilizan los modelos SGS (sub-grid scale).

Esta operación de filtrado espacial (ecuación 3.26) se lleva a cabo mediante una
función de filtro 𝐺(⃗𝑥, 𝑥⃗′ , Δ), con longitud de corte Δ.

∫︁∫︁∫︁ ∞
𝜑(⃗𝑥, 𝑡) = 𝐺(⃗𝑥, 𝑥⃗′ , Δ) 𝜑(𝑥⃗′ , 𝑡)𝑑𝑥′1 𝑑𝑥′2 𝑑𝑥′3 (3.26)
−∞

Aunque se han investigado multitud de funciones de filtro, la más empleada en


volúmenes finitos para simulaciones LES es el filtro de caja (ecuación 3.27). En principio
se puede seleccionar cualquier valor de corte, pero a nivel práctico resulta inútil emplear
longitudes inferiores al tamaño de celda de la malla utilizada (de ahí el nombre sub-
grid), ya que debido a que solamente se almacena un valor nodal por celda de cada
variable del flujo, se perderían igualmente todos los detalles calculados. Por tanto,
conviene tomar la longitud de corte del mismo orden de magnitud que tamaño de

malla Δ = 3 Δ𝑥Δ𝑦Δ𝑧.

35
Memoria

⎨1/Δ3

𝑠𝑖 |⃗𝑥 − 𝑥⃗′ | ≤ Δ/2
𝐺(⃗𝑥, 𝑥⃗′ , Δ) = (3.27)
⎩ 0 𝑠𝑖 |⃗𝑥 − 𝑥⃗′ | ≥ Δ/2

Tomando un filtro uniforme independiente de la posición a lo largo de todo el


dominio computacional se obtiene la Ecuación de la Continuidad y las Ecuaciones de
Cantidad de Movimiento para LES (ecuaciones 3.28-3.31).
𝜕𝜌
𝜕𝑡
+ 𝑑𝑖𝑣(𝜌⃗𝑢) = 0 (3.28)
𝜕(𝜌𝑢)
𝜕𝑡
+ 𝑑𝑖𝑣(𝜌𝑢⃗𝑢) = 𝜕𝑝
𝜕𝑥
+ 𝜇 𝑑𝑖𝑣(𝑔𝑟𝑎𝑑(𝑢)) − (𝑑𝑖𝑣(𝜌𝑢⃗𝑢) − 𝑑𝑖𝑣(𝜌𝑢⃗𝑢)) (3.29)
𝜕(𝜌𝑣)
𝜕𝑡
+ 𝑑𝑖𝑣(𝜌𝑣⃗𝑢) = 𝜕𝑝
𝜕𝑦
+ 𝜇 𝑑𝑖𝑣(𝑔𝑟𝑎𝑑(𝑣)) − (𝑑𝑖𝑣(𝜌𝑣⃗𝑢) − 𝑑𝑖𝑣(𝜌𝑣⃗𝑢)) (3.30)
𝜕(𝜌𝑤) 𝜕𝑝
+ 𝑑𝑖𝑣(𝜌𝑤⃗𝑢) = + 𝜇 𝑑𝑖𝑣(𝑔𝑟𝑎𝑑(𝑤)) − (𝑑𝑖𝑣(𝜌𝑤⃗𝑢) − 𝑑𝑖𝑣(𝜌𝑤⃗𝑢)) (3.31)
⏟ 𝜕𝑡 ⏟𝜕𝑧
⏟ ⏞ ⏟ ⏞ ⏟ ⏞
⏞ 𝑏
⏞ 𝑑 𝑒
𝑎 𝑐

a Tasas de cambio de las componentes de la cantidad de movimiento filtradas.


b Flujos convectivos.
c Gradientes en las tres direcciones del campo de presión filtrado.
d Flujos difusivos.
e Aparecen a causa del filtrado.

Los términos (e) se pueden considerar como la divergencia de un conjunto de es-


fuerzos 𝜏𝑖𝑗 , definidos como

𝜕(𝑢𝑖 𝑢 − 𝑢𝑖 𝑢) 𝜕(𝑢𝑖 𝑣 − 𝑢𝑖 𝑣) 𝜕(𝑢𝑖 𝑤 − 𝑢𝑖 𝑤) 𝜕𝜏𝑖𝑗


𝑑𝑖𝑣(𝜌𝑢𝑖⃗𝑢 − 𝜌𝑢𝑖⃗𝑢) = + + =
𝜕𝑥 𝜕𝑦 𝜕𝑧 𝜕𝑥𝑗

donde 𝜏𝑖𝑗 = 𝜌𝑢𝑖⃗𝑢 − 𝜌𝑢𝑖⃗𝑢 = 𝜌𝑢𝑖 𝑢𝑗 − 𝜌𝑢𝑖 𝑢𝑗 . Se les llama esfuerzos SGS porque son
originados por el transporte convectivo e interacciones entre los remolinos modelados, es
decir, los que tienen una escala de longitud inferior al tamaño de malla. Además se ven
afectados por diversas contribuciones, cuya naturaleza se determina descomponiendo
las variables del flujo 𝜑(⃗𝑥, 𝑡) como suma de la función filtrada 𝜑(⃗𝑥, 𝑡) y las variaciones
espaciales pequeñas 𝜑′ (⃗𝑥, 𝑡).

Aplicando la descomposición mencionada, los esfuerzos SGS quedan definidos me-


diante:
𝜏𝑖𝑗 = 𝜌𝑢𝑖 𝑢𝑗 − 𝜌𝑢𝑖 𝑢𝑗 + 𝜌𝑢𝑖 𝑢′𝑗 + 𝜌𝑢′𝑖 𝑢𝑗 + 𝜌𝑢′𝑖 𝑢′𝑗 (3.32)
⏟ ⏞ ⏟ ⏞ ⏟ ⏞
𝑎 𝑏 𝑐

El término (a) corresponde a los esfuerzos de Leonard, 𝐿𝑖𝑗 , debidos únicamente a


fenómenos acontecidos en la escala resuelta. El término (b) corresponde a los esfuerzos
cruzados 𝐶𝑖𝑗 , originados fruto de las interacciones entre los remolinos SGS modelados y
el flujo resuelto, y cuyas expresiones se pueden encontrarse en [59]. Por último, se tienen

36
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

los esfuerzos de Reynolds de LES (c), causados como consecuencia de la transferencia


de cantidad de movimiento convectiva provocada por las interacciones de los remolinos
SGS. Igual que sucede con los esfuerzos de Reynolds en las ecuaciones RANS, estos
esfuerzos SGS deben ser modelados, para lo cual existen actualmente multitud modelos
en la bibliografía.

Smagorinsky-Lilly SGS Model. El modelo SGS [60] está basado en la


suposición de la naturaleza isótropa de los remolinos turbulentos más pequeños siguien-
do la hipótesis de Boussinesq [61]. Por lo tanto, el modelo considera que las tensiones
SGS locales o las tensiones de Reynolds LES 𝑅𝑖𝑗 (ecuación 3.33) son proporcionales a
la tasa de deformación local de los flujos resueltos.

1 1
(︃ )︃
𝜕𝑢𝑖 𝜕𝑢𝑗
𝑅𝑖𝑗 = −2𝜇𝑆𝐺𝑆 𝑆𝑖𝑗 + 𝑅𝑖𝑖 𝛿𝑖𝑗 = −𝜇𝑆𝐺𝑆 + + 𝑅𝑖𝑖 𝛿𝑖𝑗 (3.33)
3 𝜕𝑥𝑗 𝜕𝑥𝑖 3

El término 𝜇𝑆𝐺𝑆 (ecuación 3.34) representa la viscosidad dinámica SGS, mientras


que 31 𝑅𝑖𝑖 𝛿𝑖𝑗 asegura que la suma de los esfuerzos normales SGS modelados sea igual a
la energía cinética de los remolinos. Este modelo asume que la viscosidad cinemática
puede ser descrita por una escala de longitud (longitud Δ de corte) y una de velocidad
(Δ * |𝑆|).
𝜇𝑆𝐺𝑆 = 𝜌(𝐶𝑆𝐺𝑆 Δ)2 |𝑆| (3.34)

La tasa de deformación promediada se obtiene mediante


√︁
|𝑆| = 2𝑆 𝑖𝑗 𝑆 𝑖𝑗 (3.35)

La diferencia principal entre el modelo Smagorinsky-Lilly y el Dynamic Smago-


rinsky reside en que la constante 𝐶𝑆𝐺𝑆 pasa a ser variable y dependiente del tiempo
y espacio. En la práctica requiere estabilización, que se suele obtener promediando en
una dirección homogénea. En los casos donde no es posible, se utiliza un promediado
local en su lugar. [62]

Finalmente, se deben imponer las condiciones iniciales y de contorno, similares a


las empleadas en las simulaciones RANS, pero con ciertas peculiaridades. Al tratarse
de simulaciones no estacionarias la solución final alcanzada es independiente de las
condiciones iniciales, influyendo éstas únicamente en el camino hasta la convergencia
y en el tiempo requerido.

Para saber cuánto se debe refinar una malla en la zona cercana a una pared se
utiliza el parámetro adimensional 𝑦 + , que se calcula mediante la fórmula 3.36 donde
𝑢𝜏 es la velocidad cortante o de fricción, 𝑦 la distancia a la pared y 𝜈 la viscosidad
cinemática. La ley de pared de von Karman, dicta que dependiendo del valor de este

37
Memoria

parámetro conviene utilizar una aproximación concreta para obtener la mayor precisión
posible en el cálculo de la velocidad (figura 3.3): la capa viscosa, la capa buffer y la
capa logarítmica.
𝑦𝑢𝜏
𝑦+ = (3.36)
𝜈

Figura 3.3: Ley de pared

En las zonas cercanas a la pared se aplica la condición de no deslizamiento, integran-


do las ecuaciones de Navier-Stokes filtradas y requiriendo, por tanto, un refinamiento
que asegure el cumplimiento de 𝑦 + ≤ 1 para todas las superficies sólidas del dominio.

Las condiciones de contorno definidas a la entrada del dominio son determinantes


sobre la solución final alcanzada. La manera más sencilla de proceder consiste en es-
pecificar distribuciones de velocidad media medidas o calculadas previamente con otro

38
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

modelo, y sobreponer perturbaciones gaussianas aleatorias con una intensidad turbu-


lenta realista. No obstante, debido a los pequeños pasos temporales frecuentes en las
simulaciones, las distorsiones de las propiedades turbulentas pueden requerir elevadas
cantidades de tiempo para asentarse antes de que el flujo medio alcance el equilibrio.
Como alternativa, se suele representar el flujo a la entrada mediante un modelo RANS,
simulando un caso no estacionario con el modelo de esfuerzos de Reynolds para obtener
una estimación de todos ellos en el plano de entrada.

Por su parte, las condiciones de contorno a la salida del dominio son menos pro-
blemáticas, empleando la conocida condición de gradiente nulo para el flujo medio,
mientras que las propiedades fluctuantes son extrapoladas mediante:

𝜕𝜑 𝜕𝜑
+ 𝑢𝑛 =0 (3.37)
𝜕𝑡 𝜕𝑛
La demanda de recursos computacionales en términos de almacenamiento y volu-
men de operaciones es enorme, ya que se deben resolver las ecuaciones del flujo no
estacionarias. A pesar de ello, los avances en tecnología de computación están permi-
tiendo progresivamente la aplicación de estas técnicas LES para el estudio de problemas
con geometrías complejas. Se trata de una gran inversión de tiempo y recursos, pero
tiene en cuenta los detalles estadísticos relacionados con las fluctuaciones turbulentas
presentes en flujos con altas componentes de swirl.

3.3.4. DNS
En el Direct Numerical Simulation (DNS) se calcula el flujo medio y todas las
fluctuaciones turbulentas de la velocidad. Para ello, se resuelven las ecuaciones de
Navier-Stokes no estacionarias en mallas lo suficientemente finas (del orden de la escala
de Kolmogorov, donde tiene lugar la disipación de la energía) y con pasos temporales
extremadamente pequeños del orden del periodo de las fluctuaciones turbulentas más
rápidas. Estos cálculos son altamente costosos en términos de recursos computacionales,
motivo por el cual estos métodos todavía no se emplean en problemas industriales.

3.4. MÉTODOS DE DISCRETIZACIÓN

A pesar de ser ampliamente conocidas y utilizadas, las ecuaciones que se deben


utilizar para resolver los problemas de CFD (detalladas en la sección 3.2) no tienen
demostrada hasta el momento una solución analítica, por lo que es necesario utilizar
métodos numéricos. Aplicando el método apropiado bajo las condiciones correctas se
obtendrá una solución aproximada perfectamente válida, es decir, con un error asumi-
ble.

39
Memoria

El primer paso para enfocar un problema desde el punto de vista numérico es


la discretización, donde se intercambia el dominio contínuo por un dominio discreto.
Existen tres métodos más conocidos [48]:

Método de diferencias finitas. Un problema en derivadas parciales puede aproxi-


marse mediante este método en formulación fuerte:
𝜕𝑢 𝜕𝑢 𝑑𝑢 𝑢𝑖 − 𝑢𝑖−1
+ =0⇒ + =0 (3.38)
𝜕𝑡 𝜕𝑥 𝑑𝑡 Δ𝑥
donde 𝑢 es la variable dependiente y 𝑥 es la posición temporal. La ecuación 3.38 ha
sido convertida a diferencias finitas tras discretizar en múltiples nodos de cálculo.
Cada nodo 𝑖 se encuentra en una posición 𝑥𝑖 , con las posiciones separadas una
distancia Δx. La derivada ha sido sustituida por diferencias finitas adelantadas
de primer orden (método upwind de primer orden).
La resolución de los sistemas en derivadas parciales mediante diferencias finitas
tiene ciertos problemas al intentar adaptarse a geometrías complejas. Además, la
solución ha de ser tan suave como exija el sistema de ecuaciones. Utilizando la
formulación débil (con forma integral), es posible adaptarse con más facilidad a
geometrías complejas y reducir las exigencias de suavidad de la solución:
∫︁ 𝐿 ∫︁ 𝐿
𝜕𝑢 𝜕𝑢 𝜕𝑢 𝜕𝑢
+ =0⇒ · 𝑤(𝑥)𝑑𝑥 + · 𝑤(𝑥)𝑑𝑥 = 0 (3.39)
𝜕𝑡 𝜕𝑥 0 𝜕𝑡 0 𝜕𝑥

donde w(x) es la función prueba, función test o función de peso.


Método de elementos finitos. Si se aproxima la solución anterior como:

𝑢(𝑥, 𝑡) = 𝑈𝑖 (𝑡) · 𝑁𝑖 (𝑥) (3.40)


∑︁

donde las funciones 𝑁𝑖 (𝑥) son la base del desarrollo en serie de 𝑢, y se usa 𝑤(𝑥) =
𝑁𝑖 (𝑥), se obtiene el método de los elementos finitos. En él se usan funciones base
contínuas. En general, suelen ser polinomios (o polinomios definidos a trozos).
Cada 𝑁𝑖 es distinto de 0 sólo para cierta zona del dominio.
Métodos espectrales. Si el dominio en el que 𝑁 𝑖(𝑥) es distinto de 0 (soporte de
la base) es todo el intervalo, se tiene un método espectral. Éstos tienen conver-
gencia espectral: convergen de forma exponencial si la solución es suave, pero
lamentablemente, no capturan bien las discontinuidades.
Método de volúmenes finitos. Si se discretiza el dominio en 𝑛 volúmenes de control
y usamos 𝑛 funciones para la base tales que 𝑁𝑖 vale 1 sólo en el volumen de control
𝑖 y 0 fuera de él, se obtiene el método de volúmenes finitos. Este método es
extremadamente interesante para resolver las ecuaciones de Navier-Stokes (o una
aproximación de las mismas) y puede permitir capturar bien discontinuidades

40
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

como ondas de choque. Por ello es el más utilizado en CFD y en el presente


trabajo.
Para la ecuación de continuidad se aplica el teorema de la divergencia de Gauss,
transformando la integral de volumen a una integral de área:
𝜕𝜌 ⃗ · (𝜌⃗𝑢) ⇒ 𝑑¯
𝜌𝑖 ∫︁ ∫︁
= −∇ · 𝑉𝑖 = − ⃗ · (𝜌⃗𝑢)𝑑𝑉 = − (𝜌⃗𝑢) · ⃗𝑛 𝑑𝐴
∇ (3.41)
𝜕𝑡 𝑑𝑡 𝑉𝑖 𝐴𝑖

donde 𝑉𝑖 es el volumen finito 𝑖 del volumen de control, 𝐴 es la sección y 𝜌¯𝑖 es el


valor medio de la densidad de la celda 𝑖.
Con volúmenes finitos, el problema reduce el orden de sus derivadas parciales.
Gran parte de la complejidad estará en obtener los flujos a través de las superficies
de las celdas. La solución es necesariamente conservativa: el flujo que sale de una
celda entra en otra.

3.5. ETAPAS DE LA SIMULACIÓN

En este apartado se tratarán por orden las tres etapas existentes y bien diferenciadas
que tienen lugar en la simulación CFD.

3.5.1. Pre-procesado
Para que las ecuaciones puedan ser aplicadas en el dominio computacional, debe
generarse un mallado, cuyas celdas o elementos representarán los volúmenes de control
que componen la geometría del problema. Es necesario poner especial atención en este
punto, pues de la calidad de la malla dependerá en gran medida la precisión de la
simulación. La solución del problema se define en los nodos dentro de cada celda,
con lo cual la cantidad de éstas influye en la validez de resultados, pero también en
el tiempo necesario para la resolución. A mayor número de celdas, tanto la precisión
como el coste computacional aumentan.

Con carácter general, existen dos maneras de realizar el mallado:

Malla estructurada (figura 3.4(a)). Consiste en emplear elementos hexaédricos


a lo largo del dominio computacional de modo que se consiga un diseño más
simple adaptado a la geometría del problema. No siempre es posible utilizar
un mallado estructurado, puesto que en geometrías de gran complejidad resulta
prácticamente imposible. El número de elementos adyacentes a un nodo o a una
línea ha de conservarse, por la forma en que se localiza y representa gráficamente
la distribución de la geometría. Por su parte, según [48] la gran ventaja radica
en el hecho de que al disponerse los elementos de forma alineada con la dirección
del fluido se consigue acelerar la ruta hasta la convergencia del solver.

41
Memoria

Malla no estructurada (figura 3.4(b)). Cuando resulta complicado realizar un


mallado estructurado por la complejidad de la geometría, se opta por esta otra
opción. Se disponen los elementos en forma de prisma rectangular, tetraédricos
o poliédricos (entre otros), de manera que puedan ajustarse de una manera más
eficiente a la geometría. No existen restricciones en cuanto al número de elementos
adyacentes a un nodo o a una línea, como sí ocurría en el caso estructurado, y
el tiempo necesario para realizar este mallado es inferior. En cambio, al no estar
alineados los elementos con la dirección del fluido suele ser más complicado el
camino hacia la convergencia del solver.
Malla híbrida. En ocasiones, cuando se quiere estudiar fenómenos relacionados
con la capa límite se disponen elementos estructurados en las proximidades de la
pared y no estructurados en las zonas alejadas, dando lugar a lo que se conoce
como una malla híbrida. De esta manera se combina lo mejor de cada tipo de
malla, para disminuir el tiempo de mallado y a su vez ayudar a la convergencia
del solver.

(a) Malla estructurada (b) Malla no estructurada

Figura 3.4: Mallado bidimensional de un perfil alar.

En la teoría, una malla enorme con elementos infinitamente pequeños sería ideal
para unos resultados totalmente precisos, pero sería inabordable por su coste compu-
tacional. Por ello, independientemente del tipo de malla escogido, se debe asegurar que
la cantidad de celdas (así como el tamaño de las mismas) representa de forma sufi-
cientemente fidedigna la geometría del problema, a la vez que no supone un tiempo de
cálculo exagerado. En este punto se pone de manifiesto la importancia del análisis de
independencia de malla, cuyo objetivo es garantizar ambas cosas.

Este proceso es simple teóricamente: se estudia el mismo caso varias veces, modi-
ficando únicamente el refinamiento de la malla hasta que los resultados no sufren una

42
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

alteración exagerada. A partir de ese punto en el que el aumento de tiempo de cálculo


no compensa la diferencia de precisión que se obtiene, se dice que la convergencia de
malla ha sido alcanzada. La malla puede modificarse mediante el tamaño base de las
celdas, los refinamientos locales en zonas de interés o incluso por algoritmos especia-
lizados como el AMR (que se tratará más adelante) llevados a cabo automáticamente
por el software, bajo unos criterios definidos por el usuario.

A continuación se requiere la definición física del problema, un proceso que abarca


desde la elección de las propiedades del fluido (presión, velocidad, temperatura, etc.),
pasando por los fenómenos físicos que han de modelarse (turbulencia, transferencia de
calor, reacciones químicas, etc.), hasta la definición de las condiciones de contorno del
problema.

3.5.2. Solver
En el solver se resuelve la matriz o sistema de ecuaciones algebraicas que se ha
obtenido tras la discretización de las ecuaciones integrales y de la geometría y físicas
del problema. Esto se hace a través de un proceso iterativo, hasta la convergencia,
o sea, cuando la variación de los resultados entre dos iteraciones consecutivas queda
dentro de los límites en un criterio establecido por el usuario.

En el mercado hay infinidad de software, tanto de libre uso como de licencia comer-
cial, dedicado al cálculo CFD. En la sección 4.2 se exponen sendos programas utilizados
durante este trabajo para las simulaciones.

Algoritmo SIMPLE. A la hora de resolver simulaciones estacionarias, el


método más utilizado es el Semi-Implicit Method for Pressure-Linked Equations (SIM-
PLE) [63] mostrado en la figura 3.5. No está limitado por el número de Courant (CFL),
ya que es estable en 𝐶𝐹 𝐿 > 1 al contrario que ocurre con el algoritmo PISO. El nú-
mero de Courant es una condición para la convergencia de algoritmos numéricos como
el descrito aquí, y se define como dicta la ecuación 3.42 donde 𝑢 es la velocidad, Δ𝑡 es
el intervalo temporal y Δ𝑥 es el intervalo de espacio.

𝑢Δ𝑡
𝐶= (3.42)
Δ𝑥
Partiendo de la matriz con las ecuaciones de momento, se obtiene la presión al re-
solver la ecuación de momento (solve momentum). Entonces se aplica una corrección
en la presión (pressure corrector). Esta presión obtenida sirve para corregir las ecua-
ciones de momento y flujo (momentum and flux correctors), y se añaden a la matriz
los nuevos resultados. Este bucle (SIMPLE loop) puede ser repetido las veces que sea
necesario hasta alcanzar la convergencia. Una vez terminado se podrán resolver el resto
de ecuaciones de transporte en serie.
43
Memoria

Figura 3.5: Esquema del algoritmo SIMPLE para casos incompresi-


bles. [64]

Algoritmo PISO. Para resolver el acoplamiento entre presión y velocidad


en simulaciones transitorias se utiliza el método Pressure Implicit with Splitting of
Operators (PISO) [65] mostrado en la figura 3.6. Este será el utilizado en el presente
trabajo por la naturaleza transitoria del problema a resolver, además de ser más rápido
porque evita el amortiguamiento (under-relaxation) en la convergencia que provoca
reconstruir la matriz del sistema repetidas veces en cada iteración.

Este algoritmo comienza resolviendo la ecuación de momento implícita, como paso


de predicción. A continuación se deriva y se resuelve la corrección de la presión. Con la
nueva presión se corrigen las ecuaciones de momento y flujo, pudiendo volver a repetir
este bucle de resolución (PISO loop) tantas veces como sea necesario para obtener la
precisión deseada por el criterio de convergencia. A diferencia del algoritmo SIMPLE,
el bucle no vuelve al momento de construcción de la matriz del sistema, sino a la
corrección de la presión. Finalmente, se resuelven el resto de ecuaciones de transporte
en serie.

Para problemas de flujo compresible, el resto de las ecuaciones (continuidad, ener-


gía...) se pueden añadir tras el corrector de presión [66], sin embargo la mayoría lo hace
justo antes de ensamblar la matriz de momento. [67]

En algunos solvers el usuario puede limitar las correcciones PISO indicando un


número mínimo y máximo de las mismas. Si no ha alcanzado la convergencia tras

44
3. MODELADO MEDIANTE MECÁNICA DE FLUIDOS COMPUTACIONAL

Figura 3.6: Esquema del algoritmo PISO para casos incompresibles.


[64]

llegar a dicho número, se reducirá el siguiente paso temporal.

3.5.3. Post-procesado
Tras la simulación llega el último paso, donde se deben analizar los resultados. Para
ello es imprescindible conocer las magnitudes representativas del problema en cuestión,
y realizar gráficas que permitan obtener conclusiones sobre el estudio que se ha llevado
a cabo. Existe una gran variedad de posibilidades para el tratamiento de los resultados,
tanto desde el punto de vista gráfico (posibilidad de obtener resultados en secciones o
líneas, realización de animaciones, etc.) como a la hora de gestionar los resultados (estos
pueden ser exportados en múltiples formatos para su posterior tratamiento, se pueden
definir nuevas variables físicas a partir de las que vienen por defecto, guardado de las
trazas de las partículas de una fase líquida dentro de otra continua, etc.). En definitiva,
el ingeniero dispone de una amplia gama de utilidades dentro del post-procesado para
exprimir al máximo el valor de su simulación.

En este sector conviven múltiples programas de post-procesado. Algunos han sido


concebidos por los mismos creadores de un solver concreto, incluidos en el paquete
de software y adaptados para facilitar su uso junto a él, mientras que otros son más
genéricos e incluyen opciones para importar proyectos de diferentes softwares CFD.

45
Memoria

Otra opción pasa por crear rutinas propias en algún lenguaje de programación para
tener mayor control sobre las magnitudes deseadas y la organización o almacenaje de las
mismas. Esto también permite obtener en gráficas con mayor grado de personalización
y automatización los datos generados por el solver.

Como en el actual trabajo se ha utilizado dos programas de cálculo diferentes, uno


con licencia comercial y el otro gratuito, para el post-procesado se ha combinado el uso
de todos los tipos de programas mencionados, incluyendo rutinas propias programadas
en Matlab. Se incluyen fragmentos del código como apéndices al final de la memoria
(Anexo B).

46
Capítulo 4

Metodología

En este capítulo se describe la configuración experimental del problema, cuyos resul-


tados servirán para validar las simulaciones realizadas. También se expone el software
utilizado para el cálculo CFD, la manera de proceder para comparar resultados y la
configuración numérica. Finalmente se expone un estudio de independencia de malla,
necesario para calibrar las simulaciones tratando de obtener los mejores resultados en
el menor tiempo posible.

4.1. CONFIGURACIÓN EXPERIMENTAL

Para validar el código CFD se emplea la geometría del quemador KIAI mono-
inyector instalado en CORIA (COmplexe de Recherche Interprofessionel en Aérother-
mochimie) para estudios dedicados a la comprensión del fenómeno de ignición [68, 69].
Es una unidad mixta de investigación del CNRS, la Universidad de Rouen y el INSA
de Rouen, y forma parte del proyecto de investigación europeo KIAI (Knowledge for
Ignition, Acoustics and Instabilities) que aborda soluciones innovadoras para el desa-
rrollo de lean combustors fiables en motores de aviación. Los estudios presentados han
sido llevados a cabo con configuraciones académicas simplificadas, pero siendo sufi-
cientemente representativas para proporcionar resultados relevantes para aplicaciones
industriales.

4.1.1. Geometría Del Quemador KIAI


La configuración del quemador consta de cuatro componentes como se puede ob-
servar en el esquema de la figura 4.1(a):

El plenum, que decelera el flujo antes de entrar en el sistema de inyección. Una


red colocada en la parte inferior del plenum destruye las estructuras grandes del
flujo formadas en la línea de admisión de aire.

47
Memoria

El sistema de inyección (figura 4.2(c)) está inspirado en los de la industria ae-


ronáutica con dos admisiones. En el centro del swirler, un tubo de diámetro
𝑑 = 4𝑚𝑚 actúa como inyector de combustible (figura 4.2(a)) y el swirler (figura
4.2(b)) es radial con un diámetro de salida externo 𝐷 = 20𝑚𝑚 y está compues-
to por 18 canales inclinados 45∘ . Además, como unión entre swirler y cámara de
combustión, existe un conducto de Venturi convergente formando 45º con la línea
transversal. Este se encarga de dirigir al flujo hacia el interior de la cámara en la
dirección adecuada.
La cámara de combustión tiene una sección transversal cuadrada con una longi-
tud de borde 100𝑚𝑚, asegurando un campo simétrico de flujo. La cámara tiene
una longitud total de 260𝑚𝑚. Se utiliza cuarzo sintético para proporcionar ac-
ceso óptico de 228 * 78𝑚𝑚2 en al menos tres lados. Estas ventanas permiten
diagnósticos como PIV (Particle Image Velocimetry) y PLIF (Planar Laser Indu-
ced Fluorescence), que son técnicas ópticas para obtener el campo de velocidades
en el interior de la cámara.
Finalmente se dispone de una tobera convergente para prevenir la entrada pa-
rásita de aire, potencialmente inducida por la depresión generada con el flujo
recirculatorio del swirler.

(a) Esquema descriptivo (b) Fotografía (c) Zoom del esquema descriptivo

Figura 4.1: Quemador KIAI.

48
4. METODOLOGÍA

(a) Inyector de combustible (b) Swirler radial (c) Sistema de inyección

Figura 4.2: El sistema de inyección del quemador KIAI.

(a) Premezclada (b) No premezclada

Figura 4.3: Estrategias de inyección gaseosa.

4.1.2. Condiciones Iniciales Y De Contorno


Las condiciones del flujo inicial y estacionario son de temperatura 𝑇 = 298𝐾 y
presión ambiente 𝑃 = 101325𝑃 𝑎, es decir, en condiciones no reactivas. El modo de
operación escogido para validar el problema es, por cuestiones de simplicidad, una
inyección gaseosa premezclada. Como muestra la figura 4.3(a) a través del plenum y de
la línea de combustible se introduce una mezcla pobre de aire y metano. Esta validación
es necesaria para confirmar las predicciones realizadas por los códigos OpenFOAM y
CONVERGE de las principales características y estructuras transitorias generadas en
el interior de la cámara. Como se puede observar en la figura 4.4, existen tres zonas
diferenciadas en un flujo de estas características: el chorro torbellinado (Swirled Jet,
SWJ), la zona de recirculación central (Inner Recirculation Zone, IRZ) y la zona de
recirculación en las esquinas (Corner Recirculation Zone, CRZ).

Las condiciones de contorno a las entradas del plenum y de la línea de combustible se


definen replicando el caso experimental premezclado [70], imponiendo un gasto másico
de mezcla aire/metano con dosado relativo Φ = 0.75, siendo el gasto a través del
swirler 𝑚˙ 𝑠𝑤 = 5.612𝑔/𝑠 y el gasto a través de la línea de combustible 𝑚 ˙ 𝑙𝑛 = 0.236𝑔/𝑠.
A la salida de la cámara de combustión se establece el valor de presión estática 𝑃 =

49
Memoria

Figura 4.4: Estructura de un flujo torbellinado en el interior de la


cámara de combustión del proyecto KIAI.

101325𝑃 𝑎. En el caso de las aproximaciones URANS y LES se ha empleado una solución


RANS estacionaria como punto de partida realista.

Tras la validación del código mediante la inyección gaseosa premezclada, el siguien-


te paso es considerar el caso no premezclado, obviamente más cercano al esquema de
combustión real, que se observa en la figura 4.3(b). En este nuevo estudio se añaden al-
gunas variables que pasan a ser de gran importancia, como la concentración de especies
en las estaciones cercanas a la entrada de la cámara de combustión.

4.2. SOFTWARE EMPLEADO

En este apartado se describen los principales programas de cálculo CFD que han sido
empleados en la realización del presente trabajo. También se ha utilizado una máquina
virtual debido a que cada uno necesitaba un sistema operativo distinto (Linux Ubuntu
16.04 y Microsoft Windows 10).

4.2.1. OpenFOAM
El software de CFD gratuito y de código abierto OpenFOAM se puede resumir como
un conjunto de módulos y bibliotecas en lenguaje C++ que permiten la resolución de

50
4. METODOLOGÍA

problemas que involucran complejos fenómenos como la turbulencia, las reacciones


químicas o la transferencia de calor (figura 4.5). Entre las principales ventajas del
código se encuentra el amplio rango de solvers, librerías y herramientas (utilities) de
pre- y post-procesado disponibles para la manipulación de datos. Asimismo, al tratarse
de un software libre no se requieren licencias y dispone de una gran comunidad de
usuarios desarrolladores de funcionalidades.

Figura 4.5: Estructura general de OpenFOAM© . [71]

No obstante, esta comunidad desarrolladora sufre una gran fragmentación con nu-
merosos proyectos dando lugar a bifurcaciones del software que avanzan en paralelo.
La ausencia de interfaz gráfica y la pronunciada curva de aprendizaje necesaria para
agregar funcionalidades (User Applications) son los mayores inconvenientes y limitan-
tes del uso del software por parte del usuario medio. Además, algunas herramientas
innovadoras como el mallado adaptativo (AMR) todavía se encuentran en una fase
temprana con limitaciones en su uso.

En la figura 4.6 se muestra la estructura del directorio de un caso básico con el con-
junto de archivos mínimos para lanzar una simulación. Se compone de un directorio
/0 que contiene las condiciones iniciales y de contorno de la presión y velocidad, así
como de aquellas que requieran los modelos empleados. En el directorio /constant se
almacena la toda la información concerniente a la malla (polyMesh) y a las propiedades
físicas de los fenómenos acontecidos en la aplicación de estudio (modelos de turbulen-
cia, propiedades del fluido, etc.). Por último, en el directorio /system se encuentran
los parámetros de configuración relacionados con los esquemas de discretización em-
pleados para cada función de las ecuaciones (fvSchemes), los algoritmos numéricos con
sus respectivas tolerancias (fvSolution) y los parámetros temporales que controlan la
simulación (controlDict).

51
Memoria

Figura 4.6: Estructura del directorio de un caso en OpenFOAM. [71]

4.2.2. CONVERGE
CONVERGE es un software comercial de CFD basado en el método de volúmenes
finitos que elimina el cuello de botella que supone la generación de la malla en las etapas
de pre-proceso de las simulaciones. Fue desarrollado inicialmente para aplicaciones con-
cernientes a los motores de combustión interna alternativos, pero durante los últimos
años su campo de aplicación se está ampliando e impulsando a otros ámbitos ingenie-
riles, especialmente al estudio de turbinas de gas. A diferencia del resto de programas
CFD, CONVERGE genera de manera automática una malla ortogonal, perfectamen-
te estructurada durante la propia simulación mediante unos sencillos parámetros de
control definidos por el usuario [72].

Para crear una geometría desde el propio software o importar un modelo 3D exis-
tente se puede utilizar CONVERGE Studio, herramienta complementaria y adaptada
a este solver (ya que ha sido desarrollado por la misma compañía) que permite el
pre-proceso y post-proceso del caso. A la hora de reconocer la geometría, el programa
necesita representar a través de triángulos las superficies, acción que lleva a cabo auto-
máticamente tras la importación del archivo. Sin embargo, el usuario tiene capacidad
de modificar dichos triángulos para reparar errores que se puedan encontrar, o incluso

52
4. METODOLOGÍA

disponerlos de manera que mejoren el resultado obtenido por el algoritmo automático


que aplica el software.

Figura 4.7: Ejemplo de modelo 3D triangulado en CONVERGE Stu-


dio [73].

Una vez terminado este paso, ya no es necesario repetirlo más, siempre y cuando
se vaya a usar la misma geometría. Será CONVERGE el que, interpretando la dis-
posición de los elementos, cree la malla hexaédrica estructurada (que presenta mayor
eficiencia computacional y simplifica los métodos numéricos del solver respecto a las no
estructuradas, como se ha mencionado en el apartado 3.5) siguiendo las indicaciones
del usuario sobre las características de la misma. Por estos motivos presenta enormes
ventajas en términos de eficiencia.

CONVERGE incluye diversas herramientas para controlar el tamaño de la malla


antes y durante la simulación, refinando o ensanchando el tamaño base en potencias
de 2. Algunas de estas herramientas se ven en las figuras 4.8-4.9 y se explican a conti-
nuación.

Grid Scaling, que refina o ensancha de manera global el dominio completo. Re-
sulta especialmente útil durante las primeras iteraciones de la simulación hasta
que el flujo se establece por completo.

53
Memoria

Figura 4.8: Aplicación de las herramientas de control sobre el ma-


llado Fixed Embedding y AMR en un quemador LDI [74].

Figura 4.9: Diferencia entre mallado sin y con aplicación de AMR.

Fixed Embedding, encargado de refinar la malla en regiones específicas del domi-


nio donde se requiera de una mayor resolución para obtener mayor precisión en
la solución. En el trabajo actual resulta interesante su uso en la región del swirler
y en la zona de recirculación, cercana a la inyección del combustible.
Adaptive Mesh Refinement (AMR). Es la herramienta más distintiva del pro-
grama, que permite refinar la malla de manera automática durante la propia
simulación añadiendo resolución en las zonas donde el campo fluido no se en-
cuentre resuelto satisfactoriamente. Para ello se basa en la detección de los altos
gradientes de las variables de interés. Esta opción resulta de gran ayuda para
capturar de manera precisa fenómenos como la propagación de la llama o flujos
con estructuras complejas, como los presentes aguas abajo del swirler en los que-
madores LDI con un coste computacional razonable. Cabe destacar que cuanto
menor sea el umbral de AMR definido por el usuario, mayor sensibilidad tendrá
el código para refinar. Además, se puede liberar el refinamiento automático de
las regiones adyacentes a las paredes, evitando así modificar el valor de 𝑦 + de
tal manera que caiga fuera del rango deseable por el modelo de pared aplicado y
produciendo resultados físicamente no realistas.

54
4. METODOLOGÍA

4.3. CÁLCULO DE ERRORES Y DESVIACIÓN

Cuando se trata de comparar gráficas, la manera más intuitiva consiste en hacer una
primera inspección visual. Sin embargo, este método es insuficiente para extraer toda
la información necesaria, sirve únicamente para obtener una primera aproximación.

La forma habitual de calcular errores (en este caso se entiende error como la dife-
rencia entre el valor de la simulación y el experimental) es mediante la fórmula del error
relativo (ecuación 4.1). Con este método, ampliamente utilizado en todos los campos
de la ciencia, se consigue un valor porcentual de la desviación.

|𝑚𝑎𝑔𝑛𝑖𝑡𝑢𝑑𝑟𝑒𝑎𝑙 − 𝑚𝑎𝑔𝑛𝑖𝑡𝑢𝑑𝑚𝑒𝑑𝑖𝑑𝑎 |
𝑒𝑟𝑟𝑜𝑟𝑟𝑒𝑙𝑎𝑡𝑖𝑣𝑜 = * 100 (4.1)
𝑚𝑎𝑔𝑛𝑖𝑡𝑢𝑑𝑟𝑒𝑎𝑙

Sin embargo, este método tiene algunas limitaciones, y es que para magnitudes
reales verdaderamente pequeñas, el error se dispara hasta límites excesivamente altos.
Esto es debido a que, al dividir entre números cada vez más pequeños, la ecuación
tiende a infinito. En el presente estudio, este problema ocurre a la hora de comparar
velocidades medias o desviaciones típicas, ya que conviven magnitudes de alto valor
absoluto (positivas y negativas) con magnitudes cercanas al cero.

La solución optada consiste en utilizar otro método, la Diferencia Porcentual Re-


lativa o Relative Percent Difference (ecuación 4.2) [75]. Un ejemplo de aplicación del
mismo es en el campo de la química, ya que en ocasiones las concentraciones son tan
pequeñas que no puede medirse la desviación con el error relativo.

|𝑚𝑎𝑔𝑛𝑖𝑡𝑢𝑑𝑟𝑒𝑎𝑙 − 𝑚𝑎𝑔𝑛𝑖𝑡𝑢𝑑𝑚𝑒𝑑𝑖𝑑𝑎 |
𝑅𝑃 𝐷 = * 100 (4.2)
(𝑚𝑎𝑔𝑛𝑖𝑡𝑢𝑑𝑟𝑒𝑎𝑙 + 𝑚𝑎𝑔𝑛𝑖𝑡𝑢𝑑𝑚𝑒𝑑𝑖𝑑𝑎 )/2

En la figura 4.10 se muestra la relación existente entre el error relativo y la RPD.


En un intervalo de errores relativos cercano al 50 % (tanto positivo como negativo) los
porcentajes son muy similares a éste, aunque al salirse de este intervalo se sobreestiman
los errores negativos y se subestiman los positivos.

Entre los resultados de los casos experimentales que se pretende replicar en las
simulaciones se tomaron medidas de determinadas variables en ciertas localizaciones.
Sin embargo, cuando se trata de comparar de una manera eficiente unos casos con otros,
es necesario obtener un valor único de precisión representativo del caso, o al menos por
cada variable o conjunto de variables que se quiera estudiar de forma separada. Lo más
sencillo es realizar una media aritmética entre los porcentajes RPD de todas las medidas
de dicha variable, por lo que se ha elegido este método como manera de proceder. Por
ejemplo, si se quiere medir la velocidad axial en diferentes estaciones o posiciones de la
geometría, se calcula el RPD en cada punto en relación al resultado experimental, se

55
Memoria

Figura 4.10: Comparación entre RPD y error relativo.

promedia entre todos los puntos para cada estación, se promedian todas las estaciones
y se obtiene un escalar que, aunque no sea intuitivo, es comparable a otro obtenido de
igual manera.

Es importante destacar que este valor no es absoluto, es una magnitud relativa que
sirve para comparar en cierta variable unos casos con otros. Sin embargo no es correcto
comparar para un mismo caso distintas variables: si en un caso no premezclado, para la
velocidad media en las estaciones se obtiene un 60 % de error pero para la concentración
de especies se obtiene un 30 %, esto no significa que se haya conseguido un resultado
más fiel en la segunda que en la primera. Puede parecer que para una determinada
magnitud un RPD de (por ejemplo) 80 % sea algo desorbitado, pero este es resultado
de muchos promedios y no tiene por qué ser un error excesivo, cosa que se demuestra al
realizar gráficas de los perfiles y contornos de esas variables. También conviene recordar
que los resultados experimentales no están exentos de error, aunque en este trabajo se
tomen como referencia y se les suponga una precisión adecuada pueden alejarse de la
realidad.

56
4. METODOLOGÍA

4.4. CONFIGURACIÓN NUMÉRICA

Una vez explicada la configuración experimental en el apartado 4.1, el siguiente pa-


so consiste en preparar la geometría para introducirla en cada uno de los softwares de
cálculo CFD de los que se dispone, así como describir las condiciones iniciales y de con-
torno que repliquen el ensayo experimental. Además se debe introducir la turbulencia
correctamente según el tipo de simulación.

Existen multitud de parámetros a la hora del mallado así como esquemas de discre-
tización y de turbulencia disponibles para el estudio del problema, por lo que al final
del capítulo se propone un estudio de independencia de malla como primer paso cuyo
objetivo es calibrar la precisión y duración de las simulaciones.

4.4.1. Geometría En OpenFOAM


El proceso de creación de la geometría y su posterior mallado se ha realizado me-
diante ANSYS Workbench. Con la información de la que se disponía en los estudios
experimentales se ha reproducido el quemador KIAI para, a continuación, crear múlti-
ples mallas que permitan estudiar los fenómenos deseados.

Las mallas se han creado con elementos tetraédricos, partiendo de un tamaño base
en la región del plenum y en la cámara, y refinando la región del swirler. Además,
tratando de capturar con mayor precisión la zona de recirculación, se ha refinado la
zona central de la cámara de combustión con esferas a diferentes distancias medidas
desde la entrada de la misma. Se puede ver un ejemplo de malla utilizada en la figura
4.11, con la estrategia mencionada.

Figura 4.11: Ejemplo de estructura de mallado del quemador KIAI


con 6 millones de celdas.

57
Memoria

Figura 4.12: Tabla con los parámetros de las mallas utilizadas en


OpenFOAM.

Además, en la tabla de la figura 4.12 están descritas todas las mallas utilizadas en
este apartado. La primera columna indica las distancias entre el eje de coordenadas y
el centro de cada esfera (excepto el tamaño base y el mallado concreto del swirler), la
primera fila es el número de celdas en millones de cada malla y la segunda fila indica
por columnas el tamaño de los elementos y el radio de las esferas de cada malla.

4.4.2. Geometría En CONVERGE


La geometría y triangulación para el caso de CONVERGE se ha realizado mediante
CONVERGE Studio, como se muestra en la figura 4.13. A la hora de controlar el
mallado en este software, se deben definir correctamente los parámetros mencionados
en el apartado 4.2.2.

Para generar la malla estructurada por defecto, en primer lugar el programa sub-
divide el dominio en hexaedros teniendo en cuenta el tamaño base definido y el grid
scaling, que es utilizado para acelerar el establecimiento del flujo en el dominio, y así
también la convergencia del código. A continuación se obtiene la intersección entre es-
tas celdas y la triangulación de la geometría, consiguiendo una gran cantidad de celdas
cúbicas y un número menor de celdas irregulares (figura 4.14) correspondientes a los
bordes y superficies más complejos de la geometría. Después se aplica el parámetro de
fixed embedding en las zonas indicadas para refinar las celdas. Finalmente, el AMR se
tiene en cuenta durante la simulación, comparando los gradientes de las variables ele-
gidas con los límites establecidos para refinar en caso de sobrepasarlos. De esta manera
se consigue aumentar la resolución de la malla de manera local en secciones críticas
manteniendo elementos más gruesos en el resto del dominio.

Los niveles de AMR y fixed embedding se han variado entre 0 y 3, pero en el


segundo además se ha modificado el tamaño de la región de influencia. Por su parte,
se ha analizado el efecto de adelantar o atrasar el instante en el que deja de actuar
el gridscale. Se ha llegando a un compromiso ya que, si deja de actuar antes de lo

58
4. METODOLOGÍA

Figura 4.13: Triangulación del quemador KIAI en CONVERGE Stu-


dio, zoom en el swirler y entrada a la cámara de combustión.

Figura 4.14: Tipos de celda tras el mallado automático [72].

59
Memoria

debido la simulación se vuelve más pesada y el flujo tardaría un tiempo mayor en


estabilizarse, pero si deja de actuar mucho después la solución se vería frenada por la
gruesa resolución de la malla sin avanzar hacia el resultado final.

4.4.3. Modelado De La Turbulencia


En las simulaciones RANS la turbulencia se especifica mediante una intensidad
turbulenta (ecuaciones 3.17).

Aunque se han llevado a cabo una gran cantidad de simulaciones variando los valores
de intensidad turbulenta entre el 2 % y el 15 % en ambas entradas, y la escala de longitud
turbulenta entre un 5 % y un 12 % del diámetro, los mejores resultados se han obtenido
con la configuración de intensidad turbulenta del 2 % a la entrada del plenum y 10 %
en la línea de combustible.

Otro factor importante es el tratamiento de pared considerado y los valores de 𝑦 +


presentes en la zona de mayor velocidad: la sección convergente que sigue al swirler.
Mediante los niveles de refinamiento se ha tenido la cautela de, independientemente
de la configuración de los parámetros de las herramientas de mallado, encontrarse con
valores de 𝑦 + entre 30 y 100, asegurando por tanto que la primera celda se encuentra
en la capa logarítmica donde los modelos de la ley de pared actúan con una mejor
aproximación.

Los promediados temporales y fluctuaciones de las variables de interés en las si-


mulaciones URANS se efectúan una vez el gasto másico a la salida del quemador se
ha establecido. Este cálculo se lleva a cabo durante 15𝑚𝑠, es decir, unas 20 veces el
tiempo de residencia del flujo en el dominio que se define según la ecuación 4.3, donde
𝑅𝑖 es el radio medio de la entrada convergente y 𝑢𝜃 es la componente azimutal de la
velocidad media en el plano de la entrada [76].

𝜋𝑅𝑖
𝑡𝑟𝑒𝑠 = = 0.81 (4.3)
𝑢𝜃

En las simulaciones LES se debe refinar mucho más la malla, de modo que se consiga
obtener unos 𝑦 + lo suficientemente pequeños (menores de 4) como para que la ley de
pared se corresponda con la capa viscosa. Esto también permite capturar y calcular
con mayor precisión las estructuras del flujo más pequeñas, por eso a medida que se
refina la malla, mejores son los resultados.

4.4.4. Variables De Estudio


Los datos experimentales con los que se comparan las simulaciones del presente
trabajo forman parte de las tesis y artículos [70, 77, 78, 79]. En ellos se presentan

60
4. METODOLOGÍA

los resultados e incluso se comparan con simulaciones realizadas mediante diferentes


códigos CFD como AVBP y YALES2. Como los datos han sido tomados de 3 mane-
ras diferentes, es necesario que el procesado y presentación de los resultados de las
simulaciones se realice según esos mismos formatos, que se describen a continuación.

Centerline o línea central. Las variables se toman a lo largo de la recta que se


dibuja desde el punto central a la entrada de la cámara de combustión (donde se
ubica el eje de coordenadas de la geometría) en dirección axial hasta el final de
la misma.
Stations o estaciones. Las variables se toman en planos perpendiculares a la
línea central del quemador, a las distancias de 𝑧 = 5, 10, 20, 30 y 40𝑚𝑚 (𝑧/𝐷 =
0.25, 0.5, 1, 1.5, 2). En estos planos, se miden las variables a lo largo de un eje
radial (ver figura 4.15).

Figura 4.15: Posición de las estaciones donde tomar las medidas en


el quemador.

Contours o contornos. Las variables se toman en un plano que divide la cámara


en dos partes iguales. El valor de las variables se plasma mediante una escala de
colores que figura en la misma leyenda de la figura.

Los parámetros más importantes que se han medido en los experimentos y simula-
ciones son la velocidad media (o mean velocity) y las medias cuadráticas o RMS (root
mean squared) en todas sus componentes: axial, radial y tangencial. En el caso no
premezclado también se ha medido la concentración del combustible.

Los valores RMS son una medida estadística de la magnitud de una cantidad va-
riable y representan la incertidumbre o el grado de dispersión entre unos datos y su
media. Se calculan como se indica en la ecuación 4.4 para la velocidad, mediante la
raíz cuadrada del promedio de todos los datos elevados al cuadrado (para eliminar los
signos). √︃
2 + 𝑣2 + 𝑣2
𝑣𝑎𝑥
𝑣𝑅𝑀 𝑆 = 𝑟𝑎𝑑 𝑡𝑎𝑛
(4.4)
3
61
Memoria

4.5. RUTINAS DE POSPROCESADO

La cantidad de simulaciones que se han realizado en el trabajo actual requieren


de un tiempo muy grande para posprocesar los resultados, realizar gráficas, comparar
unos casos con otros y sacar conclusiones. Por ese motivo ha sido necesario realizar
unas rutinas en Matlab capaces de automatizar esta tarea, mostrando y guardando
las gráficas de los casos y sus comparaciones, calculando desviaciones entre los datos
experimentales y las simulaciones, dibujando contornos de variables sin tener que cargar
programas muy pesados de posprocesado y mantener un entorno de carpetas ordenado
donde almacenar toda la información.

Figura 4.16: Diagrama de funcionamiento de las rutinas de pospro-


cesado.

Las rutinas de posprocesado que se adjuntan en el anexo B funcionan de forma


resumida como el diagrama que se muestra en la figura 4.16. Previamente el usuario
debe definir correctamente las variables del lanzador (en verde) y de los archivos de
configuración (en azul). A continuación se ejecuta el lanzador que comprueba si existen
los archivos mat requeridos donde se guarda la información ya en los formatos espe-
cificados anteriormente. Si no es así llama a las funciones que importan los datos (en
rojo) y los transforman en archivos mat, pero si ya existen simplemente los importa.
A continuación, dependiendo de las preferencias indicadas, los resultados pueden ver-
se en la consola y en gráficas que realiza la función plotCase.m, que además pueden
62
4. METODOLOGÍA

guardarse en ficheros pdf, tiff, u otras extensiones. Es importante mantener los casos
en un entorno de carpetas ordenado como se indica en los comentarios del código, y
asegurarse.

4.6. ESTUDIO DE INDEPENDENCIA DE MALLA

En el presente trabajo es necesario realizar un estudio de independencia de malla


a partir de las numerosas simulaciones del caso premezclado llevadas a cabo en CON-
VERGE y OpenFOAM con el objetivo de obtener la configuración óptima en cuanto
a precisión y tiempo de cálculo.

4.6.1. Malla OpenFOAM


En la tabla de la figura 4.17 están todos los casos realizados en OpenFOAM con
premezcla, donde se refleja detalladamente las variaciones en los parámetros que se han
ido sucediendo y que se explicaban del mismo modo en el apartado 4.4.

Figura 4.17: Configuración de los casos RANS y URANS con pre-


mezcla en OpenFOAM.

En las gráficas de las figuras 4.18 y 4.19 se muestran los porcentajes de RPD en
función del número de celdas de cada caso, tanto para la velocidad axial en la línea

63
Memoria

Figura 4.18: RPD de la velocidad en la línea central en función del


número de celdas en la malla de OpenFOAM.

Figura 4.19: RPD de la velocidad en las estaciones de la entrada a la


cámara de combustión en función del número de celdas en la malla
de OpenFOAM.

64
4. METODOLOGÍA

central como para la media de los perfiles de velocidades (axial, radial y tangencial) en
las estaciones.

Como se puede observar en ambas figuras, a medida que aumenta el número de


celdas disminuye la desviación de manera potencial. Conviene destacar que las simula-
ciones con el modelo 𝑘 − 𝜀 sí que se estabilizan y llegan a una convergencia de malla,
por ser un caso RANS. No obstante, la curva inferior correspondiente a RSM-LRR es
URANS y por ello siempre mejora al refinar la malla, ya que con menor tamaño (y
mayor cantidad) de celdas logra resolver más escalas.

Hay diferenciadas dos zonas:

La primera comprende hasta los 2 millones de celdas, y tiene una pendiente


significativa, aumentando el número de celdas se nota una diferencia grande en
el error.
La segunda zona (más de 2 millones de celdas) sigue teniendo pendiente pero es
mucho menor, con lo que la variación de celdas es demasiado grande respecto de
la diferencia en el error. No merece la pena aumentar tanto el peso de la malla y
así el tiempo de cálculo ya que el aumento de precisión no será tan esencial.

Con estos datos, la malla más conveniente para realizar los estudios en OpenFOAM
del modelo 𝑘−𝜀 es la que se compone de entre 3 a 6 millones de celdas, si las limitaciones
de capacidad de cálculo son restrictivas. En caso contrario, se puede utilizar mallas de
17 millones de celdas o superior para el modelo RSM-LRR.

4.6.2. Malla CONVERGE


En la tabla de la figura 4.20 están todos los casos realizados en CONVERGE con
premezcla, donde se refleja detalladamente las variaciones en los parámetros que se han
ido sucediendo y que se explicaban en el apartado 4.4. Aunque algunos casos tienen el
mismo número de celdas pero niveles diferentes de fixed embedding o AMR se debe a
que se ha modificado la zona donde actúan.

En las gráficas de las figuras 4.21 y 4.22 se muestran los porcentajes de RPD en
función del número de celdas de cada caso, igual que la sección anterior, tanto para
la velocidad axial en la línea central como para la media de los perfiles de velocidades
medias (axial, radial y tangencial) en las estaciones.

Como se puede observar en ellas, a medida que aumenta el número de celdas dis-
minuye la desviación de manera potencial. Además hay unas tendencias observables
según las características de la malla:

65
Memoria

Figura 4.20: Configuración de los casos RANS con premezcla en


CONVERGE.

66
4. METODOLOGÍA

Figura 4.21: RPD de la velocidad en la línea central en función del


número de celdas en la malla de CONVERGE.

Figura 4.22: RPD de la velocidad en las estaciones de la entrada a la


cámara de combustión en función del número de celdas en la malla
de CONVERGE.

67
Memoria

El tamaño base de elemento es inversamente proporcional al número de celdas.


Por tanto, a menor tamaño más millones de celdas. En ambas gráficas la tendencia
es la esperable, aumenta la precisión con la cantidad de celdas.
El tamaño de la zona de refinamiento fijo es proporcional al número de celdas, si
la zona a refinar es más grande el aumento de celdas es mayor. Sin embargo, la
precisión se ve muy poco afectada por este parámetro en relación al número de
celdas que aumenta, y por tanto, al tiempo de simulación.
Los niveles de refinamiento fijo y adaptativo siguen la misma tendencia, cuanto
mayor es el nivel mayor es el número de celdas. Sin embargo no crece tanto como
en el caso anterior, y el aumento de precisión es más notable.
El umbral para el refinamiento adaptativo es inversamente proporcional al número
de celdas. Si es más grande, se refina menos y se obtienen menos millones de
celdas. La diferencia en la desviación es prácticamente inapreciable en la gráfica.

Ambas gráficas muestran una zona plana en general salvo pequeñas excepciones con
una desviación excesiva. Como la pendiente no es demasiado grande (excepto en las
mallas menos pesadas) la mejor malla en CONVERGE se obtiene entre 0.6-1.2 millones
de celdas.

68
Capítulo 5

Resultados

En este capítulo se interpretarán los resultados de las simulaciones más significativas


del caso premezclado para ambos programas de CFD, tanto CONVERGE como Open-
FOAM. Tras esta comparación, se estudiará el caso no premezclado únicamente con
resultados de CONVERGE debido a que se disponía de tiempo y recursos limitados.

5.1. CASO PREMEZCLADO

Las condiciones del caso premezclado han sido expuestas en el apartado 4.6 para
el estudio de independencia de malla, pero deben ser analizadas detenidamente y no
sólo mediante aproximación RANS, sino también mediante LES. La información que
se extraiga de este caso será de gran ayuda para analizar el caso siguiente.

5.1.1. Simulaciones En OpenFOAM


A continuación se dispone una comparativa entre el error que se obtiene de los
modelos de turbulencia RANS y LES utilizados en el software OpenFOAM. Las figuras
5.1-5.3 muestran respectivamente las velocidades en la línea central, las velocidades
medias en las estaciones y las RMS en las mismas.

La figura 5.1 indica que, para mallas de peso reducido, de todos los modelos de
turbulencia se obtienen resultados similares. En este caso destaca el modelo 𝑘 − 𝜀, que
tiene menor error que el resto. Sin embargo, a partir de los 3 millones de celdas se
estabiliza y pasa a ser el peor modelo con bastante diferencia sobre los demás. Los
otros modelos, a medida que aumenta el número de celdas, continúan disminuyendo
el error de forma significativa; no se alcanza una convergencia de malla porque son
modelos URANS/LES.

En la figura 5.2 se observa que todos los modelos tienen resultados similares. De
nuevo, como en la figura anterior, en mallas reducidas el modelo 𝑘−𝜀 obtiene resultados
ligeramente mejores, pero a partir de los 6 millones de celdas se diferencia del resto,

69
Memoria

Figura 5.1: Caso premezclado en OpenFOAM, comparación modelos


de turbulencia RANS y LES mediante las velocidades en la línea
central.

Figura 5.2: Caso premezclado en OpenFOAM, comparación modelos


de turbulencia RANS y LES mediante las velocidades medias en las
estaciones.

70
5. RESULTADOS

Figura 5.3: Caso premezclado en OpenFOAM, comparación modelos


de turbulencia RANS y LES mediante las RMS en las estaciones.

habiendo alcanzado convergencia de malla. Los demás modelos, conforme aumenta el


número de celdas, en esta ocasión también disminuyen el error pero con menor impacto.
En función de si prima la precisión o la rapidez de simulaciones se escogerá el modelo
Dynamic Smagorinsky con 17 millones de celdas o 𝑘 − 𝜀 con entre 1 y 2 millones.

Al contrario de las anteriores, la figura 5.3 pone de manifiesto que el modelo 𝑘 −𝜀 se


aleja mucho al referirse a las RMS del resultado experimental para todas las mallas, algo
esperable al ser una aproximación RANS. No obstante, el Reynolds Stress Model (que
es URANS) da un resultado muy cercano a los LES con mallas de hasta 3 millones
de celdas. A partir de los 6 millones, los tres modelos LES son muy similares, y no
existen grandes diferencias en el error con mallas más pesadas como la de 17 millones.
En caso de encontrarse con limitaciones de capacidad de cálculo, lo ideal sería utilizar
6 millones de celdas y el modelo LES más sencillo: Smagorinsky. Esta sería la opción a
escoger en caso de querer investigar otros fenómenos que dependan de la precisión en
las RMS.

Aunque las futuras simulaciones deban realizarse con las indicaciones que se han ido
dando en este apartado (por la capacidad computacional y tiempo de cálculo limitados),
para dibujar los perfiles y contornos se han escogido los casos más precisos de los ya
simulados, tratando de analizar las estructuras fluctuantes:

Entre las aproximaciones RANS, el número 18: con 17 millones de celdas y modelo
de turbulencia RSM-LRR (URANS).
Entre las aproximaciones LES, el número 17: con 17 millones de celdas y modelo
de turbulencia Dynamic Smagorinsky.

71
Memoria

5.1.2. Simulaciones En CONVERGE


Una de las disyuntivas que plantean las simulaciones es la inicialización del dominio:
puede suponerse que todo es aire antes de empezar a introducir la mezcla de aire y
combustible, o partir de que el dominio entero es mezcla. Según la figura 5.4 todos
los resultados son muy parecidos, tanto en la línea central (cuya diferencia del 1 % es
inapreciable) como en las estaciones (medias y RMS), y demuestra que es mejor con la
mezcla. Además, en cuanto a los tiempos de simulación, se llegaba más rápido a una
solución de este modo.

Figura 5.4: Caso premezclado en CONVERGE, inicialización del


dominio.

El siguiente aspecto importante es averiguar el modelo de turbulencia para cerrar


las ecuaciones RANS que mejores resultados da. El modelo 𝑘 − 𝜔 fue descartado en
simulaciones previas, por lo que en la figura 5.5 se ve una comparación entre RSM-LRR
y los tres modelos 𝑘 − 𝜀: standard, RNG y realizable. Dependiendo de la variable a la
que se le deba dar mayor importancia según el problema, conviene elegir un modelo
concreto. Si importa el cálculo de velocidades medias en las estaciones (como ocurre
en el caso premezclado), el que mejor resultado da es 𝑘 − 𝜀 standard; pero en lo que a
velocidades de la línea central y las RMS en las estaciones se refiere, desempeña mejor
papel el modelo RSM-LRR (importante en el caso no premezclado).

Entre las herramientas del mallado adaptativo explicadas en el apartado 4.2.2 se


encuentra el fixed embedding, que permite refinar la malla en un lugar específico del
dominio. Además de utilizarla en el propio swirler, se ha propuesto aplicarla a tres
geometrías de cilindros distintas cuyo origen es la entrada de la cámara de combustión,

72
5. RESULTADOS

y penetran en la misma con una longitud y diámetro determinados (figura 5.6). Con
ello se pretende capturar mejor las variables en esa zona.

Figura 5.5: Caso premezclado en CONVERGE, modelo de turbu-


lencia RANS.

El primer tipo de cilindro mide 1𝑐𝑚 de largo y tiene un diámetro de 6.8𝑐𝑚. En


la leyenda se muestra como C1_6.8 y con él la malla que se obtiene es de 2.7
millones de celdas.
El segundo tipo de cilindro mide 2𝑐𝑚 de largo y tiene un diámetro de 6.8𝑐𝑚. En
la leyenda se muestra como C2_6.8 y con él la malla que se obtiene es de 3.9
millones de celdas.
El tercer tipo de cilindro mide 1𝑐𝑚 de largo y tiene un diámetro de 3𝑐𝑚. En la
leyenda se muestra como C1_3 y con él la malla que se obtiene es de 1.2 millones
de celdas.

La figura 5.7 refleja la comparativa entre los tres tipos. En cuanto a los dos primeros
no hay diferencia apreciable de desviación en línea central o en media de estaciones,
por lo que merece la pena un cilindro de longitud 1𝑐𝑚, refinando así la malla en un
lugar reducido y evitando que aumente el tiempo de simulación por la diferencia en
la cantidad de celdas. Una vez descartado el segundo, la comparativa entre el resto de
cilindros muestra muy poca diferencia, aunque favorable para el de mayor diámetro.
Sin embargo, no merece la pena duplicar el número de celdas y, por tanto, disparar el
tiempo de simulación por un cambio mínimo de la desviación, menor al 4 %. Además,

73
Memoria

Figura 5.6: Cilindros donde se emplea fixed embedding.

Figura 5.7: Caso premezclado en CONVERGE, fixed embedding.

74
5. RESULTADOS

en lo referente a las RMS sí que se reduce el error notablemente con el cilindro C1_3,
aunque sigue siendo alto.

A continuación, para el caso estudiado mediante LES también es necesario ver qué
modelo de turbulencia se ajusta más a los resultados experimentales. En la figura 5.8 se
ve una comparación entre los tres modelos: Dynamic Smagorinsky (DSGS), Dynamic
Structural (DSEM) y Smagorinsky-Lilly (SGS). En las velocidades de la línea central y
las estaciones, el modelo Dynamic Structural se desvía demasiado respecto de los otros
dos que dan resultados muy similares, por lo elegir uno u otro se debe decidir desde el
punto de vista del tiempo de simulación. Sin embargo, en cuanto a las RMS, todos los
modelos tienen unos resultados muy similares entre ellos, siendo ligeramente mejor el
modelo Dynamic Smagorinsky.

Figura 5.8: Caso premezclado en CONVERGE, modelo de turbu-


lencia LES.

En esta ocasión, para las gráficas de perfiles y contornos se han seleccionado de nue-
vo dos casos, pero el primero sigue las indicaciones del apartado en cuanto a minimizar
el tiempo de simulación (con los modelos turbulentos y tamaños de malla adecuados)
mientras que el segundo se ha elegido por ser el más preciso para captar las estructuras
transitorias:

Entre los modelos RANS, el número 17: tamaño base de 3𝑚𝑚, 3 niveles de fixed
embedding y AMR, 1.2 millones de celdas y modelo de turbulencia 𝑘 − 𝜀 std.
Entre los modelos LES, el número 3: tamaño base de 2𝑚𝑚, 3 niveles de fixed
embedding y AMR, 17 millones de celdas y modelo de turbulencia Dynamic Sma-
gorinsky.
75
Memoria

5.1.3. Perfiles De Velocidades


En este apartado se muestran los perfiles de velocidades de los casos de simulación
elegidos durante este mismo capítulo. En primer lugar se sitúan las gráficas que compa-
ran directamente los perfiles de las velocidades en todas sus componentes con los datos
tomados experimentalmente, para después elegir el más preciso y plasmar la cámara
de combustión con sus contornos de velocidades.

25
Cordier2013EXP
URANS_18_OF
20
LES_17_OF
RANS_17_CG
Mean Axial Velocity [m/s]

15 LES_3_CG

10

-5

-10

-15
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04 0.045 0.05
Centerline Distance z [m]

Figura 5.9: Caso premezclado, comparación de velocidades axiales


en la línea central entre los mejores modelos de turbulencia y los
diferentes códigos CFD con los datos experimentales.

La figura 5.9 muestra los resultados de velocidad media axial en la línea central. De
todos los casos, el más cercano a los datos experimentales es el LES de CONVERGE,
sin embargo hay una pequeña particularidad: todos ellos sobreestiman la velocidad en
las primeras distancias, especialmente en el origen. Esto puede deberse a que el modelo
de pared en el inyector no actúa correctamente (los 𝑦 + se encuentran en la capa buffer,
zona de mayor error al modelar), dando como resultado una mayor velocidad axial (en
torno a 20𝑚/𝑠) a la salida del mismo (en el centro de la entrada a la cámara). En
cualquier caso, los autores de las medidas experimentales reportaron dificultades para
realizar las mediciones en esa zona [70, 77, 78, 79].

En las figuras 5.10-5.12 se ven las tres componentes axial, radial y tangencial res-
pectivamente de las velocidades medias (a la izquierda) y las RMS (a la derecha) en
función de la distancia radial tomada desde la línea central de la cámara en cada
estación.

En primer lugar, la velocidad media axial es sobreestimada por todos los modelos en
las dos primeras estaciones, mientras que en el resto ocurre solamente con los modelos
76
5. RESULTADOS

Cordier2013EXP URANS_18_OF LES_17_OF RANS_17_CG LES_3_CG

Station z = 40mm
15
20

10 10

0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 30mm
15
20
10
Mean Axial Velocity [m/s]

10

RMS Axial Velocity [m/s]


0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 20mm
15
20

10 10

0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 10mm
15
20

10 10

0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 5mm
15
20

10 10

0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Radial Distance x [m]

Figura 5.10: Caso premezclado, comparación de velocidades axiales


en las estaciones entre los mejores modelos de turbulencia y los
diferentes códigos CFD con los datos experimentales.

LES y cerca de la zona central. Esto indica que la zona de recirculación que se mostrará
en los contornos de simulación es más estrecha que la experimental, y ocurre acorde
a lo explicado en la figura anterior: existe una velocidad axial mayor de la esperada
en la entrada. En cuanto a las RMS, como ya se ha adelantado previamente en este
capítulo, el modelo RANS_17_CG da los peores resultados subestimando los valores.
En el resto de modelos llama la atención que alrededor de la zona 0.01𝑚 de distancia
radial exista un pico que los datos experimentales no reflejan.

En segundo lugar, la velocidad media radial se ajusta casi perfectamente en todas


las estaciones y modelos. Llama la atención que en la única discrepancia que existe (en
la primera estación) el modelo que mejor se adapta es el RANS_17_CG. Sin embargo,
este mismo modelo vuelve a dar resultados lejanos de los experimentales en las RMS

77
Memoria

Cordier2013EXP URANS_18_OF LES_17_OF RANS_17_CG LES_3_CG

Station z = 40mm
15 10

10

5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 30mm
15 10

10
Mean Radial Velocity [m/s]

RMS Radial Velocity [m/s]


5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 20mm
15 10

10

5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 10mm
15 10

10

5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 5mm
15 10

10

5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Radial Distance x [m]

Figura 5.11: Caso premezclado, comparación de velocidades radiales


en las estaciones entre los mejores modelos de turbulencia y los
diferentes códigos CFD con los datos experimentales.

en comparación al resto, aunque los resultados obtenidos por ellos tampoco logran
capturar correctamente las estructuras turbulentas cerca del centro.

Finalmente, la velocidad media tangencial se ajusta mejor según los modelos


RANS_17_CG y URANS_18_OF. Igual que ocurría con la velocidad media axial,
ésta se ve sobreestimada (mayor valor absoluto, la velocidad es negativa). Esto ocurre
también en las primeras estaciones, en la zona cercana al centro de la entrada a la
cámara de combustión. Para las RMS existen ciertas diferencias en la tendencia de
todos los modelos, de nuevo no se han logrado capturar correctamente las estructuras
turbulentas, aunque aparentemente el LES_3_CG es el que mejor se ajusta.

78
5. RESULTADOS

Cordier2013EXP URANS_18_OF LES_17_OF RANS_17_CG LES_3_CG

Station z = 40mm
10
0

-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 30mm
10
Mean Tangential Velocity [m/s]

RMS Tangential Velocity [m/s]


-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 20mm
10
0

-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 10mm
10
0

-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 5mm
10
0

-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Radial Distance x [m]

Figura 5.12: Caso premezclado, comparación de velocidades tangen-


ciales en las estaciones entre los mejores modelos de turbulencia y
los diferentes códigos CFD con los datos experimentales.

5.1.4. Contornos De Velocidad Y Energía Cinética Turbulen-


ta
A continuación se representan los contornos de velocidades y de energía cinética
turbulenta (tke) en uno de los 4 casos seleccionados. La diferencia entre ellos no es
muy significativa, sin embargo se adjuntan el resto de contornos en el anexo A.

En la figura 5.13, la columna izquierda muestra las velocidades medias, mientras


que la derecha muestra las RMS, y cada componente (axial, radial y tangencial) se
corresponde con una fila. No es casualidad que las velocidades radial y tangencial
sean prácticamente simétricas, ya que el chorro proveniente del swirler tiene forma de
torbellino o espiral como resultado de las fuerzas centrífugas inducidas por la rotación

79
Memoria

Mean Velocity [m/s] RMS Velocity [m/s]


-10 0 10 20 2 4 6 8 10
Distance z [m]

0.1 0.1

0.08 0.08

Axial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-5 0 5 2 4 6 8 10 12

0.1 0.1
Distance z [m]

0.08 0.08

Radial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-20 -10 0 10 20 2 4 6 8 10 12

0.1 0.1
Distance z [m]

Tangential

0.08 0.08

0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05
Distance x [m] Distance x [m]

Figura 5.13: Contornos de velocidades del caso premezclado


LES_3_CG.

80
5. RESULTADOS

del flujo. Además, esta estructura (descrita en 4.1) que se muestra en la componente
axial de velocidades medias, es de gran importancia por su función estabilizadora de
llama gracias al bloqueo aerodinámico formado. Su presencia dota al flujo del tiempo de
residencia, temperatura y turbulencia adecuadas para una atomización, evaporación,
mezclado y combustión eficientes.

Tras mostrar los contornos de velocidades llega el turno de la turbulencia. La figura


5.14 representa el contorno de la energía cinética turbulenta obtenido con las rutinas
de posprocesado en Matlab. En estos términos, la zona cercana al punto de remanso
presenta una alta turbulencia debido las inestabilidades locales del flujo que provocan
un movimiento del punto alrededor de su localización media [83].

Turbulent Kinetic Energy


0.1

0.09
120

0.08

100
0.07
Distance z [m]

0.06
80

0.05

60
0.04

0.03 40

0.02
20
0.01

0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05
Distance x [m]

Figura 5.14: Contorno de energía cinética turbulenta del caso pre-


mezclado LES_3_CG.

Otro método para identificar los vórtices es el Q-criterion [84], o segundo invariante
del tensor gradiente de velocidades. Separando las partes simétrica 𝑆 y antisimétrica
Ω del tensor, el Q-Criterion se establece de la siguiente manera:
1 1
∇𝑣 = 𝑆 + Ω donde 𝑆 = (∇𝑣 + ∇𝑣 𝑇 ), Ω = (∇𝑣 − ∇𝑣 𝑇 ) (5.1)
2 2
Para visualizar los vórtices se obtiene una isosuperficie de valores 𝑄 > 0 obtenidos de
la ecuación 5.2. Esto se observa en la figura 5.15 obtenida con el programa de pospro-
cesado EnSight, y ocurre porque las isosuperficies con 𝑄 positivas aislan áreas donde
81
Memoria

la intensidad de rotación de las estructuras se sobrepone a la deformación, hallando así


las envolturas de los vórtices.
1
𝑄 = (|Ω|2 − |𝑆|2 ) (5.2)
2

Figura 5.15: Visualización de vórtices turbulentos mediante Q-


Criterion obtenida en EnSight.

5.2. CASO NO PREMEZCLADO

En el caso anterior (sección 5.1) se ha extraído información útil con la cual encarar
el resto de simulaciones del siguiente, como el tamaño de la malla debido a los niveles
de fixed embedding y AMR. De esta manera se puede continuar con el estudio del flujo
no premezclado en la cámara de combustión LDI.

5.2.1. Simulaciones En CONVERGE


Anteriormente se concluyó que en CONVERGE era beneficioso inicializar el dominio
con la mezcla de aire y combustible porque mejoraba la precisión de resultados y
82
5. RESULTADOS

ayudaba a una mayor rapidez en la convergencia de los cálculos. No obstante, en el


caso no premezclado parece más legítimo que en el plenum y el swirler solamente haya
aire, por lo que se ha realizado una comparación entre esas dos formas de inicializar el
dominio.

Figura 5.16: Caso no premezclado en CONVERGE, velocidades se-


gún inicialización del dominio.

Figura 5.17: Caso no premezclado en CONVERGE, especies según


inicialización del dominio.

En la gráfica de las velocidades (figura 5.16) se advierte que no hay grandes cambios
entre un modelo u otro, y es favorable para el dominio inicializado con aire y mezcla
83
Memoria

excepto para las RMS. Por otra parte, la gráfica de especies (figura 5.17) refleja unas
RMS similares y una diferencia muy importante en la media. Esta última razón hace que
sea imperioso elegir el dominio inicializado con aire en plenum y swirler, ya que además
no supone un perjuicio apreciable en otros aspectos como el tiempo de simulación.

Figura 5.18: Caso no premezclado en CONVERGE, velocidades se-


gún modelo de turbulencia RANS.

Figura 5.19: Caso no premezclado en CONVERGE, especies según


modelo de turbulencia RANS.

De nuevo se ha realizado una comparación entre modelos de turbulencia para la


aproximación RANS como se observa en las figuras 5.18-5.19. El modelo 𝑘 − 𝜔 fue
84
5. RESULTADOS

descartado porque se obtenían resultados similares pero generaba el doble de elementos


en la malla, con el consiguiente retardo en el tiempo de simulación. Entre los otros
dos modelos, la gráfica de velocidades muestra que las medias tienen un resultado
muy similar, ligeramente mejor para 𝑘 − 𝜀 standard, que podría ser útil por su corto
tiempo de simulación. Sin embargo, para simulaciones en las que es esencial conocer las
RMS con precisión (futuros estudios de inyección de combustible líquido, atomización
y combustión) el modelo RSM-LRR es la mejor opción, dando además una mayor
precisión en la línea central. En cuanto a la gráfica de concentración de especies, no
aporta nada nuevo: las desviaciones son muy parecidas, y el modelo RSM-LRR tiene
más precisión.

5.2.2. Perfiles De Velocidades Y Especies


En este apartado se muestran los perfiles de velocidades y especies del caso de si-
mulación elegido en el apartado anterior, plasmando las gráficas que comparan directa-
mente los perfiles en todas sus componentes con los datos tomados experimentalmente.
Además, se incluyen resultados de las simulaciones llevadas a cabo en [76] mediante su
código propio AVBP, para comparar con los resultados obtenidos en el presente traba-
jo. Se sirven de aproximaciones LES, las mallas utilizadas son de hasta 31 millones de
elementos y, a diferencia de este estudio, aplican condiciones de no deslizamiento en
pared.

40
Cordier2013EXP
35 Esclapez2014AVBP
URANS_15_CG
30
Mean Axial Velocity [m/s]

25

20

15

10

-5

-10

-15
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04 0.045 0.05
Centerline Distance z [m]

Figura 5.20: Caso no premezclado, comparación de velocidades axia-


les en la línea central entre el mejor modelo RANS y los datos ex-
perimentales.

85
Memoria

La figura 5.20 muestra los resultados de velocidad media axial en la línea central.
A partir de los 15𝑚𝑚 se asemejan mucho los datos de la simulación con los de la
medición, pero en la zona más cercana existe una diferencia bastante grande. Esto se
debe, en parte, a los problemas que ocasionó la medición experimental en estos puntos,
que ya ocurrían en el caso premezclado pero se ven magnificados por la densidad del
combustible. En este sentido, el código Esclapez2014AVBP da unos resultados más
acordes con la velocidad teórica, y se parece más al caso experimental desde los 5𝑚𝑚.

En las figuras 5.21-5.23 se ven las tres componentes axial, radial y tangencial res-
pectivamente de las velocidades medias (a la izquierda) y las RMS (a la derecha) en
función de la distancia radial tomada desde la línea central de la cámara en cada
estación.

Cordier2013EXP Esclapez2014AVBP URANS_15_CG

Station z = 40mm
15
20

10 10

0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 30mm
15
20
10
Mean Axial Velocity [m/s]

10

RMS Axial Velocity [m/s]


0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 20mm
15
20

10 10

0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 10mm
15
20

10 10

0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 5mm
15
20

10 10

0 5

-10 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Radial Distance x [m]

Figura 5.21: Caso no premezclado, comparación de velocidades axia-


les en las estaciones entre el mejor modelo RANS y los datos expe-
rimentales.

En primer lugar, la velocidad media axial se ve sobreestimada en el centro de la


geometría, generando un pico que se corresponde con el chorro central de combustible

86
5. RESULTADOS

debido a su mayor densidad. A partir de 20𝑚𝑚 ya se asemejan más los resultados, pero
la zona de recirculación es más estrecha de lo que debería ser. Ocurre lo mismo con
los resultados de Esclapez2014AVBP, pero con un pico menos pronunciado y adaptán-
dose en una estación anterior (10𝑚𝑚). Las RMS del caso URANS_15_CG consiguen
acercarse de manera aceptable a la tendencia de los resultados experimentales, ex-
ceptuando la misma zona ya nombrada, y subestimando las medidas en las últimas
estaciones, mientras que el AVBP los sobreestima siempre. Aunque los resultados de
AVBP son algo más ajustados, los conseguidos en este proyecto no tienen nada que
envidiar teniendo en cuenta que hay una gran diferencia en el coste computacional.

Cordier2013EXP Esclapez2014AVBP URANS_15_CG

Station z = 40mm
15 10

10

5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 30mm
15 10

10
Mean Radial Velocity [m/s]

RMS Radial Velocity [m/s]


5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 20mm
15 10

10

5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 10mm
15 10

10

5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 5mm
15 10

10

5 5

-5 0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Radial Distance x [m]

Figura 5.22: Caso no premezclado, comparación de velocidades ra-


diales en las estaciones entre el mejor modelo RANS y los datos
experimentales.

En segundo lugar, la velocidad media radial de ambos códigos CFD se ajusta casi
perfectamente en todas las estaciones. En cuanto a las RMS, de nuevo los resultados
del código AVBP son más precisos que los obtenidos en CONVERGE, los primeros
sobreestimando y los segundos subestimando los valores en relación a los resultados

87
Memoria

experimentales. Cabe destacar que la tendencia de la gráfica en la primera estación es


capturada mejor por el caso URANS_15_CG.

Cordier2013EXP Esclapez2014AVBP URANS_15_CG

Station z = 40mm
10
0

-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 30mm
10
Mean Tangential Velocity [m/s]

RMS Tangential Velocity [m/s]


-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 20mm
10
0

-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 10mm
10
0

-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Station z = 5mm
10
0

-10 5

-20
0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05

Radial Distance x [m]

Figura 5.23: Caso no premezclado, comparación de velocidades tan-


genciales en las estaciones entre el mejor modelo RANS y los datos
experimentales.

A continuación, la velocidad media tangencial de ambos códigos CFD también se


ajusta casi perfectamente en todas las estaciones. Incluso en la zona de 5𝑚𝑚, donde
hay una pequeña discrepancia respecto de los resultados experimentales, coinciden los
resultados de ambas simulaciones. Para las RMS, los resultados de las primeras esta-
ciones del caso URANS_15_CG se corresponden mucho mejor con los experimentales,
pero a partir de los 20𝑚𝑚 terminan subestimándolas. momento en el cual el caso Escla-
pez2014AVBP es más fiel a la tendencia de la gráfica experimental, aunque sobreestime
ligeramente los valores.

88
5. RESULTADOS

Cordier2013EXP Esclapez2014AVBP URANS_15_CG

Station z = 22mm
0.6 0.2
0.4
0.1
0.2

0 0
-0.03 -0.02 -0.01 0 0.01 0.02 0.03
Mean CH4 Mass Fraction [-]

Station z = 14mm

RMS CH4 Mass Fraction [-]


0.6 0.2
0.4
0.1
0.2

0 0
-0.03 -0.02 -0.01 0 0.01 0.02 0.03

Station z = 10mm
0.6 0.2
0.4
0.1
0.2

0 0
-0.03 -0.02 -0.01 0 0.01 0.02 0.03

Station z = 6mm
0.6 0.2
0.4
0.1
0.2

0 0
-0.03 -0.02 -0.01 0 0.01 0.02 0.03

Radial Distance x [m]

Figura 5.24: Caso no premezclado, comparación de concentraciones


en las estaciones entre el mejor modelo RANS y los datos experi-
mentales.

Cordier2013EXP Esclapez2014AVBP URANS_15_CG

Station z = 22mm
0.2
0.15

0.1 0.1

0.05

0 0
-0.03 -0.02 -0.01 0 0.01 0.02 0.03
Mean CH4 Mass Fraction [-]

Station z = 14mm
RMS CH4 Mass Fraction [-]

0.2
0.15

0.1 0.1

0.05

0 0
-0.03 -0.02 -0.01 0 0.01 0.02 0.03

Station z = 10mm
0.2
0.15

0.1 0.1

0.05

0 0
-0.03 -0.02 -0.01 0 0.01 0.02 0.03

Station z = 6mm
0.2
0.15

0.1 0.1

0.05

0 0
-0.03 -0.02 -0.01 0 0.01 0.02 0.03

Radial Distance x [m]

Figura 5.25: Figura 5.24 con zoom en la escala para mejor visuali-
zación.

89
Memoria

Finalmente, la concentración de combustible mostrada en las figuras 5.24-5.25 se


ve muy afectada por las velocidades axiales. Como para el caso URANS_15_CG es
mayor de lo esperado hasta los 15𝑚𝑚 aproximadamente, las concentraciones también
lo son de forma exagerada, por lo que se debería tratar de ajustar el modelo para
conseguir unas velocidades axiales más acertadas. Por otro lado, el Esclapez2014AVBP
tiene mucha mejor precisión en las concentraciones debido al mismo motivo, aunque
continúa sobreprediciendo los valores tanto en concentraciones medias como RMS de
las primeras estaciones.

A modo de conclusión es importante destacar que los resultados obtenidos en CON-


VERGE por aproximaciones RANS tienen un gran potencial, ya que se ajustan a las
mediciones experimentales con una precisión más que aceptable en relación a la obte-
nida por las simulaciones LES en AVBP, con una malla muchísimo más pesada y unos
tiempos de simulación excesivamente altos.

5.2.3. Contornos De Velocidad Y Energía Cinética Turbulen-


ta
A continuación se representan los contornos de velocidades y de energía cinética
turbulenta (tke) en el caso RANS seleccionado.

En la figura 5.26, la columna izquierda muestra las velocidades medias, mientras


que la derecha muestra las RMS, y cada componente (axial, radial y tangencial) se
corresponde con una fila.

En la primera gráfica la zona de recirculación central aparece desplazada aguas


abajo, y es más débil ya que alcanza valores negativos de menos valor absoluto que el
caso reactivo. También representa velocidades más altas en una zona mayor a la salida
del inyector, por lo que todavía es necesario ajustar el modelo mejor en cuanto a la
componente axial. Las velocidades radial y tangencial siguen siendo simétricas por el
flujo torbellinado, y se aproximan en gran medida a los resultados que cabe esperar de
dicha estructura. Por otra parte, las RMS axiales tienen valores máximos mayores que
el caso premezclado, lo que indica que hay mayor dispersión en la zona de la entrada
a la cámara, mientras que las radiales y tangenciales tienen valores máximos menores.

Tras mostrar los contornos de velocidades llega el turno de la turbulencia. La figura


5.27 representa el contorno de la energía cinética turbulenta obtenido con las rutinas de
posprocesado en Matlab. Los valores obtenidos son menores que en el caso premezclado,
y la zona de más intensidad ha menguado.

90
5. RESULTADOS

Mean Velocity [m/s] RMS Velocity [m/s]


0 10 20 30 2 4 6 8 10 12
Distance z [m]

0.1 0.1

0.08 0.08

Axial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-5 0 5 2 4 6 8 10

0.1 0.1
Distance z [m]

0.08 0.08

Radial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-20 -10 0 10 20 2 4 6 8

0.1 0.1
Distance z [m]

Tangential

0.08 0.08

0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05
Distance x [m] Distance x [m]

Figura 5.26: Contornos de velocidades del caso no premezclado


URANS_15_CG.

91
Memoria

Turbulent Kinetic Energy


0.1
90

0.09
80
0.08
70
0.07
Distance z [m]

60
0.06

50
0.05

40
0.04

30
0.03

0.02 20

0.01 10

0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05
Distance x [m]

Figura 5.27: Contorno de energía cinética turbulenta del caso no


premezclado URANS_15_CG.

92
Capítulo 6

Conclusiones y trabajos
futuros

A fin de cerrar la memoria, se recogen las conclusiones principales a las que se ha


llegado a lo largo del Trabajo de Fin de Máster y que pueden ser de utilidad para el
desarrollo de trabajos futuros en la misma línea de investigación.

Se ha caracterizado el flujo no reactivo gaseoso premezclado en quemadores LDI


mediante tratamientos URANS (Unsteady Reynolds Averaged Navier-Stokes) y LES
(Large Eddy Simulation) de la turbulencia empleando dos códigos CFD: CONVER-
GE con mallado adaptativo, y OpenFOAM con mallado tradicional. Los resultados
de ambos códigos han sido contrastados y validados con la bibliografía experimental
disponible, quedando de esta manera calibrados los modelos.

Se ha caracterizado el flujo no reactivo gaseoso no premezclado en quemadores


LDI mediante tratamientos URANS (Unsteady Reynolds Averaged Navier-Stokes) de
la turbulencia empleando CONVERGE con mallado adaptativo. Los resultados han
sido contrastados y validados con la bibliografía experimental disponible, allanando el
camino para calibrar los modelos.

La estrategia seguida ha consistido en emplear una solución RANS estacionaria


como punto de partida realista para las siguientes simulaciones, tanto URANS como
LES. Éstas se han mantenido hasta que el flujo ha alcanzado un estado estadísticamente
estable, monitorizando para ello el gasto másico a la salida. A partir de ese momento
se ha comenzado a calcular los promediados temporales y fluctuaciones de las variables
de interés.

Se ha conseguido reproducir satisfactoriamente la topología del flujo no reactivo


y caracterizar las principales estructuras turbulentas formadas en el interior del que-
mador LDI: zona de recirculación central, chorro torbellinado y zona de recirculación
de las esquinas. Esto es un avance importante para estudios posteriores de inyección,

93
Memoria

atomización de spray líquido, mezcla y combustión, ya que al ser procesos transitorios


se ven afectados de forma crítica por estas estructuras.

Las simulaciones del caso premezclado en CONVERGE han reportado muy buenos
resultados, haciendo evidente que el método de mallado adaptativo es una herramienta
potente capaz de reducir los tiempos de simulación manteniendo una precisión adecua-
da, a la altura de un código con mallado tradicional como OpenFOAM. Para el caso no
premezclado también se han obtenido grandes resultados con aproximación URANS,
en comparación a los que ofrecía AVBP (con mayor resolución y aproximación LES),
aunque se deja abierta la puerta para explorar una configuración que capte mejor las
velocidades axiales y, por ende, las concentraciones de combustible en la zona más
cercana a la entrada de la cámara.

Este TFM puede suponer, por tanto, el punto de partida de una investigación
con objetivos más ambiciosos, modelando la totalidad de los fenómenos inherentes
al proceso de inyección de combustible líquido: atomización, evaporación, mezclado e
interacción de las estructuras bifásicas, la combustión y las emisiones contaminantes.

94
Bibliografía

[1] ICAO. ICAO Environmental Report 2016. Cambridge University Press, page 250,
2016.

[2] Philippe Busquin, Pedro Argüelles, Manfred Bischoff, B.A.C. Droste, SirRichardH.
Evans, Walter Kröll, Jean-Luc Lagardère, Alberto Lina, John Lumsden, Denis
Ranque, Søren Rasmussen, Paul Reutlinger, SirRalph Robins, Helena Terho, and
Arne Wittlöw. European aeronautics: a vision for 2020. Air & Space Europe,
3(3-4):16–18, 2001.

[3] Joyce E Penner. Aviation and the Global Atmosphere: a special report of IPCC
Working Groups I and III. page 373, 1999.

[4] IATA. Fact Sheet Industry Statistics, 2018.

[5] Scott C. Herndon, Joanne H. Shorter, Mark S. Zahniser, David D. Nelson, John
Jayne, Robert C. Brown, Richard C. Miake-Lye, Ian Waitz, Phillip Silva, Tho-
mas Lanni, Ken Demerjian, and Charles E. Kolb. NO and NO2 emission ratios
measured from in-use commercial aircraft during taxi and takeoff. Environmental
Science and Technology, 38(22):6078–6084, 2004.

[6] O. Dessens, M. O. Köhler, H. Rogers, R. L. Jones, and J. A. Pyle. Aviation and


climate change. Transport Policy, 34:14–20, 07 2014.

[7] P. Hoor, J. Borken-Kleefeld, D. Caro, O. Dessens, O. Endresen, M. Gauss, V. Gre-


we, D. Hauglustaine, I. S. A. Isaksen, P. Jöckel, J. Lelieveld, G. Myhre, E. Meijer,
D. Olivie, M. Prather, C. Schnadt Poberaj, K. P. Shine, J. Staehelin, Q. Tang,
J. van Aardenne, P. van Velthoven, and R. Sausen. The impact of traffic emissions
on atmospheric ozone and oh: results from quantify. Atmospheric Chemistry and
Physics, 9(9):3113–3136, 2009.

[8] D. W. Bahr, F. Culick, M.V. Heitor, and J.H. Whitelaw. Unsteady combustion.
In Aircraft Turbine Engine NOx Emission Abatement, pages 243–264. Springer,
Dordrecht, 1996.

[9] EASA. Notice of Proposed Amendment 2017-01. Implementation of the CAEP/10


amendments on climate change, emissions and noise. pages 1–338, 2018.
95
BIBLIOGRAFÍA

[10] A Seaton, W MacNee, K Donaldson, and D Godden. Particulate air pollution and
acute health effects. Lancet, 345(8943):176–178, 1995.

[11] Arthur H. Lefebvre and Dilip R. Ballal. Gas turbine combustion: alternative fuels
and emissions. Taylor & Francis, Boca Raton, FL, 3rd editio edition, 2010.

[12] D. Dewanji. Flow Characteristics in Lean Direct Injection Combustors. 2012.

[13] K. K. Rink and A. H. Lefebvre. The influences of fuel composition and spray
characteristics on nitric oxide formation. Combustion Science and Technology,
68(1-3):1–14, 1989.

[14] G Leonard and S Correa. Second asme fossil fuel combustion symposium. AS-
ME/PD, 30:69–74, 1990.

[15] Chi-Ming Lee, Kathleen M. Tacina, and Changlie Wey. High pressure low NOx
emissions research: Recent progress at NASA Glenn Research Center. pages 1–8,
2007.

[16] S. Mosier and R. Pierce. Advanced combustion systems for stationary gas turbine
engines: Volume i. review and preliminary evaluation., 1980.

[17] G. S. Samuelsen, J. Brouwer, M. A. Vardakas, and J. D. Holdeman. Experimental


and modeling investigation of the effect of air preheat on the formation of nox in
an rql combustor. Heat and Mass Transfer, 49(2):219–231, Feb 2013.

[18] D. W. Bahr. Technology for the design of high temperature rise combustors.
Journal of Propulsion and Power, 3(2):179–186, Mar 1987.

[19] B. L. Koff. Aircraft gas turbine emissions challenge, 1993.

[20] Zhuohui J. He, Kristin Kopp-Vaughan, Changlie Wey, Clarence T. Chang, Al-
bert K. Cheung, Chi-Ming Lee, and Angela D. Surgenor. chapter Emission Cha-
racteristics of A P&W Axially Staged Sector Combustor. AIAA SciTech Forum.
American Institute of Aeronautics and Astronautics, Jan 2016. 0.

[21] P. E. Sabla, J. R. Taylor, and D. J. Gauntner. Design and development of the


combustor inlet diffuser for the nasa/ge energy efficient engine, 1981.

[22] A. Klein. Characteristics of combustor diffusers. Progress in Aerospace Sciences,


31(3):171 – 271, 1995.

[23] J. Cai. Aerodynamics of lean direct injection combustor with multi-swirler arrays.
PhD thesis, University of Cincinnati, 2006.

[24] H. S. Alkabie, G. E. Andrews, and N. T. Ahmad. Lean low nox primary zones
using radial swirlers, 1988.

96
BIBLIOGRAFÍA

[25] H. S. Alkabie and G. E. Andrews. Ultra low nox emissions for gas and liquid fuels
using radial swirlers, 1989.

[26] H. S. Alkabie and G. E. Andrews. Radial swirlers with peripheral fuel injection
for ultra-low nox emissions, 1990.

[27] H. S. Alkabie, G. E. Andrews, and M. N. Kim. An ultra low nox pilot combustor
for staged low nox combustion. 11th ISABE-1993-7020, 1:215–225, 1993.

[28] Waldemar Lazik, Thomas Dörr, and Sebastian Bake. Low nox combustor deve-
lopment for the e3e core engine demonstrator, 09 2007.

[29] Daniel A. Nickolaus, D. Scott Crocker, David L. Black, and Clifford E. Smith.
Development of a lean direct fuel injector for low emission aero gas turbines, 2002.

[30] S. W. Shaffar and G. S. Samuelsen. A liquid fueled, lean burn, gas turbine com-
bustor injector. 139:41–57, 10 1998.

[31] T. Terasaki. Lean non-premixed combustion for low-nox gas turbine combustor.
Proceedings of the 1995 Yokohama International Gas Turbine Congress(II), pages
353–358, 1995.

[32] Robert Tacina. Low NOx Potential of Gas Turbine Engines. 28th Aerospace
Sciences Meeting, page 20, 1990.

[33] Christopher M. Heath, Robert C. Anderson, Randy J. Locke, and Yolanda R.


Hicks. Optical characterization of a multipoint lean direct injector for gas turbine
combustors: Velocity and fuel drop size measurements, 2010.

[34] Robert Tacina, Chien-Pei Mao, and Changlie Wey. Experimental investigation
of a multiplex fuel injector module with discrete jet swirlers for low emission
combustors. 09 2004.

[35] R.R. Tacina, P. Lee, and C. Wey. A lean direct injection combustor using a 9
point swirl-venturi fuel injector, 2005.

[36] D. Dewanji and A. G. Rao. Spray combustion modeling in lean direct injec-
tion combustors, part II: Multi-point LDI. Combustion Science and Technology,
187(4):558–576, 2015.

[37] A. K. Gupta, D. G. Lilley, and N. Syred. Swirl flows. 1984.

[38] J.M. Beér and N.A. Chigier. Combustion aerodynamics. Fuel and energy science
series. Applied Science Publishers Ltd, 1972.

[39] Erol Kilik. The influence of swirler design parameters on the aerodynamics of
downstream recirculation region. PhD thesis, 1976.

97
BIBLIOGRAFÍA

[40] Robert Tacina, Jun Cai, and San-Mou Jeng. The Structure of a Swirl-Stabilized
Reacting Spray Issued From an Axial Swirler. 43rd AIAA Aerospace Sciences
Meeting & Exhibit, (January), 2005.

[41] K. O. Smith, F. R. Kurzynske, and L. C. Angelo. Experimental Evaluation of Fuel


Injection Configurations for a Lean-Premixed Low NOx Gas Turbine Combustor.
ASME Journal of Engineering for Gas Turbines and Power, pages 1–9, 1987.

[42] L. H. Cowell and K. O. Smith. Development of a liquid-fueled, lean-premixed gas


turbine combustor, 1992.

[43] S. Etemad and B. C. Forbes. Cfd modeling of a gas turbine combustor air swirler
effect, computational fluid dynamics in aero-propulsion, 1995.

[44] Ashraf A. Ibrahim and Milind A. Jog. Nonlinear breakup model for a liquid
sheet emanating from a pressure-swirl atomizer. Journal of Engineering for Gas
Turbines and Power, 129(4):945–953, Jan 2007.

[45] J. Ebner, P. Schober, O. Schafer, R. Koch, and S. Wittig . Modelling of shear-


driven liquid wall films: effect of accelerated air flow on the film flow propagation.
Progress in Computational Fluid Dynamics, an International Journal, 4(3-5):183–
190, 2004.

[46] John D Anderson. Computational Fluid Dynamics: The Basics with Applications,
1995.

[47] Hernan Tinoco, Hans Lindqvist, Wiktor Frid, and Kraftgrupp Ab. Numerical
Simulation of Industrial Flows. 1990.

[48] Henk Kaarle Versteeg and Weeratunge Malalasekera. An introduction to compu-


tational fluid dynamics: the finite volume method. Pearson Education, 2007.

[49] H. Tennekes and J.L. Lumley. A First Course in Turbulence. MIT Press, 1972.

[50] P. Bradshaw, T. Cebeci, and J. H. Whitelaw. Engineering calculation methods


for turbulent flow. NASA STI/Recon Technical Report A, 82, 1981.

[51] B.E. Launder and B.I. Sharma. Application of the energy-dissipation model of
turbulence to the calculation of flow near a spinning disc. Letters in Heat and
Mass Transfer, 1(2):131 – 137, 1974.

[52] W.P. Jones and J.H. Whitelaw. Calculation methods for reacting turbulent flows:
A review. Combustion and Flame, 48:1 – 26, 1982.

[53] B. E. Launder, G. J. Reece, and W. Rodi. Progress in the development of a


reynolds-stress turbulence closure, 1975.

98
BIBLIOGRAFÍA

[54] Wolfgang Rodi. Turbulent models and their application in hydraulics-a state of
art review. 12 1980.

[55] K. Hanjalic. Will rans survive les?: A view of perspectives. Journal of Fluids
Engineering, 127(5):831–839, Sep 2005.

[56] Stefan H Johansson, Lars Davidson, and Erik Olsson. Numerical simulation of vor-
tex shedding past triangular cylinders at high reynolds number using ak-𝜀 turbu-
lence model. International Journal for Numerical Methods in Fluids, 16(10):859–
878, 1993.

[57] Sven Perzon and Lars Davidson. On CFD and transient flow in vehicle aerodyna-
mics. SAE World Congress, (724):2000–01–0873, 2000.

[58] Gopal Patnaik, Jay P Boris, Theodore R Young, and Fernando F Grinstein. Lar-
ge scale urban contaminant transport simulations with miles. Journal of Fluids
Engineering, 129(12):1524–1532, 2007.

[59] Joel H. Ferziger. Large eddy numerical simulations of turbulent flows. AIAA
Journal, 15(9):1261–1267, Sep 1977.

[60] J. Smagorinsky. General circulation experiments with the primitive equations.


Monthly Weather Review, 91(3):99–164, 1963.

[61] J.O. Hinze. Turbulence. McGraw-Hill classic textbook reissue series. McGraw-Hill,
1975.

[62] Massimo Germano, Ugo Piomelli, Parviz Moin, and William H. Cabot. A dyna-
mic subgrid?scale eddy viscosity model. Physics of Fluids A: Fluid Dynamics,
3(7):1760–1765, jul 1991.

[63] S.V Patankar and D.B Spalding. A calculation procedure for heat, mass and
momentum transfer in three-dimensional parabolic flows. International Journal
of Heat and Mass Transfer, 15(10):1787–1806, 1972.

[64] Pedro Martí Gómez-Aldaraví. Development of a computational model for a si-


multaneous simulation of internal flow and spray break-up of the Diesel injection
process. PhD thesis, 2014.

[65] R.I Issa. Solution of the implicitly discretised fluid flow equations by operator-
splitting. Journal of Computational Physics, 62(1):40 – 65, 1986.

[66] Hrvoje Jasak. Error analysis and estimation for the finite volume method with
applications to fluid flows. 1996.

99
BIBLIOGRAFÍA

[67] H. G. Weller, G. Tabor, H. Jasak, and C. Fureby. A tensorial approach to compu-


tational continuum mechanics using object-oriented techniques. Computers in
Physics, 12(6):620–631, 1998.

[68] J Frenillot. Etude phenomenologique des processus d’allumage et de stabilisation


dans les chambres de combustion turbulente swirlees. 2011.

[69] M. Cordier, A. Vandel, G. Cabot, B. Renou, and A. M. Boukhalfa. Laser-induced


spark ignition of premixed confined swirled flames. Combustion Science and Tech-
nology, 185(3):379–407, 2013.

[70] Matthieu Cordier. Allumage et propagation de flamme dans les écoulements for-
tement swirlés : études expérimentales et numériques. PhD thesis, 2013.

[71] C J Greenshields. OpenFOAM, July 2018.

[72] Convergent Science. Converge 2.4 manual, November 2017.

[73] Convergent Science. Converge studio 2.4 manual, December 2017.

[74] Convergent Science. Advanced converge cfd training 2.4 gas turbine combustion,
December 2017.

[75] NJDEP. Laboratory Quality Assurance and Quality Control Data Quality Assess-
ment and Data Usability Evaluation. (April), 2014.

[76] Lucas Esclapez. Numerical study of ignition and inter-sector flame propagation
in gas turbine. PhD thesis, Institut National Polytechnique de Toulouse (INP
Toulouse), 2015.

[77] David Barré, Matthias Kraushaar, Gabriel Staffelbach, Vincent Moureau, and
Laurent Y.M. Gicquel. Compressible and low Mach number LES of a swirl expe-
rimental burner. 3rd INCA Colloquim, 341(1-2):277–287, 2013.

[78] David Barre. Simulation Numerique De L’Allumage Dans Les Chambres De Com-
bustion Aeronautiques. PhD thesis, 2014.

[79] David Barré, Lucas Esclapez, Matthieu Cordier, Eleonore Riber, Bénédicte Cue-
not, Gabriel Staffelbach, Bruno Renou, Alexis Vandel, Laurent Y.M. Gicquel, and
Gilles Cabot. Flame propagation in aeronautical swirled multi-burners: Experi-
mental and numerical investigation. Combustion and Flame, 161(9):2387–2405,
2014.

[80] PAUL BILLANT, JEAN-MARC CHOMAZ, and PATRICK HUERRE. Experi-


mental study of vortex breakdown in swirling jets. Journal of Fluid Mechanics,
376:183?219, 1998.

100
BIBLIOGRAFÍA

[81] O Lucca-Negro and T O’Doherty. Vortex breakdown: a review. Progress in Energy


and Combustion Science, 27(4):431 – 481, 2001.

[82] S Leibovich. The structure of vortex breakdown. Annual Review of Fluid Mecha-
nics, 10(1):221–246, 1978.

[83] Nicholas Syred. A review of oscillation mechanisms and the role of the precessing
vortex core (pvc) in swirl combustion systems. Progress in Energy and Combustion
Science, 32(2):93 – 161, 2006.

[84] G. Haller. An objective definition of a vortex. Journal of Fluid Mechanics, 525:1–


26, 2005.

101
Apéndices
Apéndice A

Perfiles y contornos de
velocidades y energía cinética
turbulenta

A.1. CASOS PREMEZCLADOS

Turbulent Kinetic Energy


0.1

0.09 30

0.08
25
0.07
Distance z [m]

0.06 20

0.05
15
0.04

0.03 10

0.02
5
0.01

0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05
Distance x [m]

Figura A.1: Contorno de energía cinética turbulenta del caso pre-


mezclado LES_17_OF.

105
Apéndices

Mean Velocity [m/s] RMS Velocity [m/s]


0 10 20 2 4 6 8
Distance z [m]

0.1 0.1

0.08 0.08

Axial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-5 0 5 2 4 6

0.1 0.1
Distance z [m]

0.08 0.08

Radial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-20 -10 0 10 20 2 4 6 8

0.1 0.1
Distance z [m]

Tangential

0.08 0.08

0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05
Distance x [m] Distance x [m]

Figura A.2: Contornos de velocidades del caso premezclado


LES_17_OF.

106
A. PERFILES Y CONTORNOS DE VELOCIDADES Y ENERGÍA CINÉTICA
TURBULENTA

Turbulent Kinetic Energy


0.1

50
0.09

45
0.08
40
0.07
35
Distance z [m]

0.06
30

0.05
25

0.04
20

0.03
15

0.02 10

0.01 5

0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05
Distance x [m]

Figura A.3: Contorno de energía cinética turbulenta del caso pre-


mezclado RANS_17_CG.

107
Apéndices

Mean Velocity [m/s] RMS Velocity [m/s]


0 10 20 2 4 6
Distance z [m]

0.1 0.1

0.08 0.08

Axial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-5 0 5 0 2 4 6

0.1 0.1
Distance z [m]

0.08 0.08

Radial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-20 -10 0 10 20 2 4 6

0.1 0.1
Distance z [m]

Tangential

0.08 0.08

0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05
Distance x [m] Distance x [m]

Figura A.4: Contornos de velocidades del caso premezclado


RANS_17_CG.

108
A. PERFILES Y CONTORNOS DE VELOCIDADES Y ENERGÍA CINÉTICA
TURBULENTA

Turbulent Kinetic Energy


0.1
30

0.09

25
0.08

0.07
20
Distance z [m]

0.06

0.05 15

0.04

10
0.03

0.02
5

0.01

0
-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05
Distance x [m]

Figura A.5: Contorno de energía cinética turbulenta del caso pre-


mezclado URANS_18_OF.

109
Apéndices

Mean Velocity [m/s] RMS Velocity [m/s]


0 10 20 2 4 6 8
Distance z [m]

0.1 0.1

0.08 0.08

Axial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-5 0 5 2 4 6 8

0.1 0.1
Distance z [m]

0.08 0.08

Radial
0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05

-20 -10 0 10 20 2 4 6

0.1 0.1
Distance z [m]

Tangential

0.08 0.08

0.06 0.06

0.04 0.04

0.02 0.02

0 0
-0.05 0 0.05 -0.05 0 0.05
Distance x [m] Distance x [m]

Figura A.6: Contornos de velocidades del caso premezclado


URANS_18_OF.

110
Apéndice B

Código Matlab para


posprocesar resultados

B.1. LANZA

codigo/lanza.m
% C a r l o s Moreno Montagud 21/02/2018
%
% Folder s t r u c t u r e :
% \ ’ code ’ \ ’ geometry ’ \ ’ i n j e c t i o n ’ \ ’ f l u i d ’ \ ’ i n l e t T y p e ’ \ c a s e s \ ’
case ’ \ ’ f o l d e r ’ \
% \ mats \
% \ Literature \ " \ " \ " \ " \ cases \ ’
author ’ \
% \ mats \
% \ Results \ " \ " \ " \ " \’
solveMode ’ \ ’ code ’ \
%
% I m p o r t i n g CONVERGE:
% l a n z a .m
% − D e f i n e m i l i S e c (3 d i g i t s ) m i l i S e c ={’___’ } ;
% − Void mesh mesh ={ ’ ’};
% i m p o r t P r o p e r t i e s .m
% − Name o f c o l f i l e s c o l _ f i l e s ={’ v e l o c i t i e s ’ , ’
stress ’ , ’ species ’};
%
% I m p o r t i n g OpenFOAM:
% − T r a n s i e n t c a s e s ’ i n s t a n t f o l d e r must c o n t a i n a t l e a s t 3
digits after

111
Apéndices

% the point ’ case ’ / 2 0 0 0 0 . 0 6 0


% − C o o r d i n a t e s f i l e s ccx , ccy and c c z must be p l a c e d i n 0
folder
% ’ case ’ / 0 / c c x
% l a n z a .m
% − Mandatory mesh mesh={’6M’ } ;
%
% Importing L i t e r a t u r e :
% l a n z a .m
% − Just 1 f i l e a u t h o r ={’XXX’ } ;
% − Void mesh mesh ={ ’ ’};
% i m p o r t P r o p e r t i e s .m
% − DON’T import s t r e s s f i l e col_files ={... , ’ stress
’ ,...}

%% S c r i p t
clearvars ;
clc ;

addpath ( genpath ( ’ f u n c t i o n s ’ ) ) ;

%% I n i t i a l i z e v a r i a b l e s
% Case v a r i a b l e s
c a s e s . code = { ’OpenFOAM ’ ; ’OpenFOAM ’ ; ’CONVERGE’ ; ’CONVERGE’ } ; %
’CONVERGE’ , ’OpenFOAM’ , ’ L i t e r a t u r e ’
c a s e s . geometry = { ’ KIAI ’ } ; % ’NASA’ , ’ KIAI ’
c a s e s . solveMode = { ’RANS ’ ; ’LES ’ ; ’RANS ’ ; ’LES ’ } ; % ’RANS’ , ’LES ’
c a s e s . i n j e c t i o n = { ’ premixed ’ } ; % ’ nonPremixed ’ , ’ premixed ’
c a s e s . f l u i d = { ’ gas ’ } ; % ’ gas ’ , ’ l i q u i d ’
c a s e s . i n l e t T y p e = { ’ nonReactive ’ } ; % ’ nonReactive ’ , ’ r e a c t i v e ’
c a s e s . numCase = { ’ 3 ’ ; ’ 2 ’ ; ’ 17 ’ ; ’ 3 ’ } ;
c a s e s . m i l i S e c = { ’ 119 ’ ; ’ 128 ’ ; ’ 433 ’ ; ’ 215 ’ } ; % ’ ’ , ’ 1 6 5 ’ , ’ 1 8 5 ’
c a s e s . mesh = { ’ 17M’ ; ’ 17M’ ; ’ ’ ; ’ ’ } ; % ’ ’ , ’6M’ , ’17M’
c a s e s . author = { ’ Cordier2013EXP ’ } ; % ’ JunCai ’ , ’ PatelMenon ’ , ’
Cordier2013EXP ’ , ’ Esclapez2014AVBP ’

% Post−p r o c e s s i n g f l a g s
f l a g s . plot_flag = true ;

% Import v a r i a b l e s

112
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

import = i m p o r t P r o p e r t i e s ( ) ;

% Plot variables
plotting = plotProperties () ;

% Path names
names = path_names ( c a s e s , p l o t t i n g . l e g e n d _ f l a g s ) ;

%% Load c a s e s
[ p l o t t i n g .EXP, p l o t t i n g . SIM ] = l o a d C a s e s ( names , import , f l a g s ) ;

%% Post−p r o c e s s i n g
i f flags . plot_flag

% Variables
p l o t t i n g . legend_auto_exp = names . legend_exp ;
p l o t t i n g . legend_auto_sim = names . legend_sim ;
p l o t t i n g . r e s u l t s _ f o l d e r = names . r e s u l t s _ f o l d e r ;

% Plot
num_comp = p l o t C a s e ( p l o t t i n g ) ;
end

restoredefaultpath ;

B.2. IMPORTPROPERTIES

codigo/importProperties.m
% 16/05/2018
% C a r l o s Moreno Montagud

% import . f i l e s r e f e r s t o t h e name o f t h e f i l e s . c o l e x p o r t e d
from CONVERGE.
% import . ∗ . v a r i a b l e s r e f e r s t o t h e v a r i a b l e s you can o b t a i n
from t h a t f i l e .
% import . ∗ . f i l e _ e n d r e f e r s t o t h e f i n a l p a r t o f t h e f i l e n a m e
where t h e d a t a
% w i l l be read when i m p o r t i n g EXP f i l e .
% import . ∗ . p l o t _ t y p e r e f e r s t o t h e way o f i m p o r t i n g and
showing t h e
113
Apéndices

% i n f o r m a t i o n : a s i n g l e l i n e , many s t a t i o n s a l o n g z a x i s or
contours .
% import . ∗ . ∗ . s t a t i s t i c i s i g n o r e d when i m p o r t i n g OpenFOAM c a s e
.
%
% The r e s t o f s u b s t r u c t u r e s are s e l f −e x p l a i n e d by name .
% Unused v a r i a b l e s w i l l be s k i p p e d so t h e s c r i p t won ’ t r e t u r n
errors , but
% can be commented t o s a v e some memory . Don ’ t d e l e t e them as
t h e y are good
% e x a m p les f o r new v a r i a b l e s and s t r u c t u r e s .

function import = i m p o r t P r o p e r t i e s ( )
%% General
% Geometry and meshing p r o p e r t i e s
import . b a s e _ s i z e = 0 . 0 0 3 ; % [m]
import .AMR = 3 ; % l e v e l o f r e f i n e m e n t
import . x l i m s = [ −0.05 0 . 0 5 ] ; % cc w i d t h [m]
import . y l i m s = [ −0.05 0 . 0 5 ] ; % cc h e i g h t [m]
% import . z l i m s = [ ] ;

%%CONVERGE f i l e s
import . c o l _ f i l e s = { ’ v e l o c i t i e s ’ , ’ s t r e s s ’ } ; % ’ v e l o c i t i e s ’ , ’
stress ’ , ’ species ’
import . o u t _ f i l e s = { ’ monitor ’ } ;

% Import v a r i a b l e s
import . v e l o c i t i e s _ f i l e . v a r i a b l e s = { ’ v e l o c i t i e s ’ , ’ t k e ’ } ;
import . s t r e s s _ f i l e . v a r i a b l e s = { ’ s t r e s s ’ } ;
import . s p e c i e s _ f i l e . v a r i a b l e s = { ’ s p e c i e s ’ } ;

import . m o n i t o r _ f i l e . v a r i a b l e s = { ’ p r e s s u r e ’ } ;
import . m o n i t o r _ f i l e . f s = 1 0 0 0 0 ; %
%import . m o n i t o r _ f i l e . p o i n t s = 2 ; % % % % % % %

%% OpenFOAM f i l e s
import . c r d _ f i l e s = { ’ ccx ’ , ’ ccy ’ , ’ c c z ’ } ;
import . v a r _ f i l e s = { ’UMean ’ , ’ UPrime2Mean ’ } ;

% Import v a r i a b l e s

114
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

import . UMean . v a r i a b l e s = { ’ v e l o c i t i e s ’ } ;
import . UMean . numCols = 3 ;
import . UMean . impCols = [ 3 1 2 ] ; % a x i a l , r a d i a l , t a n g e n t i a l (
in order )
import . UPrime2Mean . v a r i a b l e s = { ’ v e l o c i t i e s ’ , ’ t k e ’ } ;
import . UPrime2Mean . numCols = 6 ;
import . UPrime2Mean . impCols = [ 6 1 4 ] ; % a x i a l , r a d i a l ,
t a n g e n t i a l ( in order )

%%
% Velocities
import . v e l o c i t i e s . f i l e _ e n d = { ’ v e l o c i t y ’ } ;
import . v e l o c i t i e s . plot_type = { ’ c e n t e r l i n e ’ , ’ s t a t i o n s ’ , ’
contours ’ } ; % ’ c e n t e r l i n e ’ , ’ s t a t i o n s ’ , ’ contours ’
% Centerline
import . v e l o c i t i e s . c e n t e r l i n e . p l a n e = { ’ z ’ } ; %
import . v e l o c i t i e s . c e n t e r l i n e . s t a t i s t i c = { ’ mean ’ } ; % ’ mean
’ , ’RMS’
import . v e l o c i t i e s . c e n t e r l i n e . d i r e c t i o n = { ’ a x i a l ’ } ; % ’
axial ’ , ’ radial ’ , ’ tangential ’
import . v e l o c i t i e s . c e n t e r l i n e . l i m i t s = [ 0 0 . 0 5 ] ; % [ 0 0 . 0 5 ]
% Stations
import . v e l o c i t i e s . s t a t i o n s . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’
import . v e l o c i t i e s . s t a t i o n s . s t a t i s t i c = { ’ mean ’ , ’RMS ’ } ; % ’
mean ’ , ’RMS’
import . v e l o c i t i e s . s t a t i o n s . d i r e c t i o n = { ’ a x i a l ’ , ’ r a d i a l ’ , ’
tangential ’ }; % ’ axial ’ , ’ radial ’ , ’ tangential ’
import . v e l o c i t i e s . s t a t i o n s . s t a t i o n s = [ 5 10 20 30 4 0 ] ; %
[ 5 15 29 46 76 9 2 ] , [ 5 10 20 30 4 0 ]
% Contours
import . v e l o c i t i e s . c o n t o u r s . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’
import . v e l o c i t i e s . c o n t o u r s . s t a t i s t i c = { ’ mean ’ , ’RMS ’ } ; % ’
mean ’ , ’RMS’
import . v e l o c i t i e s . c o n t o u r s . d i r e c t i o n = { ’ a x i a l ’ , ’ r a d i a l ’ , ’
tangential ’ }; % ’ axial ’ , ’ radial ’ , ’ tangential ’
import . v e l o c i t i e s . c o n t o u r s . l i m i t s = [ 0 0 . 1 ] ; % [ −0.05 0 . 0 5
0 0.1]

% Tke
import . t k e . f i l e _ e n d = { ’ t u r b u l e n t ’ , ’ k i n e t i c ’ , ’ e n e r g y ’ } ;

115
Apéndices

import . t k e . plot_type = { ’ c o n t o u r s ’ } ; % ’ c e n t e r l i n e ’ , ’ s t a t i o n s
’ , ’ contours ’
%Contours
import . t k e . c o n t o u r s . p l a n e = { ’ xz ’ } ;
import . t k e . c o n t o u r s . s t a t i s t i c = { ’RMS ’ } ; % ’RMS’
import . t k e . c o n t o u r s . d i r e c t i o n = { ’ a x i a l ’ , ’ r a d i a l ’ , ’
tangential ’ }; % ’ axial ’ , ’ radial ’ , ’ tangential ’
import . t k e . c o n t o u r s . l i m i t s = [ 0 0 . 1 ] ; % [ −0.05 0 . 0 5 0 0 . 1 ]

% Stress
import . s t r e s s . f i l e _ e n d = { ’ s t r e s s ’ } ;
import . s t r e s s . plot_type = { ’ c o n t o u r s ’ } ; % ’ c e n t e r l i n e ’ , ’
s t a t i o n s ’ , ’ contours ’
% Contours
import . s t r e s s . c o n t o u r s . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’
import . s t r e s s . c o n t o u r s . d i r e c t i o n = { ’ s11 ’ , ’ s12 ’ , ’ s13 ’ , ’ s22
’ , ’ s23 ’ , ’ s33 ’ } ; % ’ s11 ’ , ’ s12 ’ , ’ s13 ’ . . .
import . s t r e s s . c o n t o u r s . l i m i t s = [ 0 . 0 0 1 0 . 1 ] ; % [ −0.05 0 . 0 5
0 0.1]

% Species
import . s p e c i e s . f i l e _ e n d = { ’ mass ’ , ’ f r a c t i o n ’ } ;
import . s p e c i e s . plot_type = { ’ s t a t i o n s ’ } ; % ’ c e n t e r l i n e ’ , ’
s t a t i o n s ’ , ’ contours ’
% Stations
import . s p e c i e s . s t a t i o n s . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’
import . s p e c i e s . s t a t i o n s . s t a t i s t i c = { ’ mean ’ , ’RMS ’ } ; % ’
mean ’ , ’RMS’
import . s p e c i e s . s t a t i o n s . d i r e c t i o n = { ’CH4 ’ } ; %
import . s p e c i e s . s t a t i o n s . s t a t i o n s = [ 6 10 14 2 2 ] ; % [ 6 10
14 2 2 ]

end

B.3. PLOTPROPERTIES

codigo/plotProperties.m
% 16/05/2018
% C a r l o s Moreno Montagud

116
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

function p l o t t i n g = p l o t P r o p e r t i e s ( )
%% F l a g s
plotting . lines_flag = true ;
plotting . stations_flag = true ;
plotting . contours_flag = true ;
p l o t t i n g . monitor_flag = f a l s e ;

p l o t t i n g . compare_flag = t r u e ;

%% Save
plotting . save_flag = true ;
p l o t t i n g . save_format = { ’ pdf ’ } ; % ’ pdf ’ ’ epsc ’ ’ png ’ t i f f ’

%% Legend
p l o t t i n g . legend_mode = ’ manual ’ ; % ’ auto ’ ’ manual ’
%%%%%%%%%%%%%%%%%%%%%%%%%
plotting . legend_flags = [1 0 0 0 1 1 1 0 ] ; % boolean values [
KR NP G NR X XXX CG 6M]
p l o t t i n g . legend_manual_exp = { ’ Cordier2013EXP ’ } ;
p l o t t i n g . legend_manual_sim = { ’URANS_18_OF ’ , ’LES_17_OF ’ , ’
RANS_17_CG ’ , ’LES_3_CG ’ } ;

%% C e n t e r l i n e
p l o t t i n g . c e n t e r l i n e . type = { ’ v e l o c i t i e s ’ } ;

p l o t t i n g . c e n t e r l i n e . v e l o c i t i e s . plane = { ’ z ’ };
p l o t t i n g . c e n t e r l i n e . v e l o c i t i e s . s t a t i s t i c = { ’ mean ’ } ;
plotting . centerline . v e l o c i t i e s . directions = { ’ axial ’ };
plotting . centerline . v e l o c i t i e s . file_end = { ’ velocity ’ };
p l o t t i n g . c e n t e r l i n e . v e l o c i t i e s . y_units = ’ [m/ s ] ’ ;
%p l o t t i n g . c e n t e r l i n e . v e l o c i t i e s . a s p e c t _ r a t i o = [ 5 1 1 ] ;
p l o t t i n g . c e n t e r l i n e . v e l o c i t i e s . l i m i t s . mean . a x i a l = [ 0 0 . 0 5 −15
3 5 ] ; % [ 0 0 . 0 5 −15 3 5 ] % % % % % %

%% S t a t i o n s
p l o t t i n g . s t a t i o n s . type = { ’ v e l o c i t i e s ’ } ; % ’ v e l o c i t i e s ’ , ’
species ’

p l o t t i n g . s t a t i o n s . v e l o c i t i e s . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’

117
Apéndices

p l o t t i n g . s t a t i o n s . v e l o c i t i e s . s t a t i s t i c = { ’ mean ’ , ’RMS ’ } ; % ’
i n s t ’ , ’ mean ’ , ’RMS’
plotting . stations . velocities . directions = { ’ axial ’ , ’ radial ’ , ’
tangential ’ }; % ’ axial ’ , ’ radial ’ , ’ tangential ’
p l o t t i n g . s t a t i o n s . v e l o c i t i e s . s t a t i o n s = [ 5 10 20 30 4 0 ] ; % [ 5
15 29 46 76 9 2 ] , [ 5 10 20 30 4 0 ]
plotting . stations . v e l o c i t i e s . file_end = { ’ velocity ’ };
p l o t t i n g . s t a t i o n s . v e l o c i t i e s . y_units = ’ [m/ s ] ’ ;
%p l o t t i n g . s t a t i o n s . v e l o c i t i e s . a s p e c t _ r a t i o = [ 5 1 1 ] ;
p l o t t i n g . s t a t i o n s . v e l o c i t i e s . l i m i t s . x l i m i t = [ −0.05 0 . 0 5 ] ;
p l o t t i n g . s t a t i o n s . v e l o c i t i e s . l i m i t s . mean . a x i a l = [ −10 2 5 ] ;
p l o t t i n g . s t a t i o n s . v e l o c i t i e s . l i m i t s . mean . r a d i a l = [−5 1 5 ] ;
p l o t t i n g . s t a t i o n s . v e l o c i t i e s . l i m i t s . mean . t a n g e n t i a l = [ −25 5 ] ;
p l o t t i n g . s t a t i o n s . v e l o c i t i e s . l i m i t s .RMS. a x i a l = [ 0 1 6 ] ;
p l o t t i n g . s t a t i o n s . v e l o c i t i e s . l i m i t s .RMS. r a d i a l = [ 0 1 0 ] ;
p l o t t i n g . s t a t i o n s . v e l o c i t i e s . l i m i t s .RMS. t a n g e n t i a l = [ 0 1 0 ] ;

p l o t t i n g . s t a t i o n s . s p e c i e s . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’
p l o t t i n g . s t a t i o n s . s p e c i e s . s t a t i s t i c = { ’ mean ’ , ’RMS ’ } ; % ’ mean
’ , ’RMS’
p l o t t i n g . s t a t i o n s . s p e c i e s . d i r e c t i o n s = { ’CH4 ’ } ; %
p l o t t i n g . s t a t i o n s . s p e c i e s . s t a t i o n s = [ 6 10 14 2 2 ] ; % [ 6 10 14
22]
p l o t t i n g . s t a t i o n s . s p e c i e s . f i l e _ e n d = { ’ mass ’ , ’ f r a c t i o n ’ } ;
p l o t t i n g . s t a t i o n s . s p e c i e s . y_units = ’ [ −] ’ ;
%p l o t t i n g . s t a t i o n s . s p e c i e s . a s p e c t _ r a t i o = [ 5 1 1 ] ;
p l o t t i n g . s t a t i o n s . s p e c i e s . l i m i t s . x l i m i t = [ −0.03 0 . 0 3 ] ;
p l o t t i n g . s t a t i o n s . s p e c i e s . l i m i t s . mean . CH4 = [ 0 0 . 1 5 ] ;
p l o t t i n g . s t a t i o n s . s p e c i e s . l i m i t s .RMS. CH4 = [ 0 0 . 2 0 ] ;

%% Contours
p l o t t i n g . c o n t o u r s . type = { ’ v e l o c i t i e s ’ , ’ t k e ’ , ’ s t r e s s ’ } ; % ’
v e l o c i t i e s ’ , ’ tke ’ , ’ s t r e s s ’ , ’ yplus ’

p l o t t i n g . c o n t o u r s . v e l o c i t i e s . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’
p l o t t i n g . c o n t o u r s . v e l o c i t i e s . s t a t i s t i c = { ’ mean ’ , ’RMS ’ } ; % ’
mean ’ , ’RMS’
plotting . contours . v e l o c i t i e s . d i r e c t i o n s = { ’ axial ’ , ’ r a d i a l ’ , ’
tangential ’ }; % ’ axial ’ , ’ radial ’ , ’ tangential ’
plotting . contours . v e l o c i t i e s . file_end = ’ v e l o c i t y ’ ;

118
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

plotting . contours . v e l o c i t i e s . y_units = ’ [m/ s ] ’ ;


plotting . contours . v e l o c i t i e s . title_end = ’ Velocity ’ ;
plotting . contours . v e l o c i t i e s . l i m i t s = [ −0.05 0 . 0 5 0 0 . 1 ] ; %
[ −0.05 0 . 0 5 0 0 . 1 ]
plotting . contours . v e l o c i t i e s . aspect_ratio = [1 1 1 ] ;

p l o t t i n g . c o n t o u r s . t k e . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’
p l o t t i n g . contours . tke . file_end = ’ tke ’ ;
p l o t t i n g . c o n t o u r s . t k e . y_units = ’ [ −] ’ ;
p l o t t i n g . c o n t o u r s . t k e . t i t l e _ e n d = ’ Turbulent ␣ K i n e t i c ␣ Energy ’ ;
p l o t t i n g . c o n t o u r s . t k e . l i m i t s = [ −0.05 0 . 0 5 0 0 . 1 ] ; % [ −0.05
0.05 0 0 . 1 ]
p l o t t i n g . contours . tke . aspect_ratio = [1 1 1 ] ;

p l o t t i n g . c o n t o u r s . s t r e s s . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’
plotting . contours . s t r e s s . file_end = ’ s t r e s s ’ ;
p l o t t i n g . c o n t o u r s . s t r e s s . y_units = ’ [ −] ’ ;
p l o t t i n g . c o n t o u r s . s t r e s s . t i t l e _ e n d = ’ Reynolds ␣ S t r e s s ’ ;
%p l o t t i n g . c o n t o u r s . s t r e s s . l i m i t s = [ 0 0 . 1 ] ; % [ −0.05 0 . 0 5 0
0.1]
plotting . contours . s t r e s s . aspect_ratio = [1 1 1 ] ;

%p l o t t i n g . c o n t o u r s . y p l u s . p l a n e = { ’ xz ’ } ; % ’ xz ’ , ’ yz ’
%p l o t t i n g . c o n t o u r s . y p l u s . l i m i t s = [ −0.05 0 . 0 5 0 0 . 1 ] ; % [ −0.05
0.05 0 0 . 1 ]
%p l o t t i n g . c o n t o u r s . y p l u s .

end

B.4. PLOTCONFIG

codigo/plotConfig.m
% 14/05/2018
% C a r l o s Moreno Montagud

function c o n f i g = p l o t C o n f i g ( )

%% Line s t y l e
c o n f i g . sim_markers = [ ’ s ’ ’ ^ ’ ’ x ’ ’ d ’ ’ v ’ ’ . ’ ’> ’ ’ ∗ ’ ’< ’ ] ; %
Markers f o r s i m u l a t i o n s
119
Apéndices

c o n f i g . sim_marker_size = 6 ;
c o n f i g . sim_line_width = 1 . 5 ;
c o n f i g . l i n e _ s t y l e = [ ’ ␣− ’ ; ’−− ’ ; ’ −. ’ ; ’ ␣ : ’ ] ; % Line o r d e r

config . exp_markers = [ ’ o ’ ’+ ’ ] ; % Markers f o r e x p e r i m e n t a l


config . exp_marker_size = 6 ;
config . exp_line_width = 1 . 5 ;
config . e x p _ l i n e _ s t y l e = ’ none ’ ;

c o n f i g . c o l o r s = [ ’ b ’ ’ g ’ ’ r ’ ’ c ’ ’m’ ’ y ’ ’w ’ ] ; % Color o r d e r
c o n f i g . primes = [ 5 , 7 , 1 1 , 1 3 , 1 7 ] ; % S p a c i n g markers

%% Font s i z e s
config . li nes . legend_fontsize = 10;
%c o n f i g . l i n e s . t i t l e _ f o n t s i z e = 14;
config . lines . xlabel_fontsize = 14;
config . lines . ylabel_fontsize = 14;

config . stations . stations_fontsize = 10;


config . stations . legend_fontsize = 10;
%c o n f i g . s t a t i o n s . t i t l e _ f o n t s i z e = 14;
config . stations . xlabel_fontsize = 14;
config . stations . ylabel_fontsize = 14;

%c o n f i g . c o n t o u r s . l e g e n d _ f o n t s i z e = 10;
config . contours . t i t l e _ f o n t s i z e = 12;
config . contours . xlabel1_fontsize = 10;
config . contours . ylabel1_fontsize = 10;
config . contours . xlabel2_fontsize = 14;
config . contours . ylabel2_fontsize = 14;

%% Contour
c o n f i g . cmap = j e t ; % j e t , g r a y

end

B.5. PATH_NAMES

codigo/functions/path_names.m

120
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

% 04/04/2018
% C a r l o s Moreno Montagud

function [ names ] = path_names ( c a s e s , l e g e n d _ f l a g s )

%% Cases d a t a
l g e o = length ( c a s e s . geometry ) ;
l s o l = length ( c a s e s . solveMode ) ;
l i n j = length ( c a s e s . i n j e c t i o n ) ;
l f l u = length ( c a s e s . f l u i d ) ;
l i n l = length ( c a s e s . i n l e t T y p e ) ;
lnum = length ( c a s e s . numCase ) ;
l m i l = length ( c a s e s . m i l i S e c ) ;
l c o d = length ( c a s e s . code ) ;
lmes = length ( c a s e s . mesh) ;

casesNum = max( [ l g e o l s o l l i n j l f l u l i n l lnum l m i l l c o d lmes ] )


;
names . casesNum = casesNum ;

geometry = repmat ( c a s e s . geometry , casesNum / l g e o , 1 ) ;


solveMode = repmat ( c a s e s . solveMode , casesNum / l s o l , 1 ) ;
i n j e c t i o n = repmat ( c a s e s . i n j e c t i o n , casesNum / l i n j , 1 ) ;
f l u i d = repmat ( c a s e s . f l u i d , casesNum / l f l u , 1 ) ;
i n l e t T y p e = repmat ( c a s e s . i n l e t T y p e , casesNum / l i n l , 1 ) ;
numCase = repmat ( c a s e s . numCase , casesNum /lnum , 1 ) ;
m i l i S e c = repmat ( c a s e s . m i l i S e c , casesNum / l m i l , 1 ) ;
code = repmat ( c a s e s . code , casesNum / l c o d , 1 ) ;
mesh = repmat ( c a s e s . mesh , casesNum / lmes , 1 ) ;

i n j e c t i o n A b b r = c e l l f u n ( @abbr , i n j e c t i o n , ’ un ’ , 0 ) ;
inletTypeAbbr = c e l l f u n ( @abbr , i n l e t T y p e , ’ un ’ , 0 ) ;
f l u i d A b b r = c e l l f u n (@( x ) upper ( x ( 1 ) ) , f l u i d , ’ un ’ , 0 ) ;
codeAbbr = c e l l f u n ( @abbr , code , ’ un ’ , 0 ) ;

%% Names
% caseName NASA_RANS_NP_G_NR_X / JunCai
% matName NR_NP_G_NR_X_XXX_CG_(6M) / JunCai
g e o S o l v e = m a t 2 c e l l ( c e l l f u n (@( x ) x ( 1 ) , [ geometry solveMode ] ) ,
ones ( 1 , casesNum ) , 2 ) ;

121
Apéndices

f i l e C e l l = mat2cell ( [ geoSolve injectionAbbr fluidAbbr


inletTypeAbbr numCase m i l i S e c codeAbbr mesh ] , ones ( 1 ,
casesNum ) , 8 ) ;

i f strcmp ( code , ’ L i t e r a t u r e ’ )
f i l e = c a s e s . author ( 1 ) ;
names . caseName = f i l e ;
names . matName = f i l e ;
else
f o l d e r C e l l = m a t 2 c e l l ( [ geometry solveMode i n j e c t i o n A b b r
f l u i d A b b r inletTypeAbbr numCase ] , ones ( 1 , casesNum ) , 6 ) ;
f o l d e r = c e l l f u n (@( x ) s t r j o i n ( x , ’_ ’ ) , f o l d e r C e l l , ’ un ’ , 0 ) ;
names . caseName = f o l d e r ;

f i l e = strrep ( s t r c a t ( c e l l f u n (@( x ) s t r j o i n ( x , ’_ ’ ) , f i l e C e l l ,
’ un ’ , 0 ) , ’_ ’ ) , ’__ ’ , ’_ ’ ) ;
f i l e = c e l l f u n (@( x ) x ( 1 : end−1) , f i l e , ’ un ’ , 0 ) ;
names . matName = f i l e ;
end

% expName JunCai
names . expName = c a s e s . author ;

% legend_sim NR_NP_G_NR_X_XXX_CG_6M
names . legend_sim = strrep ( c e l l f u n (@( x ) s t r j o i n ( x ( l o g i c a l (
l e g e n d _ f l a g s ) ) , ’_ ’ ) , f i l e C e l l , ’ un ’ , 0 ) , ’__ ’ , ’_ ’ ) ;

% l e g en d _exp JunCai % % % % % % % % % % % % % %
names . legend_exp = c a s e s . author ;

% mainFolder CONVERGE\NASA\ nonPremixed \(6M) \ g a s \ n o n R e a c t i v e


\___\
mainC ell = m a t 2 c e l l ( [ code geometry i n j e c t i o n mesh f l u i d
i n l e t T y p e ] , ones ( 1 , casesNum ) , 6 ) ;
mainFolder = strrep ( c e l l f u n (@( x ) s t r j o i n ( x , f i l e s e p ) , mainCell , ’
un ’ , 0 ) , [ f i l e s e p f i l e s e p ] , f i l e s e p ) ;
names . c a s e s F o l d e r = s t r c a t ( mainFolder , f i l e s e p , ’ c a s e s ’ , f i l e s e p )
;
names . matsFolder = s t r c a t ( mainFolder , f i l e s e p , ’ mats ’ , f i l e s e p ) ;

122
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

% i m p o r t F o l d e r CONVERGE\NASA\ nonPremixed \(6M) \ g a s \ n o n R e a c t i v e


\ c a s e s \NASA_RANS_NP_G_NR_X\
names . i m p o r t F o l d e r = s t r c a t ( names . c a s e s F o l d e r , names . caseName ,
filesep ) ;

% expFolder L i t e r a t u r e \NASA\ nonPremixed \ g a s \ n o n R e a c t i v e \


mats \
e x p F o l d e r = strrep ( names . matsFolder , [ f i l e s e p mesh{1} f i l e s e p ] ,
filesep ) ;
names . e x p F o l d e r = strrep ( expFolder , code {1} , ’ L i t e r a t u r e ’ ) ;

% matFile CONVERGE\NASA\ nonPremixed \(6M) \ g a s \ n o n R e a c t i v e


\ mats \NR_NP_G_NR_X_XXX_CG_(6M) . mat
names . m a t F i l e = s t r c a t ( names . matsFolder , names . matName , ’ . mat ’ ) ;

% expFile L i t e r a t u r e \NASA\ nonPremixed \ g a s \ n o n R e a c t i v e \


mats \ JunCai . mat
names . e x p F i l e = s t r c a t ( names . expFolder , c a s e s . author , ’ . mat ’ ) ;

% results R e s u l t s \NASA\ nonPremixed \ g a s \ n o n R e a c t i v e \RANS\


CONVERGE\
results_folder = [ ’ Results ’ f i l e s e p ] ;
%r e s u l t s F i l e n a m e = s t r j o i n ( f i l e ’ , ’_’ ) ; % % % % % % % % % % % % % %

geo = unique ( geometry ) ; % NASA


i f length ( geo )==1
r e s u l t s _ f o l d e r = s t r c a t ( r e s u l t s _ f o l d e r , geo , f i l e s e p ) ;
end

i n j = unique ( i n j e c t i o n ) ; % nonPremixed
i f length ( i n j )==1
results_folder = strcat ( results_folder , inj , f i l e s e p ) ;
end

% msh = u n i q u e ( mesh ) ; % (6M)


% i f l e n g t h ( msh )==1
% r e s u l t s F o l d e r = s t r c a t ( r e s u l t s F o l d e r , msh , f i l e s e p ) ;
% end

f l u = unique ( f l u i d ) ; % g a s

123
Apéndices

i f length ( f l u )==1
results_folder = strcat ( results_folder , flu , f i l e s e p ) ;
end

i n l = unique ( i n l e t T y p e ) ; % n o n R e a c t i v e
i f length ( i n l )==1
results_folder = strcat ( results_folder , inl , f i l e s e p ) ;
end

s o l = unique ( solveMode ) ; % RANS


i f length ( s o l )==1
results_folder = strcat ( results_folder , sol , f i l e s e p ) ;
else
r e s u l t s _ f o l d e r = s t r c a t ( r e s u l t s _ f o l d e r , ’VERSUS ’ , f i l e s e p ) ;
end

cod = unique ( code ) ; %CONVERGE


i f length ( cod )==1
r e s u l t s _ f o l d e r = s t r c a t ( r e s u l t s _ f o l d e r , cod , f i l e s e p ) ;
end

num = unique ( numCase ) ; % CASE_X


i f length (num)==1
r e s u l t s _ f o l d e r = s t r c a t ( r e s u l t s _ f o l d e r , ’CASE_ ’ ,num , f i l e s e p
);
end

% m i l = u n i q u e ( m i l i S e c ) ; % XXX
% i f l e n g t h ( m i l )==1
% r e s u l t s F o l d e r = s t r c a t ( r e s u l t s F o l d e r , mil , ’ ms ’ , f i l e s e p ) ;
% end

names . r e s u l t s _ f o l d e r = r e s u l t s _ f o l d e r { 1 } ;
names . code = code ;
names . m i l i S e c = m i l i S e c ;
end

function s t r = abbr ( f s t r )

switch f s t r

124
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

c a s e ’CONVERGE’
s t r = ’CG ’ ;
c a s e ’OpenFOAM ’
s t r = ’OF ’ ;
c a s e ’ nonPremixed ’
s t r = ’NP ’ ;
c a s e ’ premixed ’
s t r = ’P ’ ;
c a s e ’ nonReactive ’
s t r = ’NR ’ ;
case ’ reactive ’
s t r = ’R ’ ;
otherwise
str = ’ error ’ ;
end

end

B.6. UPPERFIRST

codigo/functions/upperFirst.m
function s t r = u p p e r F i r s t ( data )
s t r = [ upper ( data ( 1 ) ) data ( 2 : end ) ] ;
end

B.7. LOADCASES

codigo/functions/import/loadCases.m
% 07/05/2018
% C a r l o s Moreno Montagud
function [EXP, SIM]= l o a d C a s e s ( names , import , f l a g s )

expNum = length ( names . expName ) ;


EXP= c e l l (expNum , 1 ) ;
SIM= c e l l ( names . casesNum , 1 ) ;

% Load SIM
for i =1: names . casesNum

125
Apéndices

i f e x i s t ( names . m a t F i l e { i } , ’ f i l e ’ )
% Load f i l e . mat
load ( names . m a t F i l e { i , 1 } , names . matName{ i , 1 } ) ;
SIM{ i , 1 } = eval ( names . matName{ i , 1 } ) ;
else
% Import c a s e and s a v e f i l e . mat
SIM{ i , 1 } = importCase ( names , import , i ) ;
eval ( s t r c a t ( names . matName{ i } , ’=SIM{ i , 1 } ; ’ ) ) ;
save ( names . m a t F i l e { i } , names . matName{ i }) ;
end
end

% Load EXP
i f f l a g s . p l o t _ f l a g | | f l a g s . compare_flag
for i =1:expNum
load ( names . e x p F i l e { i , 1 } , names . expName{ i , 1 } ) ;
EXP{ i , 1 } = eval ( names . expName{ i , 1 } ) ;
end
end

end

B.8. IMPORTCASE

codigo/functions/import/importCase.m
% 04/04/2018
% C a r l o s Moreno Montagud

function dataArray = importCase ( names , import , n )


%% V a r i a b l e s
dataArray = [ ] ;
code = names . code {n } ;
m i l i S e c = names . m i l i S e c {n } ;
i m p o r t F o l d e r = names . i m p o r t F o l d e r {n } ;

c o l _ f i l e s = import . c o l _ f i l e s ;
o u t _ f i l e s = import . o u t _ f i l e s ;

%% Import

126
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

s w i t c h code
c a s e ’CONVERGE’
% Search f i l e s . c o l
c o l F o l d e r = s t r c a t ( im por tF ol der , ’ output ’ , f i l e s e p ) ;
m i l i S e c S t r = num2str ( s t r 2 d o u b l e ( m i l i S e c ) / 10 0 0 , ’ %1.5 e ’ )
;
m i l i S e c R e a d = 5− s t r 2 d o u b l e ( m i l i S e c S t r ( end ) ) ;
r e a d C o l F i l e S t r = s t r c a t ( c o l F o l d e r , c o l _ f i l e s , ’ ∗_+ ’ ,
m i l i S e c S t r ( 1 : m i l i S e c R e a d ) , ’ ∗ ’ , m i l i S e c S t r ( end−3:end )
, ’ . col ’ ) ;
r e a d C o l F i l e = c e l l f u n ( @dir , r e a d C o l F i l e S t r , ’ un ’ , 0 ) ;
readColFileMat = cell2mat ( readColFile ) ;
l a s t R e a d C o l F i l e = { r e a d C o l F i l e M a t ( end , : ) . name } ;
readColFilename = s t r c a t ( c o l F o l d e r , l a s t R e a d C o l F i l e ) ;

% Search f i l e s . o u t
r e a d O u t F i l e S t r = s t r c a t ( i mpo rt Fo lde r , o u t _ f i l e s , ’ ∗_ ’ , ’
point_ ’ , { ’ 1 ’ , ’ 2 ’ } , ’_ ’ , ’ volume ’ , ’ _avg . out ’ ) ;
r e a d O u t F i l e = c e l l f u n ( @dir , r e a d O u t F i l e S t r , ’ un ’ , 0 ) ;
readOutFileMat = c e l l 2 m a t ( r e a d O u t F i l e ) ;
a l l R e a d O u t F i l e = reshape ({ readOutFileMat . name } , s i z e (
readOutFileMat ) ) ;
readOutFilename = s t r c a t ( i mpo rt Fo ld er , a l l R e a d O u t F i l e ) ;
% siempre 1 columna

% Read v a r i a b l e s
delimiter = ’ ’ ;
startRow = 6 ;

% Import CONVERGE f i l e s
dataArray = importCVG ( readColFilename , readOutFilename ,
import , d e l i m i t e r , startRow ) ;

c a s e ’OpenFOAM ’
% Search 0 and l a s t ’ m i l i S e c ’ f o l d e r
readFile_temp = dir ( i m p o r t F o l d e r ) ;
readFile_temp = readFile_temp (~ isnan ( s t r 2 d o u b l e ({
readFile_temp . name }) ) ) ;
i f ~isempty ( m i l i S e c )

127
Apéndices

r e a d F i l e _ f i n d = s t r f i n d ({ readFile_temp . name } , [ ’ . ’ ,
miliSec ] ) ;
r e a d F i l e _ f i n d = c e l l f u n (@( x ) ~isempty ( x ) ,
readFile_find ) ;
readFile_find (1) = 1;
r e a d F i l e = readFile_temp ( r e a d F i l e _ f i n d ) ;
else
r e a d F i l e = readFile_temp ( [ 1 , end ] ) ;
end
l a s t R e a d F i l e = { r e a d F i l e . name } ;
r e a d F o l d e r s = s t r c a t ( i mp or tF old er , l a s t R e a d F i l e , f i l e s e p
);

% Read v a r i a b l e s
delimiter = ’␣ ’ ;
startRow = 2 3 ;

% Import OpenFOAM f i l e s
dataArray = importFOAM( r e a d F o l d e r s , import , d e l i m i t e r ,
startRow ) ; %% % % % % % % % % % % % %

case ’ Literature ’
% Read v a r i a b l e s
d e l i m i t e r = ’ ; ’ ; %% % % % % % % % % %e%
r r%o %
r %%%
startRow = 2 ;

% Import L i t e r a t u r e f i l e s
dataArray = importEXP ( i mpo rt Fo ld er , import , d e l i m i t e r ,
startRow ) ;
end

end

B.9. IMPORTCVG

codigo/functions/import/importCVG.m
% 01/02/2018
% Mario Belmar G i l
% 21/02/2018

128
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

% C a r l o s Moreno Montagud

% Export o u t p u t d a t a from CONVERGE S t u d i o i n s e p a r a t e d . c o l


f i l e s so RAM i s
% not an i s s u e i n p o s t p r o c e s s . The name o f t h e f i l e s i s
s e l e c t e d in
% i m p o r t P r o p e r t i e s .m

function dataArray = importCVG ( readColFilename , readOutFilename


, import , d e l i m i t e r , startRow )
%% V a r i a b l e s
dataArray = [ ] ;

b a s e _ s i z e = import . b a s e _ s i z e ;
AMR = import .AMR;

%% Col f i l e s
c o l _ f i l e s = s t r c a t ( import . c o l _ f i l e s , ’ _ f i l e ’ ) ;
n F i l e s = length ( c o l _ f i l e s ) ;
for f f =1: n F i l e s % ’ v e l o c i t i e s ’ , ’ s t r e s s ’ , ’ s p e c i e s ’
current_file = col_files { f f };
F=[];

% Import raw d a t a
CFD_raw = importdata ( readColFilename { f f }) ;
v a r i a b l e s _ n a m e s = a r r a y f u n (@( s t r ) strrep ( s t r , ’ . ’ , ’_ ’ ) ,
CFD_raw . c o l h e a d e r s ) ;
CFD_data = a r r a y 2 t a b l e (CFD_raw . data , ’ VariableNames ’ ,
variables_names ) ;

v a r i a b l e s = import . ( c u r r e n t _ f i l e ) . v a r i a b l e s ;
nVar = length ( v a r i a b l e s ) ;
for vv =1:nVar % ’ v e l o c i t i e s ’ , ’ t k e ’ , ’ s t r e s s ’ , ’ s p e c i e s ’
c u r r e n t _ v a r = v a r i a b l e s {vv } ;

plot_type = import . ( c u r r e n t _ v a r ) . plot_type ;


nPlot = length ( plot_type ) ;
for pp=1: nPlot % ’ c e n t e r l i n e ’ , ’ s t a t i o n s ’ , ’ c o n t o u r s ’
c u r r e n t _ p l o t = plot_type {pp } ;
s t r u c t _ p l o t = import . ( c u r r e n t _ v a r ) . ( c u r r e n t _ p l o t ) ;

129
Apéndices

plane = struct_plot . plane ;


nPlane = length ( p l a n e ) ;
for z z =1: nPlane
current_plane = plane { zz } ;

switch current_plot

% CENTERLINE
case ’ c e n t e r l i n e ’

% Coordinates
coord_min = s t r u c t _ p l o t . l i m i t s ( 1 ) ;
coord_max = s t r u c t _ p l o t . l i m i t s ( 2 ) ;
d i s c r e t i z a t i o n = round ( ( coord_max−
coord_min ) ∗2^AMR/ b a s e _ s i z e ) ;
c o o r d s = linspace ( coord_min , coord_max
, discretization ) ’;
z e r o _ v e c t o r = zeros ( d i s c r e t i z a t i o n , 1 )
;
dataArray . c e n t e r l i n e . ( c u r r e n t _ p l a n e ) . (
current_var ) . coords = coords ;

direction = struct_plot . direction ;


n D i r e c t i o n = length ( d i r e c t i o n ) ;
for dd=1: n D i r e c t i o n % ’ a x i a l ’
c u r r e n t _ d i r e c t i o n = d i r e c t i o n {dd } ;

s t a t i s t i c = struct_plot . s t a t i s t i c ;
n S t a t i s t i c = length ( s t a t i s t i c ) ;
for s s =1: n S t a t i s t i c % ’ mean ’
current_statistic = statistic {
ss };

%% % % % % p l%
a n e z a x i a l = W, e t c
head = [ h e a d e r s (
c u r r e n t _ s t a t i s t i c ) headers (
current_direction ) ] ;
try
% Interpolation

130
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

i f ~ i s f i e l d (F , head )
F . ( head ) =
scatteredInterpolant
(CFD_data . x ,
CFD_data . y ,
CFD_data . z ,
CFD_data . ( head ) ) ;
end
% Discretization
dataArray . c e n t e r l i n e . (
current_plane ) . (
current_var ) . (
current_statistic ) .(
current_direction ) .
c e n t e r l i n e = F . ( head ) (
zero_vector ,
zero_vector , coords ) ;
catch
disp ( ’ e r r o r ␣ cvg ␣ c e n t e r l i n e
’);
end
end
end

% STATIONS
case ’ stations ’

% Coordinates
coord_min = import . ( [ c u r r e n t _ p l a n e ( 1 ) ,
’ lims ’ ] ) (1) ;
coord_max = import . ( [ c u r r e n t _ p l a n e ( 1 ) ,
’ lims ’ ] ) (2) ;
d i s c r e t i z a t i o n = round ( ( coord_max−
coord_min ) ∗2^AMR/ b a s e _ s i z e ) ;
c o o r d s = linspace ( coord_min , coord_max
, discretization ) ’;
z e r o _ v e c t o r = zeros ( d i s c r e t i z a t i o n , 1 )
;
switch current_plane
c a s e ’ xz ’

131
Apéndices

c1 = c o o r d s ;
c2 = z e r o _ v e c t o r ;
c a s e ’ yz ’
c1 = z e r o _ v e c t o r ;
c2 = c o o r d s ;
end
dataArray . s t a t i o n s . ( c u r r e n t _ p l a n e ) . (
current_var ) . coords = coords ;

direction = struct_plot . direction ;


n D i r e c t i o n = length ( d i r e c t i o n ) ;
for dd=1: n D i r e c t i o n % ’ a x i a l ’ , ’ r a d i a l
’ , ’ t a n g e n t i a l ’ , ’CH4’
c u r r e n t _ d i r e c t i o n = d i r e c t i o n {dd } ;

s t a t i s t i c = struct_plot . s t a t i s t i c ;
n S t a t i s t i c = length ( s t a t i s t i c ) ;
for s s =1: n S t a t i s t i c % ’ mean ’ , ’RMS

current_statistic = statistic {
ss };

stations = struct_plot .
stations ;
n S t a t i o n s = length ( s t a t i o n s ) ;
for mm=1: n S t a t i o n s % [ 5 10 20
30 4 0 ]
c u r r e n t _ s t a t i o n = num2str (
s t a t i o n s (mm) ) ;
s t a t i o n _ v e c t o r = repmat (
s t a t i o n s (mm) / 1 0 0 0 , [
discretization 1]) ;

head = [ h e a d e r s (
current_statistic )
headers (
current_direction ) ] ;
try
% Interpolation
i f ~ i s f i e l d (F , head )

132
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

F . ( head ) =
scatteredInterpolant
(CFD_data . x ,
CFD_data . y ,
CFD_data . z ,
CFD_data . ( head )
);
end
% Discretization
dataArray . s t a t i o n s . (
current_plane ) . (
current_var ) . (
current_statistic )
. ( current_direction
) . ( [ ’ station_ ’ ,
c u r r e n t _ s t a t i o n , ’mm
’ ] ) = F . ( head ) ( c1 ,
c2 , s t a t i o n _ v e c t o r )
;
catch
disp ( ’ e r r o r ␣ cvg ␣
stations ’ ) ;
end
end
end
end

% CONTOURS
case ’ contours ’

% Coordinates
l i m i t s = [ import . ( [ c u r r e n t _ p l a n e ( 1 ) , ’
lims ’ ] ) struct_plot . l i m i t s ] ;
d i s c r e t i z a t i o n = round ( ( l i m i t s ( 2 )−
l i m i t s ( 1 ) ) ∗2^AMR/ b a s e _ s i z e ) ; % xy
dependant
v e r t e x 1 = linspace ( l i m i t s ( 1 ) , l i m i t s
( 2 ) , d i s c r e t i z a t i o n +1) ’ ; c e n t e r 1 =
v e r t e x 1 ( 1 : end−1)+d i f f ( v e r t e x 1 ) / 2 ;

133
Apéndices

v e r t e x 2 = linspace ( l i m i t s ( 3 ) , l i m i t s
( 4 ) , d i s c r e t i z a t i o n +1) ’ ; c e n t e r 2 =
v e r t e x 2 ( 1 : end−1)+d i f f ( v e r t e x 2 ) / 2 ;
coords = [ center1 , center2 ] ;
coord0 = zeros ( d i s c r e t i z a t i o n ) ;
[ coord1 , coord2 ] = meshgrid ( c e n t e r 1 ,
center2 ) ;
switch current_plane
c a s e ’ xz ’
c1 = coord1 ;
c2 = coord0 ;
c3 = coord2 ;
c a s e ’ yz ’
c1 = coord0 ;
c2 = coord1 ;
c3 = coord2 ;
end
dataArray . c o n t o u r s . ( c u r r e n t _ p l a n e ) . (
current_var ) . coords = coords ;

direction = struct_plot . direction ;


n D i r e c t i o n = length ( d i r e c t i o n ) ;
switch current_var

% Velocities
case ’ v e l o c i t i e s ’
for dd=1: n D i r e c t i o n % ’ a x i a l ’ ,
’ radial ’ , ’ tangential ’
current_direction =
d i r e c t i o n {dd } ;

s t a t i s t i c = struct_plot .
statistic ;
n S t a t i s t i c = length (
statistic ) ;
for s s =1: n S t a t i s t i c % ’
mean ’ , ’RMS’
current_statistic =
s t a t i s t i c { ss };

134
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

head = [ h e a d e r s (
current_statistic )
headers (
current_direction )
];
try
% Interpolation
i f ~ i s f i e l d (F , head
)
F . ( head ) =
scatteredInterpolant
(CFD_data . x
, CFD_data .
y , CFD_data
.z,
CFD_data . (
head ) ) ;
end
% Discretization
dataArray . c o n t o u r s
. ( current_plane
) . ( current_var )
.(
current_statistic
) .(
current_direction
) . contour = F . (
head ) ( c1 , c2 ,
c3 ) ;
catch
disp ( ’ e r r o r ␣ cvg ␣
contour ␣
velocities ’) ;
end
end
end

% Tke
case ’ tke ’

135
Apéndices

r e s u l t = zeros ( d i s c r e t i z a t i o n ,
discretization , nDirection ) ;

current_statistic =
struct_plot . s t a t i s t i c {1}; %
’RMS’

for dd=1: n D i r e c t i o n % ’ a x i a l ’ ,
’ radial ’ , ’ tangential ’
current_direction =
d i r e c t i o n {dd } ;

head = [ h e a d e r s (
current_statistic )
headers (
current_direction ) ] ;

try
% Interpolation
i f ~ i s f i e l d (F , head )
F . ( head ) =
scatteredInterpolant
(CFD_data . x ,
CFD_data . y ,
CFD_data . z ,
CFD_data . ( head )
);
end
% Discretization
v e l = F . ( head ) ( c1 , c2 ,
c3 ) ;
% Calculate
r e s u l t ( : , : , dd ) = v e l . ∗
vel ;
catch
disp ( ’ e r r o r ␣ cvg ␣
contour ␣ tke ’ ) ;
end
end

136
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

dataArray . c o n t o u r s . (
current_plane ) . ( current_var
) . contour = sum( r e s u l t , 3 )
/2;

% Stress
case ’ s t r e s s ’
t o t a l _ s t r e s s = zeros ( s i z e (
CFD_data . x ) ) ;

for dd=1: n D i r e c t i o n % ’ s11 ’ , ’


s12 ’ , ’ s13 ’ . . .
current_direction =
d i r e c t i o n {dd } ;
head = c u r r e n t _ d i r e c t i o n ;

% Calculate
try
s t r e s s = CFD_data . (
head ) ;
total_stress =
t o t a l _ s t r e s s+s t r e s s
.^2;
% Symmetry
i f rem( s t r 2 d o u b l e (
current_direction
( 2 : end ) ) , 1 1 ) ~=0
total_stress =
t o t a l _ s t r e s s+
stress .^2;
end
catch
end
end

% Interpolation
%i f ~ i s f i e l d (F , head )
F. stress =
scatteredInterpolant (
CFD_data . x , CFD_data . y ,

137
Apéndices

CFD_data . z , sqrt (
total_stress ) ) ;
%end
% Discretization
dataArray . c o n t o u r s . (
current_plane ) . ( current_var
) . contour = F . s t r e s s ( c1 , c2
, c3 ) ;

% Otherwise
end
end
end
end
end
end

%% Out f i l e s
i f ~isempty ( readOutFilename )
o u t _ f i l e s = s t r c a t ( import . o u t _ f i l e s {1} , ’ _ f i l e ’ ) ; % monitor
only
f s = import . ( o u t _ f i l e s ) . f s ;
F = [];

o u t _ s u b f i l e s = readOutFilename ;
[ nSubfiles , nPoints ] = size ( o u t _ s u b f i l e s ) ;
for oo =1: n P o i n t s % ’ point_1 ’ , . . .

dataRead = [ ] ;
for f f =1: n S u b f i l e s % ’ monitor38 ’ , . . .
c u r r e n t _ s u b f i l e = o u t _ s u b f i l e s { f f , oo } ;

% Import
numCols = 4 ;
dataRead = [ dataRead ; c e l l 2 m a t ( i m p o r t T e x t F i l e (
c u r r e n t _ s u b f i l e , d e l i m i t e r , startRow , numCols , ’ %17
f ’ , false )) ];
%’ MultipleDelimsAsOne ’ , 1
end

138
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

%F . ( [ ’ point_ ’ , num2str ( oo ) ] ) = dataRead ;


v a r i a b l e s = import . ( o u t _ f i l e s ) . v a r i a b l e s ;
nVar = length ( v a r i a b l e s ) ;
for vv =1:nVar % ’ p r e s s u r e ’ , ’W’ , ’ massfrac_ch4 ’
c u r r e n t _ v a r = v a r i a b l e s {vv } ;

F . ( c u r r e n t _ v a r ) . ( [ ’ point_ ’ , num2str ( oo ) ] ) =
dataRead ( : , vv+1) ;

i f oo==n P o i n t s
dataArray . psd . ( c u r r e n t _ v a r ) . cross_spectrum =
angle ( cpsd (F . ( c u r r e n t _ v a r ) . point_1 , F . (
c u r r e n t _ v a r ) . point_2 , [ ] , [ ] , [ ] , f s ) ) ;
%dataArray . psd . ( c u r r e n t _ v a r ) . msqrd_coherence =
mscohere (F . ( c u r r e n t _ v a r ) . point_1 , F . (
c u r r e n t _ v a r ) . point_2 , [ ] , [ ] , [ ] , f s ) ;
end
end
end
end

end

%% Secondary f u n c t i o n s
function s t r = h e a d e r s ( s t a t )

switch stat
% case ’ inst ’
% str = [ ] ;
c a s e ’ mean ’
s t r = ’BAR_ ’ ;
c a s e ’RMS ’
s t r = ’RMS_ ’ ;
c a s e ’ a x i a l ’ %% % % % % % % % % %yz % %p%
l a%
n e%
s t r = ’W’ ;
c a s e ’ r a d i a l ’ %% % % % % % % % % % % % % %
s t r = ’U ’ ;
c a s e ’ t a n g e n t i a l ’ %% % % % % % % % % % %
s t r = ’V ’ ;
otherwise

139
Apéndices

s t r = [ ’Y_ ’ s t a t ] ; %% % % % % % % % %
end

end

B.10. IMPORTEXP

codigo/functions/import/importEXP.m
% 21/02/2018
% C a r l o s Moreno Montagud

% Filename s t r u c t u r e :
% plane , s t a t i s t i c , d i r e c t i o n , f i l e _ e n d , p l o t _ t y p e
% A l l t o g e t h e r w i t h o u t s p a c e and upper c a s e f i r s t l e t t e r o f
the variable
% Example : x z M e a n A x i a l V e l o c i t y C e n t e r l i n e
%
% EXP f i l e s are s e p a r a t e d by ’ ; ’ d e l i m i t e r , f i r s t row are
t i t l e s and t h e
% number o f columns i s d o u b l e o f s t a t i o n s number (2 f o r
centerline ) .

function dataArray = importEXP ( r e a d F o l d e r , import , d e l i m i t e r ,


startRow )
%% V a r i a b l e s
dataArray = [ ] ;

%% Loops
f i l e s = import . c o l _ f i l e s ;
n F i l e s = length ( f i l e s ) ;
for f f =1: n F i l e s % ’ v e l o c i t i e s ’ , ’ s t r e s s ’ , ’ s p e c i e s ’
current_file = [ f i l e s { ff } , ’ _file ’ ] ;

v a r i a b l e s = import . ( c u r r e n t _ f i l e ) . v a r i a b l e s ;
nVar = length ( v a r i a b l e s ) ;
for vv =1:nVar % ’ v e l o c i t i e s ’ , ’ t k e ’ , ’ s t r e s s ’ , ’ s p e c i e s ’
c u r r e n t _ v a r = v a r i a b l e s {vv } ;

plot_type = import . ( c u r r e n t _ v a r ) . plot_type ;

140
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

nPlot = length ( plot_type ) ;


for pp=1: nPlot % ’ c e n t e r l i n e ’ , ’ s t a t i o n s ’
c u r r e n t _ p l o t = plot_type {pp } ;

f i l e _ e n d = import . ( c u r r e n t _ v a r ) . f i l e _ e n d ;
s t r u c t _ p l o t = import . ( c u r r e n t _ v a r ) . ( c u r r e n t _ p l o t ) ;

plane = struct_plot . plane ;


nPlane = length ( p l a n e ) ;
for z z =1: nPlane % ’ z ’ , ’ xz ’
current_plane = plane { zz } ;

direction = struct_plot . direction ;


n D i r e c t i o n = length ( d i r e c t i o n ) ;
for dd=1: n D i r e c t i o n % ’ a x i a l ’ , ’ r a d i a l ’ , ’
t a n g e n t i a l ’ , ’CH4’
c u r r e n t _ d i r e c t i o n = d i r e c t i o n {dd } ;

% e r r o r , don ’ t import s t r e s s w i t h
L i t e r a t u r e ( s e e i m p o r t P r o p e r t i e s .m)
s t a t i s t i c = struct_plot . s t a t i s t i c ;
n S t a t i s t i c = length ( s t a t i s t i c ) ;
for s s =1: n S t a t i s t i c % ’ mean ’ , ’RMS’
current_statistic = s t a t i s t i c { ss };

f i l e C e l l = [{ current_statistic ,
current_direction } , file_end ,{
current_plot } ] ;
f i l e J o i n = s t r j o i n ( c e l l f u n ( @upperFirst
, f i l e C e l l , ’ un ’ , 0 ) , ’ ’ ) ;
readFilename = [ r e a d F o l d e r ,
current_plane , f i l e J o i n , ’ . csv ’ ] ;

switch current_plot

% CENTERLINE
case ’ c e n t e r l i n e ’
try
impData = i m p o r t T e x t F i l e (
readFilename , d e l i m i t e r ,

141
Apéndices

startRow , 2 , ’ %f ’ , f a l s e ) ;
catch
disp ( [ ’ e r r o r ␣ import ␣ exp ␣ ’ ,
current_var , ’ ␣
centerline ’ ]) ;
end
dataArray . c e n t e r l i n e . (
current_plane ) . ( current_var
) .( current_statistic ) .(
current_direction ) . (
c u r r e n t _ p l o t )=c e l l 2 m a t (
impData ) ;

% STATIONS
case ’ stations ’
stations = struct_plot .
stations ;
n S t a t i o n s = length ( s t a t i o n s ) ;
try
impData = i m p o r t T e x t F i l e (
readFilename , d e l i m i t e r ,
startRow , 2 ∗ n S t a t i o n s , ’ %
f ’ , false ) ;
catch
disp ( [ ’ e r r o r ␣ import ␣ exp ␣ ’ ,
current_var , ’ ␣ s t a t i o n s ’
]) ;
end
for mm=1: n S t a t i o n s % [ 5 10 20
30 4 0 ]
c u r r e n t _ s t a t i o n = num2str (
s t a t i o n s (mm) ) ;
dataArray . s t a t i o n s . (
current_plane ) . (
current_var ) . (
current_statistic ) .(
current_direction ) . ( [ ’
station_ ’ ,
c u r r e n t _ s t a t i o n , ’mm’ ] )
= c e l l 2 m a t ( impData ( ( 2 ∗

142
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

mm−1) : ( 2 ∗mm) ) ) ;
end
end
end
end
end
end
end
end

end

B.11. IMPORTFOAM

codigo/functions/import/importFOAM.m
% 04/04/2018
% C a r l o s Moreno Montagud

function dataArray = importFOAM( r e a d F o l d e r s , import , d e l i m i t e r ,


startRow )
%% V a r i a b l e s
dataArray = [ ] ;
CFD_data = [ ] ;

b a s e _ s i z e = import . b a s e _ s i z e ;
AMR = import .AMR;
c o o r d _ f i l e s = import . c r d _ f i l e s ;
v a r _ f i l e s = import . v a r _ f i l e s ;

%% F o l d e r 0 ( c o o r d i n a t e s )
r e ad F i lename = s t r c a t ( r e a d F o l d e r s {1} , c o o r d _ f i l e s ) ;
n F i l e s = length ( c o o r d _ f i l e s ) ;
for f f =1: n F i l e s
current_file = coord_files { f f };
c u r r e n t _ f i l e n a m e = readFilename { f f } ;

numCols = 1 ;
CFD_data . ( c u r r e n t _ f i l e ) = c e l l 2 m a t ( i m p o r t T e x t F i l e (
c u r r e n t _ f i l e n a m e , d e l i m i t e r , startRow , numCols , ’ %f ’ , f a l s e )
);
143
Apéndices

end

%% F o l d e r end
r e ad F i l ename = s t r c a t ( r e a d F o l d e r s {2} , v a r _ f i l e s ) ;
n F i l e s = length ( v a r _ f i l e s ) ;
for f f =1: n F i l e s
current_file = var_files { f f };
c u r r e n t _ f i l e n a m e = readFilename { f f } ;
F=[];

numCols = import . ( c u r r e n t _ f i l e ) . numCols ;


CFD_data . ( c u r r e n t _ f i l e ) = c e l l 2 m a t ( i m p o r t T e x t F i l e (
c u r r e n t _ f i l e n a m e , d e l i m i t e r , startRow , numCols , ’ %f ’ , t r u e ) )
;

i f strcmp ( c u r r e n t _ f i l e , ’ UPrime2Mean ’ )
CFD_data . ( c u r r e n t _ f i l e ) = r e a l ( sqrt (CFD_data . (
current_file ) ) ) ;
end

v a r i a b l e s = import . ( c u r r e n t _ f i l e ) . v a r i a b l e s ;
nVar = length ( v a r i a b l e s ) ;
for vv =1:nVar % ’ v e l o c i t i e s ’ , ’ t k e ’
c u r r e n t _ v a r = v a r i a b l e s {vv } ;

plot_type = import . ( c u r r e n t _ v a r ) . plot_type ;


nPlot = length ( plot_type ) ;
for pp=1: nPlot % ’ c e n t e r l i n e ’ , ’ s t a t i o n s ’ , ’ c o n t o u r s ’
c u r r e n t _ p l o t = plot_type {pp } ;
s t r u c t _ p l o t = import . ( c u r r e n t _ v a r ) . ( c u r r e n t _ p l o t ) ;

plane = struct_plot . plane ;


nPlane = length ( p l a n e ) ;
for z z =1: nPlane
current_plane = plane { zz } ;
impCols = import . ( c u r r e n t _ f i l e ) . impCols ;

direction = struct_plot . direction ;


n D i r e c t i o n = length ( d i r e c t i o n ) ;

144
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

for dd=1: n D i r e c t i o n % ’ a x i a l ’ , ’ r a d i a l ’ , ’
tangential ’
c u r r e n t _ d i r e c t i o n = d i r e c t i o n {dd } ;

% mean , RMS
head = [ h e a d e r s ( c u r r e n t _ f i l e ) ’_ ’ h e a d e r s (
current_direction ) ] ;
c u r r e n t _ c o l = impCols ( dd ) ;

switch current_plot
% CENTERLINE
case ’ c e n t e r l i n e ’
coord_min = s t r u c t _ p l o t . l i m i t s ( 1 ) ;
coord_max = s t r u c t _ p l o t . l i m i t s ( 2 ) ;
d i s c r e t i z a t i o n = round ( ( coord_max−
coord_min ) ∗2^AMR/ b a s e _ s i z e ) ;
c o o r d s = linspace ( coord_min ,
coord_max , d i s c r e t i z a t i o n ) ’ ;
z e r o _ v e c t o r = zeros ( d i s c r e t i z a t i o n
, 1) ;
dataArray . c e n t e r l i n e . (
current_plane ) . ( current_var ) .
coords = coords ;

try
% Interpolation
i f ~ i s f i e l d (F , head )
F . ( head ) =
scatteredInterpolant (
CFD_data . ccx , CFD_data .
ccy , CFD_data . ccz ,
CFD_data . ( c u r r e n t _ f i l e )
( : , current_col ) ) ;
end
% Discretization
dataArray . c e n t e r l i n e . (
current_plane ) . ( current_var
) . ( headers ( c u r r e n t _ f i l e ) ) . (
current_direction ) .
c e n t e r l i n e = F . ( head ) (

145
Apéndices

zero_vector , zero_vector ,
coords ) ;
catch
disp ( ’ e r r o r ␣foam ␣ c e n t e r l i n e ’ ) ;
end

% STATIONS
case ’ stations ’

% Coordinates
coord_min = import . ( [ c u r r e n t _ p l a n e
(1) , ’ lims ’ ] ) (1) ;
coord_max = import . ( [ c u r r e n t _ p l a n e
(1) , ’ lims ’ ] ) (2) ;
d i s c r e t i z a t i o n = round ( ( coord_max−
coord_min ) ∗2^AMR/ b a s e _ s i z e ) ;
c o o r d s = linspace ( coord_min ,
coord_max , d i s c r e t i z a t i o n ) ’ ;
z e r o _ v e c t o r = zeros ( d i s c r e t i z a t i o n
, 1) ;
switch current_plane
c a s e ’ xz ’
c1 = c o o r d s ;
c2 = z e r o _ v e c t o r ;
c a s e ’ yz ’
c1 = z e r o _ v e c t o r ;
c2 = c o o r d s ;
end
dataArray . s t a t i o n s . ( c u r r e n t _ p l a n e )
. ( current_var ) . coords = coords ;

stations = struct_plot . stations ;


n S t a t i o n s = length ( s t a t i o n s ) ;
for mm=1: n S t a t i o n s % [ 5 10 20 30
40]
c u r r e n t _ s t a t i o n = num2str (
s t a t i o n s (mm) ) ;
s t a t i o n _ v e c t o r = repmat (
s t a t i o n s (mm) / 1 0 0 0 , [
discretization 1]) ;

146
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

try
% Interpolation
i f ~ i s f i e l d (F , head )
F . ( head ) =
scatteredInterpolant
(CFD_data . ccx ,
CFD_data . ccy ,
CFD_data . ccz ,
CFD_data . (
current_file ) (: ,
current_col ) ) ;
end
% Discretization
dataArray . s t a t i o n s . (
current_plane ) . (
current_var ) . ( headers (
current_file ) ) .(
current_direction ) . ( [ ’
station_ ’ ,
c u r r e n t _ s t a t i o n , ’mm’ ] )
= F . ( head ) ( c1 , c2 ,
station_vector ) ;
catch
disp ( ’ e r r o r ␣foam ␣ s t a t i o n s ’
);
end
end

% CONTOURS
case ’ contours ’

% Coordinates
l i m i t s = [ import . ( [ c u r r e n t _ p l a n e
(1) , ’ lims ’ ] ) struct_plot . l i m i t s
];
d i s c r e t i z a t i o n = round ( ( l i m i t s ( 2 )−
l i m i t s ( 1 ) ) ∗2^AMR/ b a s e _ s i z e ) ; %
xy dependant

147
Apéndices

v e r t e x 1 = linspace ( l i m i t s ( 1 ) ,
l i m i t s ( 2 ) , d i s c r e t i z a t i o n +1) ’ ;
c e n t e r 1 = v e r t e x 1 ( 1 : end−1)+d i f f
( vertex1 ) /2;
v e r t e x 2 = linspace ( l i m i t s ( 3 ) ,
l i m i t s ( 4 ) , d i s c r e t i z a t i o n +1) ’ ;
c e n t e r 2 = v e r t e x 2 ( 1 : end−1)+d i f f
( vertex2 ) /2;
coords = [ center1 , center2 ] ;
coord0 = zeros ( d i s c r e t i z a t i o n ) ;
[ coord1 , coord2 ] = meshgrid ( c e n t e r 1
, center2 ) ;
switch current_plane
c a s e ’ xz ’
c1 = coord1 ;
c2 = coord0 ;
c3 = coord2 ;
c a s e ’ yz ’
c1 = coord0 ;
c2 = coord1 ;
c3 = coord2 ;
end
dataArray . c o n t o u r s . ( c u r r e n t _ p l a n e )
. ( current_var ) . coords = coords ;

switch current_var

% Velocities
case ’ v e l o c i t i e s ’
try
% Interpolation
i f ~ i s f i e l d (F , head )
F . ( head ) =
scatteredInterpolant
(CFD_data . x ,
CFD_data . y ,
CFD_data . z ,
CFD_data . (
current_file )
( : , current_col )

148
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

);
end
% Discretization
dataArray . c o n t o u r s . (
current_plane ) . (
current_var ) . (
headers (
current_file ) ) .(
current_direction ) .
contour = F . ( head ) (
c1 , c2 , c3 ) ;
catch
disp ( ’ e r r o r ␣foam ␣
contour ␣ v e l o c i t i e s ’
);
end

% Tke
case ’ tke ’
r e s u l t = zeros (
discretization ,
discretization ,
nDirection ) ;
try
% Interpolation
i f ~ i s f i e l d (F , head )
F . ( head ) =
scatteredInterpolant
(CFD_data . x ,
CFD_data . y ,
CFD_data . z ,
CFD_data . (
current_file )
( : , current_col )
);
end
% Discretization
v e l = F . ( head ) ( c1 , c2 ,
c3 ) ;
% Calculate

149
Apéndices

r e s u l t ( : , : , dd ) = v e l . ∗
vel ;
catch
disp ( ’ e r r o r ␣foam ␣
contour ␣ tke ’ ) ;
end

dataArray . c o n t o u r s . (
current_plane ) . (
c u r r e n t _ v a r ) . contour =
sum( r e s u l t , 3 ) / 2 ;
end
end
end
end
end
end
CFD_data = r m f i e l d (CFD_data , c u r r e n t _ f i l e ) ;
end

end

%% Secondary f u n c t i o n s
function s t r = h e a d e r s ( s t a t )

switch stat
% case ’ inst ’
% str = [ ] ;
c a s e ’UMean ’
s t r = ’ mean ’ ;
c a s e ’ UPrime2Mean ’
s t r = ’RMS ’ ;
c a s e ’ a x i a l ’ %% % % % % % % % % %yz % %p%
l a%
n e%
s t r = ’W’ ;
c a s e ’ r a d i a l ’ %% % % % % % % % % % % % % %
s t r = ’U ’ ;
c a s e ’ t a n g e n t i a l ’ %% % % % % % % % % % %
s t r = ’V ’ ;
% otherwise
% s t r = [ ’Y_’ s t a t ] ; % % % % % % % % % %

150
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

end

end

B.12. IMPORTTEXTFILE

codigo/functions/import/importTextFile.m
% 21/02/2018
% C a r l o s Moreno Montagud

function impData = i m p o r t T e x t F i l e ( f i l e n a m e , d e l i m i t e r , startRow ,


numCols , format , p a r e n t h e s i s )
%% Import d a t a from t e x t f i l e .
% i m p o r t T e x t F i l e ( f i l e n a m e , d e l i m i t e r , startRow , numCols )
% S c r i p t f o r i m p o r t i n g d a t a from t h e t e x t f i l e ’ f i l e n a m e ’
s e p a r a t e d by
% ’ d e l i m i t e r ’ , s t a r t i n g i n row ’ startRow ’ w i t h number o f
columns ’ numCols ’ .

%% Format s t r i n g f o r each l i n e o f t e x t :
% A l l columns : d o u b l e ( %f )
% formatSpec = %f %f %f %f . . . % [ ^ \ n\ r ]
% For more i n f o r m a t i o n , s e e t h e TEXTSCAN documentation .
formatSpec = ’ %∗[^\n\ r ] ’ ;
for i =1: numCols
formatSpec = s t r c a t ( format , formatSpec ) ;
end
if parenthesis
formatSpec = s t r c a t ( ’ ( ’ , formatSpec ) ;
end

%% Read columns o f d a t a a c c o r d i n g t o format s t r i n g .


f i l e I D = fopen ( f i l e n a m e , ’ r ’ ) ;
impData = t e x t s c a n ( f i l e I D , formatSpec , ’ D e l i m i t e r ’ , d e l i m i t e r , ’
CommentStyle ’ , ’ // ’ , ’ EmptyValue ’ ,NaN, ’ HeaderLines ’ , startRow
−1, ’ ReturnOnError ’ , t r u e ) ;
impData = c e l l f u n (@( x ) x (~ isnan ( x ) ) , impData , ’ un ’ , 0 ) ;
fclose ( f i l e I D ) ;

151
Apéndices

end

B.13. PLOTCASE

codigo/functions/plot/plotCase.m
% 21/02/2018
% C a r l o s Moreno Montagud

function num_comp = p l o t C a s e ( p l o t t i n g )

%% V a r i a b l e s
num_comp = [ ] ;
% Legends
i f strcmp ( p l o t t i n g . legend_mode , ’ auto ’ )
p l o t t i n g . legend_exp = p l o t t i n g . legend_auto_exp ;
p l o t t i n g . legend_sim = p l o t t i n g . legend_auto_sim ;
e l s e i f strcmp ( p l o t t i n g . legend_mode , ’ manual ’ )
p l o t t i n g . legend_exp = p l o t t i n g . legend_manual_exp ;
p l o t t i n g . legend_sim = p l o t t i n g . legend_manual_sim ;
end

%% P l o t l i n e s
if plotting . lines_flag
num_comp . c e n t e r l i n e = p l o t C e n t e r l i n e ( p l o t t i n g ) ;
end

%% P l o t s t a t i o n s
if plotting . stations_flag
num_comp . s t a t i o n s = p l o t S t a t i o n s S y m ( p l o t t i n g ) ;
end

%% P l o t c o n t o u r s
i f plotting . contours_flag
p l o t C o n t o u r s ( p l o t t i n g ) ; %% % % %
end

%% P l o t monitor
i f p l o t t i n g . monitor_flag
% plotPSD ( p l o t t i n g ) ; % % % % %

152
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

end

end

B.14. PLOTCENTERLINE

codigo/functions/plot/plotCenterline.m
% 15/05/2018
% C a r l o s Moreno Montagud

function c e n t e r l i n e = p l o t C e n t e r l i n e ( p l o t t i n g )

%% V a r i a b l e s
% Plotting
EXP = p l o t t i n g .EXP; numEXP = length (EXP) ;
SIM = p l o t t i n g . SIM ; numSIM = length (SIM) ;
save_flag = plotting . save_flag ;
% save_format = p l o t t i n g . save_format ;
legend_exp = p l o t t i n g . legend_exp ;
legend_sim = p l o t t i n g . legend_sim ;

centerline = [ ] ;

% Config
config = plotConfig () ;

sim_markers = c o n f i g . sim_markers ; l e n s = length ( sim_markers ) ;


exp_markers = c o n f i g . exp_markers ; l e n e = length ( exp_markers ) ;
l i n e _ s t y l e = c o n f i g . l i n e _ s t y l e ; l e n l = length ( l i n e _ s t y l e ) ;
c o l o r s = c o n f i g . c o l o r s ; l e n c = length ( c o l o r s ) ;
primes = c o n f i g . primes ; l e n p = length ( primes ) ;

exp_marker_size = c o n f i g . exp_marker_size ;
exp_line_width = c o n f i g . exp_line_width ;
exp_line_style = config . exp_line_style ;
sim_marker_size = c o n f i g . sim_marker_size ;
sim_line_width = c o n f i g . sim_line_width ;

legend_fontsize = config . li nes . legend_fontsize ;

153
Apéndices

xlabel_fontsize = config . lines . xlabel_fontsize ;


ylabel_fontsize = config . lines . ylabel_fontsize ;

%% P l o t
type = p l o t t i n g . c e n t e r l i n e . type ;
nType = length ( type ) ;
for i i =1:nType % ’ v e l o c i t i e s ’
c u r r e n t _ t y p e = type{ i i } ;

struct_type = p l o t t i n g . c e n t e r l i n e . ( current_type ) ;
file_end = struct_type . file_end ;
y_units = s t r u c t _ t y p e . y_units ;

plane = struct_type . plane ;


nPlane = length ( p l a n e ) ;
for j j =1: nPlane % ’ z ’
current_plane = plane { j j };

i f a l l ( i s f i e l d ( s t r u c t _ t y p e , { ’ s t a t i s t i c ’ ’ d i r e c t i o n s ’ })
) %% % % % % % % % % %
s t a t i s t i c = struct_type . s t a t i s t i c ;
n S t a t i s t i c = length ( s t a t i s t i c ) ;
for kk =1: n S t a t i s t i c % ’ mean ’
c u r r e n t _ s t a t i s t i c = s t a t i s t i c {kk } ;

d i r e c t i o n s = struct_type . d i r e c t i o n s ;
n D i r e c t i o n s = length ( d i r e c t i o n s ) ;
for l l =1: n D i r e c t i o n s % ’ a x i a l ’
current_direction = directions { l l };

t i t C e l l = [ { c u r r e n t _ s t a t i s t i c } ,{
current_direction } , file_end ,{ ’
centerline ’ }];
t i t u l o = s t r j o i n ( c e l l f u n ( @upperFirst ,
t i t C e l l , ’ un ’ , 0 ) , ’ ␣ ’ ) ;
f i g = figure ( ’ Units ’ , ’ normalized ’ , ’
O u t e r P o s i t i o n ’ , [ 0 0 1 1 ] , ’Name ’ , t i t u l o ,
’ NumberTitle ’ , ’ o f f ’ , ’ PaperUnits ’ , ’
centimeters ’ ) ; % ’ PaperOrientation ’ , ’
landscape ’

154
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

save_fig = true ;
legends = {};

hold on
grid on
for mm=1:numEXP
try
e x p l i n e = EXP{mm} . c e n t e r l i n e . (
current_plane ) . ( current_type ) . (
current_statistic ) .(
current_direction ) . centerline ;
expx = e x p l i n e ( : , 1 ) ;
expy = e x p l i n e ( : , 2 ) ;
%marker_vector = round ( l i n s p a c e ( 1 ,
l e n g t h ( expy ) , 3 0 ) ) ;
plot ( expx , expy , . . .
’ LineStyle ’ , exp_line_style , . . .
’ Color ’ , ’ k ’ , . . .
’ marker ’ , exp_markers (rem(mm−1,
l e n e ) +1) , . . .
’ MarkerSize ’ , exp_marker_size
, . . . ’ MarkerIndices ’ ,
marker_vector , . . .
’ LineWidth ’ , exp_line_width ) ;
l e g e n d s {end+1} = legend_exp {mm} ;
catch
disp ( ’ e r r o r ␣ p l o t ␣ exp ␣ c e n t e r l i n e ’ ) ;
end
end
for mm=1:numSIM
%f i e l d x = s t r c a t ( ’ SIM{mm} . c e n t e r l i n e
. ’ , c u r r e n t _ t y p e , ’ . coords ’ ) ;
%f i e l d y = s t r c a t ( ’ SIM{mm} . c e n t e r l i n e
. ’ , current_type , ’ . ’ ,
current_statistic , ’. ’ ,
current_direction , ’ . line ’) ;
try
simx = SIM{mm} . c e n t e r l i n e . (
current_plane ) . ( current_type ) .
coords ;

155
Apéndices

simy = SIM{mm} . c e n t e r l i n e . (
current_plane ) . ( current_type ) . (
current_statistic ) .(
current_direction ) . centerline ;
marker_vector = round ( linspace ( 1 ,
length ( simy ) , primes (rem(mm−1,
l e n p ) +1) ) ) ;
plot ( simx , simy , . . .
’ L i n e S t y l e ’ , l i n e _ s t y l e (rem(mm
−1, l e n l ) + 1 , : ) , . . .
’ Color ’ , c o l o r s (rem(mm−1, l e n c )
+1) , . . .
’ marker ’ , sim_markers (rem(mm−1,
l e n s ) +1) , . . .
’ m a r k e r s i z e ’ , sim_marker_size
,...
’ M a r k e r I n d i c e s ’ , marker_vector
,...
’ LineWidth ’ , sim_line_width ) ;
l e g e n d s {end+1} = legend_sim {mm} ;

% Numeric comparison % % % % % % %
i f p l o t t i n g . compare_flag
for nn=1:numEXP
e x p l i n e = EXP{nn } .
centerline .(
current_plane ) . (
current_type ) . (
current_statistic ) .(
current_direction ) .
centerline ;
expx = e x p l i n e ( : , 1 ) ;
expy = e x p l i n e ( : , 2 ) ;

% Interpolation
simy2 = interp1 ( simx , simy ,
expx , ’ l i n e a r ’ , ’ e x t r a p ’ )
;
c e n t e r l i n e . ( current_type ) (
nn ,mm) = mean( abs ( expy−

156
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

simy2 ) . / ( abs ( expy )+abs (


simy2 ) ) ) ; %% % % % % %
end
disp ( [ ’ c e n t e r l i n e ␣ ’
current_type ] ) ;
disp ( c e n t e r l i n e . ( c u r r e n t _ t y p e )
);
end
catch
disp ( ’ e r r o r ␣ p l o t ␣ sim ␣ c e n t e r l i n e ’ ) ;
end
end

% i f error save_fig = f a l s e

% Axis p r o p e r t i e s
%l i m i t s = e v a l ( [ ’ s t r u c t _ t y p e . l i m i t s . ’ ,
current_statistic , ’. ’ , current_direction
]) ;
axis ( s t r u c t _ t y p e . l i m i t s . ( c u r r e n t _ s t a t i s t i c
) . ( current_direction ) ) ;
%warning ( ’ ’ ) ; % C l e a r l a s t warning message
%t i t l e ( s t r c a t ( ’ \ b f \ f o n t s i z e { ’ , num2str (
s t a t i o n s _ f o n t s i z e ) , ’} Station z = ’ ,{ ’
’ } , c u r r e n t _ s t a t i o n , ’mm’ ) ) ;
%p b a s p e c t ( p l o t t i n g . v e l o c i t i e s _ a s p e c t _ r a t i o
);

% Legend
legend_str = s t r c a t ( ’ \ bf \ f o n t s i z e { ’ ,
num2str ( l e g e n d _ f o n t s i z e ) , ’ } ’ , strrep (
l e g e n d s , ’_ ’ , ’ \_ ’ ) ) ;
legend ( l e g e n d _ s t r ) ;

% Labels
x l a b = [ ’ \ b f \ f o n t s i z e { ’ , num2str (
x l a b e l _ f o n t s i z e ) , ’ }␣ C e n t e r l i n e ␣ D i s t a n c e
␣ z ␣ [m] ’ ] ;
xlabel ( x l a b ) ;

157
Apéndices

y l a b C e l l = [ { c u r r e n t _ s t a t i s t i c } ,{
c u r r e n t _ d i r e c t i o n } , f i l e _ e n d , { y_units } ] ;
y l a b = [ ’ \ b f \ f o n t s i z e { ’ , num2str (
y l a b e l _ f o n t s i z e ) , ’ }␣ ’ , s t r j o i n ( c e l l f u n (
@upperFirst , y l a b C e l l , ’ un ’ , 0 ) , ’ ␣ ’ ) ] ;
ylabel ( y l a b ) ;

% Save g r a p h i c s
i f s a v e _ f l a g && s a v e _ f i g

p l o t t i n g . p a p e r S i z e = [ 2 1 1 2 ] ; %21 1 4 . 8
p l o t t i n g . paperPos = [ 0 0 . 2 p l o t t i n g .
paperSize ] ;
plotting . results_file = strjoin (
t i t C e l l , ’_ ’ ) ;

plotSave ( fig , plotting ) ;


end
end
end
else
%% % % % % % % % % % % % % % % % % %
end
end
end

end

B.15. PLOTCONTOURS

codigo/functions/plot/plotContours.m
% 16/05/2018
% C a r l o s Moreno Montagud

function p l o t C o n t o u r s ( p l o t t i n g )

%% V a r i a b l e s
% Plotting
% EXP = p l o t t i n g .EXP; numEXP = l e n g t h (EXP) ;

158
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

SIM = p l o t t i n g . SIM ; numSIM = length (SIM) ;


save_flag = plotting . save_flag ;
% save_format = p l o t t i n g . save_format ;
% l e g end_exp = p l o t t i n g . legend_exp ;
legend_sim = p l o t t i n g . legend_sim ;

% Config
config = plotConfig () ;

% sim_markers = c o n f i g . sim_markers ; l e n s = l e n g t h ( sim_markers )


;
% exp_markers = c o n f i g . exp_markers ; l e n e = l e n g t h ( exp_markers )
;
% line_style = config . line_style ; lenl = length ( line_style ) ;
% colors = config . colors ; lenc = length ( colors ) ;
% primes = c o n f i g . primes ; l e n p = l e n g t h ( primes ) ;

% exp_marker_size = c o n f i g . exp_marker_size ;
% exp_line_width = c o n f i g . exp_line_width ;
% exp_line_style = config . exp_line_style ;
% sim_marker_size = c o n f i g . sim_marker_size ;
% sim_line_width = c o n f i g . sim_line_width ;

% legend_fontsize = config . contours . legend_fontsize ;


t i t l e _ f o n t s i z e = config . contours . t i t l e _ f o n t s i z e ;
xlabel1_fontsize = config . contours . xlabel1_fontsize ;
ylabel1_fontsize = config . contours . ylabel1_fontsize ;
xlabel2_fontsize = config . contours . xlabel2_fontsize ;
ylabel2_fontsize = config . contours . ylabel2_fontsize ;

cmap = c o n f i g . cmap ;

%% P l o t
type = p l o t t i n g . c o n t o u r s . type ;
nType = length ( type ) ;
for i i =1:nType % ’ v e l o c i t i e s ’ , ’ t k e ’
c u r r e n t _ t y p e = type{ i i } ;
s t r u c t _ t y p e = eval ( [ ’ p l o t t i n g . c o n t o u r s . ’ , c u r r e n t _ t y p e ] ) ;

file_end = struct_type . file_end ;

159
Apéndices

y_units = s t r u c t _ t y p e . y_units ;
t i t l e _ e n d = s t r u c t _ t y p e . t i t l e _ e n d ; %% % % % % % % % % % % % %

plane = struct_type . plane ;


nPlane = length ( p l a n e ) ;
for j j =1: nPlane % ’ xz ’
current_plane = plane { j j };

% Figure % % % % % % % % % % % % % % %
i f a l l ( i s f i e l d ( s t r u c t _ t y p e , { ’ s t a t i s t i c ’ ’ d i r e c t i o n s ’ })
) %% % % % % % % % % % % % % % % % % % %
s t a t i s t i c = struct_type . s t a t i s t i c ;
n S t a t i s t i c = length ( s t a t i s t i c ) ;

d i r e c t i o n s = struct_type . d i r e c t i o n s ;
n D i r e c t i o n s = length ( d i r e c t i o n s ) ;

for mm=1:numSIM % c a s e
% Figure
t i t u l o = [ u p p e r F i r s t ( c u r r e n t _ t y p e ) ’ ␣ Contours ␣
’ legend_sim {mm} ] ;
f i g = figure ( ’ Units ’ , ’ normalized ’ , ’
O u t e r P o s i t i o n ’ , [ 0 0 1 1 ] , ’Name ’ , t i t u l o , ’
NumberTitle ’ , ’ o f f ’ , ’ PaperUnits ’ , ’
centimeters ’ ) ; % ’ PaperOrientation ’ , ’
landscape ’
save_fig = true ;
legends = {};

for kk =1: n S t a t i s t i c % ’ mean ’ , ’RMS’


c u r r e n t _ s t a t i s t i c = s t a t i s t i c {kk } ;

for l l =1: n D i r e c t i o n s % ’ a x i a l ’ , ’ r a d i a l ’ ,
’ tangential ’
current_direction = directions { l l };

i n d e x = sub2ind ( [ n S t a t i s t i c
n D i r e c t i o n s ] , kk , l l ) ;
subAxPlot ( i n d e x ) = subplot ( n D i r e c t i o n s
, n S t a t i s t i c , index ) ;

160
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

%f i e l d x = s t r c a t ( ’ SIM{mm} . c o n t o u r s . ’ ,
current_plane , ’ . ’ , current_type , ’ .
coords ’ ) ;
%f i e l d y = s t r c a t ( ’ SIM{mm} . c o n t o u r s . ’ ,
current_plane , ’ . ’ , current_type , ’ . ’ ,
current_statistic , ’. ’ ,
c u r r e n t _ d i r e c t i o n , ’ . contour ’ ) ;
try
simx = SIM{mm} . c o n t o u r s . (
current_plane ) . ( current_type ) .
coords ;
simy = SIM{mm} . c o n t o u r s . (
current_plane ) . ( current_type ) . (
current_statistic ) .(
c u r r e n t _ d i r e c t i o n ) . contour ;
imagesc ( simx ( : , 1 ) , simx ( : , 2 ) , simy ) ;
axis xy
colormap ( cmap ) ;
colorbar ( ’ n o r t h o u t s i d e ’ ) ;

% Legend and l a b e l s
%t i t l e ( [ ’ \ b f \ f o n t s i z e { ’ , num2str (
t i t l e _ f o n t s i z e ) , ’} ’ , upperFirst
( current_statistic ) ’ ’
upperFirst ( current_direction ) ’
’ title_end ]) ;
%x l a b e l ( [ ’ \ b f \ f o n t s i z e { ’ , num2str (
x l a b e l 1 _ f o n t s i z e ) , ’} Distance
’ , c u r r e n t _ p l a n e ( 1 ) , ’ [m] ’ ] ) ;
%y l a b e l ( [ ’ \ b f \ f o n t s i z e { ’ , num2str (
y l a b e l 1 _ f o n t s i z e ) , ’} Distance
’ , c u r r e n t _ p l a n e ( 2 ) , ’ [m] ’ ] ) ;
pbaspect ( struct_type . aspect_ratio )
;
end
end
end

% Labels

161
Apéndices

p1 = get ( subAxPlot ( 1 ) , ’ p o s i t i o n ’ ) ; % p o s i t i o n
o f upper− l e f t a x e s
p2 = get ( subAxPlot ( end ) , ’ p o s i t i o n ’ ) ; %
p o s i t i o n o f lower−r i g h t a x e s
x t i t = s t r c a t ( ’ \ b f \ f o n t s i z e { ’ , num2str (
t i t l e _ f o n t s i z e ) , ’ }␣ ’ , c e l l f u n ( @upperFirst ,
s t a t i s t i c , ’ un ’ , 0 ) , { ’ ␣ ’ } , t i t l e _ e n d , { ’ ␣ ’ } ,
y_units ) ;
y t i t = s t r c a t ( ’ \ b f \ f o n t s i z e { ’ , num2str (
t i t l e _ f o n t s i z e ) , ’ }␣ ’ , c e l l f u n ( @upperFirst ,
d i r e c t i o n s , ’ un ’ , 0 ) ) ;
x l a b = [ ’ \ b f \ f o n t s i z e { ’ , num2str (
x l a b e l 1 _ f o n t s i z e ) , ’ }␣ D i s t a n c e ␣ ’ ,
c u r r e n t _ p l a n e ( 1 ) , ’ ␣ [m] ’ ] ;
y l a b = [ ’ \ b f \ f o n t s i z e { ’ , num2str (
y l a b e l 1 _ f o n t s i z e ) , ’ }␣ D i s t a n c e ␣ ’ ,
c u r r e n t _ p l a n e ( 2 ) , ’ ␣ [m] ’ ] ;
s u b p l o t L a b e l s ( n D i r e c t i o n s , n S t a t i s t i c , p1 , p2 ,
xlab , ylab , x t i t , y t i t ) ;

% Save g r a p h i c s f i g u r e % % % % %
i f s a v e _ f l a g && s a v e _ f i g

% Properties
subWidth = 9 . 9 ;
subHeight = 9 . 9 ;
o f f s e t = [0 −0.5];

p l o t t i n g . p a p e r S i z e = [ subWidth ∗ n S t a t i s t i c
subHeight ∗ n D i r e c t i o n s ] ;
p l o t t i n g . paperPos = [ o f f s e t subWidth ∗
n S t a t i s t i c subHeight ∗ n D i r e c t i o n s + 1 ] ;
p l o t t i n g . r e s u l t s _ f i l e = s t r c a t ( legend_sim {
mm} , ’_ ’ , ’ c o n t o u r ’ , ’_ ’ , f i l e _ e n d ) ;

plotSave ( fig , plotting ) ;


end
end
else
for mm=1:numSIM

162
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

t i t u l o = [ t i t l e _ e n d ’ ␣ ’ legend_sim {mm} ] ;
f i g = figure ( ’ Units ’ , ’ normalized ’ , ’
O u t e r P o s i t i o n ’ , [ 0 0 1 1 ] , ’Name ’ , t i t u l o , ’
NumberTitle ’ , ’ o f f ’ , ’ PaperUnits ’ , ’
centimeters ’ ) ; % ’ PaperOrientation ’ , ’
landscape ’
save_fig = true ;
legends = {};
f i e l d x = s t r c a t ( ’SIM{mm} . c o n t o u r s . ’ ,
c u r r e n t _ p l a n e , ’ . ’ , current_type , ’ . c o o r d s ’ ) ;
f i e l d y = s t r c a t ( ’SIM{mm} . c o n t o u r s . ’ ,
c u r r e n t _ p l a n e , ’ . ’ , current_type , ’ . c o n t o u r ’ ) ;
try
simx = eval ( f i e l d x ) ;
simy = eval ( f i e l d y ) ;
imagesc ( simx ( : , 1 ) , simx ( : , 2 ) , simy ) ;
axis xy
colormap ( cmap ) ;
colorbar

% Legend and l a b e l s
t i t l e ( [ ’ \ b f \ f o n t s i z e { ’ , num2str (
t i t l e _ f o n t s i z e ) , ’ }␣ ’ , t i t l e _ e n d ] ) ;
xlabel ( [ ’ \ b f \ f o n t s i z e { ’ , num2str (
x l a b e l 2 _ f o n t s i z e ) , ’ }␣ D i s t a n c e ␣ ’ ,
c u r r e n t _ p l a n e ( 1 ) , ’ ␣ [m] ’ ] ) ;
ylabel ( [ ’ \ b f \ f o n t s i z e { ’ , num2str (
y l a b e l 2 _ f o n t s i z e ) , ’ }␣ D i s t a n c e ␣ ’ ,
c u r r e n t _ p l a n e ( 2 ) , ’ ␣ [m] ’ ] ) ;
pbaspect ( struct_type . aspect_ratio ) ;

% Save g r a p h i c s f i g u r e
%%%%%%%%%%%%%%%%%%%%
i f s a v e _ f l a g && s a v e _ f i g

% Properties
subWidth = 2 1 ;
subHeight = 1 4 . 8 ;
offset = [0.4 0.4];

163
Apéndices

p l o t t i n g . p a p e r S i z e = [ subWidth
subHeight ] ;
p l o t t i n g . paperPos = [ o f f s e t subWidth
−0.5 subHeight − 0 . 5 ] ;
plotting . results_file = strcat (
legend_sim {mm} , ’_ ’ , ’ c o n t o u r ’ , ’_ ’ ,
file_end ) ;

plotSave ( fig , plotting ) ;


end
end
end
end
end
end

end

B.16. PLOTSAVE

codigo/functions/plot/plotSave.m
% 31/05/2018
% C a r l o s Moreno Montagud

function p l o t S a v e ( f i g , p l o t t i n g )

results_folder = plotting . results_folder ;


results_file = plotting . results_file ;
results_filename = strcat ( results_folder , results_file ) ;
save_format = p l o t t i n g . save_format ;

paperSize = plotting . paperSize ;


paperPos = p l o t t i n g . paperPos ;
set ( f i g , ’ P a p e r S i z e ’ , p a p e r S i z e , ’ P a p e r P o s i t i o n ’ , paperPos ) ;

% Make d i r i f i t does not e x i s t


i f ~exist ( r e s u l t s _ f o l d e r , ’ d i r ’ )
mkdir ( r e s u l t s _ f o l d e r )
end

164
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

% Export t o a l l f o r m a t s needed
for mm=save_format
format = c har (mm) ;
w r i t e F i l e = s t r c a t ( r e s u l t s _ f i l e n a m e , ’ . ’ , format ( 1 : 3 ) ) ;
w r i t e S e a r c h = s t r c a t ( r e s u l t s _ f i l e n a m e , ’ ∗ . ’ , format ( 1 : 3 ) ) ;

% Check i f a l r e a d y e x i s t
i f exist ( writeFile , ’ f i l e ’ )
f i l e s = dir ( w r i t e S e a r c h ) ;
f i l e n a m e = strrep ( f i l e s ( end ) . name , [ ’ . ’ format ( 1 : 3 ) ] , ’ ’
);
version = s t r 2 d o u b l e ( f i l e n a m e ( end ) ) ;
i f isnan ( version )
version = 0 ;
end
% V e r s i o n s from 1 −10. F u r t h e r v e r s i o n s o v e r w r i t e 10
r e s u l t s _ f i l e n a m e = s t r c a t ( r e s u l t s _ f i l e n a m e , num2str (
version +1) ) ;
end

% Save f i g u r e
format = s t r c a t ( ’−d ’ , format ) ;
print ( r e s u l t s _ f i l e n a m e , format ) ;
% p r i n t ( r e s u l t s _ f i l e n a m e , ’ − d t i f f ’ , ’ − r400 ’ ) % r e s o l u t i o n
end

end

B.17. PLOTSTATIONSSYM

codigo/functions/plot/plotStationsSym.m
% 15/05/2018
% C a r l o s Moreno Montagud

function s t a t i o n s = p l o t S t a t i o n s S y m ( p l o t t i n g )

%% V a r i a b l e s
% Plotting

165
Apéndices

EXP = p l o t t i n g .EXP; numEXP = length (EXP) ;


SIM = p l o t t i n g . SIM ; numSIM = length (SIM) ;
save_flag = plotting . save_flag ;
% save_format = p l o t t i n g . save_format ;
legend_exp = p l o t t i n g . legend_exp ;
legend_sim = p l o t t i n g . legend_sim ;

stations = [ ] ;

% Config
config = plotConfig () ;

sim_markers = c o n f i g . sim_markers ; l e n s = length ( sim_markers ) ;


exp_markers = c o n f i g . exp_markers ; l e n e = length ( exp_markers ) ;
l i n e _ s t y l e = c o n f i g . l i n e _ s t y l e ; l e n l = length ( l i n e _ s t y l e ) ;
c o l o r s = c o n f i g . c o l o r s ; l e n c = length ( c o l o r s ) ;
primes = c o n f i g . primes ; l e n p = length ( primes ) ;

exp_marker_size = c o n f i g . exp_marker_size ;
exp_line_width = c o n f i g . exp_line_width ;
exp_line_style = config . exp_line_style ;
sim_marker_size = c o n f i g . sim_marker_size ;
sim_line_width = c o n f i g . sim_line_width ;

stations_fontsize = config . stations . stations_fontsize ;


legend_fontsize = config . stations . legend_fontsize ;
xlabel_fontsize = config . stations . xlabel_fontsize ;
ylabel_fontsize = config . stations . ylabel_fontsize ;

%% P l o t
type = p l o t t i n g . s t a t i o n s . type ;
nType = length ( type ) ;
for i i =1:nType % ’ v e l o c i t i e s ’ , ’ s p e c i e s ’
c u r r e n t _ t y p e = type{ i i } ;

struct_type = p l o t t i n g . s t a t i o n s . ( current_type ) ;
file_end = struct_type . file_end ;
y_units = s t r u c t _ t y p e . y_units ;

plane = struct_type . plane ;

166
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

nPlane = length ( p l a n e ) ;
for j j =1: nPlane % ’ xz ’
current_plane = plane { j j };

i f a l l ( i s f i e l d ( s t r u c t _ t y p e , { ’ s t a t i s t i c ’ ’ d i r e c t i o n s ’ })
) %% % % % % % % % % % % % % % % % % % %
s t a t i s t i c = s t r u c t _ t y p e . s t a t i s t i c ; % ’ mean ’ , ’RMS’
n S t a t i s t i c = length ( s t a t i s t i c ) ;

d i r e c t i o n s = struct_type . d i r e c t i o n s ;
n D i r e c t i o n s = length ( d i r e c t i o n s ) ;
mean_d_temp = zeros (numEXP, numSIM , n D i r e c t i o n s ) ;
RMS_d_temp = zeros (numEXP, numSIM , n D i r e c t i o n s ) ;
for kk =1: n D i r e c t i o n s % ’ a x i a l ’ , ’ r a d i a l ’ , ’
t a n g e n t i a l ’ , ’CH4’
c u r r e n t _ d i r e c t i o n = d i r e c t i o n s {kk } ;

t i t C e l l = { current_direction , file_end {:}};


t i t u l o = s t r j o i n ( c e l l f u n ( @upperFirst , t i t C e l l , ’
un ’ , 0 ) , ’ ␣ ’ ) ;
f i g = figure ( ’ Units ’ , ’ normalized ’ , ’
O u t e r P o s i t i o n ’ , [ 0 0 1 1 ] , ’Name ’ , t i t u l o , ’
NumberTitle ’ , ’ o f f ’ , ’ PaperUnits ’ , ’
centimeters ’ ) ; % ’ PaperOrientation ’ , ’
landscape ’
save_fig = true ;

station_nums = s t r u c t _ t y p e . s t a t i o n s ;
n S t a t i o n s = length ( station_nums ) ;
mean_s_temp = zeros (numEXP, numSIM , n S t a t i o n s ) ;
RMS_s_temp = zeros (numEXP, numSIM , n S t a t i o n s ) ;
for l l =1: n S t a t i o n s % [ 5 10 20 30 4 0 ]
c u r r e n t _ s t a t i o n = num2str ( station_nums ( l l )
);

p l o t _ i n d e x = n S t a t i o n s+2− l l ;
subAxPlot ( p l o t _ i n d e x ) = subplot ( n S t a t i o n s
+1 ,1 , p l o t _ i n d e x ) ;
legends = {};

167
Apéndices

hold on
grid on
for mm=1:numEXP
try
meann = EXP{mm} . s t a t i o n s . (
current_plane ) . ( current_type ) . (
s t a t i s t i c {1}) . (
current_direction ) . ( [ ’ station_ ’
, c u r r e n t _ s t a t i o n , ’mm’ ] ) ;
mean_expx = −meann ( : , 1 ) ; %
%%%%%%%%%%
mean_expy = meann ( : , 2 ) ;
RMS = EXP{mm} . s t a t i o n s . (
current_plane ) . ( current_type ) . (
s t a t i s t i c {2}) . (
current_direction ) . ( [ ’ station_ ’
, c u r r e n t _ s t a t i o n , ’mm’ ] ) ;
RMS_expx = RMS( : , 1 ) ;
RMS_expy = RMS( : , 2 ) ;

% mean
yyaxis l e f t
%marker_vector = round ( l i n s p a c e ( 1 ,
l e n g t h ( mean_expy ) , 3 0 ) ) ;
plot ( mean_expx , mean_expy , . . .
’ LineStyle ’ , exp_line_style , . . .
’ Color ’ , ’ k ’ , . . .
’ marker ’ , exp_markers (rem(mm−1,
l e n e ) +1) , . . .
’ MarkerSize ’ , exp_marker_size
, . . . ’ MarkerIndices ’ ,
marker_vector , . . .
’ LineWidth ’ , exp_line_width ) ;

% RMS
yyaxis right
%marker_vector = round ( l i n s p a c e ( 1 ,
l e n g t h (RMS_expy) , 3 0 ) ) ;
plot (RMS_expx , RMS_expy , . . .

168
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

’ LineStyle ’ , exp_line_style , . . .
’ Color ’ , ’ k ’ , . . .
’ marker ’ , exp_markers (rem(mm−1,
l e n e ) +1) , . . .
’ MarkerSize ’ , exp_marker_size
, . . . ’ MarkerIndices ’ ,
marker_vector , . . .
’ LineWidth ’ , exp_line_width ) ;
l e g e n d s {end+1} = legend_exp {mm} ;
end
end
for mm=1:numSIM
try
simx = SIM{mm} . s t a t i o n s . (
current_plane ) . ( current_type ) .
coords ;
mean_simx = −simx ( simx >=0) ;
RMS_simx = simx ( simx >=0) ;
simy1 = SIM{mm} . s t a t i o n s . (
current_plane ) . ( current_type ) . (
s t a t i s t i c {1}) . (
current_direction ) . ( [ ’ station_ ’
, c u r r e n t _ s t a t i o n , ’mm’ ] ) ;
mean_simy = simy1 ( simx >=0) ;
simy2 = SIM{mm} . s t a t i o n s . (
current_plane ) . ( current_type ) . (
s t a t i s t i c {2}) . (
current_direction ) . ( [ ’ station_ ’
, c u r r e n t _ s t a t i o n , ’mm’ ] ) ;
RMS_simy = simy2 ( simx >=0) ;

% mean
yyaxis l e f t
marker_vector = round ( linspace ( 1 ,
length ( mean_simy ) , primes (rem(mm
−1, l e n p ) +1) ) ) ;
plot ( mean_simx , mean_simy , . . .
’ L i n e S t y l e ’ , l i n e _ s t y l e (rem(mm
−1, l e n l ) + 1 , : ) , . . .

169
Apéndices

’ Color ’ , c o l o r s (rem(mm−1, l e n c )
+1) , . . .
’ marker ’ , sim_markers (rem(mm−1,
l e n s ) +1) , . . .
’ m a r k e r s i z e ’ , sim_marker_size
,...
’ M a r k e r I n d i c e s ’ , marker_vector
,...
’ LineWidth ’ , sim_line_width ) ;

% RMS
yyaxis right
marker_vector = round ( linspace ( 1 ,
length (RMS_simy) , primes (rem(mm
−1, l e n p ) +1) ) ) ;
plot (RMS_simx , RMS_simy , . . .
’ L i n e S t y l e ’ , l i n e _ s t y l e (rem(mm
−1, l e n l ) + 1 , : ) , . . .
’ Color ’ , c o l o r s (rem(mm−1, l e n c )
+1) , . . .
’ marker ’ , sim_markers (rem(mm−1,
l e n s ) +1) , . . .
’ m a r k e r s i z e ’ , sim_marker_size
,...
’ M a r k e r I n d i c e s ’ , marker_vector
,...
’ LineWidth ’ , sim_line_width ) ;
l e g e n d s {end+1} = legend_sim {mm} ;

% Numeric comparison
i f p l o t t i n g . compare_flag
for nn=1:numEXP
meann = EXP{nn } . s t a t i o n s . (
current_plane ) . (
current_type ) . (
s t a t i s t i c {1}) . (
current_direction ) . ( [ ’
station_ ’ ,
c u r r e n t _ s t a t i o n , ’mm’ ] ) ;

170
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

mean_expx = −meann ( : , 1 ) ; %
%%%%%%%%%%
mean_expy = meann ( : , 2 ) ;
RMS = EXP{nn } . s t a t i o n s . (
current_plane ) . (
current_type ) . (
s t a t i s t i c {2}) . (
current_direction ) . ( [ ’
station_ ’ ,
c u r r e n t _ s t a t i o n , ’mm’ ] ) ;
RMS_expx = RMS( : , 1 ) ;
RMS_expy = RMS( : , 2 ) ;

% mean
mean_simy2 = interp1 (
mean_simx , mean_simy ,
mean_expx , ’ l i n e a r ’ , ’
extrap ’ ) ;
s t a t i o n s . ( current_type ) .
mean . ( c u r r e n t _ d i r e c t i o n
) . ( [ ’ station_ ’ ,
c u r r e n t _ s t a t i o n , ’mm’ ] ) (
nn ,mm) = mean( abs (
mean_expy−mean_simy2 )
. / ( abs ( mean_expy )+abs (
mean_simy2 ) ) ) ; %% %
mean_s_temp ( nn ,mm, l l ) =
s t a t i o n s . ( current_type )
. mean . (
current_direction ) . ( [ ’
station_ ’ ,
c u r r e n t _ s t a t i o n , ’mm’ ] ) (
nn ,mm) ;

% RMS
RMS_simy2 = interp1 (
RMS_simx , RMS_simy ,
RMS_expx , ’ l i n e a r ’ , ’
extrap ’ ) ;

171
Apéndices

s t a t i o n s . ( current_type ) .
RMS. ( c u r r e n t _ d i r e c t i o n )
. ( [ ’ station_ ’ ,
c u r r e n t _ s t a t i o n , ’mm’ ] ) (
nn ,mm) = mean( abs (
RMS_expy−RMS_simy2) . / (
abs (RMS_expy)+abs (
RMS_simy2) ) ) ; %% %
RMS_s_temp( nn ,mm, l l ) =
s t a t i o n s . ( current_type )
.RMS. ( c u r r e n t _ d i r e c t i o n
) . ( [ ’ station_ ’ ,
c u r r e n t _ s t a t i o n , ’mm’ ] ) (
nn ,mm) ;
end

i f l l==n S t a t i o n s
s t a t i o n s . ( current_type ) .
mean . ( c u r r e n t _ d i r e c t i o n
) . t o t a l = mean(
mean_s_temp , 3 ) ;
mean_d_temp ( : , : , kk ) =
s t a t i o n s . ( current_type )
. mean . (
current_direction ) .
total ;
s t a t i o n s . ( current_type ) .
RMS. ( c u r r e n t _ d i r e c t i o n )
. t o t a l = mean(
RMS_s_temp , 3 ) ;
RMS_d_temp ( : , : , kk ) =
s t a t i o n s . ( current_type )
.RMS. ( c u r r e n t _ d i r e c t i o n
) . total ;

% d i s p ( [ ’ s t a t i o n s [ mean
RMS] ’ c u r r e n t _ t y p e ’ ’ c u r r e n t _ d i r e c t i o n ] ) ;
% disp ([ stations .(
c u r r e n t _ t y p e ) . mean . ( c u r r e n t _ d i r e c t i o n ) . t o t a l , s t a t i o n s . (
c u r r e n t _ t y p e ) .RMS. ( c u r r e n t _ d i r e c t i o n ) . t o t a l ] ) ;

172
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

i f kk==n D i r e c t i o n s
s t a t i o n s . ( current_type
) . mean . t o t a l = mean
( mean_d_temp , 3 ) ;
s t a t i o n s . ( current_type
) .RMS. t o t a l = mean(
RMS_d_temp, 3 ) ;

disp ( [ ’ s t a t i o n s ␣ ’
current_type ’ ␣ [
mean␣RMS] ’ ] ) ;
disp ( [ s t a t i o n s . (
c u r r e n t _ t y p e ) . mean .
total , stations . (
c u r r e n t _ t y p e ) .RMS.
total ]) ;
end
end

% d i s p ( [ ’ s t a t i o n s [ mean RMS] ’
c u r r e n t _ t y p e ’ ’ c u r r e n t _ d i r e c t i o n ’ ’ c u r r e n t _ s t a t i o n ’mm
’]) ;
% disp ( [ s t a t i o n s . ( current_type
) . mean . ( c u r r e n t _ d i r e c t i o n ) . ( [ ’ s t a t i o n _ ’ , c u r r e n t _ s t a t i o n , ’mm
’ ] ) s t a t i o n s . ( c u r r e n t _ t y p e ) .RMS. ( c u r r e n t _ d i r e c t i o n ) . ( [ ’
s t a t i o n _ ’ , c u r r e n t _ s t a t i o n , ’mm’ ] ) ] ) ;
end
end
end

% i f error save_fig = f a l s e

% Axis p r o p e r t i e s
%e v a l ( s t r c a t ( ’ l i m i t s = p l o t v a r . a x i s . ’ ,
velDir , ’ ; ’ ) ) ;
xlim ( s t r u c t _ t y p e . l i m i t s . x l i m i t ) ;
yyaxis l e f t
ylim ( s t r u c t _ t y p e . l i m i t s . mean . (
current_direction ) ) ;

173
Apéndices

yyaxis right
ylim ( s t r u c t _ t y p e . l i m i t s .RMS. (
current_direction ) ) ;
%warning ( ’ ’ ) ; % C l e a r l a s t warning message
t i t l e ( s t r c a t ( ’ \ b f \ f o n t s i z e { ’ , num2str (
s t a t i o n s _ f o n t s i z e ) , ’ } S t a t i o n ␣ z ␣=␣ ’ ,{ ’ ␣ ’
} , c u r r e n t _ s t a t i o n , ’mm’ ) ) ;
%p b a s p e c t ( p l o t t i n g . v e l o c i t i e s _ a s p e c t _ r a t i o
);
end

% Legend
l e g e n d s = s t r c a t ( ’ \ b f \ f o n t s i z e { ’ , num2str (
l e g e n d _ f o n t s i z e ) , ’ } ’ , strrep ( l e g e n d s , ’_ ’ , ’ \_
’));
l g = legend ( l e g e n d s , ’ O r i e n t a t i o n ’ , ’ h o r i z o n t a l ’
) ; % create legend
l p o s = get ( l g , ’ p o s i t i o n ’ ) ; % g e t l e g e n d
position
subAxPlot ( 1 ) = subplot ( n S t a t i o n s +1 ,1 ,1) ; %
create subplot
set ( subAxPlot ( 1 ) , ’ V i s i b l e ’ , ’ o f f ’ ) ; % h i d e
subplot
pos = get ( subAxPlot ( 1 ) , ’ p o s i t i o n ’ ) ; % g e t
subplot position
set ( l g , ’ p o s i t i o n ’ , [ pos ( 1 ) +(pos ( 3 )−l p o s ( 3 ) ) /2
pos ( 2 )+pos ( 4 ) /4− l p o s ( 4 ) l p o s ( 3 ) l p o s ( 4 ) ∗ 2 ] )
;

% Labels
p1 = get ( subAxPlot ( 2 ) , ’ p o s i t i o n ’ ) ; % p o s i t i o n
o f upper− l e f t a x e s
p2 = get ( subAxPlot ( end ) , ’ p o s i t i o n ’ ) ; %
p o s i t i o n o f lower−r i g h t a x e s
posOuter = [ p1 ( 1 ) p2 ( 2 ) p2 ( 1 )+p2 ( 3 )−p1 ( 1 ) p1
( 2 )+p1 ( 4 )−p2 ( 2 ) ] ;
hAxOuter = axes ( ’ p o s i t i o n ’ , posOuter , ’ c o l o r ’ , ’
none ’ , ’ v i s i b l e ’ , ’ o f f ’ ) ; % an o u t e r a x i s f o r
global p

174
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

x l a b = [ ’ \ b f \ f o n t s i z e { ’ , num2str (
x l a b e l _ f o n t s i z e ) , ’ }␣ R a d i a l ␣ D i s t a n c e ␣ ’ ,
c u r r e n t _ p l a n e ( 1 ) , ’ ␣ [m] ’ ] ;
hX=text ( 0 . 5 , − 0 . 0 5 , xlab , ’ r o t a t i o n ’ , 0 , ’
horizontalalignment ’ , ’ center ’ , ’
v e r t i c a l a l i g n m e n t ’ , ’ top ’ ) ;
y l a b C e l l = s t r j o i n ({ t i t u l o , y_units } , ’ ␣ ’ ) ;
y l a b F i r s t = c e l l f u n ( @upperFirst , s t a t i s t i c , ’ un ’
,0) ;
y l a b = s t r c a t ( ’ \ b f \ f o n t s i z e { ’ , num2str (
y l a b e l _ f o n t s i z e ) , ’ } ’ ,{ ’ ␣ ’ } , y l a b F i r s t , { ’ ␣ ’ } ,
ylabCell ) ;
hY1=text ( − 0 . 0 5 , 0 . 5 , y l a b {1} , ’ r o t a t i o n ’ , 9 0 , ’
horizontalalignment ’ , ’ center ’ , ’
v e r t i c a l a l i g n m e n t ’ , ’ bottom ’ ) ;
hY2=text ( 1 . 0 5 , 0 . 5 , y l a b {2} , ’ r o t a t i o n ’ , −90 , ’
horizontalalignment ’ , ’ center ’ , ’
v e r t i c a l a l i g n m e n t ’ , ’ bottom ’ ) ;

% Save g r a p h i c s f i g u r e
i f s a v e _ f l a g && s a v e _ f i g

% Properties
subHeight = 6 ;
subWidth = 2 5 ;
o f f s e t = [ −0.5 0 ] ;

p l o t t i n g . p a p e r S i z e = [ subWidth subHeight ∗ (
n S t a t i o n s −1) ] ;
p l o t t i n g . paperPos = [ o f f s e t subWidth
subHeight ∗ ( n S t a t i o n s −3/4) ] ;
p l o t t i n g . r e s u l t s _ f i l e = s t r j o i n ( t i t C e l l , ’_
’);

plotSave ( fig , plotting ) ;


end
end
else
%% % % % % % % % % % % % % % % % % %
end

175
Apéndices

end
end

end

%% Secondary f u n c t i o n s
function s t r = u p p e r F i r s t ( data )
s t r = [ upper ( data ( 1 ) ) data ( 2 : end ) ] ;
end

B.18. SUBPLOTLABELS

codigo/functions/plot/subplotLabels.m
% 24/05/2018
% C a r l o s Moreno Montagud

function s u b p l o t L a b e l s (m, n , p1 , p2 , xlab , ylab , x t i t , y t i t )

posOuter = [ p1 ( 1 ) p2 ( 2 ) p2 ( 1 )+p2 ( 3 )−p1 ( 1 ) p1 ( 2 )+p1 ( 4 )−p2 ( 2 ) ] ;


hAxOuter = axes ( ’ p o s i t i o n ’ , posOuter , ’ c o l o r ’ , ’ none ’ , ’ v i s i b l e ’ , ’
o f f ’ ) ; % an o u t e r a x i s f o r g l o b a l p

x_pos_x = ( [ 1 : n]∗2 −1) /(2∗ n )+linspace ( −1 ,1 , n ) ∗ 0 . 0 5 ;


xlab_pos_y = repmat ( −0.02 , s i z e ( x_pos_x ) ) ;
xtit_pos_y = repmat ( 1 . 0 2 , s i z e ( x_pos_x ) ) ;
text ( x_pos_x , xlab_pos_y , xlab , ’ r o t a t i o n ’ , 0 , ’ h o r i z o n t a l a l i g n m e n t
’ , ’ c e n t e r ’ , ’ v e r t i c a l a l i g n m e n t ’ , ’ top ’ ) ;
text ( x_pos_x , xtit_pos_y , x t i t , ’ r o t a t i o n ’ , 0 , ’ h o r i z o n t a l a l i g n m e n t
’ , ’ c e n t e r ’ , ’ v e r t i c a l a l i g n m e n t ’ , ’ top ’ ) ;

y_pos_y = ( [ 1 :m]∗2 −1) /(2∗m) −([m: − 1 : 1 ] − 0 . 9 ) ∗ 0 . 0 4 ;


ylab_pos_x = repmat ( 0 , s i z e ( y_pos_y ) ) ;
ytit_pos_x = repmat ( 0 . 9 5 , s i z e ( y_pos_y ) ) ;
text ( ylab_pos_x , y_pos_y , ylab , ’ r o t a t i o n ’ , 9 0 , ’
h o r i z o n t a l a l i g n m e n t ’ , ’ c e n t e r ’ , ’ v e r t i c a l a l i g n m e n t ’ , ’ bottom ’ )
;
text ( ytit_pos_x , y_pos_y ( end : − 1 : 1 ) , y t i t , ’ r o t a t i o n ’ , −90 , ’
h o r i z o n t a l a l i g n m e n t ’ , ’ c e n t e r ’ , ’ v e r t i c a l a l i g n m e n t ’ , ’ bottom ’ )
;

176
B. CÓDIGO MATLAB PARA POSPROCESAR RESULTADOS

end

177
Documento II

PLIEGO DE
CONDICIONES
Índice de documento

1 Introducción

2 Obligaciones y derechos de los trabajadores

3 Seguridad estructural

4 Superficie y cubicación

5 Suelos, techos y paredes

6 Disposiciones generales

7 Iluminación de emergencia

8 Ventilación, temperatura y humedad

9 Ruidos, vibraciones y trepidaciones

10 Protección contra contactos en equipos eléctricos

11 Electricidad estática

12 Recomendaciones sobre materias inflamables

13 Prevención y extinción de incendios

181
Capítulo 1

Introducción

En este apartado se detalla la normativa de las ordenanzas de seguridad e higiene


en el trabajo, en aquellos artículos que se deberían tener en cuenta para la realización
del presente Trabajo de Fin de Máster.

183
Capítulo 2

Obligaciones y derechos de
los trabajadores

Establece, para los trabajadores, la obligación de cooperar en la prevención de


riesgos profesionales en la empresa y el mantenimiento de la máxima higiene en la
misma, a cuyos fines deberán cumplir fielmente los preceptos de esta Ordenanza y de
sus instrucciones complementarias, así como las órdenes e instrucciones que a tales
efectos les sean dados por sus superiores.

Los trabajadores, expresamente, están obligados a:

Recibir las enseñanzas sobre materia en Seguridad e Higiene y sobre salvamento


y socorrismo en los centros de trabajo que les sean facilitados por la empresa o
en las instrucciones del Plan Nacional.
Usar correctamente los medios de protección personal y cuidar de su perfecto
estado de conservación.
Dar cuenta inmediatamente a sus superiores de las averías y las deficiencias que
puedan ocasionar peligros en cualquier centro o puesto de trabajo.
Cuidar y mantener su higiene personal para evitar enfermedades contagiosas o
molestias a los compañeros de trabajo.
Someterse a los reconocimientos médicos preceptivos y vacunaciones o inmuni-
zaciones ordenados por las Autoridades Sanitarias competentes o por el Servicio
Médico de las Empresas.
No introducir bebidas y otras sustancias no autorizadas en los centros de trabajo.
Tampoco se podrá presentar o permanecer en los mismos en estado de embriaguez
o de cualquier otro género de intoxicación.
Cooperar en la extinción de siniestros y en el salvamento de las víctimas de
accidentes de trabajo en las condiciones que, en cada caso, fueren racionalmente
exigibles.
185
Pliego de condiciones

Todo trabajador, después de solicitar de su inmediato superior medios de pro-


tección personal de carácter preceptivo para la realización de su trabajo, queda
facultado para demostrar la ejecución de éste, en tanto no le sean facilitados
dichos medios, si bien debería dar cuenta del hecho al Comité de Seguridad e
Higiene o a uno de sus compañeros, sin perjuicio, además de ponerlo en conoci-
miento de la Inspección Provincial del Trabajo.

186
Capítulo 3

Seguridad estructural

Todos los edificios permanentes o provisionales, serán de construcción segura y fir-


me para evitar riesgos de desplome y los derivados de los fenómenos atmosféricos. Por
este motivo, los cimientos, pisos y demás elementos de los edificios ofrecerán resis-
tencia suficiente para sostener y suspender con seguridad las cargas para las que han
sido calculados. Además, para preservar esta seguridad, se indicará por medio de ró-
tulos o inscripciones las cargas que los locales pueden soportar o suspender, quedando
totalmente prohibido sobrecargar los pisos y plantas de los edificios.

187
Capítulo 4

Superficie y cubicación

Los locales de trabajo reunirán las siguientes condiciones mínimas: Tres metros de
altura desde el piso al techo. Dos metros cuadrados de superficie por cada trabajador.
Diez metros cúbicos para cada trabajador. No obstante, en los establecimientos comer-
ciales, de servicios y locales destinados a oficinas y despachos, la altura a la que se
refiere el primer punto puede quedar reducida hasta 2:5 m, pero respetando la cubi-
cación que establece el tercer punto, y siempre que el aire se renueve suficientemente.
Para el cálculo de la superficie y el volumen, no se tendrán en cuenta los espacios
ocupados por máquinas, aparatos, instalaciones y materiales.

189
Capítulo 5

Suelos, techos y paredes

El pavimento constituirá un conjunto homogéneo, llano y liso, sin soluciones de


continuidad; será de material consistente, no resbaladizo o susceptible de serlo con el
uso y además, de fácil limpieza. Estará a un mismo nivel; de no ser así, se salvarán
las diferencias de altura por medio de rampas con pendientes no superiores al 10 Por
otro lado, tanto los techos como las paredes, deberán reunir las condiciones suficientes
para resguardar a los trabajadores de las inclemencias del tiempo. Si han de soportar
o suspender cargas, deberán reunir las condiciones que se establecen para estos en el
apartado correspondiente.

191
Capítulo 6

Disposiciones generales

Todos los lugares de trabajo o tránsito tendrán iluminación natural, artificial o


mixta, en cualquier caso, apropiado a las operaciones que en ellos se tengan que realizar.
Aunque la luz, como se acaba de comentar, puede ser natural o artificial, se intentará
que sea natural, en medida de lo posible. Se deberá intensificar la iluminación en
máquinas peligrosas, lugares de tránsito con riesgo de caídas, escaleras y salidas de
emergencia.

193
Capítulo 7

Iluminación de emergencia

En todos los centros de trabajo, se dispondrá de medios de iluminación de emergen-


cia adecuados a las dimensiones de los locales y al número de trabajadores ocupados
simultáneamente, capaces de mantener, al menos durante una hora, la intensidad de
cinco luxes y mediante una fuente de energía independiente del sistema normal de
iluminación.

195
Capítulo 8

Ventilación, temperatura y
humedad

En los lugares de trabajo y sus anexos se mantendrá, por medios naturales o ar-
tificiales, unas condiciones atmosféricas adecuadas, evitando el aire viciado, exceso de
calor o de frío, humedad o sequía y los olores desagradables. En ningún caso, el anhídri-
do carbónico ambiental, podrá sobrepasar la proporción de 50/10000, y el monóxido de
carbono la de 1/10000. En los locales de trabajo cerrados, el suministro de aire fresco
y limpio por hora y por trabajador, será de al menos 30𝑚3 , salvo que se efectúe una
renovación total del aire varias veces por hora, no inferior a seis veces para trabajos
sedentarios, ni a diez veces para trabajos que exijan un esfuerzo físico superior al nor-
mal. En el otro extremo, la circulación de aire en locales cerrados se acondicionará de
modo que los trabajadores no estén expuestos a corrientes molestas y que la velocidad
del aire no exceda de 15𝑚/𝑚𝑖𝑛 con temperatura normal, ni de 45𝑚/𝑚𝑖𝑛 en ambientes
extremadamente calurosos. En los centros de trabajo expuestos a altas y bajas tem-
peraturas, serán evitadas las variaciones bruscas por el medio que se considere más
eficaz. Cuando la temperatura sea extremadamente distinta entre los lugares de tra-
bajo, deberán existir locales de paso para que los operarios se adapten gradualmente
de unas condiciones a las otras. De acuerdo con todo lo anterior, se fijan como lími-
tes de temperatura y humedad en locales y para los distintos trabajos, siempre que el
procedimiento de fabricación lo permita, los siguientes:

Para trabajos sedentarios: de 17∘ C a 22∘ C.


Para trabajos ordinarios: de 15∘ C a 18∘ C.
Para trabajos de acusado esfuerzo muscular: de 12∘ C a 15∘ C.

A pesar de estas limitaciones, todos los trabajadores estarán debidamente protegi-


dos contra las irradiaciones directas y excesivas de calor. La humedad relativa de la
atmósfera oscilará del 40 al 60 %, salvo en instalaciones en las que haya peligro de gene-
rarse electricidad estática. En dicho caso, el valor se deberá limitar necesariamente por
197
Pliego de condiciones

debajo del 50 %. En aquellos trabajos en los que por exigencias del proceso los locales
estén sometidos a calor o frío extremo, se eliminará la permanencia de los operarios,
estableciendo los turnos adecuados en cada caso.

198
Capítulo 9

Ruidos, vibraciones y
trepidaciones

Los ruidos y vibraciones se evitarán o reducirán en la medida de lo posible en su foco


de origen, tratando de aminorar su propagación en los locales en los que se encuentren
personas trabajando. De esta forma, el anclaje de las máquinas y aparatos que pro-
duzcan ruidos, vibraciones y trepidaciones se realizarán con las técnicas más eficaces, a
fin de lograr su óptimo equilibrio estático y dinámico, tales como bancadas cuyo peso
sea superior a 1.5 y 2.5 veces el peso de la máquina que soportan, por aislamiento de
la estructura general o por otros recursos técnicos. Además del anclaje, las máquinas
que produzcan ruidos o vibraciones molestas se aislarán adecuadamente y, en el recinto
de aquellas, sólo trabajará el personal para su mantenimiento durante el tiempo indis-
pensable. Se extremará el cuidado y mantenimiento de las máquinas y aparatos que
produzcan vibraciones molestas o peligrosas a los trabajadores y, muy especialmente,
los órganos móviles y los dispositivos de transmisión de movimiento de las vibraciones
que generan estas máquinas. El control de ruidos agresivos en los centros de trabajo no
se limitará al aislamiento del foco que los produce, sino que también deberán adoptarse
las prevenciones técnicas necesarias para evitar que los fenómenos de reflexión y reso-
nancia alcancen niveles peligrosos para la salud de los trabajadores. Las máquinas y/o
herramientas que originen trepidaciones deberán, además, estar provistas de horquillas
u otros dispositivos amortiguadores y, al trabajador que las utilice se le proveerá de
equipo de protección personal antivibratorio (cinturón, guantes, almohadillas y botas).

199
Capítulo 10

Protección contra contactos


en equipos eléctricos

En las instalaciones y equipos eléctricos, para la protección de las personas contra los
contactos con partes habitualmente en tensión, se adoptaran algunas de las siguientes
prevenciones:

Se alejarán las partes activas de la instalación a distancia suficiente del lugar don-
de las personas habitualmente se encuentran o circulan, para evitar un contacto
fortuito o por la manipulación de objetos conductores, cuando éstos puedan ser
utilizados cerca de estas partes activas de la instalación.
Se recubrirán las partes activas con el aislamiento apropiado, que permita con-
servar indefinidamente las propiedades del conductor y que limiten la corriente
de contacto a un valor inocuo para las personas.
Se interpondrán obstáculos que impidan todo contacto accidental con las partes
activas de la instalación. Los obstáculos de protección deben estar fijados en
forma segura y ser capaces de resistir los esfuerzos mecánicos usuales.

Para la protección contra los riesgos de contacto con las masas de las instalaciones que
puedan qudar accidentalmente con tensión, se adoptarán, en corriente alterna, uno o
varios de los siguientes dispositivos de seguridad.

Puesta a tierra de las masas. Las masas deben estar unidas eléctricamente a una
toma de tierra o a un conjunto de tomas de tierra interconectadas, que tengan
una resistencia apropiada. Las instalaciones, tanto con neutro aislado como con
neutro a tierra, deben estar permanentemente controladas por un dispositivo
que indique automáticamente la existencia de cualquier defecto de aislamiento, o
que separe automáticamente la instalación o la parte defectuosa de la fuente de
energía de la que se alimenta.

201
Pliego de condiciones

Dispositivos de corte automático o de aviso, sensibles a la corriente de defecto


(interruptores diferenciales), o a la tensión de defecto (relés de tierra).
Unión equipotencial o por superficie aislada de tierra o de las masas (conexiones
equipotenciales).
Separación de los circuitos de utilización de las fuentes de energía, por medio de
transformadores o grupos convertidores, manteniendo aislados de tierra todos los
conductores del circuito de utilización, incluido el neutro.
Poner doble aislamiento de los equipos y máquinas eléctricas.

En caso de que existan circuitos alimentados mediante corriente contínua, se adoptarán


sistemas de protección adecuados para cada caso, similares a los que se acaban de
mencionar para la corriente alterna.

202
Capítulo 11

Electricidad estática

Para evitar peligros por la acumulación de electricidad estática y, especialmente,


aquellos que pueden venir propiciados por la producción de una chispa en ambientes
inflamables, se adoptarán en general una o incluso ambas precauciones que a continua-
ción se especifican:

La humedad relativa del aire se mantendrá siempre con un valor por debajo del
50 %.
Las cargas de electricidad estática que puedan acumularse en los cuerpos metá-
licos, serán neutralizadas por medio de la conexión de conductores a tierra. La
forma de realizar estas conexiones puede variar dependiendo del tipo de máquina.

203
Capítulo 12

Recomendaciones sobre
materias inflamables

Con respecto al almacenamiento y a la manipulación de las sustancias inflamables,


dada su peligrosidad, estas serán las precauciones que se tendrán que cumplir para
evitar cualquier accidente:

Se prohíbe el almacenamiento conjunto de materiales que al reaccionar entre ellos


puedan originar incendios.
Sólo podrán almacenarse materias inflamables en los lugares y con los límites
cuantitativos señalados por los reglamentos técnicos vigentes. De esta forma, se
almacenarán en locales distintos a los de [Link] el local de trabajo es único, se
deberán construir recintos aislados. En los puestos de trabajo, sólo se depositará
la cantidad estrictamente necesaria para el proceso de fabricación.
En los almacenes de materias inflamables, los pisos deberán ser incombustibles e
impermeables, a fin de evitar la propagación del posible fuego y evitar escapes
hacia sótanos, sumideros o desagües.
Antes de almacenar sustancias inflamables pulverizadas, se comprobará su en-
friamiento.
El llenado de los depósitos de líquidos inflamables se efectuará lentamente y
evitando la caída libre desde orificios de la parte superior, para evitar la mezcla
de los vapores explosivos con el aire. Estos recipientes de líquidos se rotularán,
indicando su contenido y las precauciones necesarias para su manipulación.
Antes de almacenar envases de productos inflamables, se comprobará su cierre
hermético y si han sufrido algún deterioro o rotura, para evitar posibles fugas.
El envasado y embalaje de sustancias inflamables se efectuará, siempre que sea
posible, fuera de los almacenes de donde procedan, con las precauciones y equipos
de protección adecuados a cada caso.

205
Pliego de condiciones

El transporte de materias inflamables se efectuará con estricta sujeción a las


normas fijadas en dispositivos legales vigentes y acuerdos internacionales sobre
tal materia, ratificados por el Estado Español.

206
Capítulo 13

Prevención y extinción de
incendios

En los centros de trabajo que ofrezcan peligro de incendios, con o sin explosión,
se adoptarán las prevenciones que se indican a continuación, combinando su empleo
con la protección general más próxima que puedan prestar los servicios públicos contra
incendios:

Donde existan conducciones de agua a presión, se instalarán suficientes tomas


o bocas de agua, a distancia conveniente entre sí y cercanas a los puestos fijos
de trabajo y lugares de paso del personal, colocando junto a las mismas las
correspondientes mangueras, con la sección y resistencia adecuadas para soportar
la presión.
Cuando se carezca de agua a presión o sea insuficiente, se instalarán depósitos
con volumen suficiente para poder combatir posibles incendios.
En los incendios provocados por líquidos, grasas, pinturas inflamables o polvos
orgánicos, sólo se debe emplear agua, además muy pulverizada.
No se debe emplear agua para extinguir fuegos en polvos de aluminio o magnesio
en presencia de carburo de calcio u otras sustancias que, en contacto con el agua,
produzcan explosiones, gases inflamables o incluso nocivos.
En incendios que afecten a instalaciones eléctricas con tensión, se prohibirá el
empleo de extintores de espuma química, soda ácida o agua.
En la proximidad a los puestos de trabajo con mayor riesgo de incendio se dis-
pondrán, colocados en un sitio visible y accesible fácilmente, extintores portátiles
o móviles sobre ruedas, de espuma física, química o mezcla de ambas, o polvos
secos, anhídrido carbónico o agua, según convenga a la causa determinante del
fuego a extinguir.

207
Pliego de condiciones

Cuando se empleen distintos tipos de extintores deberán estar rotulados con


carteles indicadores del lugar o clase de incendio en el que deban emplearse.
Estos extintores serán revisados periódicamente y cargados según las normas de
las casas constructoras, inmediatamente después de usarlos.
Se instruirá al personal, cuando sea necesario, del peligro que presenta el empleo
de tetracloruro de carbono y cloruro de metilo en atmósferas cerradas, y de las
reacciones químicas peligrosas que puedan producirse en los locales de trabajo
entre los líquidos extintores y las materias sobre las que puedan proyectarse.
En las dependencias con alto riesgo de incendio, queda terminantemente prohibi-
do fumar o introducir cerillas, mecheros o útiles de ignición. Esta prohibición se
indicará con carteles visibles a la entrada y en los espacios libres de las paredes
de tales dependencias.
Se prohíbe, igualmente, al personal introducir o emplear útiles de trabajo no auto-
rizados por la empresa, que puedan ocasionar chispas por contacto o proximidad
a sustancias inflamables.
Es obligatorio el uso de guantes, manoplas, mandiles o trajes ignífugos y de
calzado especial contra incendios, que las empresas facilitarán a los trabajadores
para uso individual.

208
Documento III

PRESUPUESTO
Índice de documento

1 Introducción

2 Costes referidos a los recursos humanos


2.1. Metodología aplicada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
2.2. Presupuesto de recursos humanos . . . . . . . . . . . . . . . . . . . . . 216

3 Coste referidos a los equipos


3.1. Metodología aplicada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
3.2. Presupuesto de los equipos . . . . . . . . . . . . . . . . . . . . . . . . . 218

4 Costes generales

5 Presupuesto total

211
Capítulo 1

Introducción

En este documento se va a realizar un estudio de los costes que lleva consigo la


realización del presente proyecto. La moneda para la estimación de los costes en el
presente documento es el euro (EUR).

El presupuesto necesario para abordar el presente trabajo puede desglosarse en dos


partidas principales:

Costes referidos a los recursos humanos: tienen en cuenta la participación de un


becario, de un profesor ayudante en calidad de doctor y de un doctorando.
Costes referidos a los equipos: en este caso particular, dado que el Instituto Uni-
versitario CMT-Centro de Motores Térmicos disponía con anterioridad de los
equipos informáticos necesarios para el desarrollo del presente trabajo, única-
mente se contabilizarán las amortizaciones en la utilización de los equipos.
Costes generales: permiten incluir otras partidas asociadas a imprevistos, gestión
y medios auxiliares.

Con todo, teniendo en cuenta que el Trabajo Final de Máster únicamente ha cons-
tado de un estudio computacional, se realizará un presupuesto parcial de la misma y un
presupuesto total. Adicionalmente, se aplican los precios correspondientes a las tarifas
legales vigentes en el caso de ser conocidas o aplicado estimaciones de no serlo, siempre
manteniendo una coherencia en la misma. El presupuesto total se define como la suma
de los presupuestos parciales, con un 50 % adicional en concepto de los medios auxilia-
res y/o costes imprevistos. Finalmente, se le aplica el IVA vigente. A continuación se
muestran cada uno de los costes descritos anteriormente.

213
Capítulo 2

Costes referidos a los


recursos humanos

En esta fase han participado como recursos humanos un total de tres profesionales:

Becario Ingeniero Aeronáutico: encargado de lanzar simulaciones, programar las


rutinas de posprocesado, analizar resultados, sacar conclusiones y proponer po-
sibles soluciones.
Doctorando Ingeniero Aeronáutico: propone la línea general de los estudios y si-
mulaciones que hay que llevar a cabo, analiza resultados y ayuda con la búsqueda
de soluciones. Su dedicación es alta ya que este trabajo forma parte de la línea
de investigación concreta para una tesis doctoral.
Doctor Ingeniero Aeronáutico: su labor es la de supervisar que todo el trabajo
transcurre conforme a lo establecido. En cualquier situación problemática, ayuda
a resolver la misma. Su dedicación es parcial.

Además de los recursos humanos, se deben incluir en este apartado los costes de
amortización del equipo informático utilizado como herramienta de trabajo. Esta etapa
ha abarcado un período de seis meses. También se incluye en este apartado el período
de amortización del software utilizado.

2.1. METODOLOGÍA APLICADA

A continuación, en la tabla 2.1 se muestra una relación de los costes anuales y


tasas horarias para presupuestar la partida de recursos humanos, considerando 220
días laborables al año y 8 horas de trabajo al día, a excepción del caso del becario, con
4 horas de trabajo diarias:

215
Presupuesto

Categoría Coste anual [EUR] Tasa horaria [EUR/h]


Becario Ingeniero Aeronáutico 4400 5
Doctorando Ingeniero Aeronáutico 11000 6.67
Doctor Ingeniero Aeronáutico 24481.42 14.84

2.2. PRESUPUESTO DE RECURSOS HUMANOS

Una vez obtenidos los datos de tasa horaria recogidas en la tabla 2.1, estimando
las horas de dedicación de cada uno de los integrantes del trabajo se puede obtener la
cuantía del coste de cada uno de ellos, ver tabla 2.2:

Categoría Dedicación [h] Tasa horaria [EUR/h] Coste [EUR]


Becario Ingeniero Aeronáutico 600 5 3000
Doctorando Ingeniero Aeronáutico 300 6.67 2001
Doctor Ingeniero Aeronáutico 120 14.84 1780.8
TOTAL 6781.8

El coste en recursos humanos se estima por tanto en SEIS MIL SETECIENTOS


OCHENTA Y UN EUROS Y OCHENTA CÉNTIMOS.

216
Capítulo 3

Coste referidos a los equipos

A continuación se contabilizará la amortización del uso de equipos informáticos y


el coste de las licencias de software utilizadas.

3.1. METODOLOGÍA APLICADA

Durante el desarrollo del proyecto se han empleado una estación de trabajo y un


ordenador portátil particular, así como las licencias del software MATLAB, Microsoft
Office, ANSYS y CONVERGE. Estas licencias son anuales y se han obtenido de otros
trabajos similares, sin embargo la licencia de OpenFOAM es libre.

El coste de amortización por año del equipo informático se calcula como la ecuación
3.1.
𝑉𝐶 − 𝑉𝑅
𝑎= (3.1)
𝑛
Donde:

𝑉𝐶 es el valor de compra del equipo. Para el caso del portátil particular es de 670
EUR, y para la estación de trabajo 5000 EUR.
𝑉𝑅 es el valor residual del equipo. Para el caso de un portátil y una estación de
trabajo se estima en un 20 % del valor de compra.
𝑛 es el periodo de amortización. Para el caso de un portátil particular se ha
estimado en 5 años, y para la estación de trabajo 4.

Para calcular el coste de las horas de cálculo se estima el precio por núcleo y hora de
0.01 EUR. Las simulaciones se han realizado en aproximadamente 5 meses, utilizando
Altamira, 2 cuentas de RIGEL con 64 núcleos cada una y la estación de trabajo con
32 núcleos. En la tabla 3.1 se recoge el desglose de núcleos y horas.

𝐶𝑜𝑠𝑡𝑒𝑠𝑖𝑚𝑢𝑙𝑎𝑐𝑖𝑜𝑛𝑒𝑠 = 0.01[𝐸𝑈 𝑅/𝑐𝑜𝑟𝑒ℎ] * 826000[𝑐𝑜𝑟𝑒ℎ] = 8260[𝐸𝑈 𝑅] (3.2)


217
Presupuesto

Concepto Número de horas [h] Núcleos [cores] Coste computacional [core h]


Altamira - - 250000
RIGEL 7200 64 460800
Estación 3600 32 115200
TOTAL 826000

Por otra parte se incluye el coste de electricidad de los equipos en este apartado por
la brevedad del mismo. Se ha calculado teniendo en cuenta la aproximación de horas de
dedicación en la tabla 2.2 y que el precio de la electricidad ronda los 0,15 EUR/kWh.

𝐶𝑜𝑛𝑠𝑢𝑚𝑜 = 0.09[𝑘𝑊 ] * 1020[ℎ] = 91.8[𝑘𝑊 ℎ] (3.3)


𝐶𝑜𝑛𝑠𝑢𝑚𝑜 = 91.8[𝑘𝑊 ℎ] * 0.15[𝐸𝑈 𝑅/𝑘𝑊 ℎ] = 13.77[𝐸𝑈 𝑅] (3.4)

3.2. PRESUPUESTO DE LOS EQUIPOS

En la tabla 3.2 se recogen todos y cada uno de los costes de licencia y equipos
necesarios en el desarrollo del presente trabajo. Los precios anuales se han multiplicado
por 0.67 debido a que el TFM ha durado 8 meses.

Concepto Coste [EUR]


Estación de trabajo 670
Portátil particular 71.824
Coste simulaciones 8260
Coste electricidad 13.77
Microsoft Office 77.05
Licencia ANSYS 1340
Licencia MATLAB 1523
Licencia OpenFOAM 0
Licencia CONVERGE 1340
TOTAL 13295.644

El coste en equipos se estima por tanto en TRECE MIL DOSCIENTOS NOVENTA


Y CINCO EUROS Y SESENTA Y CUATRO CÉNTIMOS.

218
Capítulo 4

Costes generales

En este apartado se tienen en cuenta los costes relacionados con los imprevistos y
medios auxiliares. Se estiman como el 5 % de la suma de los costes de personal y de
equipos, según lo recogido en la tabla 4:

Concepto Coste [EUR]


Costes de personal 6781.8
Costes de equipos 13295.644
Subtotal 20077.444
Costes generales (5 %) 1003.872

El coste general se estima en MIL TRES EUROS Y OCHENTA Y SIETE CÉNTI-


MOS.

219
Capítulo 5

Presupuesto total

El presupuesto total queda definido como la suma de los costes de recursos humanos,
costes de equipo y costes generales, aplicándoles el IVA correspondiente. Pueden verse
en la tabla 5:

Concepto Coste [EUR]


Costes de personal 6781.8
Costes de equipos 13295.644
Costes generales 1003.872
Subtotal 21081.316
IVA (21 %) 4427.076
TOTAL 25508.392

Por lo tanto, puede decirse que el presupuesto total estimado para la realización del
Trabajo Final de Máster es de VEINTICINCO MIL QUINIENTOS OCHO EUROS Y
TRENTA Y NUEVE CÉNTIMOS.

221

También podría gustarte