"""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 )