Soften pump wear under low-flow conditions

This commit is contained in:
Codex Agent
2025-11-23 10:57:51 +01:00
parent 7be8e27a5d
commit f664ab8038

View File

@@ -89,12 +89,18 @@ class HealthMonitor:
sec_units = list(secondary_units) sec_units = list(secondary_units)
prim_states = state.primary_pumps or [] prim_states = state.primary_pumps or []
sec_states = state.secondary_pumps or [] sec_states = state.secondary_pumps or []
primary_temp = getattr(state.primary_loop, "temperature_out", 295.0)
secondary_temp = getattr(state.secondary_loop, "temperature_out", 295.0)
primary_heat_factor = max(0.0, (primary_temp - 600.0) / 400.0) # harsher wear only when very hot
secondary_heat_factor = max(0.0, (secondary_temp - 520.0) / 300.0)
for idx, active in enumerate(prim_units): for idx, active in enumerate(prim_units):
comp = self.component(f"primary_pump_{idx + 1}") comp = self.component(f"primary_pump_{idx + 1}")
if idx < len(prim_states) and active: if idx < len(prim_states) and active:
flow = prim_states[idx].flow_rate flow = prim_states[idx].flow_rate
flow_ratio = 0.0 if flow <= 0 else min(1.0, flow / 9_000.0) flow_ratio = 0.0 if flow <= 0 else min(1.0, flow / 9_000.0)
comp.degrade((0.0002 + (1 - flow_ratio) * 0.005) * dt) low_flow_penalty = (1 - flow_ratio) * 0.001
rate = (0.0001 + low_flow_penalty) * (1 + primary_heat_factor)
comp.degrade(rate * dt)
else: else:
comp.degrade(0.0) comp.degrade(0.0)
for idx, active in enumerate(sec_units): for idx, active in enumerate(sec_units):
@@ -102,7 +108,9 @@ class HealthMonitor:
if idx < len(sec_states) and active: if idx < len(sec_states) and active:
flow = sec_states[idx].flow_rate flow = sec_states[idx].flow_rate
flow_ratio = 0.0 if flow <= 0 else min(1.0, flow / 8_000.0) flow_ratio = 0.0 if flow <= 0 else min(1.0, flow / 8_000.0)
comp.degrade((0.0002 + (1 - flow_ratio) * 0.004) * dt) low_flow_penalty = (1 - flow_ratio) * 0.0008
rate = (0.0001 + low_flow_penalty) * (1 + secondary_heat_factor)
comp.degrade(rate * dt)
else: else:
comp.degrade(0.0) comp.degrade(0.0)