jkind commited on
Commit
1f74c6c
·
1 Parent(s): 1fd709e

Initial commit

Browse files
Files changed (2) hide show
  1. app.py +88 -0
  2. requirements.txt +4 -0
app.py ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sympy as sp
2
+ import numpy as np
3
+ import pandas as pd
4
+ import gradio as gr
5
+
6
+ def solve_beam(l1_val, l2_val, q1_val, q2_val):
7
+ # Define the variables
8
+ Mx, l1, l2, q1, q2 = sp.symbols('Mx l1 l2 q1 q2')
9
+
10
+ # Equation to solve for Mx
11
+ equation = (Mx*l1/3 + q1*l1**3/24 + Mx*l2/3 + q2*l2**3/24)
12
+ Mx_solution = sp.solve(equation, Mx)
13
+
14
+ # Define variables for reactions
15
+ VA, VB1, VB2, VC, HA = sp.symbols('VA VB1 VB2 VC HA')
16
+
17
+ # System of equations for the first span
18
+ eq1_span1 = VA + VB1 - q1*l1
19
+ eq2_span1 = VB1*l1 - q1*l1**2/2 + Mx_solution[0]
20
+
21
+ # System of equations for the second span
22
+ eq1_span2 = VB2 + VC - q2*l2
23
+ eq2_span2 = VB2*l2 - q2*l2**2/2 + Mx_solution[0]
24
+
25
+ # Solve for the reactions for the first span
26
+ reactions_span1 = sp.solve((eq1_span1, eq2_span1), (VA, VB1))
27
+
28
+ # Solve for the reactions for the second span
29
+ reactions_span2 = sp.solve((eq1_span2, eq2_span2), (VB2, VC))
30
+
31
+ # Define variables for positions on the spans
32
+ x1, x2 = sp.symbols('x1 x2')
33
+
34
+ # Bending moment and shear for the first span
35
+ M1_expr = reactions_span1[VA] * x1 - q1 * x1**2 / 2
36
+ V1_expr = reactions_span1[VA] - q1 * x1
37
+
38
+ # Bending moment and shear for the second span
39
+ M2_expr = Mx_solution[0] - q2 * x2**2 / 2 + reactions_span2[VB2] * x2
40
+ V2_expr = reactions_span2[VB2] - q2 * x2
41
+
42
+ # Substitute the provided numerical values into the expressions
43
+ M1_expr = M1_expr.subs({l1: l1_val, q1: q1_val, l2: l2_val, q2: q2_val})
44
+ V1_expr = V1_expr.subs({l1: l1_val, q1: q1_val, l2: l2_val, q2: q2_val})
45
+ M2_expr = M2_expr.subs({l1: l1_val, q1: q1_val, l2: l2_val, q2: q2_val})
46
+ V2_expr = V2_expr.subs({l1: l1_val, q1: q1_val, l2: l2_val, q2: q2_val})
47
+ Mx_value = Mx_solution[0].subs({l1: l1_val, q1: q1_val, l2: l2_val, q2: q2_val})
48
+
49
+ # Generate numerical values for x1 and x2
50
+ x1_vals = np.arange(0, l1_val, 0.1)
51
+ x2_vals = np.arange(0, l2_val, 0.1)
52
+
53
+ # Evaluate M1 and V1 at each x1
54
+ M1_vals = [float(M1_expr.subs(x1, val)) for val in x1_vals]
55
+ V1_vals = [float(V1_expr.subs(x1, val)) for val in x1_vals]
56
+
57
+ # Evaluate M2 and V2 at each x2
58
+ M2_vals = [float(M2_expr.subs(x2, val)) for val in x2_vals]
59
+ V2_vals = [float(V2_expr.subs(x2, val)) for val in x2_vals]
60
+
61
+ # Create dataframes for beam1 and beam2
62
+ beam1 = pd.DataFrame({'x': x1_vals, 'M': M1_vals, 'V': V1_vals})
63
+ beam2 = pd.DataFrame({'x': x2_vals + l1_val, 'M': M2_vals, 'V': V2_vals})
64
+
65
+ # Concatenate beam1 and beam2 into one dataframe
66
+ beam = pd.concat([beam1, beam2], ignore_index=True)
67
+
68
+ return beam
69
+
70
+ def main(l1, l2, q1, q2):
71
+ beam_df = solve_beam(l1, l2, q1, q2)
72
+ csv_file = 'beam_analysis.csv'
73
+ beam_df.to_csv(csv_file, index=False)
74
+ return beam_df, csv_file
75
+
76
+ inputs = [
77
+ gr.components.Number(label="Length of span 1 (l1)"),
78
+ gr.components.Number(label="Length of span 2 (l2)"),
79
+ gr.components.Number(label="Load on span 1 (q1)"),
80
+ gr.components.Number(label="Load on span 2 (q2)")
81
+ ]
82
+
83
+ outputs = [
84
+ gr.components.Dataframe(label="Beam Analysis Data"),
85
+ gr.components.File(label="Download CSV")
86
+ ]
87
+
88
+ gr.Interface(fn=main, inputs=inputs, outputs=outputs, title="Beam Analysis Tool").launch()
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ gradio
2
+ pandas
3
+ numpy
4
+ sympy