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ük | Python | MATLAB (Octave) | Site motoru (JS) |
|---|---|---|---|
| Mp (kN·m/m) | 174,57 | 174,57 | 174,57 |
| ymax (mm) | 21,233 | 21,233 | 21,233 |
| μ | 4,551 | 4,551 | 4,551 |
| θ (°) | 0,811 | 0,811 | 0,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")
✓ 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
✓ Bu kod GNU Octave 8.4 (MATLAB uyumlu) ile gerçekten çalıştırıldı — çıktı Python ile karakter karakter aynıdır.