2D limit equilibrium slope stability analysis (Bishop, Spencer, GLE/M-P…) with a Slide2-style desktop GUI, FS contour maps, supports, PDF reports and DXF — Python/Qt. Türkçe / English.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗2D limit equilibrium slope stability analysis with a desktop CAD interface — version 2026.4.0
2026.4.0 release notes — Python scripting tutorial (PDF), main icons in a vertical column on the left, only the ACADS examples bundled, an empty scripting editor, English-only interface, signed update manifests and a safer delta updater.
SlipSurfaceIQ LE is an open-source program for checking the stability of soil and rock slopes, cuts and embankments with the limit equilibrium method (LEM). You draw the slope cross-section, assign materials, add groundwater, loads and supports, and the program searches for the critical slip surface and its factor of safety (FS) with the classic methods of slices — Bishop, Janbu, Spencer, Morgenstern-Price/GLE and others.
The workflow follows the layout geotechnical engineers know from commercial tools such as Slide2: a Modeler window for building the model and a separate Interpret window for the results, which shows a slip-centre FS contour map, the critical surface, slice data and a professional PDF report.
The interface and reports are in English. The program runs on Windows, Linux and macOS.
Engineering disclaimer. SlipSurfaceIQ LE is provided without any warranty. Results depend entirely on the input geometry, strength parameters, groundwater and loads. Always review and verify them with engineering judgement and, where it matters, with independent calculations or software.
x,y, @dx,dy, @length<angle) and unlimited undo/redo.SlipSurfaceIQ LE is distributed as Python source code. There are
no MSI, DEB, RPM, Arch or PyInstaller application packages, no installers,
and no separate launcher scripts. The only supported application entry point
is main.py. Python 3.10 or newer and the dependencies from
requirements.txt are required.
Get the repository using Git or download its source archive and extract it. Run these commands from the repository root:
python -m pip install -r requirements.txt
python main.py
For an isolated environment (recommended):
python -m venv .venv
# Windows PowerShell: .venv\Scripts\python.exe -m pip install -r requirements.txt
# Windows PowerShell: .venv\Scripts\python.exe main.py
# Linux / macOS: .venv/bin/python -m pip install -r requirements.txt
# Linux / macOS: .venv/bin/python main.py
You can also run main.py directly from VS Code, PyCharm, or another
Python IDE, using an interpreter with the dependencies installed.
Neither pip install -e . nor OS-level package installation is required.
On minimal Linux desktops, install the Qt runtime shared libraries from your operating system's repository if PySide6 reports that they are missing:
sudo apt install libegl1 libgl1 libxkbcommon0 libfontconfig1 libdbus-1-3 # Debian / Ubuntu
sudo dnf install libglvnd-egl libglvnd-opengl libxkbcommon fontconfig dbus-libs # Fedora
sudo pacman -S libglvnd libxkbcommon fontconfig dbus # Arch Linux
sudo zypper install libglvnd libxkbcommon0 fontconfig libdbus-1-3 # openSUSE
python main.py # empty project, window sized to the screen
python main.py examples/acads_1a.slp.json # open a project file
python main.py --example "ACADS EX1(a)" # open a bundled example
python main.py --list-examples # list the bundled examples
python main.py --check # check Python and the required packages
The update checker (Help → Check for Updates…, or once a day at start-up)
queries the latest published GitHub release. When a newer release is found, you
can click Update Changed Files to download
and replace only the modified source files in place (with automatic backups in
.update-backup), or open the release page on GitHub. Every file is downloaded
and hash-checked before anything is replaced, so a failed or cancelled update
leaves the installation unchanged; the test suite (tests/) is not part of
updates, and files you keep in examples/ or docs/ are never deleted. When a
release changes requirements.txt, the completion dialog offers Install
Requirements, which runs python -m pip install -r requirements.txt with the
same Python that runs the application. Always start the application with
python main.py. Automatic checks can be disabled under
Help → Check for Updates at Start-up.
Signed manifests (maintainers). Releases can sign manifest.json with an
Ed25519 key (pure Python, no extra package). Run
python -m slipsurface.patch.signing genkey once, store the private key only as
the repository secret MANIFEST_SIGNING_KEY, and add the printed public key to
TRUSTED_PUBLIC_KEYS in slipsurface/patch/signing.py. From then on the release
workflow publishes manifest.json.sig, and the updater installs only from a
manifest whose signature verifies. With no public key configured, updates rely on
HTTPS and the per-file hashes.
The workflow bar at the top of the Modeler follows the steps of a slope model; each step shows its own toolbar.
Every edit can be undone (Ctrl+Z / Ctrl+Y). Changing the model invalidates the results and asks for a new computation; display-only changes (colours, labels, notes) do not.
x,y · @dx,dy · @length<angle · c close ·
u undo point · empty Enter finish.FS = … label, with dashed
lines to the exit and entry points and the critical surface as a dashed line.| Method | Equilibrium | Surfaces |
|---|---|---|
| Bishop simplified | moment | circular |
| Ordinary / Fellenius | moment (circle) / force | circular and non-circular |
| Janbu simplified / corrected (f0) | force | circular and non-circular |
| Corps of Engineers #1, #2 | force | circular and non-circular |
| Lowe-Karafiath | force | circular and non-circular |
| Spencer | force + moment | circular and non-circular |
| GLE / Morgenstern-Price (half-sine, constant, clipped sine, trapezoidal) | force + moment | circular and non-circular |
Choose the model in Define Material Properties → Strength. Every material has a unit weight, an optional saturated unit weight, a colour and water parameters (whether the water table acts on it and the piezometric factor Hu).
| Model | Strength | Notes |
|---|---|---|
| Mohr-Coulomb | τ = c′ + σ′n tan φ′ | |
| Undrained (Tresca) | τ = su | total stress, pore pressure not used |
| SHANSEP | τ = su = A + S · σ′v · OCR^m | A is additive; σ′v = max(W/b − u, 0) is the reference effective vertical overburden stress; total-stress analysis. Details and limitations. |
| Hardening Soil | τ = c′ + σ′n tan φ′ | Mohr-Coulomb failure surface of the HS model; E50,ref, Eoed,ref, Eur,ref, m, pref, Rf and ψ are stored for reference — LEM uses only the failure envelope |
| SANISAND | τ = σ′n tan φ(ψ), sin φ = 3Mb / (6 + Mb), Mb = M exp(−nb ψ) | state parameter ψ = e − ec, critical state line ec = ec0 − λc (p′/pat)^ξ (Dafalias & Manzari 2004); in LEM p′ ≈ σ′n |
| Power-law envelope | τ = a · pa · (1 + σ′n/pa)^b | concave envelope for granular materials |
| Power Curve | τ = a (σ′n + d)^b + c | as in Slide2 |
| Barton-Bandis | τ = σ′n tan(φr + JRCn log10(JCSn / σ′n)) | joints; scale correction JRCn = JRC0 (Ln/L0)^(−0.02 JRC0), JCSn = JCS0 (Ln/L0)^(−0.03 JRC0); total friction angle ≤ 70° |
| CNI rock mass | τ = a · σc · ((σn − T0) / σc)^n | Cylwik, Killian & Cicchini (2023), in the variables of Slide2; instantaneous φ ≤ 70° |
| Generalized Hoek-Brown | σ1 = σ3 + σci (mb σ3/σci + s)^a | mb, s, a from GSI, mi and D (Hoek et al. 2002) |
| Hoek-Brown (mb, s, a) | same envelope | mb, s and a entered directly |
The Hoek-Brown envelopes are converted to τ–σn curves (Balmer) and used with instantaneous c and φ.
All loads are included as forces and moments in every method.
| Support type | Force T (per support, then divided by the out-of-plane spacing) |
|---|---|
| End anchored | tensile capacity |
| Grouted tieback | min(tensile, bond strength × min(bond length, L_out)) |
| Geotextile | min(tensile strength, pullout × min(L_in, L_out)) |
| Geosynthetic | min(C · tensile, P_in, P_out), P = 2 · C · ∫(adhesion + σv tan δ) ds, σv = γ · depth; anchorage none / slope face / embedded end / both ends |
| Micro-pile | pile shear strength |
L_in and L_out are the support lengths inside and outside the sliding mass, C the strip coverage. Each support type has:
Single bolts are placed by clicking on the slope face with a given inclination (default 15° below horizontal) and length. Bolt patterns fill a stretch of the slope face with equally spaced bolts and are edited as one object; each bolt acts as a separate support.
Shotcrete + wire-mesh facing: thickness, unit weight, shear strength τ, mesh (Q106 … Q589 or a custom As) and fy. Its weight γ·t is applied as a surface load; where the slip surface exits or enters through the faced surface, T = τ·t + As·fy acts tangent to the slip surface against sliding (passive by default).
File → PDF Report (Ctrl+P) in either window creates a report with:
The sections can be switched on or off; author, checker and company are remembered.
Projects are saved as .slp.json (format version 3). Files from earlier versions (1 and 2)
are converted automatically when opened. A project stores the geometry, materials,
groundwater, loads, supports, facings, search settings, display options and the notes of
both windows.
File → Import DXF / Export DXF exchanges the 2D geometry. Importing replaces the current model and can be undone with Ctrl+Z.
| Layer | Content |
|---|---|
SS_EXTERNAL | one closed external boundary (alternatively a single closed polyline on layer 0) |
SS_MATERIAL | material boundaries |
SS_WATER | one water table polyline |
SS_CRACK | one tension crack polyline |
SS_SURFACE | one user slip surface |
SS_SUPPORT | support lines (export only) |
LINE, LWPOLYLINE, POLYLINE, ARC and SPLINE are read; curves are converted to straight
segments with a 1 cm tolerance. Drawing units are converted to metres (unitless drawings are
taken as metres with a warning); geometry outside z = 0 is rejected and skipped entities are
listed. DXF carries geometry only — use .slp.json for materials, loads, supports and
results.
The DXF Import Guide (PDF; also under Help) explains the
layers, supported entities and units, a CAD preparation checklist, what happens after an
import, exporting, using DXF from Python and every import message with its fix. Start a
drawing from docs/DXF_Layer_Template.dxf, which has every
layer. Maintainers rebuild both with python scripts/build_dxf_guide.py.
Tools → Python scripting opens an empty editor where a script can modify the project object
(external, material_boundaries, assignments, water_table, tension_crack,
materials, support_types, supports, support_patterns, facing_types, facings,
loads, seismic, methods, surfaces, annotations, …). MaterialSpec,
SupportType, FacingType, Project and empty_project are available. The script runs on
a copy of the project; if validation succeeds, all changes become a single undoable step,
otherwise the open project is left unchanged. Scripts run with your local Python
permissions — run trusted code only. Scripts never run when a project is opened; a script
opened from a .py file asks for confirmation before its first run.
The Python Scripting Tutorial (PDF; also under
Help and the editor's Tutorial (PDF) button) explains every command: all project fields,
every material model and its parameters, loads, supports, facings, settings, notes and
display options, with tested examples and a complete model. Maintainers rebuild it with
python scripts/build_scripting_tutorial.py; every example in it is run during the build.
The bundled examples are the ACADS verification problems. They are available under
File → Examples and from the command line with --example "<name>"
(python main.py --list-examples prints the names). The same models are in the
examples folder as project files. File → New starts an empty project
with one default material (Soil 1, Mohr-Coulomb).
Example (--example) | File | Shows |
|---|---|---|
| ACADS EX1(a) | acads_1a.slp.json | ACADS verification problem (homogeneous slope) |
| ACADS EX1(b) | acads_1b.slp.json | ACADS verification problem (three layers, weak lens; layer starts at the toe) |
| ACADS EX1(c) | acads_1c.slp.json | homogeneous slope with a water-filled tension crack (Craig depth 2.685 m); Spencer ref 1.592 |
| ACADS EX1(d) | acads_1d.slp.json | the EX1(b) three-layer slope with kh = 0.15; Spencer ref 0.991 |
| ACADS 2(a) — Talbingo critical upstream search | acads_2a.slp.json | upstream-face critical-circle search; infinite-slope reference FoS ~1.951 |
| ACADS 2(b) — Talbingo fixed circle | acads_2b.slp.json | four-material dry embankment; exact circle (100.3, 291, 278.8); Bishop/Spencer/GLE/Janbu |
| ACADS 3(a) — weak seam + water table | acads_3a.slp.json | two materials, 0.5 m weak seam, water table at its base; non-circular Spencer/GLE search |
| ACADS 3(b) — weak seam specified path | acads_3b.slp.json | exact four-point noncircular path for a fixed-surface solver control; no critical search |
| ACADS EX4 | acads_4.slp.json | weak seam, inclined piezometric surface and two surcharges; Spencer ref 0.761 (block search) |
| ACADS EX5 | acads_5.slp.json | excavated 1:2 slope, water-table approximation of the published flow net; Spencer ~1.486 vs 1.500 |
The ACADS Janbu validation separates Janbu Simplified from Janbu Corrected, lists method-matched Slide2 factors, and verifies published fixed surfaces. Deep-surface Janbu correction is bounded at its empirical peak; use Spencer/GLE to corroborate unusual non-circular mechanisms.
A reproducible 29-slice GeoStudio / Seequent hand-calculation reference
now checks the Ordinary and Simplified Bishop equilibrium equations and the
existing LE solver independently. In 2026.1.4, Ordinary's pore-pressure
projection for circular moment equilibrium was aligned with the published
u L cos² α formulation (non-circular force equilibrium retains u L),
and the Bishop pore-water normal-force decomposition was added as a checked
solver relation. See
GeoStudio Hand Calculations Verification.
Additional official SLOPE/W Tutorial and Limit Equilibrium Formulation examples are now covered by exact published tutorial geometry/material/pore inputs and solver-level analytical/method tests. Vendor critical-search FS numbers are labelled reference-only until the original solved circle/search settings are available; no false cross-program equality is claimed. See Additional GeoStudio Verification.
Run python -m pytest tests/test_geostudio_handcalcs.py tests/test_geostudio_slope_examples.py -q.
Reference discrepancies: The verification discrepancy audit separates Talbingo 2(a) versus 2(b) and provides a read-only diagnostic for ACADS 3(a) and Borges–Cardoso Case 2. Do not accept very low optimized FoS without checking the actual surface and support mobilization.
The ACADS 2(b) Talbingo Dam verification adds an exact fixed-circle solver case, without an optimizer search, to check four methods on the same published surface. The circle is editable under Surface Options → User-defined → Fixed circle.
The Borges–Cardoso Case 2 geosynthetic benchmark adds a 5-layer reinforced embankment model and a new elevation-dependent undrained total-stress material (UDG). Published FoS are verification references, not hardcoded results; global critical-circle matching remains pending independent analysis.
The Arai & Tagyo VP15 layered-slope verification note provides the circular and non-circular models, material region checks, and published vendor FoS values. The benchmark global-search match remains unverified until separately calculated and reviewed.
The ACADS 3(a) verification note gives the exact groundwater/weak-seam geometry and published Spencer/GLE references. The regression tests check material regions, pore pressures, and a fixed non-circular diagnostic path; no match of optimized FS is claimed until a full critical search has been checked.
The test suite checks the engine against reference solutions, among them:
| Key / action | Function |
|---|---|
| F5 / F6 | compute / open Interpret |
| F2, middle double-click | zoom all |
| Wheel / middle drag | zoom at cursor / pan |
| F3 / F7 / F8 / F9 | OSNAP / GRID / ORTHO / SNAP |
| F10 | Information Viewer (Interpret) |
| F11 | full screen on / off |
| Ctrl+Z / Ctrl+Y | undo / redo |
| Ctrl+P | PDF report |
Enter, c, Backspace, Esc | finish, close, undo last point, cancel (drawing) |
| Double-click | coordinate table or properties of the picked object |
| Delete | delete the selection |
python -m pip install -r requirements-dev.txt
python -m pytest -p no:cacheprovider --durations=15 # Qt tests run headless
python -m pytest -p no:cacheprovider -m "not slow" # quick run without long analyses
python -m ruff check .
python -m mypy # computation core
The full suite takes a few minutes because of the non-circular searches and the PDF and GUI
tests (tests marked slow hold the long benchmark analyses). GitHub Actions runs the lint
(including the 100-character line limit) and type checks, and the python main.py checks with
the full suite on Python 3.12 and the quick suite on Python 3.10.
main.py start-up script (IDE / command line)
pyproject.toml lint, type-check and test configuration only
requirements*.txt runtime and development requirements
slipsurface/
geometry/ slope geometry, slip surfaces (circle, polyline, B-spline), regions from boundaries
materials/ strength models and the model catalogue
lem/ slicing, Bishop / Fellenius, Spencer, GLE, Janbu, Corps, Lowe-Karafiath
optimizer/ critical surface search (differential evolution + Nelder-Mead)
loads.py external loads, support forces, facings, bolt placement
project.py project model and JSON file format
analysis.py multi-method runner and text report
exchange.py DXF import / export
scripting.py Python scripting
patch/ delta self-updater and manifest signatures
report/ PDF report (ReportLab) and fonts (Source Sans 3, SIL OFL)
ui/ Modeler, Interpret, CAD canvas and tools, dialogs
examples/ ACADS example projects
tests/ test suite
SlipSurfaceIQ LE remains an independent application, not a SlipSurfaceIQ Suite module. Its native CAD modeler, Interpret results, numerical engine, project files, licenses, source releases and version numbers stay under this repository. See the standalone development plan for the staged reliability, CAD, solver-verification and release-quality work.
Longer-term research features:
Copyright © 2026 Hasan Deniz Altuntaş.
SlipSurfaceIQ LE is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. If you modify the program and make it available to users over a network (for example as a server or web service), the AGPL requires you to offer them the corresponding source code.
The program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.
Third-party components and their licenses are listed under Help → About: Qt / PySide6 (LGPL-3.0), NumPy, SciPy and Shapely (BSD), ReportLab (BSD), ezdxf and QtAwesome (MIT), Material Design Icons (Apache-2.0), Source Sans 3 (SIL Open Font License 1.1).