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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user