O încercare triaxială simulată

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")
../_images/9c1d1481bbb6dbbaa7d622ea4495670dc16bc5059aeb77a44f9e6ac3eee8b557.png
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

  1. Pune p0_i = 300 (probă ușor supraconsolidată, \(R_p = 1{,}5\)). Unde apare partea elastică a drumului nedrenat? Cum se schimbă presiunea apei?

  2. 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ă.

  3. 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ă?

  4. Pune p0_i = 2*p_i. Proba pornește exact de sub vârful elipsei. Ce prezice modelul pentru încercarea nedrenată?