Introduction
The Convergence-Confinement Method (CCM) is a widely used analytical approach in
tunnel engineering that helps in understanding the interaction between the
surrounding ground and the tunnel support system during excavation. This method
is particularly useful in the design and construction of tunnels in rock masses,
where the behavior of the ground and the effectiveness of the support systems
need to be carefully evaluated to ensure stability and safety.
In this series of articles, we are going to discuss these following concepts in CCM:
Ground Reaction Curve (CCM)
%reset -f import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl
def displacement_ratio(lamb,lambda_e,sigma_0,Kp,Kpsi,G,nu): F1 = -(1 - 2*nu) * (Kp + 1) / (Kp - 1) F2 = 2*(1 + Kp*Kpsi - nu*(Kp + 1)*(Kpsi + 1))/(Kp - 1)/(Kp + Kpsi) F3 = 2*(1 - nu)*(Kp + 1)/(Kp + Kpsi) Rp_R = ( (2*lambda_e) / ((Kp + 1)*lambda_e - (Kp - 1)*lamb) )**(1/(Kp - 1)) if(lamb < lambda_e): # Elastic Zone return lamb*sigma_0/(2*G) else: # Plastic Zone return (lambda_e*sigma_0/(2*G))*(F1 + F2/(Rp_R**(Kp-1)) + F3*(Rp_R)**(Kpsi + 1))
def find_lambda(f,xl=0,xr=1,max_error=0.00001,max_iter=100): error = 1 iters = 1 while error > max_error and iters < max_iter: iters += 1 xc = (xl + xr) / 2 if f(xc)*f(xr) > 0: error = abs((xr-xc)/xc) xr = xc else: error = abs((xl-xc)/xc) xl = xc if (error > max_error): raise RuntimeWarning( f"""converging results for 'find_lambda' with error < {max_error*100}% not found. Adjust iteration parameters!""" ) return xc def f(lamb): nu = .3 Kp = 1.352 Kpsi = 1.212 lambda_e = .37 sigma_0 = 4400.0 #kpa G = 12919.0 #kpa y1 = displacement_ratio(lamb,lambda_e,sigma_0,Kp,Kpsi,G,nu)*2*G/sigma_0 y2 = 1-lamb return y1 - y2 lambda_cross = find_lambda(f, max_error=.0001)
nu = .3 Kp = 1.352 Kpsi = 1.212 lambda_e = .37 σ0 = 4400.0 #kpa G = 12919.0 #kpa x = np.linspace(0, 1, 1000) # Variable Bebas displacement_norm = np.array([ displacement_ratio(lamb,lambda_e,σ0,Kp,Kpsi,G,nu) for lamb in x])*2*G/σ0 displacement_norm_1 = np.array([ displacement_ratio(lamb,lambda_e,σ0,Kp,0.5*Kpsi,G,nu) for lamb in x])*2*G/σ0 displacement_norm_2 = np.array([ displacement_ratio(lamb,lambda_e,σ0,Kp,1.5*Kpsi,G,nu) for lamb in x])*2*G/σ0 plt.plot(displacement_norm, 1-x, label="1.0 $K_{\psi}$") plt.plot(displacement_norm_1, 1-x, label="0.5 $K_{\psi}$") plt.plot(displacement_norm_2, 1-x, label="1.5 $K_{\psi}$") plt.plot(1-x, 1-x, ls="--", label="Support Pressure", lw=.9) plt.xlabel(r"$\frac{2G}{\sigma_0}$ $\frac{u}{R}$") plt.ylabel("1 - λ") plt.axhline(1-lambda_e, ls="-.", c="k", lw=.5, label="$λ_e$") plt.axhline(1-lambda_cross, ls="-.", c="c", lw=.5, label="λ Support Pressure") plt.title("$K_\psi$ Influence on Ground Response Curve") plt.legend() plt.show()