Docs / Motor workflow

Motor workflow

From a project to a signed, cross-checked result: cufemlab takes an electric-machine case through geometry, a chosen analysis, a GPU/CPU worker, and a versioned result.v1 envelope — with the moving-band cogging workflow independently cross-checked against FEMM and GetDP on every run.

What “validated” means here. The flagship cogging_torque_movingband workflow is the validated reference: a 2-D moving-band (Arkkio) cogging solve that ships a per-run validation card citing the tolerance and the measured error against open-source FEMM and GetDP. Other analyses are honest engineering estimates or utilities — each section below states exactly which is which.

The workflow at a glance

Every analysis — whether you drive it from the self-serve web app at /app/ or the Python client SDK — follows the same path. You create a project, attach inputs and optional CAD geometry, pick one of the fifteen analysis workflows, submit, and a queue worker runs it on the right compute lane. The run returns a structured result.v1 envelope plus downloadable artifacts, and any completed job can be turned into a signed PDF evidence report.

End-to-end pathpipeline
project ──► inputs + geometry ──► pick analysis ──► submit
   │              (.step/.stp        (1 of 15           │
   │               .iges/.stl)        workflows)        ▼
   │                                             queue + worker
   │                                          (GPU-first or CPU)
   ▼                                                    │
result.v1  ◄──  artifacts (VTU / plots / JSON)  ◄───────┘
   │
   └──► signed_report_generation ──► HMAC-signed PDF (SHA-256 provenance)

Step by step

1 · Create a project

A project is the container that groups related runs, uploaded inputs, and their artifacts. Create one per machine or study so results stay organized and comparable.

2 · Add inputs and geometry

Analyses are driven by input_params (dimensions, currents, sweep steps, material selections). Where a workflow accepts CAD, you can upload geometry — .step, .stp, .iges, or .stl — and reference the returned file id when you submit.

3 · Pick an analysis

Choose one of the fifteen live workflows (see Choosing your analysis). The picker at /app/new_analysis.html shows each workflow's parameter form; the SDK takes the same analysis_type string.

4 · Submit

Submitting enqueues the job. Cogging and PMSM analyses request the GPU (RTX-class) node and run GPU-first; iron-loss, material comparison, the signed report, the demo check, and 3-D field validation run on CPU. You can pass gpu to prefer the GPU lane where applicable.

5 · Queue and worker

A Redis-backed queue hands the job to a worker; you can watch progress live at /app/queue.html or poll from the SDK. A per-user concurrency cap keeps runs fair — see the operational note at the end.

6 · Read result.v1

When the worker finishes it writes a versioned result.v1 envelope carrying a verdict, a headline value, a summary, and a metrics block (including the FEMM/GetDP card for cogging). See The result.v1 envelope.

7 · Artifacts and the signed report

Field data (VTU), plots, and JSON attach to the job as downloadable artifacts. Any completed job can feed signed_report_generation to produce a deterministic, HMAC-signed PDF you can download from /app/reports.html or via job.download_report().

Run it with the SDK

The Python client mirrors the web app. Issue an API key from /app/api_keys.html, set it in your environment, and the base URL defaults to the canonical host. This example submits the flagship validated cogging workflow end to end.

Submit a validated cogging runPython
import os
from cufemlab_client import Client

client = Client(api_key=os.environ["CUFEMLAB_API_KEY"])   # base url defaults to https://app.cufemlab.secrotec.nl

# 1 - A project groups related runs, inputs and artifacts.
project = client.create_project("PMSM cogging study")

# 2 - Optional: attach CAD geometry (.step / .stp / .iges / .stl).
geo = client.upload_file(project.id, "rotor_stator.step")

# 3 - Submit the flagship VALIDATED moving-band cogging analysis.
job = client.analyze(
    project_id=project.id,
    analysis_type="cogging_torque_movingband",
    input_params={"poles": 8, "slots": 12},
    input_file_ids=[geo.id],
    gpu=True,                 # cogging / PMSM run GPU-first; omit max_minutes for the per-type default
)

# 4 - Poll the queue until the worker finishes.
job.wait(poll_interval=5)

# 5 - Read the result.v1 envelope.
result = job.result()
print(result.verdict)    # PASS / PARTIAL / ...
print(result.value)      # peak cogging torque
print(result.metrics)    # includes the FEMM / GetDP validation card (tolerance + measured error)

Omit max_minutes to use each workflow's own default budget; only set it when you deliberately want a shorter cap (never above the per-type limit).

Choosing your analysis

The catalog is fifteen live workflows; the core motor workflows are below (the full fifteen are in the feature matrix). Start with demo_motor_quick_check to see the whole path end to end, then move to the workflow that matches your question.

Validated reference

cogging_torque_movingband

The 2-D moving-band (Arkkio) no-load cogging workflow and the anchor of the platform's validation story. Every run emits a validation card that cites the declared tolerance and the measured relative error against independent open-source solvers.

2-D moving-band / Arkkio · GPU-first · FEMM + GetDP card every run
3-D field lane

cufem3d_field_validation

The 3-D geometry and field validation step in the same workflow: a 3-D magnetostatic edge-element (Nédélec) solve that produces geometry, mesh, and the magnetic field and flux, and returns a relative-error field verdict.

3-D Nédélec edge-element · CPU · VTU field/flux · 1 credit · ≤ 5 min · free-trial
The FEMM/GetDP validation card. For the moving-band cogging workflow, each run is independently reproduced against FEMM and GetDP and the comparison is attached to result.metrics. You get the reference values, the tolerance, and the measured error side by side — so the verdict is auditable, not asserted.

Validated, estimate, 3-D field, and roadmap

Read this before quoting a result to a stakeholder. It separates what is independently validated today, what is an engineering estimate, the 3-D field validation available now, and what remains on the roadmap.

Available today

  • cogging_torque_movingband — validated 2-D moving-band cogging, cross-checked vs FEMM and GetDP with a per-run card.
  • cufem3d_field_validation — 3-D magnetostatic edge-element solve; geometry, mesh, magnetic field and flux (VTU) with a relative-error field verdict.
  • material_comparison — steel and magnet grade comparison from the materials catalog.
  • signed_report_generation — HMAC-signed PDF with SHA-256 provenance.
  • demo_motor_quick_check — end-to-end path check.

Maturing / estimate

  • pmsm_operating_torque — 2-D operating-torque engineering estimate; not independently validated.
  • iron_loss_estimate — Steinmetz-type core-loss engineering estimate.
  • cogging_sweep_2d — legacy 2-D sweep; carries no FEMM/GetDP card, and is partial and superseded — prefer cogging_torque_movingband.

Roadmap / not claimed

  • Full 3-D motor torque with skew and end-effects.
  • Full 3-D operating maps.
  • Thermal, transient / time-harmonic eddy-current, and conductive-region multiphysics solvers.
  • Commercial-tool (ANSYS / JMAG / COMSOL) benchmark comparisons — not benchmarked.

The result.v1 envelope

Every finished job returns the same versioned envelope so tooling can consume results uniformly across workflows. From the SDK, job.result() exposes:

Alongside the envelope, the worker attaches artifacts — VTU field data, plots, and JSON — downloadable from the job in the app or via the SDK.

Signed evidence report

Turn any completed job into a deterministic, HMAC-signed PDF with SHA-256 provenance. This is a utility workflow: point it at a finished run and download the report.

Turn a completed job into signed evidencePython
# Deterministic, HMAC-signed PDF with SHA-256 provenance from a finished run.
report_job = client.analyze(
    project_id=project.id,
    analysis_type="signed_report_generation",
    input_params={"source_job_id": job.id},
)
report_job.wait(poll_interval=5)
report_job.download_report("report.pdf")   # signed PDF; also at /app/reports.html

Because the report is deterministic and signed, re-running it on the same job reproduces the same provenance hash — useful for design reviews and audit trails.

3-D field validation lane

cufem3d_field_validation extends the same workflow into three dimensions. It performs a 3-D magnetostatic edge-element (Nédélec) solve on your geometry and returns the mesh together with the magnetic field and flux as VTU, plus a relative-error field verdict. It runs on CPU today, is free-trial eligible at 1 credit, and typically completes in under five minutes — a fast way to validate 3-D geometry and field before committing to a larger study.

This is the geometry-and-field validation lane, available now, and the first step on the roadmap toward full 3-D motor simulation. Full 3-D motor torque with skew and end-effects, and full 3-D operating maps, are on the roadmap; the current lane focuses on validating 3-D geometry, mesh, and the magnetic field and flux. See Physics domains for more on the solver.

Operational notes. A per-user concurrency cap keeps the queue fair: submitting a second concurrent job over your cap returns HTTP 429 CONCURRENCY_LIMIT_EXCEEDED — let a running job finish or contact us to raise the cap. Billing is fail-closed and Stripe is not activated, so credits and access are arranged through an evaluation, not self-service checkout; manage credits at /app/credits.html. Hosted Jupyter access is available up to 24 h/day.

Next steps