Source code for simulator.pumps.affinity

from __future__ import annotations

"""Centrifugal-pump affinity-law helpers."""

from dataclasses import dataclass


[docs] @dataclass(frozen=True) class AffinityScale: """Scale factor between a reference pump speed and a target pump speed.""" reference_speed_rpm: float target_speed_rpm: float @property def ratio(self) -> float: if self.reference_speed_rpm <= 0.0: raise ValueError("reference_speed_rpm must be positive") return float(self.target_speed_rpm) / float(self.reference_speed_rpm)
[docs] def flow_to_reference(self, flow_at_target: float) -> float: r = self.ratio if r <= 0.0: raise ValueError("target_speed_rpm must be positive") return float(flow_at_target) / r
[docs] def flow_from_reference(self, flow_at_reference: float) -> float: return float(flow_at_reference) * self.ratio
[docs] def head_from_reference(self, head_at_reference: float) -> float: r = self.ratio return float(head_at_reference) * r * r
[docs] def power_from_reference(self, power_at_reference: float) -> float: r = self.ratio return float(power_at_reference) * r * r * r