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

Classes

class  TankState

Functions

Tuple[float, float] split_propellant_by_of (float total_kg, float of_ratio)
float resolve_tank_volume_m3 (*, Optional[float] tank_volume_m3, Optional[float] ullage_volume_m3, float propellant_mass_kg, float density_kg_m3, str tank_name="tank")
Tuple[float, float, float, float, float, float] resolve_blowdown_tank_state (Any config, *, Optional[float] total_propellant_kg=None, Optional[float] of_ratio=None, Optional[float] lox_tank_volume_m3=None, Optional[float] lox_ullage_volume_m3=None, Optional[float] fuel_tank_volume_m3=None, Optional[float] fuel_ullage_volume_m3=None, Optional[float] lox_propellant_mass_kg=None, Optional[float] fuel_propellant_mass_kg=None)
float _config_tank_volume (Any config, str tank_attr, str h_attr, str r_attr)
Tuple[RegularGridInterpolator, np.ndarray, np.ndarray] load_Z_lookup_table (str csv_path)
float|np.ndarray Z_lookup (float|np.ndarray T_K, float|np.ndarray P_Pa, RegularGridInterpolator interp, float default_Z=1.0)
float calculate_compressible_gas_flow (float P_up, float P_down, float T_up, float Area, float gamma, float R, float Cd=0.8)
Dict[str, Dict[str, np.ndarray]] simulate_coupled_blowdown (np.ndarray times, Callable[[float, float], Tuple[float, float]] evaluate_engine_fn, float P_lox_initial_Pa, float P_fuel_initial_Pa, config, *, float R_pressurant=296.803, float T_lox_gas_K=250.0, float T_fuel_gas_K=293.0, float n_polytropic=1.2, bool use_real_gas=True, str n2_Z_csv="n2_Z_lookup.csv", Optional[float] total_propellant_kg=None, Optional[float] of_ratio=None, Optional[float] lox_tank_volume_m3=None, Optional[float] lox_ullage_volume_m3=None, Optional[float] fuel_tank_volume_m3=None, Optional[float] fuel_ullage_volume_m3=None, Optional[float] lox_propellant_mass_kg=None, Optional[float] fuel_propellant_mass_kg=None)

Detailed Description

Pure blowdown pressurization solver.

This module simulates propellant tank pressure decay due to ullage expansion
as propellant is consumed, with no COPV or external pressurant makeup.

Physics model:
- Fixed pressurant gas mass in each tank
- Polytropic temperature relation: T(t) = T0 * (V0/V(t))^(n-1)
- Real gas effects via compressibility factor Z(P,T) in EOS: P = m*Z*R*T/V
- Coupled simulation: Pressure -> mdot -> Mass Depletion -> Volume Expansion -> Pressure

Function Documentation

◆ _config_tank_volume()

float copv.blowdown_solver._config_tank_volume ( Any config,
str tank_attr,
str h_attr,
str r_attr )
protected

Definition at line 128 of file blowdown_solver.py.

Referenced by resolve_blowdown_tank_state().

◆ calculate_compressible_gas_flow()

float copv.blowdown_solver.calculate_compressible_gas_flow ( float P_up,
float P_down,
float T_up,
float Area,
float gamma,
float R,
float Cd = 0.8 )
Calculate compressible gas mass flow through an orifice (venting).

Definition at line 310 of file blowdown_solver.py.

References max.

Referenced by simulate_coupled_blowdown().

◆ load_Z_lookup_table()

Tuple[RegularGridInterpolator, np.ndarray, np.ndarray] copv.blowdown_solver.load_Z_lookup_table ( str csv_path)
Load compressibility factor Z(P,T) lookup table from CSV.

Definition at line 139 of file blowdown_solver.py.

Referenced by simulate_coupled_blowdown().

◆ resolve_blowdown_tank_state()

Tuple[float, float, float, float, float, float] copv.blowdown_solver.resolve_blowdown_tank_state ( Any config,
* ,
Optional[float] total_propellant_kg = None,
Optional[float] of_ratio = None,
Optional[float] lox_tank_volume_m3 = None,
Optional[float] lox_ullage_volume_m3 = None,
Optional[float] fuel_tank_volume_m3 = None,
Optional[float] fuel_ullage_volume_m3 = None,
Optional[float] lox_propellant_mass_kg = None,
Optional[float] fuel_propellant_mass_kg = None )
Resolve LOX/fuel (volume_m3, mass_kg, density) for blowdown simulation.

Falls back to config tank fields when overrides are omitted.

Definition at line 66 of file blowdown_solver.py.

References _config_tank_volume(), resolve_tank_volume_m3(), and split_propellant_by_of().

Referenced by simulate_coupled_blowdown().

◆ resolve_tank_volume_m3()

float copv.blowdown_solver.resolve_tank_volume_m3 ( * ,
Optional[float] tank_volume_m3,
Optional[float] ullage_volume_m3,
float propellant_mass_kg,
float density_kg_m3,
str tank_name = "tank" )
Resolve total tank volume from either explicit volume or ullage + liquid fill.

Definition at line 29 of file blowdown_solver.py.

References max.

Referenced by resolve_blowdown_tank_state().

◆ simulate_coupled_blowdown()

Dict[str, Dict[str, np.ndarray]] copv.blowdown_solver.simulate_coupled_blowdown ( np.ndarray times,
Callable[[float, float], Tuple[float, float]] evaluate_engine_fn,
float P_lox_initial_Pa,
float P_fuel_initial_Pa,
config,
* ,
float R_pressurant = 296.803,
float T_lox_gas_K = 250.0,
float T_fuel_gas_K = 293.0,
float n_polytropic = 1.2,
bool use_real_gas = True,
str n2_Z_csv = "n2_Z_lookup.csv",
Optional[float] total_propellant_kg = None,
Optional[float] of_ratio = None,
Optional[float] lox_tank_volume_m3 = None,
Optional[float] lox_ullage_volume_m3 = None,
Optional[float] fuel_tank_volume_m3 = None,
Optional[float] fuel_ullage_volume_m3 = None,
Optional[float] lox_propellant_mass_kg = None,
Optional[float] fuel_propellant_mass_kg = None )
Simulate coupled blowdown for both LOX and fuel tanks.

Parameters
----------
times : np.ndarray
    Time points (s)
evaluate_engine_fn : function
    Callback (P_lox_Pa, P_fuel_Pa) -> (mdot_lox_kg_s, mdot_fuel_kg_s)
P_lox_initial_Pa, P_fuel_initial_Pa : float
    Initial tank pressures
config : EngineConfig
    Configuration object with tank geometry
    
Returns
-------
dict with full time-series traces for both tanks

Definition at line 344 of file blowdown_solver.py.

References calculate_compressible_gas_flow(), load_Z_lookup_table(), max, and resolve_blowdown_tank_state().

◆ split_propellant_by_of()

Tuple[float, float] copv.blowdown_solver.split_propellant_by_of ( float total_kg,
float of_ratio )
Split total propellant mass into (oxidizer_kg, fuel_kg) for O/F = of_ratio.

Definition at line 20 of file blowdown_solver.py.

References max.

Referenced by resolve_blowdown_tank_state().

◆ Z_lookup()

float | np.ndarray copv.blowdown_solver.Z_lookup ( float | np.ndarray T_K,
float | np.ndarray P_Pa,
RegularGridInterpolator interp,
float default_Z = 1.0 )
Lookup compressibility factor Z at given temperature and pressure.

Definition at line 156 of file blowdown_solver.py.

Referenced by copv.blowdown_solver.TankState.get_Z().