工具介紹・邊坡穩定分析
不必先猜滑動面在哪裡
SSA 邊坡穩定分析免費網頁版一鍵解決
同一個邊坡,試遍三十一萬個可能的圓弧滑動面,找到的最小安全係數是 1.28。改用 SSA 的動態規劃法,不用事先假設滑動面的形狀,程式直接找出 Fs = 1.11 的滑動面。差距來自搜尋方法,這支免安裝的網頁工具就是為這件事做的。
邊坡分析最難的,常常不是算安全係數,而是知道該算哪一條滑動面。
01三十一萬個圓弧,還是差一截
先看一個簡單的例子。高 12 公尺的砂土邊坡,坡度約 1:1.7,砂土 c′ = 10 kPa、φ′ = 35°。坡趾下方 1 公尺處夾著一層 1 公尺厚的軟弱黏土,c′ 只有 2 kPa、φ′ 只有 12°,再往下是岩盤。
傳統的做法是假設滑動面是圓弧。我讓程式把圓心以 0.5 公尺為間距、半徑以 0.25 公尺為間距全部試過一遍,有效的圓弧共 315,989 個,最小安全係數是 1.28。
同一個剖面交給 SSA,用同樣的簡易 Janbu 公式計算,不到一秒就得到 1.11。它找到的滑動面在坡趾附近切進黏土夾層,貼著夾層底部平滑一段,再轉向坡頂。這個形狀不是圓弧,所以圓弧再怎麼密集地試也碰不到。
1.28 和 1.11 差了一成多。如果設計要求是 1.2,前者看起來過關,後者則不過關。
02先猜再算的老問題
臨界滑動面分析,是在給定的地形、地層與土壤條件下,找出安全係數最小的那一條滑動面。多數程式的做法是先產生一批候選滑動面,逐一計算,再從中挑出最小值。
台灣實務上常用的 STABL(包括 STEDwin 介面)就是這個思路。它可以隨機產生圓弧、塊體或不規則折線,功能完整,也支援 Bishop、Spencer 等多種分析法。不過它找到的是「試過的裡面最小的」,結果會受試算數量和使用者設定的搜尋範圍影響。範圍設偏了,真正的臨界面就可能不在候選名單裡,所以常要換幾組設定反覆確認。
地層越複雜,這個問題越明顯。軟弱夾層、順向坡層面、風化岩與新鮮岩盤的界面,都會讓臨界滑動面偏離圓弧,而這些正是山區邊坡最常見的情況。
03把找滑動面變成找最短路徑
SSA 用的是動態規劃(dynamic programming,逐段求最佳解的數學方法)。沿水平方向畫出一條條垂直分割線,每條線上排列候選節點,滑動面就是從左到右、每條線各選一個節點連成的折線。
這很像在棋盤上找一條最省力的路。每走一段就累加這段滑動面的貢獻,每個節點只保留累積值最小的那條來路,走到最後一條線再回頭追溯,就得到整個網格裡的最佳路徑。搜尋範圍延伸到地表以上,地表以上的線段貢獻為零,所以滑動面從哪裡出露、從哪裡切入,都由計算自己決定。
安全係數是抵抗力總和除以滑動力總和,不能直接逐段相加。Baker(1980)證明可以改用 G = Σ(抵抗 − F × 滑動) 這個輔助函數,在滑動力為正的條件下,讓 G 最小就等同讓安全係數最小。程式先假設一個 F 做動態規劃,再沿找到的滑動面算出它自己的安全係數,當作下一輪的 F,通常幾輪就收斂。
計算核心參考日本建設省土木研究所地すべり研究室 1987 年的「動的計画法を用いた臨界すべり面解析法」(中村・久保田,土木研究所資料第 2425 號)。2013 年我依此寫成 C++ 程式 SSA,當時以有限元素法解 Richards 方程計算降雨入滲後的孔隙水壓,用來研究大規模崩塌的發生機制。
這次的網頁版把孔隙水壓改成由使用者畫的地下水位線直接換算,操作簡單許多,搜尋與安全係數的核心演算法則維持不變。
04搬進瀏覽器之後
網頁版的目標是讓任何人打開就能用,不必安裝、不必註冊,也不必準備輸入檔。
- 畫出剖面就能算。地表線、各土層界面、地下水位線都可以在圖上拖曳節點,或從 Excel 貼上座標,也能直接匯入 CSV。
- 土層數目自己決定。按「新增土層」就能往下加一層,再畫出它的頂面界面線,崩積層、風化岩、軟弱夾層、岩盤都可以分開設定。不需要的土層也能直接刪除。
- 參數照習慣輸入。單位重可選 kN/m³ 或 tf/m³,凝聚力可選 kPa 或 tf/m²,切換時數值自動換算。某一層可設為岩盤,滑動面不會穿越。
- 地下水直接換算。孔隙水壓由水位線到滑動面的鉛直距離計算,水位以上用 γ、以下用 γsat 計重,另可選擇水位線傾斜修正。地震力以水平與垂直震度的擬靜態方式加入。
- 網格有建議值。頁面會依模型長度和土層厚度計算分割線間距與節點間距,太粗時提醒,並提供一鍵套用的建議值。
- 結果可以驗算。除了安全係數、滑動體面積與出入口座標,每一片切片的重量、水壓、抵抗力與滑動力都列成表格,可以複製到 Excel 自行核對。
- 模型可以存檔。整個模型存成一個 JSON 檔,下次匯入就能接著分析。所有計算都在自己的瀏覽器裡完成,資料不會上傳。
(60 條分割線 × 80 個節點)
自行增加
網頁下方另有完整的方法原理,列出簡易 Janbu 法、Baker 輔助泛函與動態規劃遞迴式的推導,式號與 1987 年的原報告一致,方便對照。
05使用前要先知道的限制
找得到臨界滑動面,不代表什麼都能算。下面這些限制,使用時請放在心上。
- 只有簡易 Janbu 法。它忽略切片間的剪力,未修正的安全係數通常偏保守。頁面另外列出乘上修正係數 f0 的結果,但 f0 是經驗式,只能當參考。需要 Bishop、Spencer 等方法時,請以其他軟體複核。
- 二維極限平衡分析。不考慮三維效應,也不計算變形量。
- 不含補強與外加載重。地錨、土釘、地工格網、擋土結構、坡頂超載目前都無法輸入。
- 地下水只是一條水位線。採靜水壓,不處理滲流場、超額孔隙水壓與基質吸力。水位高於地表時的積水重量與側向水壓也沒有納入。
- 結果受網格影響。找到的是「網格精度內」的最小值,凹形限制在計算中也是近似處理。重要案例請加密網格,確認安全係數不再明顯變化。
- 設定會改變答案。最小滑動深度、是否限制凹形、是否允許穿越模型邊界,都會影響找到的滑動面。c′ = 0 的土層尤其容易收斂到很淺的表層滑動。
- 參數決定一切。強度參數與地下水位的不確定性,通常比計算方法的差異大得多。
這是一個分析輔助工具。計算結果僅供參考,正式的工程判斷與設計,仍應由專業技師依現地調查與相關規範負責。
先用 SSA 找出臨界滑動面大概的位置、深度與規模,特別是地層複雜、懷疑有軟弱面的邊坡。再把這個結果拿去和 STABL 等商用軟體的搜尋結果比對,或作為設定搜尋範圍的依據。兩個方法找到的位置接近,結果就更可靠;差很多,就代表值得再看一次地層與參數。
06怎麼開始用
打開 cychen59.github.io/ssa-slope-stability 就能使用,手機也可以開,但編輯剖面建議用電腦。CSV 範例檔與範例模型都放在 GitHub 上,歡迎回報問題或提出改進建議。
使用本工具的分析結果發表報告或論文時,請引用:
Chen, C. Y., Ikkanda, S., Fujita, M., and Tsutsumi, D. (2013): A study on mechanism of large-scale landslides and the prediction, Proceeding of 12th International Symposium on River Sedimentation, pp.109-118.
07這次改版,其實是 AI 完成的
從 C++ 到網頁版,這次改版其實全靠 Claude Opus 5.5 強大的能力。我做的只有兩件事,提供原始碼,再跟它描述這支程式的作用。
接下來,它先讀懂程式,整理出原本的演算法與幾個可以改進的地方,再依照我的需求,一步步變成網頁版。計算核心、剖面繪圖、土層編輯、CSV 匯入、單位切換、方法原理頁,都是在一次次對話中完成的。它也用無限邊坡的解析解和國際基準案例驗算過計算結果,確認數字站得住。
以我過去的程式能力,沒有辦法想像能做成這種程度。不管是畫面、UI 還是 UX 的設計,都遠超過我自己的能力。
生在這個 AI 爆發的年代,做研究真是幸福啊!
從一份 1987 年的研究報告,到一個網址
從土木研究所的 FORTRAN 程式,到 2013 年用來研究大規模崩塌的 C++ 版本,再到現在打開瀏覽器就能用的免費工具。三十多年來,這個方法沒有變的,是它不要求使用者先猜滑動面的形狀。
邊坡分析最難的,常常不是算安全係數,而是知道該算哪一條滑動面。
說明:第 01 節的比較案例為本文自行設定的示意邊坡,兩種搜尋都採簡易 Janbu 法、未乘修正係數 f0。圓弧搜尋的圓心範圍為 x = 10~50 m、z = 5~60 m,間距 0.5 m;滑動面最低點由岩盤頂面至高程 11 m,間距 0.25 m。動態規劃採 80 條分割線、每線 100 個節點、最小滑動深度 1 m。
參考資料:中村浩之、久保田哲也(1987)動的計画法を用いた臨界すべり面解析法,土木研究所資料第 2425 号;Baker, R. (1980) Determination of the critical slip surface in slope stability computations, International Journal for Numerical and Analytical Methods in Geomechanics, 4, 333-359;Purdue University STABL 與 STEDwin 產品說明。
1 則留言:
讚👍⋯⋯賴茂雄技師9/28
張貼留言