fix(533-1 · 533-2): 안 닫힌 사면 연장 · δ 는 원 DEM 에서 · 타원체는 구 임계 노드에서 · 원뿔 r_u 시험
- Grid: B06 사면이 반폭 안에서 안 닫히면 끝 기울기로 원지형까지 늘림(자료 끝이면 끝 값 이어 감) — 띠 끝 7 m 가짜 절벽 없앰 - Grid: δ = 설계 − 원 DEM(다시 뜬 1 m 격자의 cm 잡음이 끝 판정을 흔들던 것) - Search: 타원체는 구 탐색 임계 노드에서만(1 km 822 s → 287 s) · 다듬기 문턱 = max(2.0, 전역 최소 × 1.2) - 시험: 안 닫힌 사면 연장 · Scoops3D 원뿔 r_u 0.4(1.626) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -103,3 +103,21 @@ def test_rock_boundary_and_layers():
|
||||
assert np.isneginf(st.hard_top[i, jm + 20]) or st.hard_top[i, jm + 20] < -1e5 # 리핑암 = 뚫림
|
||||
ii = np.flatnonzero(np.isclose(g["y"], 0.0))[0]
|
||||
assert st.bottoms[0, ii, j0] == pytest.approx(g["z"][ii, j0]) # 깎기 = 성토 두께 0
|
||||
|
||||
|
||||
def test_unclosed_slope_extended_to_ground():
|
||||
"""B06 사면이 반폭 안에서 안 닫힘(끝 δ ≠ 0) → 끝 기울기로 원지형까지 늘려 띠 끝 절벽 없앰."""
|
||||
dem, xx, yy = _dem()
|
||||
sts = [_station(dem, cx, 1.0) for cx in (0, 20)]
|
||||
for st in sts: # 오른쪽(−y) 끝 5 m 를 1:1 성토로 바꿔 −20 m 에서 2 m 떠 있게 함
|
||||
d = np.asarray(st["design"])
|
||||
g = np.asarray(st["ground"])
|
||||
tail = d[:, 0] <= -15
|
||||
d[tail, 1] = g[tail, 1] + 2.0 - (d[tail, 0] + 20) * 0.4
|
||||
st["design"] = d.tolist()
|
||||
g = build_grid(dem, sts, cell_m=0.5)
|
||||
j = np.flatnonzero(np.isclose(g["x"], 10.0))[0]
|
||||
col = g["dz"][:, j]
|
||||
# 늘린 사면이 원지형과 만나는 곳 너머는 0 · 이웃 칸 사이 단차 1 m 아래
|
||||
assert np.abs(np.diff(col[np.isfinite(col)])).max() < 1.0
|
||||
assert g["in_band"][np.flatnonzero(np.isclose(g["y"], -21.0))[0], j]
|
||||
|
||||
@@ -3,6 +3,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³
|
||||
- Donald & Giam 1a 2:1 · γ 20 · φ 19.6° · c 3 kPa → 1.04
|
||||
- 표 6.7 원뿔 30° · r_u 0.4 → 1.626
|
||||
탐색 격자는 시험 시간 때문에 문헌 임계 중심 둘레로 좁힘.
|
||||
"""
|
||||
|
||||
@@ -58,3 +59,29 @@ def test_donald_giam_1a():
|
||||
ratios=(1.0,),
|
||||
)
|
||||
assert search(st, p).best["governing"] == pytest.approx(1.04, rel=0.03)
|
||||
|
||||
|
||||
def test_wet_cone_pore_pressure_ratio():
|
||||
"""Scoops3D 표 6.7 · 원뿔 30° · λ 0.125(γ 20 · φ 30°) · r_u 0.4 → Bishop 1.626(도표 1.644)."""
|
||||
h = 10.0
|
||||
r0 = h / np.tan(np.radians(30))
|
||||
x = np.arange(-r0 - 15, r0 + 15 + 1e-9, 0.5)
|
||||
xx, yy = np.meshgrid(x, x)
|
||||
z = np.clip(h - np.hypot(xx, yy) * np.tan(np.radians(30)), 0, h)
|
||||
c = 0.125 * 20 * h * np.tan(np.radians(30))
|
||||
mat = {"id": "m", "name": "m", "gamma_t": 20, "gamma_sat": 20, "c": c, "phi": 30}
|
||||
st = Strata(x, x, z, np.zeros((0,) + z.shape), [mat])
|
||||
p = SearchParams(
|
||||
box=(8, r0 + 4, -1, 1),
|
||||
spacing=1.0,
|
||||
h_min=1,
|
||||
h_max=21,
|
||||
h_step=2,
|
||||
coarse=4,
|
||||
max_depth=15,
|
||||
v_min=20,
|
||||
v_max=3e4,
|
||||
ratios=(1.0,),
|
||||
groundwater={"mode": "ru", "ru": 0.4},
|
||||
)
|
||||
assert search(st, p).best["governing"] == pytest.approx(1.626, rel=0.03)
|
||||
|
||||
Reference in New Issue
Block a user