v0.4-dev · S5-S11 closed · v0.3.0 frozen

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.

7v0.4 sprint closeouts (S5-S11)
0v0.3.0 source files modified
2.508 Nmfirst real-CAD-proxy PMSM torque
1.23e-9full vs sector nonlinear torque diff
10.38 Wdefault PMSM iron loss @ 50 Hz
Status: · v0.3.0 platform-mvp FROZEN (18/18 suites, 290 checks) · v0.4-dev: additive only, in v0_4_dev/ · Customer-grade claim gate still: pilot
Key v0.4 wins

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

v0.3.0 isolation, verified every sprint. 72 source files in 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.
Honest scope

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.

Authoritative scope reminder. All scope claims for v0.3.0 are governed by docs/limitations.html (mirror of 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.
Still NOT yet (v0.4-dev)

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+.
Do not claim any of the above as "working in v0.4". Until each row above flips to PASS with a cited reference and a measured tolerance, the engineering record (sprint closeouts, this page, and the limitations page) treats them as deferred. Customer briefs MUST use the same wording.
Pilot

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.

v0.4 pilot
One motor, S5-S11 stack

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
Request a v0.4 pilot →
Read the evidence
Tabular S5-S11 record

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
Open evidence page →