Ana Sayfa / MATLAB / Python / Problem 7

Patlamaya Karşı Duvar — Biggs Eşdeğer SDOF

300 mm betonarme duvar, 3 m açıklık, basit mesnet. Yansıyan yük Pr = 830 kPa, ir = 1800 kPa·ms. Çıktı: maksimum sehim, süneklik μ ve mesnet dönmesi θ.

Doğru göçme modunu seçmek. Aynı paketin eski sürümü duvarı kalınlık yönünde bir yay zinciri olarak modelliyor ve hasar kararını bu yayın milimetre cinsinden sıkışmasına göre veriyordu — hiçbir standarda dayanmayan eşiklerle. Oysa sığınak duvarının gerçek göçme modu eğilmedir ve UFC 3-340-02 / PDC TR-06-08'de θ ve μ ile değerlendirilir. Doğru denklemi yanlış probleme uygulamak, yanlış denklemden daha zor fark edilir.

Sayısal integrasyon, impulsif rejimde elasto-plastik enerji dengesiyle (%0,1) ve yarı-statik rejimde DLF = 2,000 ile ayrıca doğrulanmıştır (site testleri: tests/blast-sdof.test.js). Hasar sınırları (B1–B4) koda gömülmemiştir: PDC TR-06-08 Tablo 4-1 değerleri donatı detayına ve eksenel yüke göre değişir — kendi elemanınız için tablodan alınmalıdır.

BüyüklükPythonMATLAB (Octave)Site motoru (JS)
Mp (kN·m/m)174,57174,57174,57
ymax (mm)21,23321,23321,233
μ4,5514,5514,551
θ (°)0,8110,8110,811

PYTHON wall_sdof.py

# wall_sdof.py -- Patlamaya karsi betonarme duvar: Biggs esdeger SDOF (elasto-plastik)
# Kaynak: Biggs (1964); UFC 3-340-02 (2008) Bolum 3-4. Hasar siniri: PDC TR-06-08 (GIRDI)
import math

# Duvar (birim genislik, basit mesnet)
t, L, cover = 0.30, 3.0, 0.04          # m
rho_s, fy, fc = 0.005, 420e6, 30e6     # -, Pa, Pa
Pr, ir = 830e3, 1800.0                 # Pa, Pa.s  (yansiyan basinc, impuls)

Ec  = 4700e6 * math.sqrt(fc/1e6)       # Pa (ACI yaklasimi)
d   = t - cover
As  = rho_s * d
fdy = 1.10 * 1.17 * fy                 # SIF*DIF (UFC)
fdc = 1.19 * fc
a   = As * fdy / (0.85 * fdc)
Mp  = As * fdy * (d - a/2)             # N.m/m
n   = 200e9 / Ec; rn = n * rho_s
k   = math.sqrt(rn**2 + 2*rn) - rn
Ic  = d**3 * (k**3/3 + rn*(1-k)**2)
Ia  = (t**3/12 + Ic) / 2
ru  = 8 * Mp / L**2                    # Pa
KE  = 384 * Ec * Ia / (5 * L**4)       # Pa/m
ye  = ru / KE
m   = 2400 * t                         # kg/m2
td  = 2 * ir / Pr                      # impulsu koruyan ucgen darbe

def solve(KLM):
    Me = KLM * m; T = 2*math.pi*math.sqrt(Me/KE)
    dt = min(T, td)/2000; tEnd = td + 3*T
    y = v = yp = 0.0; ymax = tmax = 0.0; tt = 0.0
    while tt <= tEnd:
        p = Pr*(1 - tt/td) if tt <= td else 0.0
        r = KE*(y - yp)
        if r > ru:  yp = y - ru/KE; r = ru
        elif r < -ru: yp = y + ru/KE; r = -ru
        v += (p - r)/Me*dt; y += v*dt
        if y > ymax: ymax, tmax = y, tt
        if tt > td and v < 0 and tt > tmax + T/4: break
        tt += dt
    return ymax, T

KLM = 0.78
ym, T = solve(KLM)
if ym > ye:                            # plastiklesti: UFC -> K_LM ortalamasi
    KLM = (0.78 + 0.66) / 2
    ym, T = solve(KLM)

mu    = ym / ye
theta = math.degrees(math.atan(2*ym/L))
print(f"Mp = {Mp/1e3:.2f} kN.m/m   ru = {ru/1e3:.2f} kPa   ye = {ye*1e3:.3f} mm")
print(f"T  = {T*1e3:.3f} ms   td = {td*1e3:.3f} ms   K_LM = {KLM:.2f}")
print(f"ymax = {ym*1e3:.3f} mm   mu = {mu:.3f}   theta = {theta:.3f} derece")
Mp = 174.57 kN.m/m ru = 155.17 kPa ye = 4.665 mm T = 24.806 ms td = 4.337 ms K_LM = 0.72 ymax = 21.233 mm mu = 4.551 theta = 0.811 derece

✓ Bu kod Python 3 ile gerçekten çalıştırıldı — çıktı yukarıdaki kutudur.

MATLAB wall_sdof.m

% wall_sdof.m -- Patlamaya karsi betonarme duvar: Biggs esdeger SDOF (elasto-plastik)
% Kaynak: Biggs (1964); UFC 3-340-02 (2008) Bolum 3-4. Hasar siniri: PDC TR-06-08 (GIRDI)
function wall_sdof()
  t = 0.30; L = 3.0; cover = 0.04;
  rho_s = 0.005; fy = 420e6; fc = 30e6;
  Pr = 830e3; ir = 1800.0;

  Ec  = 4700e6 * sqrt(fc/1e6);
  d   = t - cover;  As = rho_s * d;
  fdy = 1.10 * 1.17 * fy;  fdc = 1.19 * fc;
  a   = As * fdy / (0.85 * fdc);
  Mp  = As * fdy * (d - a/2);
  n   = 200e9 / Ec;  rn = n * rho_s;
  k   = sqrt(rn^2 + 2*rn) - rn;
  Ic  = d^3 * (k^3/3 + rn*(1-k)^2);
  Ia  = (t^3/12 + Ic) / 2;
  ru  = 8 * Mp / L^2;
  KE  = 384 * Ec * Ia / (5 * L^4);
  ye  = ru / KE;
  m   = 2400 * t;
  td  = 2 * ir / Pr;

  KLM = 0.78;
  [ym, T] = solve(KLM, m, KE, ru, Pr, td);
  if ym > ye
    KLM = (0.78 + 0.66) / 2;            % UFC: plastiklesince K_LM ortalamasi
    [ym, T] = solve(KLM, m, KE, ru, Pr, td);
  end
  mu = ym / ye;  theta = atand(2*ym/L);
  fprintf('Mp = %.2f kN.m/m   ru = %.2f kPa   ye = %.3f mm\n', Mp/1e3, ru/1e3, ye*1e3);
  fprintf('T  = %.3f ms   td = %.3f ms   K_LM = %.2f\n', T*1e3, td*1e3, KLM);
  fprintf('ymax = %.3f mm   mu = %.3f   theta = %.3f derece\n', ym*1e3, mu, theta);
end

function [ymax, T] = solve(KLM, m, KE, ru, Pr, td)
  Me = KLM * m;  T = 2*pi*sqrt(Me/KE);
  dt = min(T, td)/2000;  tEnd = td + 3*T;
  y = 0; v = 0; yp = 0; ymax = 0; tmax = 0; tt = 0;
  while tt <= tEnd
    if tt <= td, p = Pr*(1 - tt/td); else, p = 0; end
    r = KE*(y - yp);
    if r > ru,      yp = y - ru/KE; r = ru;
    elseif r < -ru, yp = y + ru/KE; r = -ru; end
    v = v + (p - r)/Me*dt;  y = y + v*dt;
    if y > ymax, ymax = y; tmax = tt; end
    if tt > td && v < 0 && tt > tmax + T/4, break; end
    tt = tt + dt;
  end
end
Mp = 174.57 kN.m/m ru = 155.17 kPa ye = 4.665 mm T = 24.806 ms td = 4.337 ms K_LM = 0.72 ymax = 21.233 mm mu = 4.551 theta = 0.811 derece

✓ Bu kod GNU Octave 8.4 (MATLAB uyumlu) ile gerçekten çalıştırıldı — çıktı Python ile karakter karakter aynıdır.

↓ wall_sdof.py İndir ↓ wall_sdof.m İndir ← MATLAB / Python ← Problem 6 Problem 8 →