1"""Injector model registry and base classes."""
3from __future__
import annotations
5from abc
import ABC, abstractmethod
6from typing
import Tuple, Dict, Any, Type
11 CoaxialInjectorConfig,
12 ImpingingInjectorConfig,
17 """Abstract base class for injector models"""
19 def __init__(self, engine_config: PintleEngineConfig):
28 ) -> Tuple[float, float, Dict[str, Any]]:
29 """Solve injector flows for given tank and chamber pressures."""
30 raise NotImplementedError
38from .pintle
import PintleInjector
39from .coaxial
import CoaxialInjector
40from .impinging
import ImpingingInjector
43INJECTOR_REGISTRY: Dict[str, Type[InjectorModel]] = {
44 "pintle": PintleInjector,
45 "coaxial": CoaxialInjector,
46 "impinging": ImpingingInjector,
51 """Factory returning injector model implementation based on configuration."""
52 injector_cfg = engine_config.injector
53 if injector_cfg.type ==
"pintle":
56 injector_cls = INJECTOR_REGISTRY.get(injector_cfg.type)
57 if injector_cls
is None:
58 raise NotImplementedError(
59 f
"Injector type '{injector_cfg.type}' is not registered."
61 return injector_cls(engine_config)
__init__(self, PintleEngineConfig engine_config)
Tuple[float, float, Dict[str, Any]] solve(self, float P_tank_O, float P_tank_F, float Pc)
InjectorModel get_injector_model(PintleEngineConfig engine_config)
None _validate_pintle_config(PintleInjectorConfig config)