cufemlab v0.4-dev — what's new since v0.3.0.
Seven concrete wins added on top of the frozen v0.3.0 base: slotted-PMSM torque, a continuous cogging waveform, the nonlinear iron pipeline wired into a sector, iron-loss numbers consistent with industry datasheets, a real-CAD-proxy end-to-end demo, a validation matrix, and a single-command regression runner. Every win is cited to its sprint closeout and carries a provenance hash. Where a customer-grade claim is not yet supported, this page says so out loud.
v0_4_dev/
· Customer-grade claim gate still: pilot
Seven additive capabilities, each cited to its sprint closeout.
v0.4 is additive: every artefact lives under v0_4_dev/;
the frozen v0.3.0 source tree (72 files in src/cufemlab/) is unchanged
across all seven sprints. The QA audit re-verifies the freeze every sprint.
1. Slotted PMSM torque (S5-W2)
First slotted motor torque case in cufemlab. PM-only cogging +2.183 Nm (Arkkio), +2.169 Nm (Maxwell stress) — Arkkio vs Maxwell agree to 99.373 % on a 4-pole / 24-slot PMSM at default geometry (n_nodes 11881, n_elements 23400). Operating torque −11.41 Nm at J = 2.5e6 A/m².
PASS 2-D only
refs: Meeker FEMM 4.2 · Hanselman 1994 · Arkkio 1987
2. Cogging waveform (S5-W2 → S6-W2 → S11-W2)
Continuous-rotor cogging sweep. Cogging period matches
2π / lcm(2p, n_slots) = 15° theory to 0.000 % rel diff
(S5). PM boundary-line wiring cut the DC bias 18 % → 7.34 %
(S6, 64× absolute reduction). Rigid-rotor sweep peak T = 2.466 Nm
(S11).
PASS small-ψ only
refs: Hanselman 1994 ch.4 · cogging-period theory
3. Nonlinear iron + sector (S5-W1)
Nonlinear B-H Picard wired onto a periodic sector rather than the
full annulus. Full-domain vs sector-domain torque match to
1.23e-9 (bit-exact), with a 3.94× wall-time
speedup at p = 2. Picard converges in 24 iter on the sector;
bulk-iron median μr drops to 450.1 (saturation engaged).
PASS CPU-only
refs: cufem nonlinear-BH Picard · TEAM 32 family
4. Iron loss model (S10)
Steinmetz + Bertotti 3-term separation on 4 cited grades. M19 at 50 Hz / 1.5 T: 21.4 kW/m³ (2.8 W/kg) — industry typical. Default PMSM total iron loss 10.38 W (0.82 W/kg) at 50 Hz; f-doubling ratio 2.193 (hyst-dominated). Bertotti excess term < 0.2 % at the reference operating point.
PASS datasheet ranges
refs: Steinmetz 1892 · Bertotti 1988 · M19 / M270-35A / Hiperco50 / SMC datasheets
5. Real-CAD-proxy demo (S6-W4 → S7-W2)
First customer-style end-to-end demo: CAD-proxy STL → cross-section → polar T3 mesh → multigrade materials → PM boundary-line → nonlinear sector solve → cogging sweep → signed report. Operating torque 2.508 Nm, cogging snapshot 3.022 Nm, Biron,median 0.639 T, FEM residual 4.7e−15. Not a real customer STEP — see "Still not yet" below.
PASS CAD-proxy, not real STEP
refs: parameterised PMSM cross-section · OCC-free STL reader
6. Validation matrix (S8-W2)
Standard verdict envelope (PASS / PARTIAL / FAIL / NOT_MEASURED) with frozen
honest label set: the matrix refuses to emit
PUBLISHED_MEASURED_PASS when the reference is analytical or
textbook-formula. First analytical-benchmark PASS gate crossed in S8-W1:
slotless PMSM Bg 0.892 T vs Hanselman 0.975 T = 8.56 % diff
(within 20 % tolerance band).
PASS no measured benchmark yet
refs: Hanselman / Furlani / Griffiths / Timoshenko analytical cases
7. Regression runner (S5-W5)
Single CLI: discovers every v0.4 test module, runs each as a subprocess, scrapes the verdict, and emits a structured JSON envelope with deterministic provenance. S5 baseline: 33 modules / 24 PASS / 9 PARTIAL / 0 FAIL in 246.87 s. By S7 the suite grew to 43 modules / 32 PASS / 10 PARTIAL / 0 FAIL, exit 0. Companion QA audit (S5-W6) re-verifies the v0.3.0 freeze every run.
PASS stdlib only
refs: v0_4_dev/scripts/run_v0_4_regression.py
src/cufemlab/ unmodified across all seven sprints
(S5–S11). The QA audit runs a filesystem mtime check against the 2026-05-24
freeze date. Zero files modified, zero exceptions.
v0.4-dev does not reopen any v0.3.0 limitation by accident.
v0.4 adds capabilities on top of the frozen v0.3.0 base. It does not weaken or override the v0.3.0 Hard Limitations page. Anything not added by S5-S11 still falls under the v0.3.0 scope statement.
docs/HARD_LIMITATIONS.md in the repository). v0.4-dev additions on this
page do not grant customer-grade claims they don't already cite. When in
doubt, defer to ANSYS / Maxwell / Star-CCM+ for production work.
What v0.4-dev does not deliver — even after S5-S11.
These four items are explicitly tracked as blockers in every sprint closeout (see S5 §9, repeated through S11). They are not hidden behind marketing language: they are listed here so that customer briefs use the same wording as the engineering record.
| Blocker | Sprint label | Status | What we ship instead |
|---|---|---|---|
| Real customer STEP file (real CAD, not proxy) | B2 (HIGH) | not yet | S6-W4 / S7-W2 CAD-proxy end-to-end demo on a parameterised PMSM cross-section. Customer outreach + NDA + delivery still required. |
| TEAM 30 / 7 measured-benchmark PASS | B3 (MEDIUM) | not yet | S8-W3 TEAM 30 schema + loader is ready and refuses skeleton data; transcription CLI is ready to receive Fujiwara & Nakata 1990 once the paper is acquired. S8 emits only analytical-benchmark PASS labels. |
| 3-D magnetic curl-curl FEM (Phase J.8) | B4 (HIGH, user-blocked) | not yet | All v0.4 work is 2-D plane — cited tolerance for 2-D plane-stress / plane-magneto. 3-D gated on pilot revenue or ≥ 50 % 3-D customer demand. |
| GPU runtime verification (cupy CUDA event > 0) | B1 (S9 dev-host) | not yet on dev host | S9-W1/W2 GPU branches are code-reviewed and structurally PASS (NotYetImplementedError raised when cupy absent — no silent CPU fallback). On a CUDA host with cupy-cuda12x installed, every GPU branch activates without code change. |
| True sliding-mesh (airgap re-triangulation per step) | S11-W3 design | deferred to v0.5+ | S11-W1 rigid-rotor rotation is bit-exact (rotor area drift 1.90e−14). S11-W3 design document recommends retri for v0.5, mortar for v0.6+. |
Want v0.4-dev on your motor?
v0.4-dev is exercised through a one-motor pilot — same shape as the v0.3.0 pilot tier on the Pilot page. Bring your motor brief, a sketch or STEP file (real or proxy), and we run the S5-S11 stack end-to-end with a signed report.
CAD-proxy or simple STEP → mesh → multigrade materials → PM boundary-line → nonlinear sector solve → cogging sweep → iron loss → signed report with provenance hash.
- End-to-end S5-S11 pipeline run
- Validation matrix in your report
- Regression-runner JSON envelope
- Iron-loss numbers for your grade
- 30-day exclusivity on findings
Every cited number on this page, with its sprint, source file, and provenance hash where one was recorded. Honest, auditable, no marketing.
- Sprint-by-sprint summary table
- Measurement-by-measurement table
- Honest "still not yet" tracker
- Provenance hashes for headline results