Módulo de termoquímica y pre-dimensionamiento de quemadores de baja presión

1. Propósito

Este documento describe el módulo de termoquímica, balances de combustión y pre-dimensionamiento hidráulico de quemadores de baja presión incorporado a la aplicación Calculador.

El desarrollo busca proporcionar una base de cálculo reutilizable para:

  • análisis de cromatografías de gases combustibles;

  • cálculo de propiedades requeridas en hojas de datos API 537;

  • balances de aire y productos de combustión;

  • estimación de carga térmica;

  • dimensionamiento hidráulico preliminar de puertos de quemador;

  • análisis paramétrico de diámetro, número de puertos y caída de presión;

  • evaluación hidráulica de turndown;

  • evaluación preliminar de bancos o staging de puertos.

El alcance actual es de ingeniería conceptual y pre-dimensionamiento. El módulo todavía no predice estabilidad de llama, flashback, blowoff, levantamiento de llama, emisiones, ruido, interacción entre chorros, radiación, recirculación interna ni integridad térmica del quemador.


2. Ubicación en la aplicación

El código se encuentra en:

src/logic/thermo/cantera/

Los ensayos automatizados se encuentran en:

tests/thermo/

La ubicación es coherente con la arquitectura existente, donde los motores termodinámicos se concentran bajo src/logic/thermo/. En particular, el nuevo módulo convive con:

src/logic/thermo/neqsim_service.py

La estructura actualmente implementada es:

src/logic/thermo/cantera/
├── __init__.py
├── api537_properties.py
├── burner_port_hydraulics.py
├── burner_port_sensitivity.py
├── burner_staging.py
├── cantera_service.py
├── combustion_flow_balance.py
├── engineering_properties.py
├── gas_composition.py
├── gas_properties.py
├── hydrocarbon_data.py
├── species_map.py
├── stoichiometric_data.py
└── stoichiometry.py

Pruebas asociadas:

tests/thermo/
├── test_burner_port_hydraulics.py
├── test_burner_port_sensitivity.py
├── test_burner_staging.py
├── test_cantera_service.py
├── test_combustion_flow_balance.py
└── test_stoichiometry.py

3. Entorno de ejecución

El módulo fue validado en el entorno Conda:

fenicsx-cantera

Versiones verificadas:

Python   3.12.13
Cantera  3.2.0

La instalación de Cantera fue comprobada con el mecanismo gri30.yaml:

53 especies
325 reacciones

El entorno también importa correctamente dolfinx, por lo que puede utilizarse como entorno integrado de cálculo para la aplicación.

Comando de activación:

conda activate fenicsx-cantera
cd ~/Documents/Prodisys/ProdisysApps/Calculador

4. Arquitectura funcional

La secuencia de cálculo implementada es:

Cromatografía
    ↓
GasComposition
    ↓
Propiedades de ingeniería + Cantera
    ↓
Stoichiometry
    ↓
CombustionFlowBalance
    ↓
BurnerPortHydraulics
    ↓
BurnerPortSensitivity
    ↓
BurnerStaging

El diseño separa deliberadamente:

  1. representación y normalización de la composición;

  2. propiedades de ingeniería independientes del mecanismo cinético;

  3. propiedades termoquímicas y de transporte calculadas con Cantera;

  4. estequiometría y balances de combustión;

  5. hidráulica de puertos;

  6. exploración paramétrica;

  7. selección preliminar de bancos activos.

Esta separación permite reemplazar o ampliar cada capa sin modificar las demás.


5. Descripción de los módulos

5.1 species_map.py

Normaliza nombres de componentes provenientes de cromatografías y reportes de laboratorio.

Ejemplos:

METANO       → CH4
ETANO        → C2H6
PROPANO      → C3H8
I-BUTANO     → IC4H10
N-BUTANO     → C4H10
C6+          → C6H14
DIÓXIDO DE CARBONO → CO2

La normalización permite aceptar nombres en español, inglés y abreviaturas.

5.2 hydrocarbon_data.py

Contiene datos de ingeniería para los componentes soportados:

  • masa molecular;

  • LHV molar;

  • HHV molar;

  • volumen molar normal;

  • datos de productos como H2O y SO2.

Estos datos se emplean cuando el mecanismo de Cantera no contiene todas las fracciones pesadas presentes en la cromatografía.

5.3 gas_composition.py

Define el modelo de dominio GasComposition.

Responsabilidades:

  • validar valores negativos o vacíos;

  • consolidar nombres equivalentes;

  • normalizar a fracción molar;

  • exportar fracción molar o porcentaje molar;

  • consultar fracciones por especie;

  • identificar fracción combustible, inerte y oxígeno.

La composición se almacena internamente como fracción molar normalizada.

5.4 engineering_properties.py

Calcula propiedades de ingeniería a partir de la cromatografía completa:

  • masa molecular de la mezcla;

  • densidad ideal a condiciones normales;

  • densidad relativa respecto al aire;

  • LHV en kJ/Nm³;

  • HHV en kJ/Nm³;

  • índice de Wobbe basado en LHV.

Esta capa no depende de las especies disponibles en gri30.yaml.

5.5 cantera_service.py

Encapsula el acceso a Cantera mediante:

  • GasState;

  • CanteraGasService.

Calcula, para las especies reconocidas por el mecanismo:

  • masa molecular;

  • densidad;

  • Cp;

  • Cv;

  • relación Cp/Cv;

  • viscosidad;

  • temperatura adiabática de llama a una relación de equivalencia dada.

También registra:

  • porcentaje molar total de entrada;

  • porcentaje molar usado por Cantera;

  • porcentaje y especies excluidas por el mecanismo.

Esta trazabilidad es obligatoria porque gri30.yaml no contiene todas las fracciones C4, C5 y C6+ usadas en algunas cromatografías de campo.

5.6 api537_properties.py

Integra las dos fuentes de propiedades:

  • propiedades de ingeniería con cromatografía completa;

  • propiedades termoquímicas y de transporte con Cantera.

La interfaz devuelve un único diccionario con:

  • MW;

  • densidad relativa;

  • densidad normal;

  • LHV;

  • HHV;

  • Wobbe;

  • Cp;

  • Cv;

  • Cp/Cv;

  • viscosidad;

  • temperatura adiabática;

  • composición aceptada y excluida por Cantera.

5.7 stoichiometric_data.py

Contiene la composición elemental C/H/O/S de cada especie soportada.

Esta información alimenta los balances elementales de combustión completa.

5.8 stoichiometry.py

Implementa el modelo Stoichiometry sobre una base de 1 kmol de gas combustible.

Calcula:

  • balance elemental;

  • oxígeno estequiométrico neto;

  • aire seco estequiométrico;

  • nitrógeno aportado por el aire;

  • equivalencia entre exceso de aire y relación de equivalencia;

  • productos húmedos;

  • productos secos;

  • fracciones molares de productos.

La expresión base es:

O2,neto = C + H/4 + S - O/2

El oxígeno presente en el gas se acredita una sola vez mediante el balance elemental.

5.9 combustion_flow_balance.py

Conecta la estequiometría con caudales reales.

Entradas:

  • composición;

  • caudal de gas en kg/h o Nm³/h;

  • exceso de aire.

Resultados:

  • caudal molar del gas;

  • caudal normal del gas;

  • aire estequiométrico y real;

  • relación aire/gas molar, másica y volumétrica;

  • caudales por especie en productos húmedos y secos;

  • carga térmica por LHV y HHV;

  • cierre del balance de masa.

El modelo exige que se especifique exactamente una base de caudal.

5.10 burner_port_hydraulics.py

Implementa el pre-dimensionamiento hidráulico de puertos circulares idénticos.

Modelo principal:

m_dot = Cd · A · sqrt(2 · rho · deltaP)

Calcula:

  • densidad aguas arriba;

  • caudal volumétrico real;

  • área efectiva requerida;

  • número mínimo de puertos;

  • velocidad media por puerto;

  • caída de presión calculada;

  • Reynolds;

  • velocidad del sonido;

  • Mach;

  • advertencias de validez.

La ecuación se usa únicamente como primera aproximación para flujo subsónico y baja relación de presiones.

5.11 burner_port_sensitivity.py

Genera matrices paramétricas sobre:

  • caudal;

  • fracción de carga;

  • caída de presión asignada a puertos;

  • diámetro de puerto;

  • número de puertos;

  • área abierta;

  • velocidad;

  • Reynolds;

  • Mach;

  • margen de presión.

Incluye dos modos:

  1. dimensionar el número de puertos para cada combinación;

  2. evaluar una geometría fija a diferentes caudales.

Para una geometría fija se verifica:

velocidad ∝ caudal
caída de presión ∝ caudal²
Reynolds ∝ caudal

5.12 burner_staging.py

Evalúa un quemador dividido en bancos activables de igual número de puertos.

El módulo:

  • construye la geometría activa para cada número de bancos;

  • evalúa velocidad, caída de presión, Reynolds y Mach;

  • filtra por límites hidráulicos preliminares;

  • selecciona la alternativa aceptable con mayor número de bancos activos para favorecer la distribución espacial.

Los límites de velocidad utilizados hasta ahora son filtros hidráulicos de exploración y no criterios demostrados de estabilidad de llama.


6. Caso de cálculo utilizado para validación

6.1 Composición de prueba

La cromatografía usada durante el desarrollo fue:

Componente

% molar de entrada

Metano

67.119

Etano

6.710

Propano

4.277

i-Butano

1.000

n-Butano

1.000

i-Pentano

0.500

n-Pentano

0.500

C6+ representado como C6H14

0.300

CO2

6.059

N2

4.373

O2

0.135

La suma del reporte de prueba no es 100 %. GasComposition renormaliza la mezcla antes de cualquier cálculo.

6.2 Propiedades de ingeniería obtenidas

Propiedad

Resultado

Masa molecular

22.55985 kg/kmol

Densidad normal ideal

1.00651 kg/Nm³

Densidad relativa al aire

0.77887

LHV

39,740.73 kJ/Nm³

HHV

43,787.45 kJ/Nm³

Índice de Wobbe, LHV

45,030.27 kJ/Nm³

6.3 Resultados de Cantera con gri30.yaml

Para la composición parcial reconocida por el mecanismo:

Propiedad

Resultado

Cp

1,837.30 J/(kg·K)

Cv

1,441.05 J/(kg·K)

Cp/Cv

1.27497

Viscosidad

1.1669×10⁻⁵ Pa·s

Viscosidad

0.0116688 mPa·s

Temperatura adiabática, phi = 1

2,216.18 K

Las especies pesadas excluidas deben reportarse junto con estos resultados.


7. Balance de combustión para 200 kg/h

Condiciones:

Caudal de gas       200 kg/h
Temperatura         300 K para hidráulica
Exceso de aire      20 %
Presión de descarga 101325 Pa absolutos

Resultados principales:

Variable

Resultado

Caudal molar de gas

8.86531 kmol/h

Caudal normal de gas

198.707 Nm³/h

Aire estequiométrico

13.4295 kg aire/kg gas

Aire real

16.1154 kg aire/kg gas

Caudal real de aire

3,223.08 kg/h

Caudal normal de aire

2,503.98 Nm³/h

Carga térmica por LHV

2.19355 MW

Carga térmica por HHV

2.41691 MW

Productos húmedos

3,423.07 kg/h

Productos húmedos, normal

2,731.60 Nm³/h

Productos secos, normal

2,322.03 Nm³/h

Error relativo de masa

-1.17×10⁻⁶

El residuo de masa de aproximadamente -0.004 kg/h se atribuye al redondeo de masas moleculares tabuladas.


8. Dimensionamiento hidráulico preliminar

8.1 Caso con 1 oz/in² asignada completamente a puertos

Para 200 kg/h, 300 K, Cd = 0.70:

Variable

Resultado

Área abierta requerida

0.002818 m²

Área abierta requerida

28.18 cm²

Velocidad media

21.42 m/s

Mach

aproximadamente 0.057

Distintas combinaciones de diámetro y número de puertos producen prácticamente el mismo resultado cuando conservan la misma área abierta total.

Ejemplos equivalentes:

Diámetro

Número de puertos

Área total aproximada

4 mm

225

0.002827 m²

6 mm

100

0.002827 m²

10 mm

36

0.002827 m²

12 mm

25

0.002827 m²

15 mm

16

0.002827 m²

20 mm

9

0.002827 m²

Este caso es útil como referencia, pero no debe usarse como diseño final porque la presión disponible también debe cubrir tubería, accesorios, válvulas, manifold, distribución interna y margen de operación.

8.2 Sensibilidad a caída de presión asignada a puertos

Para 200 kg/h y puertos de 10 mm:

ΔP disponible, oz/in²

Número de puertos

Área total, cm²

Velocidad, m/s

ΔP calculada, oz/in²

Re

0.25

72

56.55

10.71

0.249

8,419

0.30

66

51.84

11.68

0.296

9,185

0.40

57

44.77

13.52

0.397

10,635

0.50

51

40.06

15.10

0.496

11,886

0.60

47

36.91

16.38

0.584

12,898

0.75

42

32.99

18.32

0.731

14,433

1.00

36

28.27

21.35

0.993

16,839

El candidato seleccionado para estudiar turndown fue:

57 puertos × 10 mm
Cd = 0.70
ΔP de diseño en puertos ≈ 0.40 oz/in²

9. Turndown hidráulico de geometría fija

Resultados para 57 puertos de 10 mm, todos abiertos:

Caudal, kg/h

Turndown

Velocidad, m/s

ΔP, oz/in²

Re

200

1.00

13.484

0.39624

10,635

150

1.33

10.113

0.22289

7,976

100

2.00

6.742

0.09906

5,317

66

3.03

4.450

0.04315

3,510

50

4.00

3.371

0.02477

2,659

40

5.00

2.697

0.01585

2,127

20

10.00

1.348

0.00396

1,063

La geometría fija pierde impulso rápidamente al disminuir el caudal. A 20 kg/h el Reynolds cae por debajo de 2,000. Esto motivó la evaluación de bancos.


10. Evaluación preliminar de staging

Configuración:

57 puertos totales
3 bancos
19 puertos por banco
Diámetro de puerto 10 mm
Cd = 0.70
ΔP máxima permitida en puertos 0.40 oz/in²
Ventana hidráulica preliminar de velocidad 4 a 16 m/s

Resultados seleccionados por el algoritmo:

Caudal, kg/h

Bancos activos

Puertos activos

Velocidad, m/s

ΔP, oz/in²

Re

Estado

20

1

19

4.056

0.0358

3,190

Aceptable

40

2

38

4.056

0.0358

3,190

Aceptable

50

2

38

5.069

0.0559

3,988

Aceptable

66

3

57

4.461

0.0433

3,510

Aceptable

100

3

57

6.759

0.0993

5,317

Aceptable

150

3

57

10.139

0.2235

7,976

Aceptable

200

3

57

13.518

0.3973

10,635

Aceptable

Interpretación:

  • El staging mantiene velocidades superiores a las de la geometría completa a bajo caudal.

  • Todos los puntos cumplen el límite hidráulico preliminar de 0.40 oz/in².

  • Todos los puntos seleccionados permanecen por encima de Reynolds 3,000.

  • La coincidencia de velocidad entre 20 kg/h con un banco y 40 kg/h con dos bancos es consecuencia directa de duplicar simultáneamente caudal y área activa.

La condición “Aceptable” significa únicamente que el caso cumple los límites hidráulicos ingresados. No constituye validación de estabilidad o desempeño de combustión.


11. Caso consolidado FB-1602

11.1 Base de cálculo

El caso FB-1602 corresponde a un combustor cerrado con capacidad contractual de 200 kg/h. La presión manométrica disponible en la entrada de gas es 430.92 Pa y la elevación de referencia es 172 m sobre el nivel del mar.

Para mantener trazabilidad entre los cálculos de ingeniería y los cálculos termoquímicos se usan dos representaciones de la corriente:

  • composición real: se conserva para peso molecular, densidad, balances, estequiometría, caudal de aire, potencia contractual e hidráulica;

  • sustituto GRI30: se usa para equilibrio, propiedades termoquímicas, transporte, temperatura adiabática y velocidad laminar de llama.

MW real = 31.077110 kg/kmol
potencia contractual = 1.950000 MW
potencia LHV calculada = 2.041778 MW

11.2 Sustituto compatible con GRI30

Los hidrocarburos C4 a C10 se representan mediante propano y etileno:

[ \mathrm{C_nH_{2n+2}} \rightarrow \mathrm{C_3H_8} + \frac{n-3}{2}\mathrm{C_2H_4} ]

Especie

mol %

CH4

47.683856

C2H6

6.239866

C2H4

10.166058

C3H8

21.015752

CO2

12.908239

N2

1.110348

O2

0.875881

factor de expansión molar = 1.113165
especies excluidas = 0

La transformación conserva carbono, hidrógeno, oxígeno y demanda estequiométrica de oxígeno dentro de la tolerancia numérica.

11.3 Resultados termoquímicos

Para 20 % de exceso de aire:

Temperatura

Densidad del sustituto

Viscosidad

Temperatura adiabática

25 °C

1.122882 kg/m³

1.082684e-5 Pa·s

2071.90 K

40 °C

1.069095 kg/m³

1.133922e-5 Pa·s

2081.32 K

La hidráulica de gas frío usa la densidad obtenida con el peso molecular real.

11.4 Velocidad laminar de llama

La velocidad laminar se calcula con Cantera FreeFlame, mecanismo gri30.yaml, transporte mixture-averaged y dominio de 0.03 m.

Nivel

ratio

slope

curve

Base

4.0

0.10

0.20

Media

3.0

0.06

0.12

Fina

2.5

0.04

0.08

Condición

SL base

SL media

SL fina

Diferencia media-fina

phi = 0.70

0.257347

0.253700

0.251706 m/s

0.792 %

phi = 0.833333

0.371926

0.366365

0.363259 m/s

0.855 %

phi = 1.00

0.457960

0.454598

0.451901 m/s

0.597 %

Valor adoptado:

SL = 0.363259 m/s
T = 25 °C
phi = 0.833333
exceso de aire = 20 %

La relación U/SL es un indicador comparativo, no un criterio único de blowoff o flashback.

11.5 Filosofía de staging

Caudal total

Stage 1

Stage 2

Stage 3

20 kg/h

20

0

0

40 kg/h

40

0

0

66 kg/h

40

26

0

100 kg/h

40

60

0

150 kg/h

40

60

50

200 kg/h

40

60

100

El staging es acumulativo. Las capacidades máximas por stage son 40, 60 y 100 kg/h.

11.6 Geometría seleccionada de puertos

Stage

Toro medio

Rango

Puertos

Diámetro

Pitch

Velocidad

ΔP máxima

1

250 mm

20-40 kg/h

14

12 mm

56.10 mm

2.807-5.897 m/s

36.78 Pa

2

350 mm

26-60 kg/h

20

12 mm

54.98 mm

2.554-6.191 m/s

40.55 Pa

3

470 mm

50-100 kg/h

34

12 mm

43.43 mm

2.890-6.070 m/s

38.98 Pa

El Stage 3 se fija en 34 puertos para permitir división simétrica.

11.7 Doble alimentación por toro

Cada toro dispone de dos entradas opuestas a 180°.

Stage

División

Caudal máximo por rama

ID hidráulico mínimo

1

7 + 7

20 kg/h

27.26 mm

2

10 + 10

30 kg/h

33.38 mm

3

17 + 17

50 kg/h

43.10 mm

Los diámetros son internos hidráulicos mínimos para una velocidad objetivo de 8 m/s. La selección constructiva debe usar el diámetro interno real de la tubería comercial.

11.8 Archivos y resultados

scripts/run_fb1602_cantera.py
scripts/run_fb1602_flame_speed.py
scripts/run_fb1602_flame_refinement.py
scripts/run_fb1602_stage_port_design.py

outputs/fb1602/
outputs/fb1602/flame_speed/
outputs/fb1602/flame_speed_refinement/
outputs/fb1602/stage_port_design/

11.9 Estado y pendientes

El modelo actual incluye composición real, sustituto GRI30, equilibrio, velocidad laminar refinada, staging, puertos y doble alimentación.

Pendientes:

  1. seleccionar diámetros comerciales;

  2. calcular pérdidas de líneas, válvulas y accesorios;

  3. verificar uniformidad circunferencial;

  4. realizar CFD frío;

  5. realizar CFD reaccionante;

  6. revisar estabilidad y emisiones;

  7. validar experimentalmente o con información del proveedor.

12. Pruebas automatizadas

Las pruebas se ejecutan con:

python -m pytest -q \
  tests/thermo/test_stoichiometry.py \
  tests/thermo/test_combustion_flow_balance.py \
  tests/thermo/test_burner_port_hydraulics.py \
  tests/thermo/test_burner_port_sensitivity.py \
  tests/thermo/test_burner_staging.py

Estado verificado:

18 passed

Las pruebas cubren:

  • estequiometría de metano;

  • crédito único del oxígeno contenido en el combustible;

  • conversión entre exceso de aire y phi;

  • selección exclusiva de base másica o volumétrica;

  • equivalencia entre bases de caudal;

  • cierre del balance de masa;

  • ecuación de orificio;

  • cálculo de Reynolds;

  • validación de orden de presiones;

  • tamaño de matrices paramétricas;

  • escalamiento de ΔP con el cuadrado del caudal;

  • escalamiento de Reynolds con el caudal;

  • validación de bancos uniformes;

  • selección de etapa preferida.

test_cantera_service.py existe en la estructura, pero debe incorporarse a la corrida consolidada cuando su contenido y cobertura se revisen.


13. Supuestos y limitaciones actuales

  1. La composición se trata como gas monofásico.

  2. Las fracciones pesadas se representan mediante especies sustitutas, por ejemplo C6+ como C6H14.

  3. gri30.yaml no contiene todas las especies pesadas.

  4. El LHV y HHV se calculan con datos tabulados de ingeniería.

  5. La densidad normal se calcula con gas ideal a 0 °C y 1 atm.

  6. El aire se representa como O2 + 3.7619 N2.

  7. No se incluye humedad del aire.

  8. La combustión estequiométrica se asume completa a CO2, H2O y SO2.

  9. No se predicen CO, NOx, hidrocarburos no quemados ni hollín.

  10. El modelo de puertos es incompresible y usa un Cd suministrado.

  11. No se incluyen pérdidas en líneas, válvulas, manifolds o distribuidores.

  12. El número de bancos del modelo inicial exige reparto uniforme de puertos.

  13. Los límites de velocidad de 4 a 16 m/s son filtros de exploración.

  14. No existe todavía una lógica dinámica de apertura/cierre, histéresis, ignición o confirmación de llama por banco.

  15. No se ha validado el modelo contra datos experimentales ni contra un fabricante.


14. Próximos desarrollos recomendados

Orden sugerido:

  1. Consolidar y versionar la cromatografía real de cada combustor.

  2. Revisar y ampliar test_cantera_service.py.

  3. Implementar cálculo de velocidad laminar de llama para mezclas compatibles con mecanismos seleccionados.

  4. Evaluar mecanismos cinéticos que incluyan fracciones C4–C6.

  5. Incorporar límites de estabilidad como datos experimentales o correlaciones, manteniéndolos separados de los filtros hidráulicos.

  6. Diseñar el manifold y verificar uniformidad de distribución entre puertos.

  7. Construir presupuesto completo de caída de presión desde el tanque hasta el quemador.

  8. Definir estrategia real de staging, válvulas y lógica de control.

  9. Generar geometrías candidatas para CFD no reactivo.

  10. Ejecutar CFD de mezcla y distribución de aire.

  11. Ejecutar CFD reactivo con radiación.

  12. Diseñar y ensayar prototipo de laboratorio.

  13. Integrar una interfaz de usuario en la aplicación.

  14. Exportar resultados a reportes y hojas de datos API 537.


15. Criterio de uso

Los resultados actuales son apropiados para:

  • comparar alternativas geométricas;

  • construir presupuestos de presión;

  • detectar configuraciones hidráulicamente inviables;

  • preparar casos CFD;

  • establecer hipótesis de diseño;

  • documentar trazabilidad de cálculos preliminares.

No deben utilizarse por sí solos para fabricar, certificar o poner en servicio un quemador. La selección final requiere validación de combustión, CFD, ensayos, revisión de seguridad, instrumentación, materiales y cumplimiento de los códigos aplicables.