6.7. O încercare triaxială simulată#
Codul de mai jos repetă rețeta din Modelul complet, pas cu pas de câteva mii de ori și desenează o încercare triaxială de compresiune pe un pământ Cam-Clay modificat, drenată și nedrenată. Schimbă valorile din prima celulă și rulează din nou.
Funcția este scrisă pentru probe de pe partea „udă” (\(R_p = p'_0/p' \le 2\)), unde modelul este de încredere (vezi Întărirea și suprafața de stare limită, regăsită).
# --- Parametrii materialului (Weald Clay); toți [–] ---
lam = 0.093 # λ
kappa = 0.035 # κ
M = 0.95 # panta CSL
N = 2.100 # v pe NCL la p' = 1 kPa
nu = 0.30 # coeficientul lui Poisson ν'
# --- Starea inițială a probei ---
p_i = 200.0 # p' la începutul forfecării [kPa]
p0_i = 200.0 # presiunea de preconsolidare p'_0 [kPa] (p0_i = p_i: normal consolidată)
import numpy as np
import matplotlib.pyplot as plt
Gamma = N - (lam - kappa)*np.log(2) # relația demonstrată în capitol
def simuleaza(p_i, p0_i, drenat=True, n=3000):
"""Compresiune triaxială cu σ_r constant pe Cam-Clay modificat.
Întoarce șirurile p', q, du [kPa], v, eps_a, eps_v [–]."""
p, q, p0 = float(p_i), 0.0, float(p0_i)
v = N - lam*np.log(p0) + kappa*np.log(p0/p)
ea = ev = 0.0
R = dict(p=[p], q=[q], v=[v], ea=[ea], ev=[ev], du=[0.0])
# efortul deviator la stare critică (ținta încercării)
q_cs = M*3*p_i/(3 - M) if drenat else M*np.exp((Gamma - v)/lam)
dq = 0.999*q_cs/n
for _ in range(n):
G = 3*(1 - 2*nu)/(2*(1 + nu))*v*p/kappa # modulul de forfecare [kPa]
qn = q + dq
if drenat: # drum 3:1
pn = p + dq/3
elif qn**2 <= M**2*p*(p0 - p): # nedrenat, încă elastic: p' constant
pn = p
else: # nedrenat, plastic: căutăm p' cu δε_v = 0
f = lambda x: kappa*np.log(x) + (lam - kappa)*np.log(x + qn**2/(M**2*x))
tinta = kappa*np.log(p) + (lam - kappa)*np.log(p0)
a, b = qn/M, p
for _ in range(40): # înjumătățirea intervalului
m = 0.5*(a + b)
if f(m) > tinta: b = m
else: a = m
pn = 0.5*(a + b)
p0n = max(p0, pn + qn**2/(M**2*pn)) # pasul 1: curba de curgere crește?
dev_e = kappa/v*np.log(pn/p) # pasul 2
dev_p = (lam - kappa)/v*np.log(p0n/p0)
eta = 0.5*(q/p + qn/pn) # pasul 3
des_p = dev_p*2*eta/(M**2 - eta**2)
des_e = dq/(3*G)
dev = dev_e + dev_p # pasul 4
ev += dev; ea += des_e + des_p + dev/3
v *= (1 - dev); p, q, p0 = pn, qn, p0n
for k, x in zip("p q v ea ev du".split(), (p, q, v, ea, ev, p_i + q/3 - p)):
R[k].append(x)
return {k: np.array(a) for k, a in R.items()}
D = simuleaza(p_i, p0_i, drenat=True)
U = simuleaza(p_i, p0_i, drenat=False)
fig, ax = plt.subplots(2, 2, figsize=(11, 8))
cD, cU = "#267fd9", "#bf3333"
# drumurile de eforturi și curba de curgere inițială
x = np.linspace(0, p0_i, 200)
ax[0,0].plot(x, M*np.sqrt(x*(p0_i - x)), color="#d9731a", lw=1.2, label="curba de curgere inițială")
ax[0,0].plot([0, 1.1*D['p'][-1]], [0, 1.1*M*D['p'][-1]], "k", lw=1.5, label="CSL")
ax[0,0].plot(D['p'], D['q'], color=cD, lw=2, label="drenat")
ax[0,0].plot(U['p'], U['q'], color=cU, lw=2, label="nedrenat")
ax[0,0].set_xlabel("p' [kPa]"); ax[0,0].set_ylabel("q [kPa]"); ax[0,0].legend(fontsize=8)
# efort deviator – deformație axială
ax[0,1].plot(100*D['ea'], D['q'], color=cD, lw=2); ax[0,1].plot(100*U['ea'], U['q'], color=cU, lw=2)
ax[0,1].set_xlabel("deformația axială ε_a [%]"); ax[0,1].set_ylabel("q [kPa]"); ax[0,1].set_xlim(0, 25)
# drenat: deformația de volum
ax[1,0].plot(100*D['ea'], 100*D['ev'], color=cD, lw=2)
ax[1,0].set_xlabel("deformația axială ε_a [%]"); ax[1,0].set_ylabel("drenat: ε_v [%] (contracție +)"); ax[1,0].set_xlim(0, 25)
# nedrenat: presiunea apei din pori
ax[1,1].plot(100*U['ea'], U['du'], color=cU, lw=2)
ax[1,1].set_xlabel("deformația axială ε_a [%]"); ax[1,1].set_ylabel("nedrenat: Δu [kPa]"); ax[1,1].set_xlim(0, 25)
for a in ax.flat: a.grid(alpha=0.3)
plt.tight_layout(); plt.show()
for nume, r in (("drenat", D), ("nedrenat", U)):
print(f"{nume:9s}: la sfârșit p' = {r['p'][-1]:5.0f} kPa, q = {r['q'][-1]:5.0f} kPa, "
f"v = {r['v'][-1]:.3f} [–], q/p' = {r['q'][-1]/r['p'][-1]:.2f} [–], c_u sau q/2 = {r['q'][-1]/2:4.0f} kPa")
drenat : la sfârșit p' = 293 kPa, q = 278 kPa, v = 1.532 [–], q/p' = 0.95 [–], c_u sau q/2 = 139 kPa
nedrenat : la sfârșit p' = 130 kPa, q = 123 kPa, v = 1.607 [–], q/p' = 0.95 [–], c_u sau q/2 = 62 kPa
Ce să observi:
Aceeași probă ajunge la stare critică la \(q \approx 278\) kPa drenat și la \(q \approx 123\) kPa nedrenat. Diferența vine numai din drenaj: nedrenat, presiunea apei crește cu peste 100 kPa și \(p'\) scade.
Curbele efort–deformație nu au vârf și se aplatizează treptat: întărire, comportarea tipică a unei argile normal consolidate.
Nedrenat, proba ajunge aproape de rezistența finală la deformații de câteva procente; drenat are nevoie de peste 20 %. Modelul reproduce un fapt cunoscut din laborator.
Nimic din aceste curbe nu a fost „desenat”: au ieșit din cinci constante și o stare inițială.
De încercat
Pune
p0_i = 300(probă ușor supraconsolidată, \(R_p = 1{,}5\)). Unde apare partea elastică a drumului nedrenat? Cum se schimbă presiunea apei?Dublează
kappa. Ce se întâmplă cu drumul nedrenat și cu \(c_u\)? Compară cu observația despre exponentul \((\lambda-\kappa)/\lambda\) din Întărirea și suprafața de stare limită, regăsită.Micșorează numărul de pași (
n=20) în apelurile funcției. Cât de mult se schimbă deformațiile de la sfârșit? De ce eforturile finale aproape nu se schimbă?Pune
p0_i = 2*p_i. Proba pornește exact de sub vârful elipsei. Ce prezice modelul pentru încercarea nedrenată?