OpenGeoRock
3.3

Interslice forces, convergence and admissibility

Describes OGR Slip2D 0.1.235

Every method of slices in OGR Slip2D except the Ordinary one reaches its factor of safety by iteration, and Spencer and GLE/Morgenstern–Price add a search for the interslice force factor λ. The first sections describe how those iterations are controlled and when their result is accepted. A converged answer can still be inadmissible, and three checks decide that: the sign of the interslice thrust, the m-alpha check and the tensile stress check. The line of thrust and the codes written in place of a factor of safety close the chapter.

3.3.1Convergence tolerance and iteration limits#

Bishop's and Janbu's methods iterate on the factor of safety itself (Eq. (3.2.6) and Eq. (3.2.9)): each pass evaluates the right-hand side of the equation with the current value and takes the result as the next one. The iteration stops when two successive values agree within the convergence tolerance ε\varepsilon:

∣Fk+1−Fk∣<ε\left|F_{k+1} - F_k\right| < \varepsilon

The test is absolute, in units of the factor of safety, and it is never applied to the first step, which is measured from the initial value rather than from an iterate. The other methods use the same ε\varepsilon in their own tests: Spencer and GLE on each fixed point of the λ search and on ∣Ff−Fm∣|F_f - F_m| (Section 3.3.3), the prescribed-inclination family on the width of the bracket around its root (Section 3.2.7). A surface that reaches the iteration limit without meeting its test has no factor of safety: it is rejected and counted under error code −111 (Section 3.3.9).

Table 3.3.1 Convergence settings. Every analysis run from the program, the command line or the MCP server builds its methods from the project settings, so the project defaults are the ones in force; the defaults of the method classes apply only to a Python script that creates a method object itself.
SettingProject Settings pageProject defaultClass default
Tolerance ε\varepsilonMethods0.0050.001
Maximum iterationsMethods5075 (GLE: 50)
Initial factor of safetyAdvanced1.01.0
Accelerate convergence (Steffensen)Advancedonoff
Minimum lambda, maximum lambdaAdvanced−0.1, 6.0−0.1, 6.0

The same Maximum iterations bounds a different loop in each family of methods, and the acceleration of the next section reaches only some of them. Table 3.3.2 sets out what each setting and each check of this chapter applies to.

Table 3.3.2 What Maximum iterations, the Steffensen acceleration, the m-alpha check and the line of thrust apply to, method by method.
MethodMaximum iterations boundsSteffensenm-alpha checkLine of thrust
Ordinary (Fellenius)nothing: no iterationnonono
Bishop simplifiedthe iteration on FFcircles onlyyesno
Janbu simplified, correctedthe iteration on F0F_0yesyesno
Spencer, GLEthe refinement of λ; each fixed point gets the larger of the value and 400 passesnoyesyes
Corps of Engineers #1, #2, Lowe–Karafiaththe refinement of the root, at least 60 stepsnonoyes
In OGR Slip2D

Tolerance, Maximum iterations, whose label warns that its scope differs by method, and the number of slices are on the Methods page of Analysis → Project Settings; the dialog accepts tolerances down to 10⁻⁶. The initial factor of safety and the λ range are on the Advanced page. The settings reach the methods through one function of the analysis runner, which every interface uses. When Maximum iterations is changed from its default and Spencer or GLE is in the run, the analysis notes say which of their loops the new value reaches.

Source: ogr_core/project/settings.py · ogr_slip2d/methods/base.py · ogr_slip2d/analysis_runner.py

3.3.2Steffensen–Aitken acceleration#

A fixed-point iteration converges linearly, and slowly where the map is flat near its root. Aitken's Δ2\Delta^2 process (Aitken, 1926) extrapolates three successive iterates to the limit of the sequence,

F∗=Fk−(Fk+1−Fk)2Fk+2−2Fk+1+FkF^{*} = F_k - \dfrac{\left(F_{k+1} - F_k\right)^2}{F_{k+2} - 2F_{k+1} + F_k}

and restarting the iteration from F∗F^{*} after every third iterate is Steffensen's method (Steffensen, 1933). With Accelerate convergence on, Bishop's and Janbu's iterations replace every third iterate by F∗F^{*}. The test of Eq. (3.3.1) is unchanged, so the acceleration changes how fast the sequence reaches its root and not which root it reaches. Where the denominator of Eq. (3.3.2) is smaller than 10⁻¹⁴ in absolute value, or F∗F^{*} is not a positive finite number, the plain iterate is kept.

In OGR Slip2D

Analysis → Project Settings → Advanced → Accelerate convergence, on by default. It is applied by Bishop's method on circular surfaces and by both of Janbu's methods, on the uncorrected F0F_0. It is not applied by Bishop's method on other surfaces, whose iteration is damped instead (Section 3.2.3); nor by Spencer and GLE, whose iteration carries the factor of safety and the interslice forces together, so that extrapolating the factor alone leaves the forces behind; nor by the prescribed-inclination family, which finds its factor by bracketing a root; nor by the Ordinary method, which does not iterate. When the setting is on and no method of a run can use it, the analysis notes say so.

Source: ogr_slip2d/methods/base.py · ogr_slip2d/methods/bishop.py · ogr_slip2d/methods/janbu.py

Spencer and GLE/Morgenstern–Price give two factors of safety for any value of λ, FfF_f from force equilibrium (Eq. (3.2.16)) and FmF_m from moment equilibrium (Eq. (3.2.17)), and their solution is the λ at which the two agree (Fredlund & Krahn, 1977). OGR Slip2D solves two nested problems: at a given λ, one fixed point for each factor; around them, the root of

g(λ)=Ff(λ)−Fm(λ)=0,F=12(Ff+Fm)g(\lambda) = F_f(\lambda) - F_m(\lambda) = 0, \qquad F = \tfrac{1}{2}\left(F_f + F_m\right)
Spencer factors of safety from force equilibrium, F_f, and from moment equilibrium, F_m, against the interslice force ratio lambda for one circle of a homogeneous slope, with the grid values the search sampled, the first sign change that brackets the root and the root itself at lambda 0.388, F 1.893 -0.1 0 0.1 0.2 0.4 0.6 0.8 1 1.5 1.8 1.9 2.0 2.1 2.2 λ F grid nodes (default range −0.1 to 6; first pass stops at 1.5) Ff force equilibrium Fm moment equilibrium λ* = 0.388 F = 1.893 bracket Janbu 1.799 Bishop 1.896
Figure 3.3.1 Spencer's two factors of safety against λ on the circle of Table 3.2.4, computed with OGR Slip2D 0.1.235. The search sampled the grid from −0.1 upwards (dots) and stopped at 0.4, the first node where gg changed sign; one secant step inside the bracket gave ∣g∣<ε|g| < \varepsilon at λ=0.388\lambda = 0.388, F=1.893F = 1.893. At λ=0\lambda = 0, FfF_f is Janbu's simplified factor and FmF_m Bishop's.

The two fixed points at one λ#

Each factor is iterated to its own fixed point, called here a branch. A pass marches the base normal force and the interslice normal force across the slices (Eq. (3.2.14) and Eq. (3.2.15)) with the interslice shear of the previous pass, updates Xi=λf(xi)EiX_i = \lambda f(x_i) E_i, and evaluates the branch's own equation for a new value g(Fk)g(F_k). The update is damped and kept inside the range of factors the search accepts:

Fk+1=min⁡[50, max⁡(0.05, 12(Fk+g(Fk)))]F_{k+1} = \min\left[50,\ \max\left(0.05,\ \tfrac{1}{2}\left(F_k + g(F_k)\right)\right)\right]

The state of this iteration is the pair (F,X)(F, X), so a branch is accepted only when both have settled: the step ∣g(Fk)−Fk∣|g(F_k) - F_k| below ε\varepsilon, each of the last two steps smaller than the one before it (the iteration is contracting), and the thrust residual

δX=max⁡i∣λf(xi) Ei−Xi∣∑j(∣Wj∣+cj′ lj+∣Hj∣+∣Tj∣)<ε\delta_X = \dfrac{\max_i\left|\lambda f(x_i)\,E_i - X_i\right|}{\sum_j\left(|W_j| + c'_j\,l_j + |H_j| + |T_j|\right)} < \varepsilon

where TjT_j are the support forces on the base of slice jj: the largest change of an interslice shear force in the pass, relative to the total force acting on the mass. A branch whose step and thrust residual have both stayed below ε\varepsilon for two consecutive passes is accepted as well, because a damped iteration that converges need not shorten its step on every pass. No branch is accepted before its third pass.

A branch is abandoned, and its λ lost, when ∣mα∣<10−6|m_\alpha| < 10^{-6} on some base, its driving sum vanishes or the new value is not a positive finite number; when an interslice normal force exceeds ten times the total force of Eq. (3.3.5), a runaway; when it has failed for 80 consecutive passes to improve on both its smallest step and its smallest thrust residual, which means it is wandering rather than converging; or when it has used its budget of passes, the larger of Maximum iterations and 400.

A damped iteration can settle into a period-2 cycle around a fixed point it never reaches, or crawl towards one. After 80 passes, or earlier if its step has grown, compared with the step two passes before, on ten consecutive passes, a branch that is still moving by more than ε\varepsilon continues with the relaxation of Wegstein (1958):

Fk+1=Fk+ω[g(Fk)−Fk],ω=11−s,s=g(Fk)−g(Fk−1)Fk−Fk−1F_{k+1} = F_k + \omega\left[g(F_k) - F_k\right], \qquad \omega = \dfrac{1}{1 - s}, \qquad s = \dfrac{g(F_k) - g(F_{k-1})}{F_k - F_{k-1}}

with ω\omega limited to 0.1≤ω≤50.1 \le \omega \le 5; the damped update of Eq. (3.3.4) is the same rule with ω=12\omega = \tfrac12. Taking ss as the secant slope of the map cancels that slope locally, so one rule damps a cycle and extrapolates a crawl. Under this relaxation a branch is accepted when its step and thrust residual have both been below ε\varepsilon on two consecutive passes. Finally, when the force branch at some λ produces no state at all while the moment branch converged, the force branch is solved once more from FmF_m, with the relaxation active from the first pass, and the new state is kept only if it converges.

The search for λ#

  1. Grid. λ is sampled over a calibrated list, −1.5, −1.0, −0.6, −0.4, −0.2, −0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.0 and 1.5, clipped to the range set in the project; the default range, −0.1 to 6.0, leaves −0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.0 and 1.5. A value counts when both branches converge to factors between 0.05 and 50 and its interslice thrust is admissible (Section 3.3.4). Sampling stops at the first change of sign of gg.
  2. Extension. If the grid brackets no root, λ = 2.0, 2.5, 3.0, 3.5, 4.0, 5.0 and 6.0 are sampled as well, as far as the project range allows.
  3. Gaps. If there is still no change of sign, and ∣g∣|g| decreases towards a grid value that produced no usable sample, the interval up to that value is halved, up to six times, looking for the change of sign there.
  4. Values set aside. If there is still none, the values of λ set aside only because their interslice thrust was in tension are put back, and the bracket nearest the admissible ones is taken.
  5. Refinement. Inside the bracket the root is refined by the secant method, falling back to bisection whenever the secant step leaves the bracket or a branch fails, for at most Maximum iterations steps, until ∣g∣<ε|g| < \varepsilon. The factor of safety is 12(Ff+Fm)\tfrac12(F_f + F_m) at that λ.

If no value at all survives the grid because every one was rejected for its interslice thrust, the grid is sampled again without that criterion and the answer is marked inadmissible (Section 3.3.4). A bracket that is refined without ∣g∣|g| falling below ε\varepsilon gives no factor of safety. When nothing brackets at all, the program returns the sampled λ with the smallest ∣g∣|g| and F=12(Ff+Fm)F = \tfrac12(F_f + F_m) there; that answer counts as converged if ∣g∣<0.02|g| < 0.02, and as a failure ("no λ-bracket") otherwise.

Note

The limit of 0.02 on that last answer is fixed and looser than the tolerance. Its own source code says it has no derivation, and keeps it because tightening it to the tolerance was measured to remove surfaces from a search and to raise the reported minimum on the unsafe side. The residual is published with the result and in the analysis notes, so that an answer taken from the nearest sample can be told apart from a solved root.

In OGR Slip2D

The λ range is set on the Advanced page (Minimum lambda, Maximum lambda); it clips the calibrated list rather than replacing it, so a range narrower than the default can exclude the solution. With every result Spencer and GLE publish λ, the boundary ratios, whether the search fell back to the nearest sample and its residual, and how many values of λ were lost and why: to the pass budget, to a runaway thrust, to a stalled or inadmissible branch, or rescued by the relaxation. On a planar surface the factor from force equilibrium does not depend on the interslice forces, and its branch is accepted without waiting for the thrust residual to fall below the tolerance.

Source: ogr_slip2d/interslice.py · ogr_slip2d/methods/spencer.py · ogr_slip2d/methods/gle.py

3.3.4Admissibility of the interslice forces#

Once the interslice forces are formed, g(λ)g(\lambda) can have more than one root, and not every root is a solution: at a spurious one many interslice faces are pulled apart (Ching & Fredlund, 1983). Soil transmits no tension across a vertical face, so at every λ it samples OGR Slip2D tests the interslice normal forces of the force branch:

∑i=1n−1Ei>0\sum_{i=1}^{n-1} E_i > 0

The resultant of the interior interslice normal forces must be compressive. The test is on the sum and not on every face, because a legitimate solution can carry a small tension on a face or two near a free end, where EE tends to zero anyway. It is a preference: a λ that fails it is set aside while other values remain. If none passes, the answer is computed with the criterion relaxed and the surface is marked inadmissible: it keeps its factor of safety, but it is excluded from the choice of the critical surface unless no admissible surface exists. With every result the program publishes the margin ∑Ei/∑∣Ei∣\sum E_i / \sum |E_i|, which is +1 when every interior face is in compression and −1 when every one is in tension, so that a verdict close to changing can be seen.

The prescribed-inclination methods have no λ to choose. For them the program publishes a diagnostic of thrust reversal (the largest interslice force acting against the dominant sense, divided by the largest force) that is not used to reject anything.

In OGR Slip2D

A converged Spencer or GLE answer whose returned state fails Eq. (3.3.7) carries the note that no λ leaves the interslice thrust in net compression and is counted under error code −101. When every surface of a search is inadmissible for this or for the checks below, the search reports the lowest of them rather than nothing, with the count of inadmissible surfaces.

Source: ogr_slip2d/interslice.py · ogr_slip2d/search.py · ogr_slip2d/methods/modified_swedish.py

3.3.5The m-alpha check#

The quantity mαm_\alpha of Eq. (3.2.5) divides the base normal force in every method that takes it from the vertical equilibrium of the slice. Where it becomes small, the normal force, and the shear strength that follows from it, are inflated; where it becomes negative, the factor of safety loses its meaning. Whitman & Bailey (1967) suggested that a factor of safety should not be accepted without further examination when mαm_\alpha falls below about 0.2 on any slice. After the factor of safety has converged OGR Slip2D evaluates, on every slice,

mα=cos⁡α+sin⁡α tan⁡ϕ′F  ≥  0.2m_\alpha = \cos\alpha + \dfrac{\sin\alpha\,\tan\phi'}{F} \;\ge\; 0.2

with the converged FF, the sense of sliding the method used and the tan⁡ϕ′\tan\phi' at which the method linearised the envelope, and rejects the surface if any slice falls below 0.2. Figure 3.3.2 shows where that happens: at the toe, where the base rises in the direction of sliding (α<0\alpha < 0), and the sooner the larger tan⁡ϕ′/F\tan\phi'/F. In a purely cohesive material mα=cos⁡αm_\alpha = \cos\alpha, and the check becomes a ceiling on the inclination of the base, ∣α∣≤arccos⁡0.2=78.46°|\alpha| \le \arccos 0.2 = 78.46°.

m-alpha against the inclination of the slice base for tan phi over F equal to 0, 0.25, 0.5 and 1, with the limit of 0.2 below which the m-alpha check rejects a surface -90° -60° -30° 0° 30° 60° 90° -0.5 0.0 0.5 1.0 1.5 limit 0.2: rejected below tan φ′/F 1 0.5 0.25 0 ← toe side: α < 0 crest side: α > 0 → α mα
Figure 3.3.2 mαm_\alpha against the inclination of the base for four values of tan⁡ϕ′/F\tan\phi'/F, evaluated with the program's own expression. The shaded band lies below the limit of 0.2, and the dashed verticals mark ±78.5°, where the curve for ϕ′=0\phi' = 0 crosses it; α\alpha is positive where the base dips in the direction of sliding. With tan⁡ϕ′/F=1\tan\phi'/F = 1 a base rising at 37° towards the exit is already rejected; with ϕ′=0\phi' = 0 only bases steeper than 78.5° are.

Clearing 0.2 does not certify a factor of safety; it screens out surfaces whose arithmetic has become untrustworthy. Duncan, Wright & Brandon (2014) discuss the problem and its remedies, among them limiting how steeply a searched surface may rise towards the toe and, where the difficulty persists in that zone, the Ordinary method, which forms no such denominator.

In OGR Slip2D

Analysis → Project Settings → Advanced → Check m-alpha < 0.2, on by default; the limit is fixed at 0.2. The check is applied to Bishop simplified, Janbu simplified and corrected, Spencer and GLE / Morgenstern–Price; not to the Ordinary method, which forms no such denominator, nor to the prescribed-inclination family, which divides by nα(θ)n_\alpha(\theta) of Eq. (3.2.23). Every screened method is tested with the expression of Eq. (3.3.8). For Janbu's methods, whose own denominator is nα=mαcos⁡αn_\alpha = m_\alpha\cos\alpha, applying the limit to mαm_\alpha is a choice the program declares and leaves open, since no published case it holds settles it; Janbu corrected is checked at F0F_0. A rejected surface keeps its factor of safety and stays in the results, is counted under error code −112 and cannot be the critical surface unless every surface was rejected. When the reported critical surface has mαm_\alpha below 0.5 on some slice, the analysis notes name the base and the factor by which its normal force is amplified.

Source: ogr_slip2d/checks.py · ogr_slip2d/analysis_runner.py

3.3.6The tensile stress check#

Where the pore pressure is high or the base is steep (typically near the crest of a deep surface), the effective normal stress on a slice base can come out negative. A base in tension is not the shear plane the methods assume, and the factor of safety may then be unreliable. The tensile stress check, off by default, tests after convergence that

σn′=Nl−u  ≥  −σt\sigma'_n = \dfrac{N}{l} - u \;\ge\; -\sigma_t

on a percentage of the slices counted from the toe, 95 % by default; the slices nearest the crest are left out because tension there is what a tension crack is. NN is the base normal force of the method's own solution: for Bishop and Janbu, that of the vertical equilibrium of the slice (Eq. (3.2.4)); for the other methods, the force each of them solved for. The allowed tension σt\sigma_t is zero for every strength model except the two Hoek–Brown models, whose criterion has a finite tensile strength. The program takes the stress at which the bracket of the criterion vanishes (Hoek, Carranza-Torres & Corkum, 2002):

σt=s σcimb\sigma_t = \dfrac{s\,\sigma_{ci}}{m_b}

where

s, mbs,\ m_b
Hoek–Brown constants of the rock mass; mm in the classic model (—)
σci\sigma_{ci}
uniaxial compressive strength of the intact rock (kPa)
In OGR Slip2D

Analysis → Project Settings → Advanced → Tensile stress check and Percentage of slices. The toe is the end of the surface whose ground surface is lower. A rejected surface is counted under error code −120; a surface that fails both this check and the m-alpha check is reported as tensile, because this check runs first. The Shear–Normal Function model, which could carry a tensile strength, is kept at zero because no source states its rule. The program also declares that its generalised Hoek–Brown shear envelope is not yet the exact Mohr envelope of the criterion (Section 3.5); Eq. (3.3.10) belongs to the criterion, not to that envelope.

Source: ogr_slip2d/checks.py · ogr_core/materials/builtin_models.py

3.3.7Self-consistent linearisation of curved envelopes#

Every method reads the strength of a base as the tangent to its envelope at an estimate of the effective normal stress (Eq. (3.2.1)). For Mohr–Coulomb the point does not matter. For a curved envelope it does: a tangent taken anywhere but at the stress the method finally resolves lies above a concave envelope there, and a tangent taken at a stress clipped to zero, on an envelope through the origin, gives no strength at all. OGR Slip2D therefore solves the surface once from the first estimate, Eq. (3.2.2), and then repeats the solution, each time linearising the envelope at the effective normal stress of the previous solution,

σn,i′ (k+1)=Ni(k)li−ui\sigma'^{\,(k+1)}_{n,i} = \dfrac{N^{(k)}_i}{l_i} - u_i

until no slice's stress changes by more than 10−6max⁡(1 kPa, ∣σn,i′∣)10^{-6}\max\left(1\ \mathrm{kPa},\ |\sigma'_{n,i}|\right). At that fixed point the straight line each method uses gives the envelope's own strength at the stress the method resolves. Only slices whose envelope has a tangent that depends on the stress take part (each envelope is probed at 5 and 500 kPa), so a Mohr–Coulomb model is solved once, as before. If the stresses have not settled after 50 solutions, the surface is reported as not converged.

In OGR Slip2D

Applied to every method except the Ordinary one, whose normal force does not depend on the strength, so that its envelope is already read at its own stress. N/l−uN/l - u is the stress of each method's own solution, as in the tensile check; for Janbu corrected it is formed at F0F_0. The result records the number of solutions and the stress each slice was linearised at, and the admissibility checks read the envelope at that same stress. Slices that entered a solution with no strength because their estimate was clipped are counted in the analysis notes.

Source: ogr_slip2d/methods/base.py

3.3.8The line of thrust#

The line of thrust is the locus of the points at which the interslice normal forces act. It is an unknown of the complete-equilibrium procedures, and its position within the sliding mass is a check on the reasonableness of their interslice forces (Spencer, 1967). OGR Slip2D draws it after the analysis for Spencer, GLE/Morgenstern–Price, Lowe–Karafiath and Corps of Engineers #1 and #2, the methods that resolve the interslice forces. It is not offered for Bishop, Janbu and the Ordinary method, which assume them away.

The line is computed by marching the force equilibrium of the slices at the converged factor of safety, with the interslice ratios the method solved with (λf(x)\lambda f(x) or tan⁡θ\tan\theta), which recovers EE, XX, NN and SS on every slice. The height at which the normal force on each face acts follows from the moment balance of the slice about the middle of its base:

yR=yc+(xR−xc) XR−McERy_R = y_c + \dfrac{(x_R - x_c)\,X_R - M_c}{E_R}

where

xc, ycx_c,\ y_c
middle of the base of the slice (m)
xR, yRx_R,\ y_R
abscissa of the right face and height of the thrust on it (m)
ER, XRE_R,\ X_R
interslice forces on the right face (kN/m)
McM_c
anticlockwise moment about the middle of the base of every other force on the slice: the force on its left face, its weight at the centroid of the slice, the seismic force, the water forces and the supports (kN·m/m)

The march is carried from both free ends towards the centre slice, whose two faces take the average of the two traversals, so that every slice is in moment equilibrium except the two next to the centre one, which share whatever imbalance the method leaves. Where EE is practically zero the height is undefined, and the force is placed at a third of the height of the face.

In OGR Slip2D

In the Interpret window, Query → Show Line of Thrust, for the selected surface or the critical one; the command is disabled for Bishop, Janbu and the Ordinary method. If the march leaves a horizontal force at its far end larger than 2 % of the largest interslice force, the status bar says so. For display the interslice ratios may be scaled by one common factor so that the marched forces close at the far end; the march only displays the state and never changes the factor of safety.

Source: ogr_slip2d/postprocess.py · ogr_gui/interpret_window.py

3.3.9Surface error codes#

A surface that has no admissible factor of safety keeps its place among the results, and the program writes a negative code in its place in the raw-data export and in the census of rejected surfaces. Table 3.3.3 gives their meaning; the full list of codes is in Section 5.5.

Table 3.3.3 Codes written in place of the factor of safety of a rejected surface.
CodeMeaningTypical causes
−120Rejected by the tensile stress checka tested slice base in more tension than σt\sigma_t (Eq. (3.3.9))
−112Rejected by the m-alpha checkmα<0.2m_\alpha < 0.2 on a slice of a screened method
−111No converged factor of safetyiteration limit reached; λ bracket not closed; no λ or FF bracket; mαm_\alpha or nαn_\alpha collapsed; no driving force; no shear strength; curved-envelope iteration not settled
−101Any other rejectiona converged Spencer or GLE answer whose interslice thrust is inadmissible; checks that could not be evaluated
In OGR Slip2D

One function assigns the code to every rejected evaluation, for the raw-data export, the census of the Interpret window and the MCP server alike. The tensile check is tested first, then a check that could not be evaluated (−101), then the m-alpha check; any remaining calculation that did not converge is −111, and anything else −101.

Source: ogr_slip2d/interpretation.py · ogr_slip2d/methods/base.py

3.3.10References#