Files
Aislo/B08_Quantity/B08_Quantity_Hydro_Defaults.py
T
eomsangdonandClaude Opus 5.5 dc2c27313c feat(B08): 수리집수면적표 박스암거 사각 단면 장 · 세월교 · 물넘이 월류 높이 장(73-11 · 73-12)
- 박스 = 내공 B · H · 수심비(기본 0.8) · n(기본 0.013) · A = B·h · P = B + 2h · Manning · Qd 판정
- 세월교 · 물넘이포장 = 월류 폭(기본 10 m) · 경사(1/10) · n(0.017) → 월류 높이 자동(ford_depth)
- ford_depth = fordHeightM 파이썬 짝(두 파일 머리 · 거울 시험 test_73_11) · 관 몫 안 뺌 · 여유 없음
- [저장]에 새 칸 · 빈 장 없앰 · 물넘이포장은 관 장에서 옮김

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4uKaV4ZBhsJN4GHG7yRj4
2026-10-07 09:09:25 +09:00

81 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""B08 4탭 홍수량 계산서 — 기본값 · 선택지 한 곳 (PLAN 62-3 · 73-11 · 73-12).
임의로 정한 값 — 사용자가 나중에 고침. B05/B06 · 배수유역 값과 잇지 않음(자기 기본값만).
근거 후보: docs/raw/조사/2026-10-06_62-1_홍수량_방법.md (별표2 2.0배 · KDS 표 2.7-1 · 실무 견본).
"""
from __future__ import annotations
from typing import Any
from config.config_system import FORD_MANNING_N, FORD_SLOPE
#: 할증(Qd = Q × 할증) — 2.0 별표2 법정 · 1.5 견본(울진 2공구) · 1.2 구기준
FACTORS = (2.0, 1.5, 1.2)
#: 단면 가정 — 만관 · 240° 유효(수심 0.75D) · 유효 70 %(배관 제안 방식)
SECTIONS = {"full": "만관", "arc240": "240° 유효단면", "eff70": "유효 70 %"}
#: 관 종류별 조도계수 n — 파형강관은 KDS 표에 없음(지금 배관 제안 0.024)
PIPE_KINDS = {"파형강관": 0.024, "흄관": 0.013, "콘크리트관": 0.015}
#: 처음 값 = 표준 값만(69-6) · 측점 고유 값(유역면적 · L · H · D · S)은 None(빈칸)
#: R24 · 지역은 공사지 자료(B08_Quantity_Hydro_Site) — 자료가 없을 때만 화면 입력
DEFAULTS: dict[str, Any] = {
"factor": 2.0,
"runoff": 0.80, # 유출계수 f — KDS 가파른 산지
"area_km2": None,
"length_m": None, # 산정에서 하천시점까지 거리
"height_m": None, # 산정에서 하천시점까지 표고차
"tc_min_minutes": 5.0, # 최소 도달시간(KDS 2.4)
"r24_mm": None,
"region": "",
"return_period": 100,
"pipe_kind": "파형강관",
"n": None, # None = 관 종류 값
"diameter_mm": None,
"slope_denominator": None, # 하상경사 S = 1 / 이 값
"section": "full",
}
#: 시설 → 계산서 장(73-11 · 73-12) — 박스 = 사각 단면 · 세월교 · 물넘이 = 월류 높이 · 그 밖 = 관
SHEETS = {
"box_culvert": ("box", "박스암거"),
"ford_bridge": ("ford", "세월교"),
"ford_pavement": ("ford", "물넘이포장"),
}
#: 장별 처음 값 — 박스 수심비 0.8H · n 0.013(울진 산출서 · 조사 69-7) · 내공 · 경사는 빈칸
#: 세월교 · 물넘이 월류 폭 10 m(사용자 10-7) · n · 경사 = B05 세월교 높이 계산과 같은 값
SHEET_DEFAULTS: dict[str, dict[str, Any]] = {
"box": {"n": 0.013, "depth_ratio": 0.8, "box_width_m": None, "box_height_m": None},
"ford": {
"n": FORD_MANNING_N,
"overflow_width_m": 10.0,
"slope_denominator": round(1 / FORD_SLOPE, 6),
},
}
def station_rows(points: list[Any]) -> list[dict[str, Any]]:
"""관 지점 → 보조 탭 줄(측점 차례) · 장 종류(pipe · box · ford)."""
rows = []
for p in points:
sheet, kind = SHEETS.get(p.facility, ("pipe", ""))
rows.append(
{"chainage_m": p.chainage_m, "facility": p.facility, "kind": kind, "sheet": sheet}
)
return sorted(rows, key=lambda s: s["chainage_m"])
def options() -> dict[str, Any]:
"""화면 선택지 — 기본값 · 할증 · 단면 가정 · 관 종류 n."""
return {
"defaults": DEFAULTS,
"factors": list(FACTORS),
"sections": SECTIONS,
"pipe_kinds": PIPE_KINDS,
"sheet_defaults": SHEET_DEFAULTS,
}