Skip to content

Magnetic Torque Report

The torque 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 torque \(\boldsymbol{\tau}\) [N \(\cdot\) m] is obtained by integrating over a surface \(S\) enclosing the body of interest:

\[ \boldsymbol{\tau} = \int_S \mathbf{r} \times \left( \overline{\overline{T}} \cdot \mathbf{n} \right) \, dS, \]

where \(\mathbf{r}\) is the position vector [m] and \(\mathbf{n}\) the outward unit normal.

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.

Torque from the Maxwell stress on the layer around the body
Figure 1: The traction $\overline{\overline{T}}\cdot\mathbf{n}$ on the air layer enclosing the body, weighted by the lever arm $\mathbf{r}$ about the axis $O$, integrates to the net torque $\boldsymbol{\tau}$.


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 torque will be wrong.

Usage

from mufem.electromagnetics.timedomainmagnetic import MagneticTorqueReport

rotor_torque_report = MagneticTorqueReport(
    name="Rotor Torque",
    marker="Rotor" @ Vol,
)

rotor_torque = rotor_torque_report.evaluate()
print(f"Rotor torque: {rotor_torque}")

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

When to use this

  • Rotating electric machines — average and ripple torque on a motor / generator rotor; cogging-torque curves vs. rotor angle.
  • Stepper and reluctance motors — detent and holding torque characterisation.
  • Galvanometers and rotary actuators — torque vs. coil current.
  • Magnetic couplings — transmitted torque vs. angular misalignment.
  • Halbach-array motors — torque density studies as a function of magnetisation pattern.