fix(533-2 2차): E04 급경사 전역 최소 — 점 단위 덩이 나눔 · 전역 최소 다듬기 · Zhang 경우 3 시험

- Search: 활동면이 지표를 자른 점을 셀 안 점 단위로 덩이 나눔 — 발끝을 살짝 비켜 지나는 구의 사면 몸통 · 발끝 앞 접시가 따로(셀 중심 줄 꺾임만 검사 · 지표 쌍선형 + 활동면 볼록)
- Search: 전역 최소 면을 찾은 노드 · 반지름 한 눈금 안에서 Nelder-Mead 로 다듬음(box · node_mask 안) — 셀 지도도 그 면으로 고침
- Scoops3D 60° 0.771~0.776 → 0.754(0.75 · +0.5 %) · 30° 1.325 → 1.3197(1.32)
- 검증_sub5 1 km 띠: 전역 최소 1.185 → 1.174(−0.9 %) · p1/p5/p50 같음 · 셀 9.7만 중 168 이 1 % 넘게 바뀜 · 12 프로세스 28 s → 45 s
- 시험: 60° 제방 ±1 % · Zhang 경우 3(약층 + 수위선 · FK 1977 그림 8) Bishop 1.524 = Lam & Fredlund 1.481~1.54 · Gharti 1.49 ±3 % · 경우3/2 비 0.943

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 04:22:26 +09:00
co-authored by Claude Opus 5.5
parent b5c46445ec
commit e966a37b5f
3 changed files with 176 additions and 58 deletions
@@ -6,6 +6,9 @@
· 타원체 중심 (6.1, 0, 21.3)
Rx=Rz=24.4 · Ry=78.2 · c 29 kPa φ 20° γ 18.8 → Hungr 3D Bishop 2.167 · Zhang 2.122 /
약층(c 0 · φ 10°, 발끝 아래 0.94 m — 그림 화소로 잼) → Hungr 1.620 · Zhang 1.533.
- 경우 3 = 경우 2 + 수위선(Fredlund & Krahn 1977 그림 8 · Slide3 2D Extruded #16 그림 16:
뒤 경계 42.7 m 에서 발끝 위 6.1 m → 발끝 → 발끝 앞 지표) → Lam & Fredlund 1993 1.481~1.54
· Gharti 2011 1.49 · Zhang 1.441(경우 2 처럼 Zhang 은 다른 풀이보다 4~6 % 낮음).
"""
import numpy as np
@@ -76,6 +79,19 @@ def test_zhang_case2_weak_layer_truncated():
assert 1.45 < r["janbu_corrected"] < 1.80 # 문헌 폭 1.53~1.67 둘레
def test_zhang_case3_weak_layer_piezometric_line():
st = _zhang(True)
xx, _ = np.meshgrid(st.x, st.y)
st.z_water = np.clip(xx * 6.1 / 42.67, 0.0, None)
args = ([6.1, 0.0, 21.3], 24.4, 78.2 / 24.4, [-1.0, 0.0])
r = evaluate_surface(st, *args, groundwater={"mode": "line"})
assert 1.481 * 0.99 < r["bishop"] < 1.54 * 1.01 # Lam & Fredlund 1993 네 값 폭
assert r["bishop"] == pytest.approx(1.49, rel=0.03) # Gharti 2011
# 수위선이 낮추는 비 = Lam & Fredlund 경우 3/경우 2(0.940~0.951)
dry = evaluate_surface(_zhang(True), *args)["bishop"]
assert 0.93 < r["bishop"] / dry < 0.96
def test_pore_pressure_and_seismic():
st, c = _gens(0.04)
dry = evaluate_surface(st, c, 1.0)
@@ -2,6 +2,7 @@
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³
- 60° · λ 0.125 → 0.75 — 발끝에 거의 닿는 면(발끝 앞 접시는 따로 덩이 · 마지막 다듬기) ±1 %
- Donald & Giam 1a 2:1 · γ 20 · φ 19.6° · c 3 kPa → 1.04
- 표 6.7 원뿔 30° · r_u 0.4 → 1.626
탐색 격자는 시험 시간 때문에 문헌 임계 중심 둘레로 좁힘.
@@ -45,6 +46,26 @@ def test_embankment_30deg_global_minimum():
assert np.isfinite(r.volume[np.isfinite(f)]).all()
def test_embankment_60deg_toe_minimum():
st = _embankment(10 / np.tan(np.radians(60)), 19, 20, 8.64)
p = SearchParams(
box=(-9, -5, -1, 1),
h_min=13,
h_max=17,
h_step=1,
spacing=1.0,
coarse=2,
dr=0.5,
max_depth=20,
v_min=50,
v_max=2e4,
ratios=(1.0,),
)
r = search(st, p)
assert r.best["governing"] == pytest.approx(0.75, rel=0.01)
assert np.nanmin(r.f_min) == pytest.approx(r.best["governing"])
def test_donald_giam_1a():
st = _embankment(20, 20, 19.6, 3.0)
p = SearchParams(