# -*- coding: utf-8 -*-
# TorsoCAE Validation Journal — structural_dynamics case 2: beam impact modal superposition (FFT)
# See README.md in this directory for theory and results.

import sys
sys.path.insert(0, "./server/")
from pytorsocae import TorsoCAESession

session = TorsoCAESession()
session.csg_make_shape("box", {"dx": 2.0, "dy": 0.1, "dz": 0.1, "cx": 0, "cy": 0, "cz": 0},
                        name="DynBeam", body_id="body_0")
session.csg_select("body_0")
session.mesh(mesh_id="mesh_0", algo_id="hex_transfinite", size_factor=1.5, size_min=0, size_max=0, order=2, dim=3)
session.solid("DynBeam").material(E=210e9, nu=0.3, rho=7800.0)
session.surface(1, scope_id="body_0").bc("fixed")
session.surface(2, scope_id="body_0").bc("traction", values=[0, 100000, 0])  # 1000 N step load
session.set_physics("structural", submodel="structural_dynamics", backend="dolfinx")
session.set_solver_options(algo="auto", tol=1e-9, max_iter=1000,
                            num_steps=420, dt=0.000795367825309484,
                            time_scheme="edmc-1", edmc_chi=0.0, n_cores=1, device="cpu")
session.compute(mesh_ids=["mesh_0"])
