Magnus Bloch Methods
Magnus methods are RF-excitation solvers that keep each time step as a rotation. They are useful when RF, gradients, or off-resonance change during a time step: you can either use a larger
KomaMRI provides three Magnus variants:
| Method | Field model inside one time step | Practical use |
|---|---|---|
BlochMagnus1() | piecewise constant | hard-pulse approximation / baseline |
BlochMagnus2() | piecewise linear average field | good default for smooth RF excitation |
BlochMagnus4() | piecewise linear plus commutator correction | higher accuracy at larger |
Use them through sim_params["sim_method"]:
sim_params = KomaMRICore.default_sim_params()
sim_params["sim_method"] = BlochMagnus2()
sim_params["Δt_rf"] = 8e-6
raw = simulate(obj, seq, sys; sim_params)Accuracy And Step Size
The practical benefit is that higher-order Magnus methods can either improve RF excitation accuracy at the same

The convergence behavior follows the expected order: first, second, and fourth order for BlochMagnus1(), BlochMagnus2(), and BlochMagnus4(). In Float64, the higher-order methods keep improving as Float32, the error eventually reaches roundoff limits, so decreasing
Effective Field Vector
Let

Here
For one excitation step from
where
The Magnus rotation vector
The implementation computes effective_rotation_vector! for CPU and effective_rotation_vector for GPU kernels.