fix(B05): 계류 유역 세월교 판정 + 하단 패널 밀어올리기 동작

- 세월교 판정: 유효직경이 관 최대 규격(D2000, config) 초과 시 bridge_required
  플래그 — 관이 아니라 세월교·물넘이·교량 대상(임도설치규정 제12조: 계류 횡단
  구간은 물넘이 포장·교량으로 설계). 유역 제원에 '세월교 검토(Ø계산값)' 표기,
  관경 자동 지정 제외. 실측: 41.4ha 계류 유역 D5137 -> 세월교 검토
- 사면 유역 계산식은 유지 — FHWA 유입부 조절식과 교차검증 결과 근접
  (1.1ha D862/D839, 2.9ha D1426/D1255)
- 하단 패널: 서브패널이 종단도를 덮지 않고 밀어올림. 접힘=종단 전체,
  하나 펼침=그만큼 종단 축소(테이블 높이 고정), 둘 펼침=종단-테이블-유토곡선
  순서로 유토곡선 리사이즈 시 종단만 조절

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-05 19:08:36 +09:00
co-authored by Claude Fable 5
parent 3d5e8988c0
commit 2876ca5cbb
8 changed files with 72 additions and 20 deletions
+9 -2
View File
@@ -44,6 +44,7 @@ from common_util.common_util_route_geometry import (
)
from common_util.common_util_wamis_rainfall import idf_intensity
from config.config_system import (
DRAINAGE_BRIDGE_THRESHOLD_MM,
DRAINAGE_DESIGN_FLOW_FACTOR,
DRAINAGE_DITCH_SAMPLE_M,
DRAINAGE_FLOW_AREA_RATIO,
@@ -104,6 +105,9 @@ class WatershedBasin:
tc_minutes: float | None = None
intensity_mm_hr: float | None = None
design_flow_m3s: float | None = None
# 유효직경이 관 최대 규격을 넘는 계류 유역 — 관이 아니라 세월교·물넘이·교량 대상
# (임도설치규정 제12조). 화면은 "세월교 검토"로 표기하고 관경 자동 지정을 하지 않는다.
bridge_required: bool = False
@dataclass
@@ -529,6 +533,9 @@ def assemble_basins(
tc_minutes=sizing["tc_minutes"] if sizing else None,
intensity_mm_hr=sizing["intensity_mm_hr"] if sizing else None,
design_flow_m3s=sizing["design_flow_m3s"] if sizing else None,
bridge_required=bool(
sizing and sizing["diameter_mm"] > DRAINAGE_BRIDGE_THRESHOLD_MM
),
)
)
return basins
@@ -595,8 +602,8 @@ def size_pipe(
pipe_slope = math.tan(math.radians(DRAINAGE_PIPE_SLOPE_DEG))
diameter = 0.5
for _ in range(20):
velocity = (1.0 / DRAINAGE_MANNING_N) * (diameter / 4.0) ** (2.0 / 3.0) * math.sqrt(
pipe_slope
velocity = (
(1.0 / DRAINAGE_MANNING_N) * (diameter / 4.0) ** (2.0 / 3.0) * math.sqrt(pipe_slope)
)
velocity = min(DRAINAGE_VELOCITY_MAX_MS, max(DRAINAGE_VELOCITY_MIN_MS, velocity))
required_area = design_flow / velocity