opencad
← Machines
MachineFAIL 11/12

FDA benchmark blood pump

The FDA interlaboratory centrifugal blood pump from its supplied CAD, with a fluid domain and a CFD analysis.

Facts

Backend
build123d
Gates
11 pass, 1 fail, 2 n/a
Envelope
278.0 × 69.8 × 306.0 mm
Bodies
4 (2 purchased, 2 derived)
Joints
2
Simulations
3
Truth case
yes, scored against held-back geometry

Assembled machine

FileKindSize
fda-pump.stepSTEP3.9 MB
fda-pump.stlSTL4.5 MB

Source

assembly.yaml (design contract)

Design intent

Analysis of the FDA benchmark centrifugal blood pump (Interlaboratory Study 2) from its supplied CAD (sources/pump_housing.step, sources/pump_rotor.step; authoritative, 1 CAD unit = 100 um, scaled by 0.1 to mm) and the transcribed packet sources/fda-pump-packet.md. The housing chamber model (the inner surface of the D60 x 9 chamber and its tubing: the curved D12 inlet tube and the D4.39 throat, diffuser and D12 outlet tube) and the D52 four-blade rotor keep their supplied relative position; the rotor turns about the pump axis (+z) on a revolute joint at the rest phase of the CAD (blades along +-x and +-y, one blade 90 degrees to the outlet axis). The assembly source builds the physical housing wall as a derived solid around the chamber model and the sealed blood-analog flow region (chamber minus rotor) as a derived fluid body with named inlet (curved inlet tube's open end), outlet (outlet tube's open end), rotor-wall and housing-wall boundaries. Six operating conditions C1-C6 (flow in L/min, rotor speed in rpm) and the Newtonian blood analog (1035 kg/m3, 0.0035 Pa s) come from the packet. Predicted: the static pressure rise outlet minus inlet at every condition from a steady OpenFOAM MRF analysis (mesh-refinement pair at C5, one level elsewhere), plus the reduced Euler-head estimate at every condition under separate ids. Nonclinical engineering use only.

Failing gates

refinement. The geometry and handoff are published as built; read each gate below before printing.

Gates

TierGateResultEvidence
Aparts_pass
Every part design passed its own 12 gates and has a handoff STEP
n/aresults/build123d/fda-pump/parts.json designs.<design>.gates_ok:
Abom_complete
Every body of the bill of materials is in the export, once, with a placement
PASSresults/build123d/fda-pump/verify.json solid_count = 3 (expected 3); placements.missing = []; unmatched = []
Ajoint_fidelity
Every joint's child frame lies on its parent frame (axis, offset, rest angle)
PASSresults/build123d/fda-pump/verify.json joints.joints.<joint>.checks; failing: none
Aclearances
Static clearances and seats at rest
PASSresults/build123d/fda-pump/verify.json clearances.<name>; failing: none
Amotion_clear
Every drive moves through its range without interference; gears mesh; ratios match tooth counts
PASSresults/build123d/fda-pump/kinematics.json motions.<name>.max_interference: spin=0
Afluid_domain
Each fluid region is one sealed piece within its volume band and agrees with the source's fluid body
PASSresults/build123d/fda-pump/domains.json fluids.<name>: blood sealed=True volume=78329.71113819956
Bexport_agreement
Each exported body equals its part handoff x placement; the assembled envelope matches
PASSresults/build123d/fda-pump/verify.json agreement.bodies.<body>.volume_rel/hausdorff_mm; envelope.max_error = 2.334145186466685e-06 (tol 0.5)
Bperformance
Every predicted observable meets the requirement the sources state over its numerical band (value +- 2 u_numerical)
n/aresults/build123d/fda-pump/simulate.json observables.<id>.requirement:
Bconservation
Energy, mass and force balances of every analysis close within their tolerance
PASSresults/build123d/fda-pump/simulate.json simulations.<id>.conservation: cfdC5.mass_balance=7.662733333735391e-06, cfd.mass_balance=0.00014860735881099896
Brefinement
Every prediction of a mesh ladder is resolved: all its levels finished and the grid-convergence index is within tolerance
FAILresults/build123d/fda-pump/simulate.json simulations.<id>.refinement.observables: cfdC5: pressureRiseC5 GCI 0.221 unresolved (GCI 0.221 > 0.05)
Means: the prediction depends on the mesh: its discretisation error is unknown or above tolerance, so it supports no value
Csource_hygiene
The assembly source imports only its declared inputs, formats and lints clean
PASSresults/build123d/fda-pump/verify.json hygiene: cad_refs=[] truth_refs=[]; ruff format True, ruff check True
Cboundaries_complete
Every face of a bounded body carries exactly one named boundary
PASSresults/build123d/fda-pump/domains.json boundaries.<body>.unassigned/conflicts: none
Cprovenance
Stage JSONs carry provenance stamps; part handoffs are hash-bound; inputs carry provenance
PASSresults/build123d/fda-pump/<stage>.json provenance present for ['verify', 'kinematics', 'domains', 'simulate']; parts.json designs.<d>.step_sha256 present: True
Cevidence_separation
No worker-visible artefact reads truth; the assembly source only places declared inputs
PASSresults/build123d/fda-pump/verify.json hygiene.truth_refs = []

Bill of materials

BodyKindDesignMaterial
housingderived
rotorpurchased
chamberpurchased
bloodderived