The following table contains a list of quantities used in magnum.fe and their units. Note that all quantities are given in SI units.

This convention also applies to the mesh dimension which in general is expected to be given in meters. However, for numerical reasons it is preferable to create a mesh with lateral dimensions with the order of magnitude 1 and add a proper scale parameter in the State class. Usually nanometers are a good choice which corresponds to state.scale = 1e-9.

Quantity Description Unit
A (SAFLayer) coupling constant \(\text{J/m}^2\)
A (AFCoupling) coupling constant \(\text{J/m}^2\)
Aex (Material) exchange constant \(\text{J/m}\)
alpha (Material) damping constant \(1\)
b (Material) coupling constant (Zhang and Li model) \(\text{m}^3/\text{As}\)
beta (Material) polarization parameter \(1\)
beta_prime (Material) polarization parameter \(1\)
c (Material) spin diffusion coupling constant (deprecated) \(\text{N/A}^2\)
C0 (Material) connected to conductivity by \(C_0=\sigma/2\) \(\text{A/Vm}\)
D0 (Material) diffusion constant \(\text{m}^2\text{/s}\)
D_inter (Material) interface DMI coupling constant \(\text{J/m}^2\)
E() (LLGTerm) energy \(\text{J}\)
h() (LLGTerm) field \(\text{A/m}\)
j (State) electric current \(\text{A/m}^2\)
J (Material) coupling strength \(\text{J}\)
K_uni (Material) anisotropy constant \(\text{J/m}^3\)
lambda_sf (Material) diffusion length (deprecated) \(\text{m}\)
lambda_j (Material) diffusion length (deprecated) \(\text{m}\)
m (State) magnetization \(1\)
ms (Material) saturation magnetization \(\text{A/m}\)
s (State) spin accumulation \(\text{A/m}\)
sigma (Material) electric conductivity \(\text{A/Vm}\)
t (State) time \(\text{s}\)
T (State) temperature \(\text{K}\)
theta (Material) spin Hall angle \(1\)
tau_sf (Material) spin-flip relaxation time \(\text{s}\)
xi (Material) degree of nonadiabacity (Zhang and Li model) \(1\)


magnum.fe defines some important constants in the Constants class. They can be used to conveniently convert units. For instance the field strength of 2 Tesla can be converted to A/m by using 2.0 / Constants.mu0 in the simulation script.

class magnumfe.Constants
e = -1.602176487e-19

elementary charge e

gamma = 221276.157

gyromagnetic ratio gamma

hbar = 1.0545718e-34

reduced Planck constant

kb = 1.380648813e-23

Boltzmann constant kb

mu0 = 1.2566370614e-06

magnetic constant mu_0

mu_b = 9.2740154e-24

Bohr magneton mu_bohr


magnumfe.read_vtk(filename, fileformat=None)

Reads mesh and field information from VTU, VTK or INP files. Works for scalar and vector fields.

# read mesh and magnetization from VTU file and create state from it
m0 = read_vtk("m0.vtu")
state = State(m0.function_space().mesh())
state.m = m0
filename (str)
The filename
fileformat (str)
The fileformat can be ‘vtu’(default), ‘vtk’, or ‘inp’. If no format is specified the function tries to extract the format from the given filename.
The function object


class magnumfe.TimeInterpolator(points)

Simple interpolation helper for the creation of e.g. hysteresis loops.

# create a current hysteresis loop (-5e12 to 5e12 A/m^2 in z-direction)
# starting from 0 and taking 4 ns for a complete sweak from min to max.
interpolator = TimeInterpolator({
     0e-9: (0, 0,  0),
     2e-9: (0, 0,  5e12),
     6e-9: (0, 0, -5e12),
    10e-9: (0, 0,  5e12)
state.j = lambda state: Constant(interpolator(state.t))


class magnumfe.Timer(name)

Utility class that supports basic timing/profiling features. Each timer is initialized with a unique name. Each call to the body is timed and counted. Results can be printed with by calling print_report().


x = 0.0
for i in range(10):
  with Timer("Outer Function"):
    for j in range(10):
      with Timer("Inner Function"):
        x += 1.0


results in:

Operation           No of calls    Avg time [ms]    Total time [s]
----------------  -------------  ---------------  ----------------
Outer Function               10      0.0245333         0.000245333
  Inner Function            100      0.000665188       6.65188e-05
----------------  -------------  ---------------  ----------------
Total                                                  0.00105381
static configure(**kwargs)

Configure the timer.

active bool
Flag the activates/deactived all timers.
skip int
Skip the timing of the first x calls to every timer. The calls are still counted, but not considered in the average execution time.
log_mem bool
Log accumulated memory consumption of timed calls
static disable()

Disable all timers.

static enable(**kwargs)

Enable all timers. Takes all options that are accepted by configure.

static print_report()

Print the timing report.

static reset()

Reset all timers.


class magnumfe.Cache(*keys, **kwargs)

Simple cache class that is aware of changes in the state class.

*keys ([str])
Names of state attributes to be monitored.
Any attributes to be attached to the cache object.
# Initialize cache object that tracks changes in the m and t
# attribute of the state class.
cache = Cache("t", "m")

# Check for cache hit. In case of cache miss the following
# block is expected to update the cache. The hash keys of the
# current state are saved.
if cache.requires_update(state):
  cache.some_var = expensive_operation(state.t, state.m)

if cache.requires_update(state):
  # Won't execute since cache is up to date

Flushes the cache by resetting the uuid


Checks if cache is expired with resepect to the current state and saves the new state. Has to be followed by a block that updates the cache.

state (State)
The current simulation state (or an arbitrary object providing
a uuid() function or a uuid variable)
True if cache is expired, False otherwise

Builds a lambda from a given function that returns the function call along with the caching keys as required by the state class.

Function to be wrapped
Wrapped function

Screen logging

magnum.fe uses the Python logging interface to print status information to the screen. The verbosity of the screen logging can be configured for magnum.fe and third party libraries individualy. Availabe log levels are

CRITICAL  = 50 # errors that may lead to data corruption and suchlike
ERROR     = 40 # things that go boom
WARNING   = 30 # things that may go boom later
INFO      = 20 # information of general interest

Set the log level of magnum.fe specific logging messages. Defaults to INFO = 20.

level (int)
The log level

Set the log level of all third party modules (dolfin, bempp, ffc, ...). Defaults to WARNING = 30.

level (int)
The log level