Soften pump wear under low-flow conditions
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user