Pyzfn
A micromagnetic post processing library to work with the data generated by amumax
Install / Use
/learn @MathieuMoalic/PyzfnREADME
pyzfn
Pyzfn is a Python library for post-processing micromagnetic simulation data generated by amumax, a fork of mumax3. It is designed for use with Zarr-backed datasets and supports spatially resolved frequency-domain analysis, visualization, and export of magnetization dynamics.
Features
- 🧊 Zarr-native API for reading/writing simulation results
- ⚡ FFT-based mode analysis across 5D datasets (
(t, z, y, x, c)) - 📈 Interactive spectrum visualization with peak-picking
- 🌈 Mode visualization in amplitude and phase
- 🖼️ Snapshot tools for spatial magnetization structure
- 💾 OVF (OOMMF Vector Field) export for simulation interoperability
- 📚 Predefined theoretical dispersion models (Kittel, Kalinikos-Slavin, DMI-included...)
Installation
pip install pyzfn
Usage
Loading a Zarr Dataset
from pyzfn import Pyzfn
zfn = Pyzfn("my_simulation.zarr")
zfn.p # Show tree structure
Calculate Modes
zfn.calc_modes(dset_in_str="m", dset_out_str="modes")
Performs time-FFT over magnetization and stores spatially resolved modes in modes/....
Visualize Frequency Spectrum + Modes
zfn.ispec(dset_str="modes")
- Left: Spectral line plot
- Right: Mode amplitude, phase, and composite maps
- Click to explore frequency slices interactively
Visualize a Snapshot
zfn.snapshot(dset_str="m", t=-1, z=0)
Visualizes the magnetization vector field at a given time and layer.
Dispersion Models
You can compute theoretical resonance frequencies for comparison:
from pyzfn.equations import kittel_1948
f_res = kittel_1948(B=0.23, Ms=1.15e6, Ku=0.938e6)
print(f_res, "Hz")
Other supported models:
kalinikos_1986,kalinikos_1986_no_approxbottcher_2021kim_2016(DMI included)cortes_ortuno_2013
OVF Support
Save to OVF
from pyzfn.ovf import save_ovf
save_ovf("mode.ovf", array, dx=1e-9, dy=1e-9, dz=1e-9)
Load from OVF
from pyzfn.ovf import load_ovf
arr = load_ovf("mode.ovf")
Development
Run Tests
pytest
Run Type Checks
mypy pyzfn
Format & Lint
We use pre-commit hooks:
pre-commit install
