fix(simulation): use hydraulic timestep

This commit is contained in:
2026-07-16 14:16:06 +08:00
parent d33619d0d5
commit 9f7f5536d7
6 changed files with 527 additions and 20 deletions
+14 -2
View File
@@ -35,7 +35,11 @@ from app.services.simulation_ops import (
daily_scheduling_simulation,
)
from app.services.valve_isolation import analyze_valve_isolation
from app.services.time_api import parse_aware_time, parse_utc_time
from app.services.time_api import (
parse_aware_time,
parse_clock_duration_seconds,
parse_utc_time,
)
from pydantic import BaseModel, Field, field_validator
router = APIRouter()
@@ -118,6 +122,14 @@ def run_simulation_manually_by_date(
network_name: str, start_time: datetime, duration: int
) -> None:
end_datetime = start_time + timedelta(minutes=duration)
time_properties = simulation.get_time(network_name)
hydraulic_step_seconds = parse_clock_duration_seconds(
time_properties["HYDRAULIC TIMESTEP"],
field_name="HYDRAULIC TIMESTEP",
)
if hydraulic_step_seconds <= 0:
raise ValueError("HYDRAULIC TIMESTEP must be greater than 0.")
hydraulic_step = timedelta(seconds=hydraulic_step_seconds)
current_time = start_time
while current_time < end_datetime:
simulation.run_simulation(
@@ -125,7 +137,7 @@ def run_simulation_manually_by_date(
simulation_type="realtime",
modify_pattern_start_time=current_time.isoformat(timespec="seconds"),
)
current_time += timedelta(minutes=15)
current_time += hydraulic_step
# 必须用这个PlainTextResponse,不然每个key都有引号