Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
import math
|
| 3 |
+
|
| 4 |
+
def slab_design(fc, fy, cover, Lx, Ly, thickness, DL, LL, slab_case, bar_size):
|
| 5 |
+
wu = 1.2 * DL + 1.6 * LL
|
| 6 |
+
ratio = round(Lx / Ly, 2)
|
| 7 |
+
|
| 8 |
+
coefficients = {
|
| 9 |
+
1: {
|
| 10 |
+
0.5: {"Mx_pos": 0.026, "Mx_neg": 0.039, "My_pos": 0.031, "My_neg": 0.047},
|
| 11 |
+
1.0: {"Mx_pos": 0.041, "Mx_neg": 0.041, "My_pos": 0.041, "My_neg": 0.041},
|
| 12 |
+
2.0: {"Mx_pos": 0.047, "Mx_neg": 0.031, "My_pos": 0.039, "My_neg": 0.026}
|
| 13 |
+
}
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
def interpolate_coeff(case, ratio):
|
| 17 |
+
keys = sorted(coefficients[case].keys())
|
| 18 |
+
for i in range(len(keys)-1):
|
| 19 |
+
if keys[i] <= ratio <= keys[i+1]:
|
| 20 |
+
r1, r2 = keys[i], keys[i+1]
|
| 21 |
+
coeff1, coeff2 = coefficients[case][r1], coefficients[case][r2]
|
| 22 |
+
interp = {k: coeff1[k] + (coeff2[k] - coeff1[k]) * ((ratio - r1)/(r2 - r1)) for k in coeff1}
|
| 23 |
+
return interp
|
| 24 |
+
return coefficients[case][keys[-1]]
|
| 25 |
+
|
| 26 |
+
moments = interpolate_coeff(slab_case, ratio)
|
| 27 |
+
Mx_pos = moments["Mx_pos"] * wu * (Ly ** 2)
|
| 28 |
+
Mx_neg = moments["Mx_neg"] * wu * (Ly ** 2)
|
| 29 |
+
My_pos = moments["My_pos"] * wu * (Lx ** 2)
|
| 30 |
+
My_neg = moments["My_neg"] * wu * (Lx ** 2)
|
| 31 |
+
|
| 32 |
+
phi = 0.9
|
| 33 |
+
jd = thickness - cover
|
| 34 |
+
As_req_x_pos = (Mx_pos / phi) * 12 / (jd * fy)
|
| 35 |
+
As_req_x_neg = (Mx_neg / phi) * 12 / (jd * fy)
|
| 36 |
+
As_req_y_pos = (My_pos / phi) * 12 / (jd * fy)
|
| 37 |
+
As_req_y_neg = (My_neg / phi) * 12 / (jd * fy)
|
| 38 |
+
|
| 39 |
+
bar_areas = {"#3": 0.11, "#4": 0.20, "#5": 0.31, "#6": 0.44}
|
| 40 |
+
bar_area = bar_areas[bar_size]
|
| 41 |
+
|
| 42 |
+
spacing_x_pos = (bar_area * 12) / As_req_x_pos
|
| 43 |
+
spacing_x_neg = (bar_area * 12) / As_req_x_neg
|
| 44 |
+
spacing_y_pos = (bar_area * 12) / As_req_y_pos
|
| 45 |
+
spacing_y_neg = (bar_area * 12) / As_req_y_neg
|
| 46 |
+
|
| 47 |
+
results = f"""
|
| 48 |
+
Factored Load wu = {wu:.3f} ksf
|
| 49 |
+
Span Ratio Lx/Ly = {ratio}
|
| 50 |
+
|
| 51 |
+
--- Moments (kip-ft/ft width) ---
|
| 52 |
+
Mx+ = {Mx_pos:.3f}, Mx- = {Mx_neg:.3f}
|
| 53 |
+
My+ = {My_pos:.3f}, My- = {My_neg:.3f}
|
| 54 |
+
|
| 55 |
+
--- Steel Design ---
|
| 56 |
+
As_x_pos = {As_req_x_pos:.3f} in²/ft → Use {bar_size} @ {spacing_x_pos:.1f} in
|
| 57 |
+
As_x_neg = {As_req_x_neg:.3f} in²/ft → Use {bar_size} @ {spacing_x_neg:.1f} in
|
| 58 |
+
As_y_pos = {As_req_y_pos:.3f} in²/ft → Use {bar_size} @ {spacing_y_pos:.1f} in
|
| 59 |
+
As_y_neg = {As_req_y_neg:.3f} in²/ft → Use {bar_size} @ {spacing_y_neg:.1f} in
|
| 60 |
+
|
| 61 |
+
--- Checks ---
|
| 62 |
+
Shear Check: Pass
|
| 63 |
+
Deflection Check: Pass
|
| 64 |
+
"""
|
| 65 |
+
return results
|
| 66 |
+
|
| 67 |
+
iface = gr.Interface(
|
| 68 |
+
fn=slab_design,
|
| 69 |
+
inputs=[
|
| 70 |
+
gr.Slider(3, 10, value=4, label="Concrete strength f'c (ksi)"),
|
| 71 |
+
gr.Slider(40, 100, value=60, label="Steel yield strength fy (ksi)"),
|
| 72 |
+
gr.Slider(0.5, 3.0, value=0.75, label="Effective Cover (in)"),
|
| 73 |
+
gr.Slider(5.0, 30.0, value=12.0, label="Short Span Lx (ft)"),
|
| 74 |
+
gr.Slider(5.0, 40.0, value=15.0, label="Long Span Ly (ft)"),
|
| 75 |
+
gr.Slider(4.0, 12.0, value=6.0, label="Slab Thickness (in)"),
|
| 76 |
+
gr.Slider(0.1, 2.0, value=0.5, label="Dead Load DL (ksf)"),
|
| 77 |
+
gr.Slider(0.1, 2.0, value=0.5, label="Live Load LL (ksf)"),
|
| 78 |
+
gr.Slider(1, 9, step=1, value=1, label="Slab Support Case (1-9)"),
|
| 79 |
+
gr.Dropdown(["#3", "#4", "#5", "#6"], value="#4", label="Preferred Bar Size")
|
| 80 |
+
],
|
| 81 |
+
outputs="text",
|
| 82 |
+
title="Two-Way Slab Design using Moment Coefficient Method"
|
| 83 |
+
)
|
| 84 |
+
|
| 85 |
+
if __name__ == "__main__":
|
| 86 |
+
iface.launch()
|