muhammadanwar-31 commited on
Commit
259494e
·
verified ·
1 Parent(s): 183f9d5

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +86 -0
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()