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

Functions

float calculate_local_recession_rate (float heat_flux, float pressure, float velocity, float gas_temperature, float material_density, float heat_of_ablation, float specific_heat, float pyrolysis_temp, float blowing_efficiency=0.8, float char_layer_conductivity=0.2, float char_layer_thickness=0.001)
float calculate_throat_heuristic_multiplier (float chamber_pressure, float chamber_velocity, float throat_velocity, float chamber_heat_flux, float gamma=1.2, float D_chamber=None, float D_throat=None)
Tuple[float, float, float, float, Dict[str, float]] update_chamber_geometry_from_ablation (float V_chamber_initial, float A_throat_initial, float D_chamber_initial, float D_throat_initial, float L_chamber, float recession_thickness_chamber, Optional[float] recession_thickness_throat=None, float coverage_fraction=1.0, Optional[float] throat_recession_multiplier=None)
Tuple[float, float, Dict[str, float]] update_nozzle_exit_from_ablation (float A_exit_initial, float D_exit_initial, float recession_thickness_exit, float coverage_fraction=1.0)
Dict[str, float] calculate_Lstar_time_varying (float V_chamber_initial, float A_throat_initial, float recession_rate, float burn_time, float D_chamber_initial, float D_throat_initial, float L_chamber, float coverage_fraction=1.0)
Dict[str, float] estimate_performance_degradation (float Lstar_initial, float Lstar_final, float efficiency_C=0.3, float efficiency_K=0.15)

Detailed Description

Ablative liner geometry evolution over time with physics-based recession modeling.

Function Documentation

◆ calculate_local_recession_rate()

float engine.pipeline.thermal.ablative_geometry.calculate_local_recession_rate ( float heat_flux,
float pressure,
float velocity,
float gas_temperature,
float material_density,
float heat_of_ablation,
float specific_heat,
float pyrolysis_temp,
float blowing_efficiency = 0.8,
float char_layer_conductivity = 0.2,
float char_layer_thickness = 0.001 )
Calculate local ablation recession rate using physics-based heat balance.

The recession rate depends on:
1. Convective heat flux (function of Re, Pr, Mach)
2. Radiative heat flux
3. Blowing effect (pyrolysis gases blocking heat)
4. Char layer thermal resistance
5. Material properties

Energy balance:
    q_net = q_conv + q_rad - q_reradiation - q_blowing - q_char
    ṁ_ablation = q_net / (h_ablation + cp × ΔT_pyrolysis)
    recession_rate = ṁ_ablation / ρ_material

Parameters:
-----------
heat_flux : float
    Incident convective heat flux [W/m²]
pressure : float
    Local static pressure [Pa]
velocity : float
    Local gas velocity [m/s]
gas_temperature : float
    Local gas temperature [K]
material_density : float
    Ablative material density [kg/m³]
heat_of_ablation : float
    Effective heat of ablation [J/kg]
specific_heat : float
    Material specific heat [J/(kg·K)]
pyrolysis_temp : float
    Pyrolysis temperature [K]
blowing_efficiency : float
    Effectiveness of pyrolysis gases in blocking heat (0-1)
char_layer_conductivity : float
    Thermal conductivity of char layer [W/(m·K)]
char_layer_thickness : float
    Thickness of protective char layer [m]

Returns:
--------
recession_rate : float
    Local recession rate [m/s]

Definition at line 9 of file ablative_geometry.py.

References max, and min.

◆ calculate_Lstar_time_varying()

Dict[str, float] engine.pipeline.thermal.ablative_geometry.calculate_Lstar_time_varying ( float V_chamber_initial,
float A_throat_initial,
float recession_rate,
float burn_time,
float D_chamber_initial,
float D_throat_initial,
float L_chamber,
float coverage_fraction = 1.0 )
Calculate how L* changes over time due to ablative recession.

Parameters:
-----------
V_chamber_initial : float
    Initial chamber volume [m³]
A_throat_initial : float
    Initial throat area [m²]
recession_rate : float
    Ablative recession rate [m/s]
burn_time : float
    Total burn time [s]
D_chamber_initial : float
    Initial chamber diameter [m]
D_throat_initial : float
    Initial throat diameter [m]
L_chamber : float
    Chamber length [m]
coverage_fraction : float
    Fraction of surface with ablative

Returns:
--------
results : dict
    - Lstar_initial: Initial L* [m]
    - Lstar_final: Final L* after burn_time [m]
    - Lstar_change_pct: Percentage change in L*
    - V_chamber_final: Final chamber volume [m³]
    - A_throat_final: Final throat area [m²]
    - total_recession: Total material removed [m]

Definition at line 417 of file ablative_geometry.py.

References update_chamber_geometry_from_ablation().

◆ calculate_throat_heuristic_multiplier()

float engine.pipeline.thermal.ablative_geometry.calculate_throat_heuristic_multiplier ( float chamber_pressure,
float chamber_velocity,
float throat_velocity,
float chamber_heat_flux,
float gamma = 1.2,
float D_chamber = None,
float D_throat = None )
Calculate throat recession multiplier based on local flow conditions using heuristic scaling.

Throat recession is typically 1.2-2.0x higher than chamber due to:
1. Higher velocity → Higher convective heat transfer
2. Sonic conditions → Maximum heat flux
3. Pressure gradient → Enhanced mass transfer
4. Turbulence amplification near throat

Heuristic scaling for heat flux ratio:
    q_throat / q_chamber ∝ (V_throat / V_chamber)^1.0 × (P_throat / P_chamber)^0.1

WARNING: This is not a formal Bartz correlation. Real throat heat transfer depends on 
geometry (D_t, curvature), viscosity/Pr, and boundary layer state. If 
heat_transfer_coefficient at the throat is already available from a CFD or 
boundary-layer code, this heuristic multiplier should not be used.

Parameters:
-----------
chamber_pressure : float
    Chamber pressure [Pa]
chamber_velocity : float
    Chamber gas velocity [m/s]
throat_velocity : float
    Throat gas velocity (sonic) [m/s]
chamber_heat_flux : float
    Chamber wall heat flux [W/m²]
gamma : float
    Specific heat ratio
D_chamber : float
    Chamber diameter [m]
D_throat : float
    Throat diameter [m]

Returns:
--------
multiplier : float
    Throat recession multiplier (typically 1.2-2.0)

Definition at line 116 of file ablative_geometry.py.

◆ estimate_performance_degradation()

Dict[str, float] engine.pipeline.thermal.ablative_geometry.estimate_performance_degradation ( float Lstar_initial,
float Lstar_final,
float efficiency_C = 0.3,
float efficiency_K = 0.15 )
Estimate combustion efficiency degradation due to L* change.

Uses the exponential efficiency model:
    η_c* = 1 - C × exp(-K × L*)

Parameters:
-----------
Lstar_initial : float
    Initial L* [m]
Lstar_final : float
    Final L* [m]
efficiency_C : float
    Efficiency loss parameter (default 0.3)
efficiency_K : float
    Recovery rate parameter (default 0.15)

Returns:
--------
results : dict
    - eta_initial: Initial combustion efficiency
    - eta_final: Final combustion efficiency
    - eta_degradation_pct: Percentage drop in efficiency
    - cstar_degradation_pct: Approximate c* degradation

Definition at line 509 of file ablative_geometry.py.

◆ update_chamber_geometry_from_ablation()

Tuple[float, float, float, float, Dict[str, float]] engine.pipeline.thermal.ablative_geometry.update_chamber_geometry_from_ablation ( float V_chamber_initial,
float A_throat_initial,
float D_chamber_initial,
float D_throat_initial,
float L_chamber,
float recession_thickness_chamber,
Optional[float] recession_thickness_throat = None,
float coverage_fraction = 1.0,
Optional[float] throat_recession_multiplier = None )
Update chamber volume and throat area after ablative recession.

Uses physics-based recession rates for chamber and throat separately.
Accounts for non-uniform recession patterns.

Parameters:
-----------
V_chamber_initial : float
    Initial chamber volume [m³]
A_throat_initial : float
    Initial throat area [m²]
D_chamber_initial : float
    Initial chamber inner diameter [m]
D_throat_initial : float
    Initial throat diameter [m]
L_chamber : float
    Chamber length [m]
recession_thickness_chamber : float
    Total thickness of ablative material removed from chamber [m]
recession_thickness_throat : float, optional
    Total thickness removed from throat [m]
    If None, calculated from throat_recession_multiplier
coverage_fraction : float
    Fraction of chamber surface with ablative (default 1.0)
throat_recession_multiplier : float, optional
    Multiplier for throat recession vs chamber (default from physics)
    Typically 1.2-2.0 depending on flow conditions

Returns:
--------
V_chamber_new : float
    Updated chamber volume [m³]
A_throat_new : float
    Updated throat area [m²]
D_chamber_new : float
    Updated chamber diameter [m]
D_throat_new : float
    Updated throat diameter [m]
diagnostics : dict
    Additional diagnostic information

Definition at line 226 of file ablative_geometry.py.

References max.

Referenced by calculate_Lstar_time_varying().

◆ update_nozzle_exit_from_ablation()

Tuple[float, float, Dict[str, float]] engine.pipeline.thermal.ablative_geometry.update_nozzle_exit_from_ablation ( float A_exit_initial,
float D_exit_initial,
float recession_thickness_exit,
float coverage_fraction = 1.0 )
Update nozzle exit area due to ablative recession.

For graphite nozzle inserts, the exit area grows as material recedes.
This affects the expansion ratio: ε = A_exit / A_throat

Parameters:
-----------
A_exit_initial : float
    Initial nozzle exit area [m²]
D_exit_initial : float
    Initial nozzle exit diameter [m]
recession_thickness_exit : float
    Total thickness of ablative material removed from nozzle exit [m]
coverage_fraction : float
    Fraction of nozzle exit with ablative (default 1.0)

Returns:
--------
A_exit_new : float
    Updated nozzle exit area [m²]
D_exit_new : float
    Updated nozzle exit diameter [m]
diagnostics : dict
    Additional diagnostic information

Definition at line 350 of file ablative_geometry.py.