You are on page 1of 20
8272020 {A simple guide to calculate the Hoek-Brown Failure Grtera In Python | Geology and Python Geology and Python A blog stuffed with easy-to-follow Python recipes for geosciences ! about me A simple guide to calculate the Hoek- Brown Failure Criteria in Python © 20/10/2017 & Rock Mechanics Bruno Ruas de Pinho @ #rock-mechanics, #geology ne Rock slopes aren't formed only by one huge block of intact rock. They're usually found in blocks separated by the sets of joint that are part of it. These joints changes the behavior of how the rock responds to stresses. That's why Hoek came up with the knowledge of brittle failure and Brown with the knowledge of the jointed rock mass behavior and, together, they identified a empirical relation of rock mass field descriptions (Rock Mass Rating) with a failure criteria for rock masses, Their research, along with the research of other authors (Palmstrom, Bieniawski, Barton, etc), is brilliant! By ‘goologyandython.comihoek-brown ml 1120 ‘212020 ‘A simple guide to calcalate the HoekSrown Failure Crteria in Python | Geology ané Python applying the equations derived by their results geoscientists can estimate under which stresses will a rock mass enter the failure state with only scrupulous field observations, accurate measurements and an attentive reading of their articles, In 2002, Hoek, Carranza-Torres and Corkum updated the relationship to a more modern approach of geological observations of rock masses called GSI, also introduced by Hoek, which stands for Geological Strength Index. In this post, I will go through the process of calculating the Hoek-Brown Failure Criteria using Python, ‘goologyandython.comihoek-brown ml 8272020 Tutorial {A simple guide to calculate the Hoek-Brown Failure Grtera In Python | Geology and Python The flowchart, extracted from the GSI article of 2013, shows the process of calculating the Hoek- Brown Failure Criteria from the beginning. Geological observations }— OR Descriptive input Laboratory testing of intact rock samples GSI Characterization Hoek- Brown criterion - engineering properties of rock masses Parameters required for numerical analysis Verification and modification through in situ monitoring and back analysis Numerical analysis of overstress and remedial measures Quantitative input based on established rock mass indices In situ stresses Groundwater Damage Factor Excavation sequence Geological Strength Index (GSI) For this part, read this article carefully, step into the field and take observations and measurements of the surface quality and the rock blocks interlocking of the slope face. GSI by Quantitative Input There are some parameters that need to be measured in the field. Which are: Ja and J, OR Jeondga - and Jy, ‘goologyandython.comihoek-brown ml 8272020 {A simple guide to calculate the Hoek-Brown Failure Grtera In Python | Geology and Python Where: Je Voint Alteration Number) - Table 3 in the GS1article J, aint Roughness Number) - Table 3 in the GSI article Tcondsg expresses the Conditions of discontinuities - Table 1 in the GSI article J, (Volumetric Joint Count). This is function of the spacing between discontinuities in the rock mass (from Palmstrom), 1 1 a SS, Where each S is the spacing between each set of discontinuity. The following formulas can be used to calculate the GS! or GSI = 1.5 x Jeondgy + Rap Where: RQD = 110 — 2.5 x Jy GSI by Descriptive Input One can also estimate the GSI value by a descriptive input in the GSI chart. The input is a function of the surface quality and the rock blocks interlocking features. ‘goologyandython.comihoek-brown ml 8272020 {A simple guide to calculate the Hoek-Brown Failure Grtera In Python | Geology and Python GEOLOGICAL STRENGTH INDEX (GS!) FOR JOINTED BLOCKY ROCK MASSES From the lithology, structure and observed discontinuity surface concitions, estimate the average GSI based on the descriptions in the row and column headings. Alternatively, from logged RQD values and Joint Condition ratings (from Bioniawski, 1989), estimate GSI = 15 JCond,,+ ROD!2 based on the ‘scales attached (0 the chart axes For intact or massive rock wih G81 > 75, check for brite spalling potential. For sparsely jonted rock with GSI > 7, feilure will be controled by structurally defined blocks or wedges. The Hoek-Brown criterion should ot be Used for either of these conditions. ‘This chart applies to tunnels of about 10 m ‘span and slopes < 20 m high. For larger cavers and slopes consider reducing GSI t0 account for decreasing block interlocking STRUCTURE DESCREASING SURFACE QUALI BLOCKY - well interlocked ’ undisturbed rock mass made Up of cubical blocks formed by thrae sets of interacting joints ighly weathered surfaces with compact Very rough, fresh unweathered surfaces Rough, slightly weathered, iron-stained surfaces ‘moath, moderately weathered and altered surfaces SURFACE CONDITIONS VERY GOOD coop POOR Slickensided, J_ coatings or filings of anguler fragments © £5 40 35 a 20 VERY BLOCKY - interlocked, partially disturbed rock mass, multifaceted angular blocks formed by 4 or more joint sets 28 20 REASING INTERLOCKING %, Ravi BLOCKY, DISTURBEDISEAMY = felded with angular blocks formed & s by meny intersecting joint sets. BS 16 Persistence of bedding planes or s schistosity \) 10 DISINTEGRATED - poorly inter lockeg, neavily oroken rack mass ‘with mixture of angular end rounded rock pieces s 45 4 3 90 25 2 16 1 6 OO 1.5 sCond,, Other Hoek-Brown Parameters According to the Hoek-Brown failure criterion 200? Edition. The other input parameters to calculate the Hoek-Brown are: © Uniaxial compressive strength (oi) If no lab data (or Schimdt Hammer) is available, «3 can be approximated in the field using a (geological hammer, a pocket knife, human strength and the table below (from ISRM' Suggested Methods for the Quantitative Description of Discontinuities in Rock Masses): ‘goologyandython.comihoek-brown ml ‘se12020 ‘simple guide to calculate the Hook-Brown Fale Grtera in Python | Geology and Python Grade Description Field identification Approx. range of uniaxial compressive strength (MPa) R6 Extremely strong rock Specimen can only be chipped with geological +250 hammer. RS ‘Very strong rock Specimen requires many blows of geological 100-250 hammer to fracture it. RA Steong rock Specimen requires more than one blow of 50-100 ‘geological hammer to fracture it. R3 Medium strong rock Cannot be scraped or peeled with a pocket 25-50 knife, specimen can be fractured with single firm blow of geological hammer. RZ Weak rock Can be peeled by a pocket knife with difficulty, 5.0-25 shallow indentations made by firm blow with point of geological hammer. Ri Very weak rock Crumbles under firm blows with point of 1.0-5.0 ‘geological hammer and can be peeled by et knife. RO Extremely weak rock _Indented by thumbnail. 0.25-1.0 56 Hard clay Indented with difficulty by thumbnail, 05 85 Very stiff clay Readily indented by thumbnail. 0.25-0.5 s4 Stiff clay Readily indented by thumb but penetrated 0.1-0.25 only with great difficulry. 83 Firm clay Can be penetrated several inches by thumb 0.05-0.1 with moderate effort. 2 Soft clay Easily penetrated several inches by thumb. 0.025-0.05 SL Very soft clay Easily penetrated several inches by fist. <0.025 * Material constant based on the lithology classification (mn) ‘goologyandython.comihoek-brown ml From the Table below: szz020 A simple guid to cleat the Hoek Srown Foire Cre h Python | Geology and Python Fok | Cass] Group Toate type [eoarse Medium Fine Very fine: | Conglonarsios ~ Sandsionas— Sisiones — Claysiones | @rza) wea 722 aie | Breccias Greywackes ‘Shales Cumnc: (195) (1843) (642) Mas & (742) 5 Cystine Spatiic Miso Dolomites £ Carbonates | Limestone __Limestones Limestones (93), é (1283) 2) & | Non Gypsum Anhyaite Clase | Evagortes ere 1222 Crake Organic eS Wate Trials Quarates | non tated 923 (ies) 2023 z Metosandstone g (922) 2 Mgraio Arphibalios Grama | stent ates (223) pee pes Sehiss Piyltes Sates Foliates* qats (723) 724 Granite Dieta fis abes Lott Granodiorite (2343) Pluone Gabbro ares Dolerte Dark (1645) P Norte 3 2045 y Porpnyres Daabase _Penoite & | Hypabyssat (G03) (i525) (2535) Fiyalte Dace Obsidian (2525) (2543) (1943) tenn: Andesite Basalt é aes 2525) Tegemenie Breaia Tul Pome (1943) (1945) (1345) © Disturbance Factor (DD). From the Table below: ‘goologyandython.comihoek-brown ml 120 272020 {A simple guide to calculate the Hoek-Browm Failure Grtera In Python | Geology and Python ‘ppexance drodkmass | Deciiptioa ofvock mass Sussesed alos of D Excellent quality controlled basing or excaatin by [Tuane! Bang Machine result in cal disturbance tothe confned rock miss srraning a twane Mechanical or hand excavation in poor quality rock masses (no blstng) resus in meal astuance the snrounding rst we ‘Whore squesing problems recut in sigufiant floor heave, disurbance can be severe unless a temporary nner, a5 Shown inthe phoxogaph is place. Very sor quality blasing in 3 hard reek rune results in severe local damage, extending 2 or 3 1, in the Surounding rock mass Small scale basting i civil engineeng slopes resus inno woek me domege petciledy # onli! blasting is use as shown on the left hand sie ofthe ptograph However, stese reef reste in some fsurtance, Very large open pit mise slopes suffer significant isurtanee du to hesvy production basing and aso tho to een lie from overburden removal In some softer rocks excavation can be cari oat by rigping and dang and the depee of damage o tht Slepesis ess Generalized Hoek-Brown Criterion ‘Detailed information on the Hoek-Brown Criterion can be found in the article, The Generalized Hoek-Brown Criteria is given by: a= ‘goologyandython.comihoek-brown ml °: +00 X (my x 22 + 8)" ‘1272020 ‘A simple guide to calculate the Hoek-Brown Failure Grtera in Python | Geology and Python Where: GSI — 100 28—14x D GSI — 100 9-3xD my =m; x exp ( ) 5 = exp( 1 H x (e-ESS -20/' asst 6 ) Normal and shear stresses are related to principal stresses by the equations. Where: The Hoek-Brown Failure Criteria is related to the Mohr-Coulomb Failure Criteria by fitting a straight line on an range given by the following limits: 0 < 04 < O3maz Upper Limit Jem _)-0.91 7x O3maz = Tem X 0.72 x Where: 2(1 + a)(2 +a) Fem = Fei ly = Unit Weigh of the rock material \H = Slope Height ‘goologyandython.comihoek-brown ml 9120 8272020 {A simple guide to calculate the Hoek-Brown Failure Grtera In Python | Geology and Python Lower limit Hoek-Brown Criteria using simple Python calculations Let's start with an example of a rock material description: laphanitic extrusive rock with intermediate composition, Weathered with a thin alteration coating. [Required one firm blow of a geological hammer to fracture a specimen. Unit Weigth = 0.0279 MN/m: (you can find this information in textbooks or here) And an example rock mass description for the same slope [Rock slope in a open pit mining area with high disturbance. The rock mass is blocky. Three sets of joints identified. Two are slikensided and planar, one is irregular ‘and undulating. Spacings for the three joint sets are approximately 250 mm, 350 mm and 600 mm, Heigth of the Slope = 30m Calculating GSI import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline plt.style.use(‘seaborn-dark') Using the rock material description and a quick lookup at Table 3 we have that: Ja = 3.0 Ir = 1.0 From the rock mass description, use the spacing in meters to calculate the Jy: ‘goologyandython.comihoek-brown ml 1020 ‘8272020 ‘A simple guide to calculate the Hoek-Brown Failure Grtera in Python | Geology and Python Jv = (1/.25)+(1/.35)+(1/.60) Ww 8.523809523809524 1 060 8.52 RQD = 110 - 2.5 * Iv RQD 88 .69047619047619 RQD = 110 ~ 2.5 x Jy RQD = 110 — 2.5 x 8.52 = 88.69 GSE = ((52 * (3r/Ja)) / (1 + (3r/Ja))) + (ROD / 2) ost 57.345238095238095 Alright, this value can be validated using the GSI chart. Hoek-Brown envelope Let's use the worst case scenario for Uniaxial compressive resistence (a,.;) and the material constant ( my). It fractured with one firm blow so we can put it in R3 - Uniaxial compressive strength is 25 MPa. ‘goologyandython.comihoek-brown ml 20 8272020 {A simple guide to calculate the Hoek-Brown Failure Grtera In Python | Geology and Python Also, the material constant for andesite is 20. The disturbance factor is 1.0 for open pit mining with high blasting. sigci = 25.0 mi = 20.0 D=1.0 unit_weigth = 0.0279 depth = 25 Calculate the Hoek-Brown parameters mp, s and a: mb = mi * np.exp((GSI-100)/(28-(14*D))) S = np.exp((GSI-160)/(9-(3*D))) a = (1/2)+(1/6)*(np.exp(-GSI/15) -np .exp(-20/3)) Let's define a function to create a DataFrame with Hoek-Brown calculations using a range of o3 values. This function will accept the lower limit, the upper limit and the number of values to be evaluated. For each values of the range, it will calculate 7; and the normal and shear stresses (o,, and 7) based ‘on the Hoek-Brown formulas. def hoek_brown(min_sig3, max_sig3, num_values): sig3 = np.linspace(min_sig3, max_sig3, num_values, endpoin True) sigi = sig3 + sigci * ((mb * (sig3/sigci))+s)*¥a sig_array = pd.DataFrame(data-np.vstack([sig3, sigi]).T, columns= ‘sigi']) ‘sig3', sig_array[‘dsids3"] = 1+a*mb*(mb*(sig3/sigei)+s)**(a-1) sig_array[‘sign'] = ((sigi + sig3)/2) - ((sigi - sig3)/2) * (sig_array[‘dsids3"] - 1) / (sig_array['dsids3"] + 1) sig_array["tau"] = (sigi- sig3)*np.sqrt(sig_array[‘dsids3'])/(sig_array[‘dsids3"]+1) return sig_array Let's see how it goes using 15 values from 0 to 1 ‘goologyandython.comihoek-brown ml 1200 ‘8272020 ‘A simple guide to calculate the Hoek-Brown Failure Grtera in Python | Geology and Python sig_array = hoek_brown(®, 1, 15) sig_array.dropna(inplace=True) sig_array 10 " 2 3 “ sig3 000000 oorra29 0.142857 0214286 o2es714 0.357143 0428571 0500000 os71aza 0.642857 0.714286 o7esii4 ogs7143 0928871 1.000000 sigl 0697619 1.528809 2084779 2543072 2.946340 3.313032 3.653132 3972768 4.276022 4568776 4.94452 sare 5.372699 5.625551 5871555 dstds3 17327068 8.994326 6927792 5.972025 s.3soe14 4929947 4606777 4352379 4145364 3972633 3.825653 3.698600 3587339 3408846 3.400851 sign 0.038065 o2ts7e3 0.387192 0.548304 0.704064 0.955611 1.003690 1.148627 1291415 1431759 1570101 1.708639 1.841538 1974938 2.106958 tau o.1seaaa 0.439282 osaaose 16266 0.968533 4.106773 1.234400 1.353605 1.465905 1872397 1673912 1771099 a6aa72 11954451 2.041384 Use matplotlib to check the envelope. ‘goologyandython.comihoek-brown ml 1920 ‘1212020 ‘A simple guide to caloulate the Hoek-Brown Failure Grtera in Python | Geology and Python # Plot fig = plt.figure(figsize-(12, 6)) ax = fig.add_subplot(121) sigi_formula = r*\signa_1%{"}=\signa_3%{"} + \sigma_{ci} \ \times (mb \times \frac{\sigma_3*{°}}{\sigma_(ci}} + s)*a‘ ax. plot(sig_array.sig3.values, sig _array.sigl.values, ‘bo-", label="Hoek-Brown: ' + sigh formula. join(r'$$")); ax. set_xlabel(u'Principal Stress, $\sigma_3$, MPa’, fontsize-12) ax.set_ylabel(u'Principal Stress, $\sigma_1$, MPa', fontsize=12) ax.grid()} ax. legend(fontsize="x-large’) ax = fig.add_subplot(122) tau_formula = r'\tau"{"} = (\sigma_1%{"} - \sigma_3*{“}) \ \frac{\sqrt{d\sigma_1*{°}/d\sigma_3*{“}}}(d\sigma_1%{“}/d\sigma_3%{"} + apt ax.plot(sig_array[‘sign’], sig_array[‘tau'], ‘bo-', Jabel='Hoek-8rown: ' + tau_formula.join(r'$$')) ax.set_xlabel(u'Normal Stress, $\signa_n$, Mpa’, fontsiz ax.set_ylabel(u'Shear Stress, $\u@3C4$, MPa", fontsize=12) 12) 4# Add Mohr circles for the invervals that were defined above. centers = ((sig_array.sigi.values - sig_array.sig3.values) / 2) + sig_erray.sig3. values radius = sig_array.sigi.values - centers for r, c in zip(radius, centers): ax.add_patch(plt.circle([c, @], r, facecolor="none’, ec="k', alpha=.2)) ax.grid() ax. set_aspect(‘equal') ax. legend(fontsize=' large’) fig-suptitle('Hoek-8rown Failure Criteria’, fontsize=20, y: fig.tight_layout (pad=1.5) fig.savefig(’ ./images/9/7.png", dpi=200) -05) ‘goologyandython.comihoek-brown ml 1420 8272020 {A simple guide to calculate the Hoek-Brown Failure Grtera In Python | Geology and Python 2.00 e- Hoek Brown: 1 = (0; — 03) Loe. Prana See, 2s, WPA Shear Stes, 4P, * Hook Brown: 0} =03 + 0.x (me x $45)" oo 02 oe os oo wo Normal Str258. 05, MPa Principal Stoss, 03, MPa Fitting the Mohr-Coulomb Failure Criteria using Linear Regression Detailed information can be found in Hoek-Brown failure criterion ~ 2002 Edition. For example: ‘since most geotechnical software is still written in terms of the Mohr-Coulomb failure criterion, itis Inecessary to determine equivalent angles of friction (¢) and cohesive strengths (c) for each rock mass land stress range. The first step is to find the range in oy where there is a relationship between the Mohr-Coulomb and Hoek-Brown Criteria. 01 < 05 < Osmas Minimum value: sigen = siged * (nbsaes-at(nb-B*5))=(¢(ab/4)+5)°*(a-1))/(2"(148)*(24a)) sigt = -s*sigci/mb Maximum value: sig3_max = sigem * 0.72 * (sigcm / (unit_weigth * depth))**(-.91) ‘goologyandpython.comihoek-brown ml 1920 8272020 {A simple guide to calculate the Hoek-Brown Failure Grtera In Python | Geology and Python Calculate the Datarrame with the new range (drop. NaNs ): sig_array_relat = hoek_brown(sigt, sig3 max, 25) sig_array_relat.dropna(inplace=True) Jopt/conda/1ib/python3.6/site-packages/ipykernel_launcher.py:6: RuntimeWarning: divide by zero encountered in power Let's use sklearn to fit a linear function in this interval to find the Mohr-Coulomb Failure Criteria: from sklearn.linear_model import LinearRegression # Define a LinearRegression model Ir = LinearRegression() # Fit a Line using the Principal Stresses Ir. fit(sig_array_relat.sig3.values.reshape(-1, 1), sig_array_relat.sigi.values.reshape(-1, 1)) # Predict the values sigi_mohr = 1r.predict(sig_array_relat.sig3.values.reshape(-1, 1)).ravel() # Calculate the friction angle k = Ir.coef_.squeeze() phi = np.abs(np.rad2deg(np.arcsin((1 - k)/(1 + k)))) 4 Fit another Line using the Normal and Shear Stresses An. #it(sig_array_relat['sign’].values.reshape(-1, 1), sig_array_relat['tau'].values.reshape(-1, 1)) 4 Predict the values tau_mohr = Ir.predict(sig_array_relat['sign’].values.reshape(-1, 1)).ravel() # Calculate the cohesion strength coh = Ir.predict(a).squeeze() Plot everything, again. ‘goologyandython.comihoek-brown ml 16120 ‘1212020 ‘A simple guide to caloulate the Hoek-Brown Failure Grtera in Python | Geology and Python # Plot plt.style.use(’seaborn-dark') fig = plt.figure(figsize=(12, 6)) ax = fig.add_subplot (121) sigi_formula_mohr = r'\sigma_1*{“}=\frac{2c \times \cos{\phi}}{1- \sin{\phi}}+\Frac{1+\sin{\phi}}{1-\sing\phiy) \times \sigma_3" ax.plot(sig_array.sig3.values, sig_array.sigi.values, ‘bo-', label="Hock-Brown: ' + sigl_formula. join(r’$$')); ax.plot(sig_array_relat.sig3.values, sigi_mohr, sigi_formula_mohr. join(r'$$')) ax, set_xlabel(u'Principal Stress, $\sigma_3$, MPa’, fontsize=12) ax.set_ylabel(u'Principal Stress, $\sigma_1$, MPa‘, fontsize=12) Mohr -Coulomb : -', labe! + ax.grid(); ax.legend(fontsize="large') ax = fig.add_subplot (122) tau_formula_mohr = r'\tauX{“} = c%{“} + \sigma_n%{“}\tan{\phiy{“}* ax.plot(sig array['sign'], sig array['tau'], "bo-', label="Hoek-Brown: ' + tau_formula ax.plot(sig_array_relat['sign'], tau_mohr, ‘p--', label='Mohr-Coulomb: ' + tau_formula_mohr. join(r'$$')) ax.set_xlabel(u'Normal Stress, $\sigma_n$, MPa’, fontsize=12) ax.set_ylabel(u'Shear Stress, $\u03C4$, MPa’, fontsize-12) join(r’$$')) centers = ((sig_array.sigi.values - sig array.sig3.values) / 2) + sig_array.sig3.values radius sig_array.sigi.values - centers for r, c in zip(radius, centers): ax.add_patch(plt.Circle([c, 0], r, facecolor="none", ec: ", alpha=.3)) ax.grid() ax. set_aspect (‘equal’) ax. legend(fontsize=" large") fig. suptitle( ‘Hoek-srown Failure Criteria’, fontsize=20, y=1.05) Fig. tight_layout (pad=1.5) fig. savefig(’./images/9/8.png', dpi-200) ‘goologyandython.comihoek-brown ml 1720 ‘1272020 {A simple guide to calculate the Hoek-Brown Failure Grtera In Python | Geology and Python 2.00 e- Hoek Brown: 1 = (0; — 03) Loe. sip 777 Mole Cuuts T= + ostanp g, g : g Hock Brown: 05 = 05 + 05% ime x 3 +5)? 25, 7 = oh Cates 0 = EAE, TIER HET ELLEN \ oa “ eal Sts 0, uPA “ pins eos oh Pa Results We can, finally, get a summary of all parameters calculated during the analysis, but first let's calculate o¢m and Eqn? sigtm = 0.5*sigci*(mb-np.sqrt((mb**2)+4*s)) Em = (1 - (D/2)) * (np.sqrt(sigci/1e0.0)*10**((GSI-10)/40.0)) * 10**3 from Ipython.display import display, Math display(Math(r’\sigma_{ci} = %.2f MPa’ % (sigci))) display(Math(r'm_{i} = %.2f" % (mi))) display(Math(r'GSI = %.2f" % (GSI))) display(Math(r’\phin{"} = %.2f °° % (phi))) display(Math(r'c*{"} = %.2f MPa’ % (coh))) display(Math(r' \signa_{cm) = %.2f MPa’ % (sigem))) display(Math(r'\signa_{tm) = %.2f MPa’ % (sigtm))) display(Math(r’E_m = %.2f MPa’ % (Em))) oc: = 25.00M Pa m; = 20.00 GSI = 57.35 ‘goologyandython.comihoek-brown ml 1820 8272020 ‘A simple guide to caloulate the Hoek-Brown Failure Grtera in Python | Geology and Python Authors Archives Categories Tags Generated by Pelican / &> ‘goologyandython.comihoek-brown ml 20120 272020 {A simple guide to calculate the Hoek-Brown Failure Crtera in Python | Geology and Python gf = 44.87" c= 0.23MPa om = 3.24M Pa tm = —0.02M Pa Ey = 3815.67M Pa Share on oO e608 Bruno Ruas de Pinho Worldwide View profile ‘Subscribe to our mailing list email a ve geologyandoython.comMhoek-brown html

You might also like