Skip to content

Magnetic Force Report

The force is calculated using the Maxwell stress tensor \(\overline{\overline{T}}\) [Pa] given by

\[ \overline{\overline{T}} = \mathbf{B} \otimes \mathbf{H} - \frac{1}{2} \left( \mathbf{B} \cdot \mathbf{H} \right) \overline{\overline{I}} , \]

where

  • \(\overline{\overline{T}}\) — Maxwell stress tensor [Pa],
  • \(\mathbf{B}\) — magnetic flux density [T],
  • \(\mathbf{H}\) — magnetic field [A/m].

Here \(\otimes\) denotes the outer (dyadic) product, \(\left( \mathbf{B} \otimes \mathbf{H} \right)_{ij} = B_i H_j\), and \(\overline{\overline{I}}\) is the identity tensor.

The force \(\mathbf{F}\) [N] is obtained by integrating over a surface \(S\) enclosing the body of interest:

\[ \mathbf{F} = \int_S \overline{\overline{T}} \cdot \mathbf{n} \, dS, \]

where \(\mathbf{n}\) is the outward unit normal and \(S\) a closed surface in the surrounding air.

In practice the surface integral is evaluated as a volume integral of the stress tensor over the layer of mesh elements immediately surrounding the selected body.

Force from the Maxwell stress on the layer around the body
Figure 1: The traction $\overline{\overline{T}}\cdot\mathbf{n}$ is integrated over the air layer enclosing the body to give the net force $\mathbf{F}$. Any surface $S$ lying in that layer yields the same result.


Note

The surrounding region must be force-free. The elements adjacent to the selected body — the layer over which the stress tensor is integrated — must carry no body force: the region must be non-conductive (no eddy currents, so no \(\mathbf{J}\times\mathbf{B}\) force) and have vacuum permeability (\(\mu = \mu_0\), no magnetization force). Surround the body with at least one layer of air/vacuum elements; do not place the body directly against another magnetic or conductive region, or the reported force will be wrong.

Usage

from mufem.electromagnetics.timedomainmagnetic import MagneticForceReport

magnet_force_report = MagneticForceReport(
    name="Magnet Force",
    marker="Magnet" @ Vol,
)

magnet_force = magnet_force_report.evaluate()
print(f"Magnet force: {magnet_force}")

The evaluate() method returns the force vector. The marker selects the body on which the force is summed.

When to use this

  • Permanent-magnet machines — cogging force on a stator, axial / radial force on a rotor magnet.
  • Solenoid actuators and relays — pull-in force vs. plunger position.
  • Magnetic bearings and levitation — supporting force vs. air-gap and bias current.
  • Magnetic separators — force on a target body in a graded field.
  • Crash / drop studies of magnets — instantaneous force on a magnet during transient excitation.