|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
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 |
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.
| 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.
Referenced by calculate_spalding_number(), and calculate_spalding_pressure_based().
| 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.
| 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().
| 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.
| 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().
| 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.
| 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.
| float engine.pipeline.spalding.R_UNIVERSAL = 8314.462618 |
Definition at line 373 of file spalding.py.