Spaces:
Sleeping
Sleeping
import gradio as gr | |
from apdl_generator.apdl_plate import generate_plate_apdl | |
from apdl_generator.apdl_beam import generate_beam_apdl | |
from simulators.python_simulation import run_python_simulation | |
from visualization import visualize_results | |
def simulation_workflow(tool_type, use_case, include_hole, include_force, include_load, thickness, length, width, hole_diameter, force, load): | |
""" | |
Main simulation workflow. | |
Parameters: | |
tool_type (str): 'Punch' or 'Die'. | |
use_case (str): 'plate' or 'beam'. | |
include_hole (bool): Whether to include a hole in the plate simulation. | |
include_force (bool): Whether to include force in the simulation. | |
include_load (bool): Whether to include load in the simulation. | |
thickness (float): Thickness of the material. | |
length (float): Length of the material. | |
width (float): Width of the material. | |
hole_diameter (float): Diameter of the hole (optional). | |
force (float): Applied force (optional). | |
load (float): Applied load (optional). | |
Returns: | |
results (str): Text result summarizing stress and deformation. | |
graph_path (str): Path to the 2D visualization. | |
""" | |
# Handle optional parameters | |
force = force if include_force else 0 | |
load = load if include_load else 0 | |
# Generate APDL script dynamically | |
if use_case == "plate": | |
hole_diameter = hole_diameter if include_hole else 0 | |
apdl_path = generate_plate_apdl(thickness, length, width, hole_diameter, force) | |
elif use_case == "beam": | |
apdl_path = generate_beam_apdl(length, width, thickness, load) | |
else: | |
return "Invalid use case selected.", None | |
# Run simulation using Python-based solver | |
stress, deformation = run_python_simulation(apdl_path, use_case, thickness=thickness, length=length, width=width, force=force, load=load) | |
# Generate 2D visualization | |
graph_path, _ = visualize_results("Python-Based Solver", length, width, thickness, stress, deformation) | |
return f"{tool_type} Simulation\nStress: {stress:.2f} MPa\nDeformation: {deformation:.2f} mm", graph_path | |
interface = gr.Interface( | |
fn=simulation_workflow, | |
inputs=[ | |
gr.Radio(["Punch", "Die"], label="Select Tool Type"), | |
gr.Radio(["plate", "beam"], label="Select Use Case"), | |
gr.Checkbox(label="Include Hole for Plate Simulation"), # Checkbox for optional hole | |
gr.Checkbox(label="Include Force"), # Checkbox for optional force | |
gr.Checkbox(label="Include Load"), # Checkbox for optional load | |
gr.Slider(10, 50, step=1, label="Thickness (mm)"), | |
gr.Slider(100, 500, step=10, label="Length (mm)"), | |
gr.Slider(50, 200, step=10, label="Width (mm)"), | |
gr.Slider(5, 25, step=1, label="Hole Diameter (mm)"), # Controlled by "Include Hole" | |
gr.Slider(1000, 10000, step=500, label="Force (N)"), # Controlled by "Include Force" | |
gr.Slider(1000, 20000, step=1000, label="Load (N)"), # Controlled by "Include Load" | |
], | |
outputs=[ | |
gr.Textbox(label="Simulation Results"), | |
gr.Image(label="2D Results Visualization") | |
], | |
title="Punch and Die Simulation Tool (Python-Based)", | |
live=True | |
) | |
interface.launch() | |