Swept-hexahedral ferromagnet mesh¶
Last changes: Documentation changelog
Physical problem¶
element_family="hex" describes a requested hex8 sweep from a quadrilateral source. Current controls can serialize it and typed ingress can preserve imported hex8, but there is no executable swept-hex route.
Governing equations¶
The arity identity is owned by _MESHIO_SUPPORTED_ELEMENTS["hexahedron"]; the variable-arity CSR slice is owned by MeshData.
Symbols and SI units¶
Symbol |
Meaning |
SI unit |
|---|---|---|
\(a(\mathrm{hex8})\) |
Linear-hexahedron node arity |
\(1\) |
\(K_c\) |
Local node-index sequence |
\(1\) |
\(o_c\) |
Cell start offset |
\(1\) |
\(c\) |
Volume-cell ordinal |
\(1\) |
Assumptions and validity¶
SweptMeshControls accepts hex, rejects its pyramid-to-tetrahedra transition, and requires a uniform distribution for exact layers. Passing those object checks does not make the generator executable.
Python API¶
This inspection example serializes controls only; it does not build or solve.
# %%
from fullmag.model.discretization import SweepDistribution, SweptMeshControls
controls = SweptMeshControls(distribution=SweepDistribution(kind="uniform", num_layers=2), sweep_direction="z", element_family="hex", transition_policy="reject", exact_layer_count=True)
# %%
requested_ir = controls.to_ir()
print(requested_ir)
Python |
Type |
Default |
SI unit |
Validation |
Meaning |
Backend support |
ProblemIR |
|---|---|---|---|---|---|---|---|
|
|
|
\(1\) |
instance of |
Layer distribution |
FEM unsupported; FDM N/A |
|
|
|
|
\(1\) |
one of |
Requested axis |
FEM unsupported; FDM N/A |
|
|
|
|
\(1\) |
one of |
Requested family |
FEM unsupported; FDM N/A |
|
|
|
|
\(1\) |
hex cannot use pyramid transition |
Transition |
FEM unsupported; FDM N/A |
|
|
|
|
\(1\) |
Boolean; needs uniform distribution |
Exact layers |
FEM unsupported; FDM N/A |
|
|
|
|
\(1\) |
one of |
Layer-spacing law |
FEM unsupported; FDM N/A |
|
|
|
|
\(1\) |
bool rejected; integer at least 1 |
Number of swept element layers |
FEM unsupported; FDM N/A |
|
|
|
|
\(1\) |
must be positive for arithmetic/geometric; ignored for uniform |
Nonuniform growth factor |
FEM unsupported; FDM N/A |
|
ProblemIR¶
The canonical request is { "sweep_direction": "z", "distribution": {"kind": "uniform", "num_layers": 2}, "element_family": "hex", "transition_policy": "reject", "exact_layer_count": true }. SweepDistribution.to_ir() always emits kind and num_layers; it emits growth_rate only for arithmetic or geometric, and omits it for uniform. The request contains no resolved mesh or runtime provenance.
Round-trip and failure semantics¶
Requested intent is the controls object. Resolved execution is absent: sweptHex.enabled is false. Validation errors include invalid enums, nonuniform exact layers, and hex/pyramid-transition contradiction. Unsupported combinations include current CPU/GPU swept hex. swept_hex must raise before Gmsh starts and must not realize prism6 or tet4.
Discrete realization¶
_MESHIO_VOLUME_TYPES owns the imported hexahedron -> hex8 mapping, but typed ingress differs from generated sweep realization. The Control Room reports swept hex disabled, unsupported, with no supported layer counts.
| Solver | Device | Status | Reason | | — | — | — | | FEM | CPU | unsupported | No qualified swept-hex CPU route. | | FEM | GPU | unsupported | No qualified swept-hex GPU route. | | FDM | CPU | not applicable | FEM meshing. | | FDM | GPU | not applicable | FEM meshing. |
Implementation mapping¶
SweptMeshControls owns vocabulary, generate_swept_mesh owns fail-closed dispatch, and resolveObjectMeshTopologyCapabilities marks swept hex unsupported.
Validation¶
test_explicit_swept_hex_never_silently_realizes_prism requires rejection before Gmsh import. It is not a proof of hex assembly, CPU/GPU execution, parity, or accuracy.
Limitations¶
There is no production swept-hex route, qualified hex transition, generated hex8 execution, or fallback authorization. Do not bypass the capability gate.
Scientific bibliography¶
C. Geuzaine and J.-F. Remacle, “Gmsh,” International Journal for Numerical Methods in Engineering 79 (2009), doi:10.1002/nme.2579.
C. Abert, “Micromagnetics and spintronics,” European Physical Journal B 92 (2019), doi:10.1140/epjb/e2019-90599-6.
Source-code index¶
Path |
Stable symbol |
Responsibility |
|---|---|---|
|
|
Controls/IR |
|
|
Distribution defaults, validation, and lowering |
|
|
Canonical variable-arity CSR ownership |
|
|
Linear |
|
|
Imported |
|
|
Fail-closed dispatch |
|
|
Disabled gate |
|
|
No fallback |
Scope and purpose¶
This page defines the public contract for swept hexahedral FEM meshes. It is an authoring and implementation reference: the Python example, the serialized ProblemIR description, the implementation mapping, and the adjacent source map are the source-backed contract. A capability marked partial or not evaluated is not presented as a production guarantee.
Scientific and numerical model¶
The mesh or grid is a discrete approximation of the continuous domain. For a Cartesian partition, each spacing satisfies Delta_i = L_i / N_i; for a geometry-dependent FEM mesh, the requested local target is bounded by the active bulk, interface, boundary, and topology constraints. In compact form, h_target(x) = min(h_bulk(x), h_interface(x), h_boundary(x)). Length quantities use SI metres (m); counts, orders, and topology labels are dimensionless.
The equations and assumptions in the earlier physical-problem and governing-equations sections state the model-specific specialization. This section does not introduce a conversion from FEM to FDM, a hidden topology conversion, or a silent CPU fallback.
Parameters¶
The exact callable and argument names are the ones shown in the ## Python API section above. For this page the parameter family is source surface, layer count, element size, and topology. Use the documented defaults, validation rules, and ProblemIR lowering exactly as shown; do not replace a canonical argument with an unlisted alias. Numerical lengths must be supplied in metres, and invalid positive-length, count, order, periodicity, or topology constraints must fail closed rather than being silently repaired.
Control Room workflow¶
In Control Room, select the engine and mesh workflow, enter the same values as the Python authoring example, inspect the planned mesh or grid report, and only then submit the run. The UI is a projection of the public contract: a missing control is not evidence that the backend accepts the option, and a visible control is not evidence that a production lane is enabled. When the page or capability register marks a field partial or not evaluated, keep the workflow explicitly bounded to the implemented path.
Diagnostics and failure semantics¶
A valid request must preserve the declared geometry, units, element or cell topology, and backend lane. Reject non-finite or non-positive lengths, invalid counts and orders, incompatible periodic or shared-boundary data, and unsupported topology combinations at the owning validation layer. Reports should retain requested and resolved values, source identity, and any capability gate. No diagnostic may hide a failed mesh realization by substituting another discretization.
Where this is implemented¶
The existing implementation-mapping and source-code-index sections identify the exact public authoring, ProblemIR, planner, realization, and runtime owners for this topic. The adjacent .source-map.json file is the machine-readable source of truth for those paths, symbols, responsibilities, backend matrix, and reviewed revision. Claims in this page must be updated together with that map when an owner moves.