Skip to content

Live demo — Morrison blood pump

This page reproduces the rule-engine portion of the live demo presented at NAFEMS Americas 2026 on May 27, 2026. Same evidence packages, same rule engine, same numbers as the slide-16 terminal output.

Morrison et al. (2019) is the FDA-co-authored worked example for ASME V&V 40 credibility assessment of a centrifugal blood pump. The same model, mesh, and validation data are evaluated under two different intended uses:

COUIntended useDevice classModel Risk LevelDecision
COU 1Cardiopulmonary bypass support (short duration)Class IIMRL 2Accepted
COU 2Ventricular assist device support (long duration)Class IIIMRL 5Not accepted

Both COUs are bundled as signed JSON-LD UofA packages. Running the rule engine against them produces the slide-16 terminal output. COU 1 fires 11 weakeners across 5 patterns with no compound risk. COU 2 fires 18 weakeners across 6 patterns including 2 firings of COMPOUND-01 (Critical and High coexistence). The compound inference fires only on the higher-risk COU, even though the underlying model and dataset are shared.

Prerequisites: Python 3.10+, Java 17+. If Java is unavailable, use --skip-rules on uofa check and you will still get SHACL and integrity validation.

Terminal window
git clone https://github.com/cloudronin/uofa
cd uofa
pip install -e '.[excel]'

The bundled JSON-LD UofA packages and the rule engine ship with the repo. No extra setup.

2. Run the rule engine — COU 1 (CPB use, MRL 2)

Section titled “2. Run the rule engine — COU 1 (CPB use, MRL 2)”
Terminal window
uofa rules packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld --build

Expected: 11 weakeners detected across 5 patterns. Severity breakdown: 0 Critical / 10 High / 1 Medium.

PatternSeverityHits
W-AR-05High3
W-EP-02High3
W-AL-01High3
W-ON-02High1
W-CON-04Medium1

Zero compound inferences. The CFD-side UQ omission is methodologically defensible at MRL 2 (Morrison’s rationale is that bench testing carries the safety determination), but the rule engine still flags it as a potential reuse blocker at higher MRLs.

3. Run the rule engine — COU 2 (VAD use, MRL 5)

Section titled “3. Run the rule engine — COU 2 (VAD use, MRL 5)”
Terminal window
uofa rules packs/vv40/examples/morrison/cou2/uofa-morrison-cou2.jsonld

Expected: 18 weakeners detected across 6 patterns. Severity breakdown: 9 Critical / 7 High / 2 Medium.

PatternSeverityHits
W-PROV-01Critical7
⚡ COMPOUND-01Critical2
W-EP-04High6
W-ON-02High1
W-AL-02Medium1
W-CON-04Medium1

COMPOUND-01 fires when Critical and High weakeners coexist on the same UofA. It cannot be expressed as a single SPARQL query because it reasons about the output of the Level-1 rules. This compound inference is the central differentiator over query-based credibility checking.

Terminal window
uofa diff packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld \
packs/vv40/examples/morrison/cou2/uofa-morrison-cou2.jsonld

Same model, same data, different intended use produces a measurably different credibility evidence profile. The diff surfaces every divergent pattern automatically.

That is the rule-engine reproduction. The next two sections describe how the bundled UofA packages were authored, and an optional pipeline round-trip if you want to exercise uofa extract and uofa import against a worked example.

The two Morrison UofA packages bundled in packs/vv40/examples/morrison/cou{1,2}/ were authored by hand from Morrison et al. (2019). A V&V 40 expert read the paper, mapped the prose evidence into the 13 V&V 40 credibility factors, and serialized that mapping as JSON-LD against the UofA schema.

This is the honest path for a published worked example. The Morrison paper is prose with embedded figures and tables. It does not ship as a structured evidence folder. Going from prose to UofA requires either AI-assisted extraction followed by human review (the future-state on-ramp) or hand authoring (what was done here).

(Optional) Round-trip the extract pipeline

Section titled “(Optional) Round-trip the extract pipeline”

If you want to see the uofa extract and uofa import pipeline mechanics, the repo also ships a synthetic evidence folder at packs/vv40/examples/morrison/source/. The folder contents are not from the Morrison paper. They were generated from the hand-authored UofA, structured as the kind of artifact you might find in a real engineering team’s evidence directory.

Terminal window
ls packs/vv40/examples/morrison/source/
# EVIDENCE_MANIFEST.txt
# ansys_cfx_solver_settings.txt
# boundary_conditions_specification.txt
# cou_definitions.docx
# credibility_assessment_narrative.docx
# decision_rationale_cou1.pdf
# decision_rationale_cou2.pdf
# hemolysis_mih_comparison.csv
# mesh_convergence_study.csv
# monte_carlo_uq_cou2.csv
# piv_velocity_validation.csv
# risk_assessment_memo.pdf

To exercise the round-trip:

Terminal window
uofa extract packs/vv40/examples/morrison/source/ \
--pack vv40 \
--model ollama/qwen3.5:4b \
-o morrison-roundtrip.xlsx
# Open morrison-roundtrip.xlsx, verify factor levels and decision text
mkdir -p keys
uofa keygen keys/morrison
uofa import morrison-roundtrip.xlsx \
--pack vv40 \
--sign --key keys/morrison.key \
--check

The default model is ollama/qwen3.5:4b, which runs locally. To use a hosted provider, substitute any LiteLLM-compatible model identifier (gpt-4.1, claude-sonnet-4-7, gemini-2.5-pro).

(Optional) Cross-domain reproduction with NASA-STD-7009B

Section titled “(Optional) Cross-domain reproduction with NASA-STD-7009B”

The same CLI runs against an HPT-blade thermal-analysis example with a different domain pack:

Terminal window
uofa rules packs/nasa-7009b/examples/aerospace/uofa-aero-cou1-nasa7009b.jsonld --pack nasa-7009b
uofa rules packs/nasa-7009b/examples/aerospace/uofa-aero-cou2-nasa7009b.jsonld --pack nasa-7009b

The bundled HPT UofA packages were also hand-authored, drawing on NASA-STD-7009B published guidance. The aerospace evidence zips at packs/nasa-7009b/examples/aerospace/aero-evidence-cou{1,2}.zip are synthetic in the same sense as the Morrison source folder; they exist for pipeline-mechanics demonstration, not for extraction-performance measurement.

ArtifactPathOrigin
Morrison COU 1 JSON-LDpacks/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonldHand-authored from Morrison et al. (2019)
Morrison COU 2 JSON-LDpacks/vv40/examples/morrison/cou2/uofa-morrison-cou2.jsonldHand-authored from Morrison et al. (2019)
Morrison source folderpacks/vv40/examples/morrison/source/Synthetic; generated from the hand-authored UofA for pipeline-mechanics demonstration
HPT blade JSON-LDpacks/nasa-7009b/examples/aerospace/uofa-aero-cou{1,2}-nasa7009b.jsonldHand-authored from NASA-STD-7009B published guidance
HPT blade evidence zipspacks/nasa-7009b/examples/aerospace/aero-evidence-cou{1,2}.zipSynthetic; same pattern as the Morrison source folder
Original Morrison paperDOI: 10.1007/s13239-019-00420-7Morrison et al. (2019), Cardiovascular Engineering and Technology

The future-state on-ramp for a practitioner with their own simulation evidence:

  1. Drop your source documents into a folder
  2. Run uofa extract <folder> to produce a structured workbook
  3. Review the workbook (this is where the human catches what the LLM missed)
  4. Run uofa import <workbook> --sign --check to produce a signed UofA
  5. Run uofa rules <uofa.jsonld> to surface credibility weakeners

No data leaves your environment. The CLI is fully local. The optional uofa extract step supports local LLMs (Ollama qwen3.5:4b is the default).

See Get Started for installation details, and the Excel on-ramp for a fuller walkthrough of the import-side workflow if you would rather author the workbook yourself.

If you scanned this from the NAFEMS room, tell me what would make UofA useful for your pipeline. Even a one-sentence note is useful.