Couple thermal and structural across a transient load
Stream a coupled thermal-structural rollout on a turbine blade, watch max stress and tip temperature evolve, steer the rollout when a margin is approached.
- Artefact returned
- Trajectory · stress field · tip-temp history
- Typical runtime
- ~12 s wall · 12 CU
- Cost
- ≈ $41 per study + Pro seat
The expanded snippet.
The version that lands in production — with the annotations a colleague would want when picking up the work. Copy-paste, swap in your inputs, run.
from apex import Aether
from apex.fields import save_field
import os
simos = Aether(api_key=os.environ["APEX_API_KEY"])
# Couple thermal and structural across a transient load step on a turbine blade.
# Stream the trajectory; observe stress field; steer the rollout when a margin
# is approached. Returns a trajectory_id you can later resume or audit.
traj = simos.simulate(
domain="multiphysics",
geometry=open("blade.step", "rb").read(),
geometry_format="step",
physics=["thermal", "structural"],
boundary_conditions={
"inlet": {"T": 1450, "p": 2.2e6},
"outlet": {"p": 1.0e5},
"root": {"fixed": True},
},
materials={"primary": "inconel718"},
horizon_s=12.0,
dt_s=5e-3,
stream=True,
annotations={"customer_ticket": "BLADE-2026-04"},
)
print(f"trajectory_id = {traj.id}")
print(f"compute_unit_estimate = {traj.compute_units_estimate:.1f}")
for step in traj:
print(
f"t={step.time:6.3f}s "
f"sigma_max={step.max_stress_MPa:7.1f} MPa "
f"T_tip={step.tip_temperature_K:6.1f} K"
)
# Steer if we're about to violate the 850 MPa margin.
if step.max_stress_MPa > 850:
print(" margin approached — applying root fillet +1.5 mm")
traj.steer(redesign="root_fillet+1.5mm")
# Save the final stress field for the design-review PDF.
save_field(traj.final_field("vonMises"), "out/blade_vonMises.vti")The numbers in this recipe are real.
What we ran. What we used for inputs. Where the reproduction kit lives, and what reproduces within published bounds.
- 01Geometry: any STEP file with a labelled root face. The cookbook repo ships an open turbine-blade STEP under CC-BY.
- 02Inputs match a published Cooper-style impinging-jet experiment for cross-validation.
- 03Reproduces within published Nu-error bounds (3.6%) on managed cloud at default precision.
- 04Total wall time depends on cell count and physics coupling; estimate uses an 18M-cell blade.
Make it your workload.
The recipe is a starting point. The four variations below are the ones we get asked about most. Anything else, write to docs@apexworldlabs.com.
- Swap geometry: any geometry Aether recognises (STEP, IGES, STL, OBJ). For meshes already in OpenFOAM format, use simos.import_mesh().
- Add physics: append "electromagnetic" or "chemistry" to the physics list to bring those domains into the same trajectory.
- Add a steering loop: replace the if-block with your own margin policy. Steering takes any redesign primitive Aether knows about.
- Run committed: pass committed=True if you have reserved compute capacity — ~35% off on-demand.
Other workloads worth looking at.
- Drug discoveryRun a FEP+ binding-affinity campaign over a ligand library
Score a 120-ligand library against four protein targets with alchemical FEP. Returns relative ΔΔG and per-edge uncertainty.
Read the recipe - SemiconductorsRTL → GDS at 7nm with PPA targets
Compile Verilog to placed-and-routed GDS at a 7nm predictive PDK with PPA targets and DRC clean. Returns the database with a signed manifest.
Read the recipe - SoftwarePlan and execute a whole-repo migration
Migrate a Python 3.8 codebase to 3.12 with type-checking enabled. The agent reads the repo, writes a plan, runs the migration, runs the tests, and opens the PR.
Read the recipe
Adapt this to your stack.
Swap in your geometry / target / repo and run it. If your workload is novel, send it and we will co-author the recipe with you.