30 lines
819 B
Python
30 lines
819 B
Python
"""Coolant loop control models."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
import logging
|
|
|
|
from . import constants
|
|
from .state import CoolantLoopState
|
|
|
|
LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
@dataclass
|
|
class Pump:
|
|
nominal_flow: float
|
|
efficiency: float = 0.9
|
|
spool_time: float = constants.PUMP_SPOOL_TIME
|
|
|
|
def flow_rate(self, demand: float) -> float:
|
|
demand = max(0.0, min(1.0, demand))
|
|
return self.nominal_flow * (0.2 + 0.8 * demand) * self.efficiency
|
|
|
|
def step(self, loop: CoolantLoopState, demand: float) -> None:
|
|
loop.mass_flow_rate = self.flow_rate(demand)
|
|
loop.pressure = 12.0 * demand + 2.0
|
|
LOGGER.debug(
|
|
"Pump demand=%.2f -> %.0f kg/s, pressure=%.1f MPa", demand, loop.mass_flow_rate, loop.pressure
|
|
)
|