Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| from math import pi | |
| # Beam Deflection Calculator (Euler-Bernoulli) | |
| def beam_deflection(load, length, elasticity, inertia, support_type): | |
| """ | |
| Calculate deflection for common beam supports. | |
| Units: Load (N), Length (m), Elasticity (Pa), Inertia (m^4) | |
| """ | |
| if support_type == "Simply Supported (Center Load)": | |
| deflection = (load * length**3) / (48 * elasticity * inertia) | |
| elif support_type == "Cantilever (End Load)": | |
| deflection = (load * length**3) / (3 * elasticity * inertia) | |
| elif support_type == "Simply Supported (Uniform Load)": | |
| deflection = (5 * load * length**4) / (384 * elasticity * inertia) | |
| else: | |
| return "Invalid support type" | |
| return f"Max Deflection: {deflection * 1000:.2f} mm" | |
| # Section Properties Calculator | |
| def section_properties(width, height, shape): | |
| """Calculate area and moment of inertia for rectangular or circular sections.""" | |
| if shape == "Rectangle": | |
| area = width * height | |
| inertia = (width * height**3) / 12 | |
| elif shape == "Circle": | |
| diameter = width | |
| area = pi * (diameter / 2)**2 | |
| inertia = pi * (diameter**4) / 64 | |
| else: | |
| return "Invalid shape" | |
| return f"Area: {area:.2f} m² | Moment of Inertia: {inertia:.4f} m⁴" | |
| # Load Capacity Estimator (Simplified) | |
| def load_capacity(material, cross_section_area, safety_factor): | |
| """Estimate allowable load based on material strength.""" | |
| material_strength = { | |
| "Concrete (20MPa)": 20e6, | |
| "Steel (A36)": 250e6, | |
| "Wood (Pine)": 10e6 | |
| } | |
| allowable_stress = material_strength[material] / safety_factor | |
| capacity = allowable_stress * cross_section_area | |
| return f"Allowable Load: {capacity / 1000:.2f} kN" | |
| # Gradio UI | |
| with gr.Blocks(title="Structural Engineering Toolkit") as app: | |
| gr.Markdown("# 🏗️ Structural Engineering Toolkit") | |
| with gr.Tab("Beam Deflection"): | |
| gr.Markdown("### Calculate beam deflection under load") | |
| with gr.Row(): | |
| load = gr.Number(label="Load (N)") | |
| length = gr.Number(label="Length (m)") | |
| elasticity = gr.Number(label="Elasticity Modulus (Pa)", value=2.1e11) # Steel default | |
| inertia = gr.Number(label="Moment of Inertia (m⁴)", value=1e-6) | |
| support_type = gr.Dropdown( | |
| ["Simply Supported (Center Load)", "Cantilever (End Load)", "Simply Supported (Uniform Load)"], | |
| label="Support Type" | |
| ) | |
| deflection_output = gr.Textbox(label="Result") | |
| gr.Button("Calculate").click( | |
| beam_deflection, | |
| inputs=[load, length, elasticity, inertia, support_type], | |
| outputs=deflection_output | |
| ) | |
| with gr.Tab("Section Properties"): | |
| gr.Markdown("### Calculate geometric properties of sections") | |
| shape = gr.Dropdown(["Rectangle", "Circle"], label="Shape") | |
| width = gr.Number(label="Width/Diameter (m)") | |
| height = gr.Number(label="Height (m)", visible=True) | |
| shape.change( | |
| lambda x: gr.Number(visible=(x == "Rectangle")), | |
| inputs=shape, | |
| outputs=height | |
| ) | |
| section_output = gr.Textbox(label="Result") | |
| gr.Button("Calculate").click( | |
| section_properties, | |
| inputs=[width, height, shape], | |
| outputs=section_output | |
| ) | |
| with gr.Tab("Load Capacity"): | |
| gr.Markdown("### Estimate allowable load for materials") | |
| material = gr.Dropdown( | |
| ["Concrete (20MPa)", "Steel (A36)", "Wood (Pine)"], | |
| label="Material" | |
| ) | |
| cross_section_area = gr.Number(label="Cross-Section Area (m²)", value=0.01) | |
| safety_factor = gr.Slider(1.5, 5, value=2.5, label="Safety Factor") | |
| capacity_output = gr.Textbox(label="Result") | |
| gr.Button("Calculate").click( | |
| load_capacity, | |
| inputs=[material, cross_section_area, safety_factor], | |
| outputs=capacity_output | |
| ) | |
| gr.Markdown("---\n**Note:** This is a simplified tool for educational purposes.") | |
| app.launch() |