7. slopestabl
¶
Module for evaluating the factor of safety against sliding by using the limit equilibrium method through the General Limit Equilibrium (GLE) method presented by Fredlund & Krahn (1977).
-
class
slopestabl.
SlopeStabl
(slices, seedFS=1, Kh=0, maxIter=50, tol=0.001, interSlcFunc='halfsine', minLambda=-0.6, maxLambda=0.6, nLambda=10)[source]¶ Bases:
object
- Creates an instance of an object that allows to evaluate the factor of
safety against sliding of a slope.
SlopeStabl(slices, seedFS=1, Kh=0, maxIter=50, tol=1e-3, interSlcFunc='halfsine', minLambda=-0.6, maxLambda=0.6, nLambda=10)
- Attributes:
- slices (Slices object): object that contains the data structure of
- the slices in which the sliding mass has been divided.
- seedFS (float or int): Initial value of factor of safety for
- starting the iterarive algorithm.
1
is the default value. - lambda_ (float or int): Factor that multiplies the interlice
- function to determine the interslices horizontal forces.
0
is the default value. - Kh (float): horizontal seismic coefficient for the pseudostatic
- analysis. Its positive value represents the force is directed out
of the slope (i.e. in the direction of failure).
0
is the default value. - maxIter (int): Maximum number of iterations for stoping the
- algorithm in case the tolerance is not reached.
50
is the default value. - tol (float): Required tolerace to stop the iterations. Is the
- diference between the 2 last values gotten of factor of safety and
lambda, it means, two tolerances have to be reached.
1e-3
is the default value. - interSlcFunc (str or ‘float’): Interslice function that relates the
- normal interslice forces and the parameter lambda to obtain the
shear interslice forces.
halfsine
is the default value and corresponds to Morgenstern and Price method, but a constant number may be input, for exampleinterSlcFunc=1
, corresponds to Spencer method. - maxLambda (float): Maximum value the lambda parameter can get.
0.6
is the default value.- nLambda (float): Number of value the lambda parameter can get from
- zero to
maxLambda
.6
is the default value.
- slices, seedFS=1, Kh=0, maxIter=50, tol=1e-3,
- interSlcFunc=’halfsine’, maxLambda=0.6, nLambda=6
- Note:
- The class
Slices
requires numpy, scipy, matplotlib and shapely. - Examples:
>>> from numpy import array >>> from pybimstab.slope import AnthropicSlope >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.watertable import WaterTable >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> slope = AnthropicSlope(slopeHeight=40, slopeDip=[2, 1], >>> crownDist=60, toeDist=30, depth=20) >>> surface = CircularSurface(slopeCoords=slope.coords, >>> dist1=45.838, dist2=158.726, radius=80) >>> material = MaterialParameters( >>> cohesion=600, frictAngle=20, unitWeight=120, wtUnitWeight=62.4) >>> watertable = WaterTable(slopeCoords=slope.coords, watertabDepths=array([[0, 140], [20, 0]])) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=50, >>> watertabCoords=watertable.coords, bim=None) >>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0) >>> stabAnalysis.__dict__.keys() dict_keys(['slices', 'Kh', 'seedFS', 'maxIter', 'tol', 'interSlcFunc', 'minLambda', 'maxLambda', 'nLambda', 'fsBishop', 'fsJanbu', 'fsMoment', 'fsForces', 'lambda_', 'adjustment', 'FS'])
-
intersliceForceFunct
(v=1, u=1)[source]¶ Method for calculating the interslice function which is a component of the interslice forces; this is done by using the Equation [11] of Zhu et al (2015), with v = u = 1 for a simetric and non-narrowed halfsine function.
When the object is instanced with the clases with a constant interslice function, then, all the values are equal to that constant value.
Parameters: - v (int or float) – shape parameter. Controls the symmetry.
1
is the defaut value. - u (int or float) – shape parameter. Controls the kurtosis.
1
is the defaut value.
Returns: Values of the all insterslice force function values.
Return type: (list)
Examples
>>> import matplotlib.pyplot as plt >>> from pybimstab.slope import AnthropicSlope >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> slope = AnthropicSlope(slopeHeight=40, slopeDip=[2, 1], >>> crownDist=60, toeDist=30, depth=20) >>> surface = CircularSurface(slopeCoords=slope.coords, >>> dist1=45.838, dist2=158.726, >>> radius=80) >>> material = MaterialParameters(cohesion=600, frictAngle=20, >>> unitWeight=120, >>> wtUnitWeight=62.4) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=50) >>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0) >>> interslcForceFunc = stabAnalysis.intersliceForceFunct(u=1) >>> plt.plot(interslcForceFunc, 'k')
- v (int or float) – shape parameter. Controls the symmetry.
-
calculateArms
()[source]¶ Method for calculating the arms required for getting the momments of each slice with respect to a rotation point.
This function does not return any output, just modifies the structure of each slice by setting new attributes.
-
calculateBasicForces
()[source]¶ Method for calculating the forces that do not vary in each iteration or lambda value.
This function does not return any output, just modifies the structure of each slice by setting new attributes.
-
calculateNormalForce
(seedFS, fellenius=False)[source]¶ Method for calculating the normal force to the base; this is done by using the Equation of section 14.6 of GeoSlope (2015)
Since the normal forces are updated with each iteration, is necessary to input a factor of safety as a seed.
Parameters: seedFS (int or float) – Seed factor of safety. Returns: Values of all the normal forces at the slice’s bases Return type: (list) Examples
>>> from numpy import array >>> import matplotlib.pyplot as plt >>> from pybimstab.slope import AnthropicSlope >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.watertable import WaterTable >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> slope = AnthropicSlope(slopeHeight=40, slopeDip=[2, 1], >>> crownDist=60, toeDist=30, depth=20) >>> surface = CircularSurface(slopeCoords=slope.coords, >>> dist1=45.838, dist2=158.726, >>> radius=80) >>> material = MaterialParameters(cohesion=600, frictAngle=20, >>> unitWeight=120, >>> wtUnitWeight=62.4) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=5) >>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0) >>> stabAnalysis.calculateNormalForce(stabAnalysis.FS['fs']) [45009.409630951726, 68299.77910530512, 70721.13554871723, 57346.7578530581, 22706.444365285253]
-
getFm
(seedFS, lambda_=0, fellenius=False)[source]¶ Method for getting the factor of safety with respect to the moments equilimrium; this is done by using the Equation [22] of Fredlund & Krahn (1977).
Since the factor of safety is updated with each iteration, is necessary to input a factor of safety as a seed and the current value of lambda to relate the interslice normal force and the interslice force function with respect to the interslice shear force (Eq. [16] of Fredlund & Krahn (1977)).
Parameters: - seedFS (int or float) – Seed factor of safety.
- lambda (int or float) – Seed value of lambda.
0
is the default value.
Returns: Dictionary with the value of the factor of safety and a tuple with the boolean that indicated if the toleranfe was reached and the number of the iteration.
Return type: (dict)
Examples
>>> # Example Case 1 - Fig. 9 (Fredlund & Krahn, 1977) >>> from pybimstab.slope import AnthropicSlope >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> slope = AnthropicSlope(slopeHeight=40, slopeDip=[2, 1], >>> crownDist=60, toeDist=30, depth=20) >>> surface = CircularSurface(slopeCoords=slope.coords, >>> dist1=45.838, dist2=158.726, >>> radius=80) >>> material = MaterialParameters(cohesion=600, frictAngle=20, >>> unitWeight=120, >>> wtUnitWeight=62.4) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=50, >>> watertabCoords=None, bim=None) >>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0, minLambda=0, >>> interSlcFunc=1, nLambda=10) >>> stabAnalysis.getFm(stabAnalysis.FS['fs'], >>> stabAnalysis.FS['lambda']) (2.0750390044795854, True)
-
getFf
(seedFS, lambda_=0)[source]¶ Method for getting the factor of safety with respect to the forces equilimrium; this is done by using the Equation [23] of Fredlund & Krahn (1977).
Since the factor of safety is updated with each iteration, is necessary to input a factor of safety as a seed and the current value of lambda to relate the interslice normal force and the interslice force function with respect to the interslice shear force (Eq. [16] of Fredlund & Krahn (1977)).
Parameters: - seedFS (int or float) – Seed factor of safety.
- lambda (int or float) – Seed value of lambda.
0
is the default value.
Returns: Dictionary with the value of the factor of safety and a tuple with the boolean that indicated if the toleranfe was reached and the number of the iteration.
Return type: (dict)
Examples
>>> # Example Case 1 - Fig. 9 (Fredlund & Krahn, 1977) >>> from pybimstab.slope import AnthropicSlope >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> slope = AnthropicSlope(slopeHeight=40, slopeDip=[2, 1], >>> crownDist=60, toeDist=30, depth=20) >>> surface = CircularSurface(slopeCoords=slope.coords, >>> dist1=45.838, dist2=158.726, >>> radius=80) >>> material = MaterialParameters(cohesion=600, frictAngle=20, >>> unitWeight=120, >>> wtUnitWeight=62.4) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=50, >>> watertabCoords=None, bim=None) >>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0, minLambda=0, >>> interSlcFunc=1, nLambda=10) >>> stabAnalysis.getFf(stabAnalysis.FS['fs'], >>> stabAnalysis.FS['lambda']) (2.0741545445738296, True)
-
intersliceForces
(seedFS, lambda_)[source]¶ Method for getting the shear and normal interslice forces; this is done by using the Equation of section 14.8 of GeoSlope (2015) for the rigth normal force and the Equation [18] of Fredlund & Krahn (1977) for the shear force.
Since the interslice forces are updated with each iteration, is necessary to input a factor of safety as a seed and the current value of lambda to relate the interslice normal force and the interslice force function with respect to the interslice shear force (Eq. [20] of Fredlund & Krahn (1977)).
Parameters: - seedFS (int or float) – Seed factor of safety.
- lambda (int or float) – Seed value of lambda.
0
is the default value.
Returns: tuple with the interslice forces. the first element contains the normal interslice forces and the second contains the shear interslice forces.
Return type: (tuple)
Examples
>>> from numpy import array >>> import matplotlib.pyplot as plt >>> from pybimstab.slope import AnthropicSlope >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.watertable import WaterTable >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> slope = AnthropicSlope(slopeHeight=40, slopeDip=[2, 1], >>> crownDist=60, toeDist=30, depth=20) >>> surface = CircularSurface(slopeCoords=slope.coords, >>> dist1=45.838, dist2=158.726, >>> radius=80) >>> material = MaterialParameters(cohesion=600, frictAngle=20, >>> unitWeight=120, >>> wtUnitWeight=62.4) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=5) >>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0) >>> stabAnalysis.intersliceForces(stabAnalysis.FS['fs'], >>> stabAnalysis.FS['lambda']) ([0, -24561.260979675248, -42085.32887504204, -38993.844201424305, -18464.723052348225, -61.4153504520018], [0, -5511.202498703704, -15279.673506543182, -14157.266298947989, -4143.22489013017, -2.8712090198929304e-15])
-
iterateGLE
()[source]¶ Method for getting the factor of safety against sliding through the algorithm of the General Limit Equilibrium (GLE) proposed by Fredlund & Krahn (1977)).
Returns: factor of safety against sliding is the solution exists. Return type: (tuple or None) Examples
>>> from numpy import array >>> import matplotlib.pyplot as plt >>> from pybimstab.slope import AnthropicSlope >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.watertable import WaterTable >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> slope = AnthropicSlope(slopeHeight=40, slopeDip=[2, 1], >>> crownDist=60, toeDist=30, depth=20) >>> surface = CircularSurface(slopeCoords=slope.coords, >>> dist1=45.838, dist2=158.726, >>> radius=80) >>> material = MaterialParameters(cohesion=600, frictAngle=20, >>> unitWeight=120, >>> wtUnitWeight=62.4) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=5)
>>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0) >>> stabAnalysis.iterateGLE() {'fs': 2.0258090954552275, 'lambda': 0.38174822248691215}
>>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0, nLambda=0) >>> stabAnalysis.iterateGLE() {'fsBishop': 2.0267026043637175, 'fsJanbu': 1.770864711650081}
-
plot
()[source]¶ Method for generating a graphic of the slope stability analysis, including the plot of the convergences
Returns: object with the matplotlib structure of the plot. You might use it to save the figure for example. Return type: (matplotlib.figure.Figure) Examples
>>> # Example Case 1 - Fig. 9 (Fredlund & Krahn, 1977) >>> from pybimstab.slope import AnthropicSlope >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> slope = AnthropicSlope(slopeHeight=40, slopeDip=[2, 1], >>> crownDist=60, toeDist=30, depth=20) >>> surface = CircularSurface(slopeCoords=slope.coords, >>> dist1=45.838, dist2=158.726, >>> radius=80) >>> material = MaterialParameters(cohesion=600, frictAngle=20, >>> unitWeight=120, >>> wtUnitWeight=62.4) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=50, >>> watertabCoords=None, bim=None) >>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0, minLambda=0, >>> interSlcFunc=1, nLambda=10) >>> fig = stabAnalysis.plot()
>>> # Example Case 5 (Fredlund & Krahn, 1977) >>> from numpy import array >>> from pybimstab.slope import AnthropicSlope >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.watertable import WaterTable >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> slope = AnthropicSlope(slopeHeight=40, slopeDip=[2, 1], >>> crownDist=60, toeDist=30, depth=20) >>> surface = CircularSurface(slopeCoords=slope.coords, >>> dist1=45.838, dist2=158.726, >>> radius=80) >>> material = MaterialParameters(cohesion=600, frictAngle=20, >>> unitWeight=120, >>> wtUnitWeight=62.4) >>> watertable = WaterTable(slopeCoords=slope.coords, >>> watertabDepths=array([[0, 140], >>> [20, 0]])) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=50, >>> watertabCoords=watertable.coords, bim=None) >>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0, minLambda=0) >>> fig = stabAnalysis.plot()
>>> from numpy import array >>> from pybimstab.slope import NaturalSlope >>> from pybimstab.watertable import WaterTable >>> from pybimstab.bim import BlocksInMatrix >>> from pybimstab.slipsurface import CircularSurface >>> from pybimstab.slipsurface import TortuousSurface >>> from pybimstab.slices import MaterialParameters, Slices >>> from pybimstab.slopestabl import SlopeStabl >>> terrainCoords = array( >>> [[-2.49, 0.1, 1.7, 3.89, 5.9, 8.12, 9.87, 13.29, 20.29, >>> 21.43, 22.28, 23.48, 24.65, 25.17], >>> [18.16, 17.88, 17.28, 15.73, 14.31, 13.58, 13, 3.61, 3.61, >>> 3.32, 2.71, 2.23, 1.21, 0.25]]) >>> slope = NaturalSlope(terrainCoords) >>> bim = BlocksInMatrix(slopeCoords=slope.coords, blockProp=0.2, >>> tileSize=0.35, seed=3210) >>> watertabDepths = array([[0, 5, 10, 15], >>> [8, 7, 3, 0]]) >>> watertable = WaterTable(slopeCoords=slope.coords, >>> watertabDepths=watertabDepths, >>> smoothFactor=3) >>> preferredPath = CircularSurface( >>> slopeCoords=slope.coords, dist1=5, dist2=15.78, radius=20) >>> surface = TortuousSurface( >>> bim, dist1=4, dist2=15.5, heuristic='euclidean', >>> reverseLeft=False, reverseUp=False, smoothFactor=2, >>> preferredPath=preferredPath.coords, prefPathFact=2) >>> material = MaterialParameters( >>> cohesion=15, frictAngle=23, unitWeight=17, >>> blocksUnitWeight=21, wtUnitWeight=9.8) >>> slices = Slices( >>> material=material, slipSurfCoords=surface.coords, >>> slopeCoords=slope.coords, numSlices=20, >>> watertabCoords=watertable.coords, bim=bim) >>> stabAnalysis = SlopeStabl(slices, seedFS=1, Kh=0, nLambda=13, >>> minLambda=0) >>> fig = stabAnalysis.plot()