EAA benchmark low-pressure axial fan with a nine-blade rotor in its rig, with fluid regions and an MRF flow analysis.
| File | Kind | Size |
|---|---|---|
| fan-01.step | STEP | 13.7 MB |
| fan-01.stl | STL | 64.9 MB |
assembly.yaml (design contract)
FAN-01 low-pressure axial fan (EAA benchmark fan N1UG) analysed from its supplied CAD in the rig frame: the nine-blade rotor (tip radius 247.5) turns on a revolute joint about +y through (x, z) = (-400, 1515) inside the stationary duct (inlet nozzle, Ø500 bore, diffuser), with the shaft and the downstream hub disc turning with it. The stationary flow boundary the CAD lacks is derived: the chamber wall the duct passes through where the diffuser begins. The hub closure the rotor ring mounts on is the supplied rotor's own closed web disc (y -410.6..-404.5), so no derived plug is built. The air is a derived fluid body: the chamber-side settling region upstream of the nozzle, the duct, and the ambient-side discharge region downstream of the diffuser, between an inlet cap and an outlet cap. A steady OpenFOAM MRF analysis predicts the total-to-static pressure rise at 0.994, 1.403 and 1.804 m3/s and the rotor torque at 1.403 m3/s, all at 1486 rpm, with a mesh-refinement pair at the design flow. Authoritative: sources/fan01-packet.md and the four STEP files; figure-1-setup.png is illustrative.
refinement. The geometry and handoff are published as built; read each gate below before printing.
| Tier | Gate | Result | Evidence |
|---|---|---|---|
| A | parts_pass Every part design passed its own 12 gates and has a handoff STEP | n/a | results/build123d/fan-01/parts.json designs.<design>.gates_ok: |
| A | bom_complete Every body of the bill of materials is in the export, once, with a placement | PASS | results/build123d/fan-01/verify.json solid_count = 6 (expected 6); placements.missing = []; unmatched = [] |
| A | joint_fidelity Every joint's child frame lies on its parent frame (axis, offset, rest angle) | PASS | results/build123d/fan-01/verify.json joints.joints.<joint>.checks; failing: none |
| A | clearances Static clearances and seats at rest | PASS | results/build123d/fan-01/verify.json clearances.<name>; failing: none |
| A | motion_clear Every drive moves through its range without interference; gears mesh; ratios match tooth counts | PASS | results/build123d/fan-01/kinematics.json motions.<name>.max_interference: spin=0 |
| A | fluid_domain Each fluid region is one sealed piece within its volume band and agrees with the source's fluid body | PASS | results/build123d/fan-01/domains.json fluids.<name>: air sealed=True volume=1850924899.7123868 |
| B | export_agreement Each exported body equals its part handoff x placement; the assembled envelope matches | PASS | results/build123d/fan-01/verify.json agreement.bodies.<body>.volume_rel/hausdorff_mm; envelope.max_error = 0.0 (tol 0.5) |
| B | performance Every predicted observable meets the requirement the sources state over its numerical band (value +- 2 u_numerical) | n/a | results/build123d/fan-01/simulate.json observables.<id>.requirement: |
| B | conservation Energy, mass and force balances of every analysis close within their tolerance | PASS | results/build123d/fan-01/simulate.json simulations.<id>.conservation: mrfDesign.mass_balance=2.6679971490182154e-05, mrfOffDesign.mass_balance=4.1425166297483736e-05 |
| B | refinement Every prediction of a mesh ladder is resolved: all its levels finished and the grid-convergence index is within tolerance | FAIL | results/build123d/fan-01/simulate.json simulations.<id>.refinement.observables: mrfDesign: dpts_q1403 GCI 0.0513 unresolved (GCI 0.0513 > 0.05; a finest step refines only inside regions: the rest of the mesh is not assessed there), torque_q1403 GCI 0.0172 unre… Means: the prediction depends on the mesh: its discretisation error is unknown or above tolerance, so it supports no value |
| C | source_hygiene The assembly source imports only its declared inputs, formats and lints clean | PASS | results/build123d/fan-01/verify.json hygiene: cad_refs=[] truth_refs=[]; ruff format True, ruff check True |
| C | boundaries_complete Every face of a bounded body carries exactly one named boundary | PASS | results/build123d/fan-01/domains.json boundaries.<body>.unassigned/conflicts: none |
| C | provenance Stage JSONs carry provenance stamps; part handoffs are hash-bound; inputs carry provenance | PASS | results/build123d/fan-01/<stage>.json provenance present for ['verify', 'kinematics', 'domains', 'simulate']; parts.json designs.<d>.step_sha256 present: True |
| C | evidence_separation No worker-visible artefact reads truth; the assembly source only places declared inputs | PASS | results/build123d/fan-01/verify.json hygiene.truth_refs = [] |
| Body | Kind | Design | Material |
|---|---|---|---|
| duct | purchased | ||
| rotor | purchased | ||
| shaft | purchased | ||
| hubDisc | purchased | ||
| chamberWall | derived | ||
| air | derived |