# -*- coding: utf-8 -*-
# TorsoCAE Validation Journal — linear_elastic case 1: cantilever beam tip deflection
# 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="Cantilever", body_id="body_0")
session.csg_select("body_0")
session.mesh(mesh_id="mesh_0", algo_id="hex_transfinite", size_factor=1.0, size_min=0, size_max=0, order=2, dim=3)
session.solid("Cantilever").material(E=210e9, nu=0.3)
session.surface(1, scope_id="body_0").bc("fixed")
session.surface(2, scope_id="body_0").bc("traction", values=[0, 100000, 0])  # 1000 N resultant over 0.1x0.1 face
session.set_physics("structural", submodel="linear_elastic", backend="dolfinx")
session.set_solver_options(algo="cg", precond="gamg", tol=1e-10, max_iter=2000, n_cores=2, device="cpu")
session.compute(mesh_ids=["mesh_0"])
