STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
__init__.py
Go to the documentation of this file.
1"""Injector model registry and base classes."""
2
3from __future__ import annotations
4
5from abc import ABC, abstractmethod
6from typing import Tuple, Dict, Any, Type
7
9 PintleEngineConfig,
10 PintleInjectorConfig,
11 CoaxialInjectorConfig,
12 ImpingingInjectorConfig,
13)
14
15
16class InjectorModel(ABC):
17 """Abstract base class for injector models"""
18
19 def __init__(self, engine_config: PintleEngineConfig):
20 self.engine_config = engine_config
21
22 @abstractmethod
23 def solve(
24 self,
25 P_tank_O: float,
26 P_tank_F: float,
27 Pc: float,
28 ) -> Tuple[float, float, Dict[str, Any]]:
29 """Solve injector flows for given tank and chamber pressures."""
30 raise NotImplementedError
31
32
33def _validate_pintle_config(config: PintleInjectorConfig) -> None:
34 # Placeholder for additional validation if required in future
35 return None
36
37
38from .pintle import PintleInjector # noqa: E402 (import after base class) # pylint: disable=wrong-import-position
39from .coaxial import CoaxialInjector # noqa: E402
40from .impinging import ImpingingInjector # noqa: E402
41
42
43INJECTOR_REGISTRY: Dict[str, Type[InjectorModel]] = {
44 "pintle": PintleInjector,
45 "coaxial": CoaxialInjector,
46 "impinging": ImpingingInjector,
47}
48
49
50def get_injector_model(engine_config: PintleEngineConfig) -> InjectorModel:
51 """Factory returning injector model implementation based on configuration."""
52 injector_cfg = engine_config.injector
53 if injector_cfg.type == "pintle":
54 _validate_pintle_config(injector_cfg)
55
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."
60 )
61 return injector_cls(engine_config)
__init__(self, PintleEngineConfig engine_config)
Definition __init__.py:19
Tuple[float, float, Dict[str, Any]] solve(self, float P_tank_O, float P_tank_F, float Pc)
Definition __init__.py:28
InjectorModel get_injector_model(PintleEngineConfig engine_config)
Definition __init__.py:50
None _validate_pintle_config(PintleInjectorConfig config)
Definition __init__.py:33