- Column: Hovland · Hungr 3D Bishop · Hungr 3D Janbu 간편 + 보정(f0) · 활동 방향 자동(지표 낙하) · r_u · 지하수위면 · kh · 노면 하중 · 못 뚫는 층에서 잘림 · 부분 기둥 - Search: Scoops3D 방식 구 격자(노드 = 지표 + h · 반지름 증분 · 부피/면적 제약 · 거친→고운) + 타원체(축 방향 ratio 배) · 덩이 나눔 · 셀별 최소 F · 임계 체적 래스터 - 잘린 면 ≥ 10 % → Janbu 보정 전환 · Bishop 이 낮으면 Bishop - Grid: 측점 사이 선직면 보간 δ(설계 − 원지형) · 띠 밖 원지형 · 흙 두께(암 경계 · 토사 3 m) · 리핑암 뚫림 · 발파암 못 뚫음 · 노면 하중 · 1 m 정사각 재표본 - 공용 꼴 = E03_StabSection_Types import(칸 이름 그대로) · 새 의존 없음(NumPy · SciPy) - 시험: Gens 구 1.402 · Zhang 1988 경우 1 · 2(Hungr 2.167 · 1.620) · Scoops3D 제방 1.32 · D&G 1a 1.04 · 합성 DEM 단면 · 띠 밖 · 지층 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
"""533-2 E04 활동면 탐색 — Scoops3D 검증 표 전역 최소 ±3 %.
|
||
|
||
Reid 외(2015) Scoops3D 표 6.8 · 6.11(CLARA-W 와 같은 구): H 10 m 제방
|
||
- 30° · λ 0.125(γ 19 · φ 20° · c 8.64 kPa) → Bishop 1.32 · 부피 1,124 m³
|
||
- Donald & Giam 1a 2:1 · γ 20 · φ 19.6° · c 3 kPa → 1.04
|
||
탐색 격자는 시험 시간 때문에 문헌 임계 중심 둘레로 좁힘.
|
||
"""
|
||
|
||
import numpy as np
|
||
import pytest
|
||
|
||
from E04_Stab3D.E04_Stab3D_Engine_Column import Strata
|
||
from E04_Stab3D.E04_Stab3D_Engine_Search import SearchParams, search
|
||
|
||
|
||
def _embankment(run, gamma, phi, c, dx=1.0):
|
||
x = np.arange(-25, run + 35 + 1e-9, dx)
|
||
y = np.arange(-40, 40 + 1e-9, dx)
|
||
xx, _ = np.meshgrid(x, y)
|
||
z = np.clip(xx / run * 10.0, 0, 10.0)
|
||
mat = {"id": "m", "name": "m", "gamma_t": gamma, "gamma_sat": gamma, "c": c, "phi": phi}
|
||
return Strata(x, y, z, np.zeros((0,) + z.shape), [mat])
|
||
|
||
|
||
def test_embankment_30deg_global_minimum():
|
||
st = _embankment(10 / np.tan(np.radians(30)), 19, 20, 8.64)
|
||
p = SearchParams(
|
||
box=(-2, 10, -1, 1),
|
||
h_min=4,
|
||
h_max=24,
|
||
spacing=1.0,
|
||
coarse=2,
|
||
max_depth=20,
|
||
v_min=50,
|
||
v_max=2e4,
|
||
ratios=(1.0,),
|
||
)
|
||
r = search(st, p)
|
||
assert r.best["governing"] == pytest.approx(1.32, rel=0.03)
|
||
assert r.best["volume"] == pytest.approx(1124, rel=0.15)
|
||
f = r.f_min
|
||
assert np.nanmin(f) == pytest.approx(r.best["governing"])
|
||
# 셀별 최소 지도: 임계 활동체 안 셀은 전역 최소 · 부피 래스터가 같이 채워짐
|
||
assert np.isfinite(r.volume[np.isfinite(f)]).all()
|
||
|
||
|
||
def test_donald_giam_1a():
|
||
st = _embankment(20, 20, 19.6, 3.0)
|
||
p = SearchParams(
|
||
box=(-4, 6, -1, 1),
|
||
h_min=16,
|
||
h_max=30,
|
||
spacing=1.0,
|
||
coarse=2,
|
||
max_depth=20,
|
||
v_min=50,
|
||
v_max=3e4,
|
||
ratios=(1.0,),
|
||
)
|
||
assert search(st, p).best["governing"] == pytest.approx(1.04, rel=0.03)
|