FDM Default Grid¶
Last changes: Documentation changelog
Use the study/object mesh facade for ordinary scripts:
study.objects.mesh.defaults(cell_size=(dx, dy, dz))
The tuple is the native cell size in metres. Object extents, integer shape, origin, active mask, and
padding are resolved later. The lower-level equivalent is FDM(default_cell=(dx, dy, dz)); the
legacy cell= alias is accepted only when default_cell= is absent.
Choose cell size from physical length scales and verify convergence. The API does not round an invalid request into a silently different scientific model.
Python API¶
The complete runnable example is in the numbered example section below; the exact callable fields and arguments are in the numbered API section. These values are copied from the current Python contract, not inferred from the UI.
Symbols and SI units¶
All geometric lengths use \(\mathrm{m}\); dimensionless selectors use \(1\).
Assumptions and validity¶
Authoring validation does not prove mesh generation or solver qualification; the realized report is authoritative.
1. What it is and when to use it¶
The default grid defines the Cartesian cell size inherited by FDM objects without a per-magnet override. Use it for a common regular grid; use per-magnet grids when objects need different native resolutions.
2. Physical and mathematical explanation¶
This is an authoring policy and has no independent equation. The tuple \((\Delta x,\Delta y,\Delta z)\) selects the discrete FDM space; integer shape, origin, padding, and active-cell membership are resolved later.
3. Example - complete Python script¶
# %% FDM default grid
import fullmag as fm
nm = 1.0e-9
study = fm.study("fdm_default_grid")
study.engine("fdm")
study.device("cpu", precision="double")
study.mode("strict")
study.objects.mesh.defaults(cell_size=(2 * nm, 2 * nm, 4 * nm))
body = study.geometry(fm.Box(40 * nm, 20 * nm, 4 * nm), name="film")
body.Ms = 800.0e3
body.Aex = 13.0e-12
body.m = fm.texture.uniform(1.0, 0.0, 0.0)
study.stages.add_relax(stage_id="relax", algorithm="llg_overdamped", dt=5e-13, max_steps=100)
4. Exact API¶
Python |
Type |
Default |
SI unit |
Validation |
Meaning |
Backend support |
ProblemIR |
|---|---|---|---|---|---|---|---|
|
|
|
\(\mathrm{m}\) |
exactly three positive values |
stage-first default cell |
FDM CPU/GPU; FEM not applicable to Cartesian grid authoring |
|
|
|
|
\(\mathrm{m}\) |
exactly three positive values |
low-level default cell |
FDM CPU/GPU; FEM not applicable to Cartesian grid authoring |
|
|
|
|
\(\mathrm{m}\) |
legacy alias; cannot coexist with |
compatibility spelling |
FDM CPU/GPU; FEM not applicable to Cartesian grid authoring |
|
Invalid length or non-positive values raise during authoring. The selected
values lower to backend_policy.discretization_hints.fdm.
ProblemIR¶
The request lowers to the mesh-workflow or discretization subtree; requested intent remains distinct from the resolved mesh asset and provenance report.
Round-trip and failure semantics¶
Requested intent is the Python policy; resolved execution is the realized mesh report. Validation errors identify the violated domain rule, and unsupported combinations fail explicitly without silent fallback.
Discrete realization¶
The backend consumes the realized Cartesian or finite-element asset, including topology, markers, quality, and provenance where available.
5. How to set it in Control Room¶
Route: Model Explorer -> Study -> Discretization -> FDM default cell. Enter
dx, dy, and dz in metres and apply the study draft. The effective grid
and dependent grid resources are refreshed. Per-magnet overrides are a
separate partial route. See Control Room capability register.
6. Backend and frontend support¶
Lane |
Status |
Notes |
|---|---|---|
FDM CPU/GPU |
authoring implemented |
Planner and runtime still gate execution. |
FEM CPU/GPU |
not applicable |
FEM uses element-size policies. |
Control Room |
partial |
Default cell fields are exposed; low-level aliases are not guaranteed. |
Validation¶
Focused constructor, lowering, and mesh-report tests are the evidence boundary for this page.
7. Limitations and known pitfalls¶
Cell size is not rounded to fit object extents.
Prefer
default_cellor the stage-first mesh facade overFDM(cell=...).Construction does not prove a generated grid or solver run.
8. Scientific bibliography¶
C. Abert, “Micromagnetics and spintronics: models and numerical methods,” European Physical Journal B 92, 120 (2019), doi:10.1140/epjb/e2019-90599-6.
9. Source-code index¶
Claim |
Repository path |
Stable symbol |
Evidence |
|---|---|---|---|
stage-first default cell |
|
|
builder implementation |
low-level aliases and validation |
|
|
constructor and IR implementation |
Source-code index¶
Python contract source:
packages/fullmag-py/src/fullmag/model/discretization.pyandpackages/fullmag-py/src/fullmag/world.py, where applicable. Backend realization is in the relevantbackends/fdmorbackends/femlane named by the page.
Source-map coverage¶
Claim |
Path |
Stable symbol |
Responsibility |
Evidence |
|---|---|---|---|---|
Per-magnet Cartesian grid contract. |
|
|
Per-magnet Cartesian grid contract. |
Source-map validator and focused API tests |