Soften pump wear under low-flow conditions
This commit is contained in:
@@ -89,12 +89,18 @@ class HealthMonitor:
|
||||
sec_units = list(secondary_units)
|
||||
prim_states = state.primary_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):
|
||||
comp = self.component(f"primary_pump_{idx + 1}")
|
||||
if idx < len(prim_states) and active:
|
||||
flow = prim_states[idx].flow_rate
|
||||
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:
|
||||
comp.degrade(0.0)
|
||||
for idx, active in enumerate(sec_units):
|
||||
@@ -102,7 +108,9 @@ class HealthMonitor:
|
||||
if idx < len(sec_states) and active:
|
||||
flow = sec_states[idx].flow_rate
|
||||
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:
|
||||
comp.degrade(0.0)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user