STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
engine.pipeline.spalding Namespace Reference

Functions

float calculate_vapor_pressure (float Ts, str fuel="RP-1")
Tuple[float, float] calculate_droplet_surface_temperature (float Tc, float Pc, Optional[Dict] fuel_props=None)
float calculate_spalding_number (float Tc, float Pc, Optional[float] T_s=None, Optional[Dict] fuel_props=None, bool use_reference_pressure=False)
float calculate_spalding_pressure_based (float Tc, float Pc, Optional[float] T_s=None, Optional[Dict] fuel_props=None, bool use_reference_pressure=True)
float calculate_film_diffusivity (float Tf, float Pc, float D0=1e-5, float T0=500.0, float P0=1e6)
float calculate_vapor_pressure_antoine (float Ts, Optional[Dict] fuel_props=None)
Dict[str, float] solve_spalding_coupled (float T_inf, float P, float W_F, float L_vap, Optional[float] gamma=None, Optional[float] R_gas=None, str fuel="RP-1", float Y_F_inf=0.0, Optional[float] cp_liquid=None, Optional[float] T_liquid_in=None, Optional[float] T_s_init=None, Optional[float] T_min=None, Optional[float] T_max=None, float alpha=0.3, float tol=0.1, int max_iter=100, Optional[float] MR=None, Optional[float] eps=None, Optional[callable] cea_props=None)

Variables

float R_UNIVERSAL = 8314.462618

Detailed Description

Spalding number and droplet surface temperature calculations.

This module provides physics-based calculations for:
1. Droplet surface temperature (T_s) estimation
2. Spalding mass transfer number (B_m)

These are used in evaporation time scale and efficiency calculations.

Function Documentation

◆ calculate_droplet_surface_temperature()

Tuple[float, float] engine.pipeline.spalding.calculate_droplet_surface_temperature ( float Tc,
float Pc,
Optional[Dict] fuel_props = None )
Calculate droplet surface temperature and film temperature.

The surface temperature T_s is estimated based on:
- Boiling point at elevated pressure
- Heat transfer from hot gas
- Wet-bulb temperature approximation

Film temperature Tf = 0.5 * (Tg + T_s) is used for property evaluation.

Parameters
----------
Tc : float
    Chamber/gas temperature [K]
Pc : float
    Chamber pressure [Pa]
fuel_props : dict, optional
    Fuel properties:
    - T_boil or boiling_point: Boiling point at 1 atm [K]
    - L_vap or latent_heat: Latent heat of vaporization [J/kg]

Returns
-------
T_s : float
    Droplet surface temperature [K]
Tf : float
    Film temperature [K]

Definition at line 89 of file spalding.py.

References max, and min.

Referenced by calculate_spalding_number(), and calculate_spalding_pressure_based().

◆ calculate_film_diffusivity()

float engine.pipeline.spalding.calculate_film_diffusivity ( float Tf,
float Pc,
float D0 = 1e-5,
float T0 = 500.0,
float P0 = 1e6 )
Calculate mass diffusivity at film temperature.

D = D0 * (Tf/T0)^1.5 * (P0/Pc)

Parameters
----------
Tf : float
    Film temperature [K]
Pc : float
    Chamber pressure [Pa]
D0 : float
    Reference diffusivity [m²/s] at T0, P0. Default 1e-5.
T0 : float
    Reference temperature [K]. Default 500.
P0 : float
    Reference pressure [Pa]. Default 1e6 (1 MPa).

Returns
-------
D : float
    Mass diffusivity [m²/s]

Definition at line 297 of file spalding.py.

◆ calculate_spalding_number()

float engine.pipeline.spalding.calculate_spalding_number ( float Tc,
float Pc,
Optional[float] T_s = None,
Optional[Dict] fuel_props = None,
bool use_reference_pressure = False )
Calculate Spalding mass transfer number.

Two formulations are available:
1. Thermodynamic: B = cp * (T_infinity - T_s) / L_vap
2. Pressure-based: B = Y_s / (1 - Y_s), where Y_s = P_sat(T_s) / Pc

The thermodynamic formulation is more stable during solver iterations.
The pressure-based formulation can optionally use a reference pressure
for stability during chamber pressure iteration.

Parameters
----------
Tc : float
    Chamber/gas temperature [K]
Pc : float
    Chamber pressure [Pa]
T_s : float, optional
    Droplet surface temperature [K]. If None, calculated internally.
fuel_props : dict, optional
    Fuel properties:
    - T_boil or boiling_point: Boiling point at 1 atm [K]
    - L_vap or latent_heat: Latent heat of vaporization [J/kg]
    - cp_gas: Gas specific heat [J/(kg·K)] (default: 1200)
    - Pc_ref: Reference pressure for stability [Pa] (default: 2.5e6)
use_reference_pressure : bool
    If True, use reference pressure instead of actual Pc for stability
    during solver iterations. Default False.

Returns
-------
B : float
    Spalding mass transfer number [-]

Definition at line 149 of file spalding.py.

References calculate_droplet_surface_temperature().

◆ calculate_spalding_pressure_based()

float engine.pipeline.spalding.calculate_spalding_pressure_based ( float Tc,
float Pc,
Optional[float] T_s = None,
Optional[Dict] fuel_props = None,
bool use_reference_pressure = True )
Calculate Spalding number using pressure-based formulation.

B_m = Y_s / (1 - Y_s), where Y_s = P_sat(T_s) / Pc

This formulation directly uses vapor pressure at the droplet surface.
Can use a reference pressure for stability during solver iterations.

Parameters
----------
Tc : float
    Chamber/gas temperature [K]
Pc : float
    Chamber pressure [Pa]
T_s : float, optional
    Droplet surface temperature [K]. If None, calculated internally.
fuel_props : dict, optional
    Fuel properties (see calculate_spalding_number)
use_reference_pressure : bool
    If True, use Pc_ref instead of Pc for stability. Default True.

Returns
-------
B : float
    Spalding mass transfer number [-]

Definition at line 227 of file spalding.py.

References calculate_droplet_surface_temperature(), calculate_vapor_pressure(), and max.

◆ calculate_vapor_pressure()

float engine.pipeline.spalding.calculate_vapor_pressure ( float Ts,
str fuel = "RP-1" )
Calculate saturation vapor pressure at given temperature.

Uses CoolProp PropsSI with n-dodecane as surrogate for RP-1.

Parameters
----------
Ts : float
    Temperature [K]
fuel : str
    Fuel name ("RP-1" uses n-dodecane surrogate)

Returns
-------
P_sat : float
    Saturation vapor pressure [Pa]

Definition at line 23 of file spalding.py.

Referenced by calculate_spalding_pressure_based(), and solve_spalding_coupled().

◆ calculate_vapor_pressure_antoine()

float engine.pipeline.spalding.calculate_vapor_pressure_antoine ( float Ts,
Optional[Dict] fuel_props = None )
Calculate vapor pressure at droplet surface temperature.

Parameters
----------
Ts : float
    Droplet surface temperature [K]
fuel_props : dict, optional
    Fuel properties (see calculate_spalding_number)

Returns
-------
P_sat : float
    Vapor pressure [Pa] at droplet surface temperature

Definition at line 340 of file spalding.py.

◆ solve_spalding_coupled()

Dict[str, float] engine.pipeline.spalding.solve_spalding_coupled ( float T_inf,
float P,
float W_F,
float L_vap,
Optional[float] gamma = None,
Optional[float] R_gas = None,
str fuel = "RP-1",
float Y_F_inf = 0.0,
Optional[float] cp_liquid = None,
Optional[float] T_liquid_in = None,
Optional[float] T_s_init = None,
Optional[float] T_min = None,
Optional[float] T_max = None,
float alpha = 0.3,
float tol = 0.1,
int max_iter = 100,
Optional[float] MR = None,
Optional[float] eps = None,
Optional[callable] cea_props = None )
Coupled solver for Spalding Mass Number (B_M) and Droplet Surface Temperature (T_s).

Solves a two-equation coupled system by fixed-point iteration with under-relaxation:
1. B_M = (Y_{F,s} - Y_{F,inf}) / (1 - Y_{F,s})
2. T_s = T_inf - (L_eff / c_p,g) * ln(1 + B_M)

Uses vapor pressure to compute surface mass fraction Y_{F,s} via mole-to-mass
fraction conversion.

**Two modes of operation:**

1. **Fixed-property mode** (legacy): Provide `gamma` and `R_gas` directly.
2. **CEA accessor mode**: Provide `cea_props` callable with `MR` and `eps`.
   The callable has signature `cea_props(Pc, MR, eps) -> (gamma, R)`.

Parameters
----------
T_inf : float
    Far-field gas temperature [K] (e.g., chamber temperature T_c)
P : float
    Gas pressure [Pa] (e.g., chamber pressure P_c)
W_F : float
    Molecular weight of fuel vapor [kg/kmol] (numerically = g/mol)
L_vap : float
    Latent heat of vaporization [J/kg]
gamma : float, optional
    Specific heat ratio of the gas mixture [-]. Required if cea_props is None.
R_gas : float, optional
    Mixture-specific gas constant [J/(kg·K)]. Required if cea_props is None.
fuel : str, optional
    Fuel name for vapor pressure lookup (default: "RP-1")
Y_F_inf : float, optional
    Far-field fuel vapor mass fraction [-] (default: 0.0)
cp_liquid : float, optional
    Liquid fuel specific heat [J/(kg·K)]. If provided with T_liquid_in,
    used to compute effective latent heat.
T_liquid_in : float, optional
    Incoming liquid fuel temperature [K]. If provided with cp_liquid,
    used to compute effective latent heat.
T_s_init : float, optional
    Initial guess for surface temperature [K]. Default: 0.9 * T_inf
T_min : float, optional
    Minimum allowed surface temperature [K]. Default: 200 K
T_max : float, optional
    Maximum allowed surface temperature [K]. Default: T_inf
alpha : float, optional
    Under-relaxation factor (0 < alpha <= 1). Default: 0.3
tol : float, optional
    Convergence tolerance for T_s [K]. Default: 0.1 K
max_iter : int, optional
    Maximum iterations. Default: 100
MR : float, optional
    Mixture ratio (O/F) for CEA accessor mode. Required if cea_props is not None.
eps : float, optional
    Expansion ratio for CEA accessor mode. Required if cea_props is not None.
cea_props : callable, optional
    CEA property accessor with signature `cea_props(Pc, MR, eps) -> (gamma, R)`.
    If provided, gamma and R_gas must be None.

Returns
-------
result : dict
    Dictionary containing:
    - "B_M": Spalding mass transfer number [-]
    - "T_s": Droplet surface temperature [K]
    - "Y_F_s": Surface fuel mass fraction [-]
    - "X_F_s": Surface fuel mole fraction [-]
    - "L_eff": Effective latent heat [J/kg]
    - "c_p_g": Gas heat capacity [J/(kg·K)]
    - "W_g": Gas mixture molecular weight [kg/kmol]
    - "T_film": Film temperature (diagnostic) [K]
    - "delta_T": Temperature difference T_inf - T_s [K]
    - "gamma_used": Specific heat ratio used [-]
    - "R_gas_used": Gas constant used [J/(kg·K)]
    - "use_cea_props": Whether CEA accessor mode was used [bool]
    - "iterations": Number of iterations [-]
    - "converged": Whether solver converged [bool]

Notes
-----
- Uses CoolProp for vapor pressure via calculate_vapor_pressure()
- The relation ln(1+B_M) = c_p,g * (T_inf - T_s) / L_eff is an approximation
  valid for Le ≈ 1 and quasi-steady boundary layer.
- T_s converges to a wet-bulb-like equilibrium, not necessarily T_boil(P).
- If p_vap(T_s) > P, a warning is issued but computation continues.
- T_film is diagnostic only; no film-temperature interpolation of γ(T) or R(T)
  is performed since the CEA table lacks a temperature axis.

Raises
------
ValueError
    If input parameters are invalid or non-physical.

Definition at line 376 of file spalding.py.

References calculate_vapor_pressure(), max, and min.

Variable Documentation

◆ R_UNIVERSAL

float engine.pipeline.spalding.R_UNIVERSAL = 8314.462618

Definition at line 373 of file spalding.py.