Interfacial Dzyaloshinskii–Moriya interaction¶
Last changes: Documentation changelog
This is the canonical public physics reference for interfacial Dzyaloshinskii–Moriya
interaction (iDMI). It owns the energy convention, chirality sign, interface normal, effective
field, natural boundary contribution, Python/ProblemIR semantics, and all four solver/device
realizations. Bulk DMI is documented separately.
The explicit fullmag.InterfacialDMI object remains an energy_terms entry. Material.Dind and
Material.Dind_field are material-owned coefficient routes used by FEM when no explicit scalar
term supplies the coefficient. They are not silently added to an explicit term.
Physical problem¶
Let \(\Omega_m\) be the magnetic domain, \(\mathbf m=\mathbf M/M_s\) the reduced magnetization, and \(\hat{\mathbf n}\) the unit interface-symmetry normal. FullMag uses
For the current FDM orientation \(\hat{\mathbf n}=\hat{\mathbf z}\) this is
The \(z\)-derivative terms cancel for this fixed axis. FEM retains the complete general-normal contraction and therefore supports a tilted, non-zero normalized normal.
Governing equations¶
Writing \(G_{ab}=\partial_bm_a\) and \(m_n=\mathbf m\cdot\hat{\mathbf n}\), the first variation implemented by the FEM residual is
After integration by parts, the volume effective field is
For \(+\hat{\mathbf z}\):
The integrated variation also contains the natural boundary contribution
with \(\boldsymbol\nu\) the outward magnetic-boundary normal. When exchange is present, the free boundary stationarity law is
The native FEM weak residual contains the volume first variation and therefore carries the natural boundary physics. Adding a separate identical DMI boundary term would double-count it.
Symbols and SI units¶
Symbol |
Definition |
SI unit |
|---|---|---|
\(\mathbf M\) |
physical magnetization \(M_s\mathbf m\) |
\(\mathrm{A\,m^{-1}}\) |
\(M_s\) |
saturation magnetization |
\(\mathrm{A\,m^{-1}}\) |
\(\mathbf m\) |
reduced magnetization |
\(1\) |
\(\mathbf v\) |
admissible variation/test field |
\(1\) |
\(\hat{\mathbf n}\) |
normalized interface normal |
\(1\) |
\(\boldsymbol\nu\) |
outward magnetic-boundary normal |
\(1\) |
\(D\) |
interfacial DMI coefficient |
\(\mathrm{J\,m^{-2}}\) |
\(A\) |
exchange stiffness in the coupled boundary law |
\(\mathrm{J\,m^{-1}}\) |
\(\mu_0\) |
vacuum permeability |
\(\mathrm{N\,A^{-2}}\) |
\(G_{ab}\) |
gradient component \(\partial_bm_a\) |
\(\mathrm{m^{-1}}\) |
\(m_n\) |
projection \(\mathbf m\cdot\hat{\mathbf n}\) |
\(1\) |
\(w_{\mathrm i}\) |
local iDMI energy density |
\(\mathrm{J\,m^{-3}}\) |
\(E_{\mathrm i}\) |
total iDMI energy |
\(\mathrm{J}\) |
\(\mathbf H_{\mathrm i}\) |
iDMI effective field |
\(\mathrm{A\,m^{-1}}\) |
\(\Omega_m\) |
magnetic integration domain |
\(\mathrm{m^3}\) |
\(V_i\) |
FDM cell volume |
\(\mathrm{m^3}\) |
\(w_i^{\mathrm{lump}}\) |
FEM lumped nodal integration weight |
\(\mathrm{m^3}\) |
\(g_i\) |
assembled FEM residual at node \(i\) |
\(\mathrm{J}\) |
\(i\) |
discrete cell or node index |
\(1\) |
\(\Delta x,\Delta y,\Delta z\) |
FDM cell sizes |
\(\mathrm{m}\) |
\(\partial_a\) |
derivative with respect to coordinate \(x_a\) |
\(\mathrm{m^{-1}}\) |
\(I\) |
three-dimensional identity tensor |
\(1\) |
Assumptions and validity¶
Dis a surface-energy coefficient in \(\mathrm{J\,m^{-2}}\), not exchange stiffness or volume anisotropy.M_sis finite and positive; the field scales as \(1/M_s\) and the energy has no hidden \(\mu_0\).The public normal is length three and finite. FEM rejects zero and normalizes any other non-zero vector. FDM rejects every orientation except one equivalent to \(+\hat{\mathbf z}\).
A missing normal resolves to \((0,0,1)\) in FEM and is the only executable FDM orientation.
FDM uses centered differences and substitutes the center value for inactive/non-periodic missing neighbors. This is an implemented stencil closure, not a general continuum boundary proof.
FEM evaluates the weak residual at quadrature points and projects the field with lumped mass.
FEM
Dind_fieldlength and finite values are validated against the resolved mesh; it is not an arbitrary-length Python interpolation array.
Python API¶
The constructor and IR contract are in
Interfacial DMI. In the stage-first body API, assigning
Dind activates the interfacial-DMI term. This complete thin-film scenario starts from a Neel
skyrmion texture, declares the canonical FDM interface orientation implicitly as \(+\hat{\mathbf z}\),
and records the realized DMI field and energy during relaxation.
# %% Imports and units
import fullmag as fm
nm = 1.0e-9
# %% Thin-film FDM study
study = fm.study("interfacial_dmi_neel_skyrmion")
study.engine("fdm")
study.device("cpu", precision="double")
study.mode("strict")
study.objects.mesh.defaults(cell_size=(2 * nm, 2 * nm, 1 * nm))
# %% Geometry, material, initial texture, and interactions
film = study.geometry(
fm.Box(size=(128 * nm, 128 * nm, 1 * nm), name="film"),
name="film",
)
film.Ms = 5.8e5
film.Aex = 15.0e-12
film.Dind = 3.0e-3
film.alpha = 0.3
film.m = fm.texture.neel_skyrmion(
radius=24 * nm,
wall_width=8 * nm,
chirality=1,
core_polarity=-1,
)
study.exchange()
study.demag()
# %% Ordered relaxation stage and DMI observables
study.stages.add_relax(
stage_id="relax_skyrmion",
algorithm="projected_gradient_bb",
max_steps=2_000,
tolT=1.0e-6,
).autosave(
fm.StageAutosave(
table=fm.TableAutosave(
every_steps=20,
quantities=[
"step",
"mx",
"my",
"mz",
"e_ex",
"e_demag",
"e_dmi",
"e_total",
"max_torque_T",
],
),
fields=[fm.FieldAutosave("H_dmi", every_steps=50)],
)
)
The public interaction matrix is:
Python |
Type |
Default |
SI unit |
Validation |
Meaning |
Backend support |
ProblemIR |
|---|---|---|---|---|---|---|---|
|
|
|
\(\mathrm{J\,m^{-2}}\) |
finite |
scalar interfacial DMI coefficient and chirality sign |
FDM/FEM CPU/GPU |
|
|
|
|
\(1\) |
length 3; finite; FEM non-zero; FDM normalized +z only |
interface symmetry axis |
FDM +z; FEM any non-zero normalized axis |
|
|
|
|
\(\mathrm{J\,m^{-2}}\) |
finite when supplied; FEM planner resolves active value |
material-owned scalar iDMI coefficient |
FEM CPU/GPU; not a native FDM scalar route |
|
|
|
|
\(\mathrm{J\,m^{-2}}\) |
FEM node cardinality and finite values validated downstream |
spatial nodal iDMI coefficient |
FEM CPU/GPU |
|
ProblemIR¶
An explicit term lowers to:
{"kind": "interfacial_dmi", "D": 0.003, "interface_normal": [0.0, 0.0, 1.0]}
If the normal is omitted, the key is absent in Python IR and the FEM planner resolves the normalized default. A material-owned route is separate:
{"interfacial_dmi": 0.003, "dind_field": null}
The explicit term and material fallback are alternative resolution inputs, not summed energy terms. Requested intent, normalized normal, coefficient location, solver, device, precision, and output decisions belong in resolved provenance.
Round-trip and failure semantics¶
Canonical script export preserves whether the user authored an explicit InterfacialDMI term or
material-owned Dind/Dind_field. Resolved execution records the backend-selected coefficient
route and normalized FEM normal; it must not invent a rotated FDM stencil.
Validation errors include non-finite coefficients, malformed/zero normals, non-+z FDM normals,
duplicate iDMI terms, invalid Dind_field cardinality or values, missing FEM mesh/context, and
missing GPU-resident buffers. Unsupported combinations are planner/runtime errors, not silent
fallbacks.
Discrete realization¶
FDM CPU¶
For active cell \(i\) the double-precision reference uses
\(\delta_x\) and \(\delta_y\) use \(1/(2\Delta x)\) and \(1/(2\Delta y)\). Periodic axes wrap; inactive or non-periodic missing neighbors are replaced by the center cell. Inactive cells have zero field and energy.
FDM GPU¶
FP64 and FP32 CUDA combine_effective_field kernels compute the same local stencil, periodic
neighbor indices, inactive-neighbor clamping, and \(2/(\mu_0M_s)\) scaling in the fused effective
field. dmi_energy_blocks_kernel separately computes the density and multiplies by cell volume
before reduction. FP32 changes arithmetic precision only. Kernel presence is not executed-device
qualification.
FEM CPU¶
The MFEM path interpolates \(\mathbf m_q\) and \(\nabla\mathbf m_q\), averages nodal Dind_field when
present, and accumulates
The effective field is recovered from the residual by
The energy is the direct quadrature sum of \(w_{\mathrm i}\), not a second reduction of the projected field. Missing MFEM context, FE space, mesh, or lumped mass is a fail-closed error.
FEM GPU¶
The CUDA tetrahedral kernel computes element gradients, volume, quadrature magnetization, and the
general-normal residual. It averages Dind_field over tetrahedral nodes, atomically accumulates
residual and energy, and the RK layer uses device-resident \(M_s\), lumped mass, geometry, and field
buffers. Missing resources are errors; no CPU fallback is implied.
Backend matrix¶
Solver |
Device |
Status |
Realization |
|---|---|---|---|
FDM |
CPU |
reference |
Centered differences, |
FDM |
GPU |
implemented |
FP64/FP32 fused field and DMI energy reductions; runtime parity is separate. |
FEM |
CPU |
implemented |
MFEM weak residual, material field, lumped projection, quadrature energy. |
FEM |
GPU |
implemented |
Device tetrahedral residual, field dispatch, and final reduction; runtime evidence required. |
Observables¶
Observable |
Kind |
SI unit |
Meaning |
|---|---|---|---|
|
vector field |
\(\mathrm{A\,m^{-1}}\) |
total DMI field, potentially combining bulk and interfacial terms |
|
vector field |
\(\mathrm{A\,m^{-1}}\) |
FEM interfacial field |
|
scalar |
\(\mathrm{J}\) |
iDMI energy contribution |
|
spatial scalar |
\(\mathrm{J\,m^{-3}}\) |
local iDMI density |
Implementation mapping¶
The adjacent source map binds each claim to stable path-plus-symbol identities. InterfacialDMI
and Material own authoring; plan_fdm owns strict +z legality; plan_fem owns normal and
material-field resolution; FDM CPU/CUDA own stencil/reduction; FEM CPU/CUDA own weak residual,
projection, device field, and energy reduction.
Validation¶
Verify uniform magnetization gives zero volume field and density; \(D\to-D\) reverses field and
energy; linear \(m_z(x,y)\) reproduces field signs; chiral wall reflection changes energy sign;
FEM satisfies \(-\mu_0\sum_iM_{s,i}w_i^{\mathrm{lump}}\mathbf H_i\cdot\mathbf v_i=R_{\mathrm i,h}\);
finite differences of FEM energy match the residual; tilted FEM normals are normalized; and
non-+z FDM normals are rejected. GPU qualification requires device identity, executed kernels,
matched state/precision, and a documented tolerance.
Limitations¶
FDM supports only the canonical
+zinterface normal.Spatial normal fields, tensor DMI, curved-surface corrections, and region-interface DMI are not public semantics.
Dind_fieldis currently a FEM material realization, not a native FDM scalar-field route.FEM uses element-averaged nodal
Dind_field; higher-order coefficient quadrature and consistent mass projection remain deferred.Explicit user-selectable non-natural DMI boundary operators are not implemented here.
Scientific bibliography¶
Rohart, S. and Thiaville, A., “Skyrmion stability, metastability and dynamics in ultrathin magnetic films,” Physical Review B 88, 184422 (2013), DOI:
10.1103/PhysRevB.88.184422.Bogdanov, A. N. and Rößler, U. K., “Chiral symmetry breaking in magnetic thin films and multilayers,” Physical Review Letters 87, 037203 (2001), DOI:
10.1103/PhysRevLett.87.037203.FullMag canonical note:
docs/physics/0404-interfacial-dmi.md.
Control Room crosswalk¶
Use Model Explorer -> Objects -> <object> -> Physics when PhysicsInteractionPanel exposes the interaction. Status: partial. frontend support is not implemented applies to physical parameters without a matching control. See {doc}/frontend/capability-register; do not infer UI support from backend or Python availability.
Python/API crosswalk¶
The linked Python API page is authoritative for exact functions, arguments, units, and failure semantics. If this page is a foundation or category overview, runnable Python is ot applicable here and must be taken from the terminal API page.
Bibliography and source scope¶
Use the scientific bibliography and source-code index on the linked terminal page. This block adds no new equation or unverified implementation claim.
Source-code index¶
Claim/equation |
Repository path |
Stable symbol |
Responsibility |
Lane |
|---|---|---|---|---|
Python term |
|
|
constructor and term IR |
Python |
Material route |
|
|
|
Python/FEM |
Vector validation |
|
|
vector validation |
Python |
FDM plan |
|
|
scalar resolution and legality |
FDM |
FDM normal |
|
|
|
FDM |
FEM plan |
|
|
normal/material resolution |
FEM |
FEM material checks |
|
|
field length/value checks |
FEM |
FDM CPU field |
|
|
centered-difference field |
FDM CPU |
FDM CPU energy |
|
|
cell-volume energy |
FDM CPU |
FDM FP64 |
|
|
fused field |
FDM GPU |
FDM FP32 |
|
|
fused field |
FDM GPU |
FDM energy |
|
|
energy reduction |
FDM GPU |
FEM CPU |
|
|
residual/projection/energy |
FEM CPU |
FEM residual |
|
|
residual action |
FEM CPU/GPU contract |
FEM projection |
|
|
field projection |
FEM CPU |
FEM CUDA kernel |
|
|
device residual/energy |
FEM GPU |
FEM CUDA field |
|
|
field dispatch |
FEM GPU |
FEM CUDA energy |
|
|
final reduction |
FEM GPU |