This jupyter-notebook has be created with ‘jupytext’.

Use this Link to directly open the Notebook in Google Colab.

Install magnum.np and fetch reference data (required for Colab)

[1]:
!pip install -q triton magnumnp
from os import path
if not path.isdir("ref"):
    !mkdir ref
    !wget -P ref https://gitlab.com/magnum.np/magnum.np/raw/main/demos/sp_domainwall_pinning/ref/m.dat &> /dev/null
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.

Domainwall Pinning Standard Problem

Run Simulation

[2]:
from magnumnp import *
import numpy as np
import pathlib
from tqdm import tqdm

set_log_level(25) # show info_green, but hide info_blue
Timer.enable()
try:
    this_dir = pathlib.Path(__file__).resolve().parent
except:
    this_dir = pathlib.Path().resolve()

Hextmax=1.8/constants.mu_0
Hextmin=1.4/constants.mu_0
tfinal = 20e-9

n  = (80, 1, 1)
dx = (1e-9, 1e-9, 1e-9)
origin = (-n[0]*dx[0]/2., -n[1]*dx[1]/2., -n[2]*dx[2]/2.,)
mesh = Mesh(n, dx, origin)
state = State(mesh)
state.material = {"alpha": state.Constant(1.)}
x, y, z = mesh.SpatialCoordinate()

soft = (x < 0)
hard = (x >= 0)

Ms = state.Constant(0.0)
Ms[soft] = 0.25/constants.mu_0
Ms[hard] = 1./constants.mu_0

Ku = state.Constant(0.0)
Ku[soft] = 1e5
Ku[hard] = 1e6

A = state.Constant(0.0)
A[soft] = 0.25e-11
A[hard] = 1.e-11

state.material['Ms'] = Ms
state.material['A'] = A
state.material['Ku'] = Ku
state.material['Ku_axis'] = state.Constant([0,1,0])

state.m = state.Constant([np.sin(0.3), np.cos(0.3), 0.0])
state.m[hard] = torch.tensor([0.0, -1.0, 0.0])
normalize(state.m)

exchange = ExchangeField()
aniso    = UniaxialAnisotropyField()
external = ExternalField(state.Constant([0, 0, 0]))

minimizer = MinimizerBB([exchange, aniso, external])
logger = ScalarLogger(this_dir / "data" / "m.dat", ['t', external.h, 'm'])
for h in tqdm(torch.linspace(Hextmin, Hextmax, steps=100)):
    external.h = state.Constant([0, h, 0])
    minimizer.minimize(state)
    logger << state

Timer.print_report()
2025-04-02 11:38:34  magnum.np:INFO magnum.np 2.0.2 (/usr/local/lib/python3.10/site-packages/ipykernel_launcher.py -f /tmp/tmptpdipbug.json --HistoryManager.hist_file=:memory:)
2025-04-02 11:38:34  magnum.np:INFO [State] running on device: cpu (dtype = float64)
2025-04-02 11:38:34  magnum.np:INFO [Mesh] 80x1x1 (dx= 1e-09 x 1e-09 x 1e-09)
  0%|          | 0/100 [00:00<?, ?it/s]2025-04-02 11:38:45  magnum.np:INFO [MinimizerBB] Successfully converged (iter=103, dm_tol = 1)
  1%|          | 1/100 [00:11<18:43, 11.35s/it]2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=56, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=59, dm_tol = 1)
  3%|▎         | 3/100 [00:11<04:48,  2.98s/it]2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=55, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=54, dm_tol = 1)
  5%|▌         | 5/100 [00:11<02:20,  1.47s/it]2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=53, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=57, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=63, dm_tol = 1)
  8%|▊         | 8/100 [00:11<01:07,  1.37it/s]2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=62, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=87, dm_tol = 1)
 10%|█         | 10/100 [00:11<00:45,  1.97it/s]2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=64, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=61, dm_tol = 1)
 12%|█▏        | 12/100 [00:11<00:31,  2.77it/s]2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=52, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=55, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=71, dm_tol = 1)
 15%|█▌        | 15/100 [00:12<00:20,  4.24it/s]2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=51, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=55, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=63, dm_tol = 1)
 18%|█▊        | 18/100 [00:12<00:13,  5.98it/s]2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=63, dm_tol = 1)
2025-04-02 11:38:46  magnum.np:INFO [MinimizerBB] Successfully converged (iter=61, dm_tol = 1)
 20%|██        | 20/100 [00:12<00:10,  7.29it/s]2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=57, dm_tol = 1)
2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=85, dm_tol = 1)
 22%|██▏       | 22/100 [00:12<00:09,  8.59it/s]2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=51, dm_tol = 1)
2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=72, dm_tol = 1)
 24%|██▍       | 24/100 [00:12<00:07, 10.18it/s]2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=76, dm_tol = 1)
2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=71, dm_tol = 1)
 26%|██▌       | 26/100 [00:12<00:06, 11.41it/s]2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=72, dm_tol = 1)
2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=83, dm_tol = 1)
 28%|██▊       | 28/100 [00:12<00:05, 12.40it/s]2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=87, dm_tol = 1)
2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=114, dm_tol = 1)
 30%|███       | 30/100 [00:12<00:05, 12.33it/s]2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=79, dm_tol = 1)
2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=114, dm_tol = 1)
 32%|███▏      | 32/100 [00:13<00:05, 12.38it/s]2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=88, dm_tol = 1)
2025-04-02 11:38:47  magnum.np:INFO [MinimizerBB] Successfully converged (iter=97, dm_tol = 1)
 34%|███▍      | 34/100 [00:13<00:05, 12.53it/s]2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=96, dm_tol = 1)
2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=103, dm_tol = 1)
 36%|███▌      | 36/100 [00:13<00:05, 12.38it/s]2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=89, dm_tol = 1)
2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=100, dm_tol = 1)
 38%|███▊      | 38/100 [00:13<00:04, 12.48it/s]2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=132, dm_tol = 1)
2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=118, dm_tol = 1)
 40%|████      | 40/100 [00:13<00:05, 11.53it/s]2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=88, dm_tol = 1)
2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=108, dm_tol = 1)
 42%|████▏     | 42/100 [00:14<00:04, 11.74it/s]2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=154, dm_tol = 1)
2025-04-02 11:38:48  magnum.np:INFO [MinimizerBB] Successfully converged (iter=269, dm_tol = 1)
 44%|████▍     | 44/100 [00:14<00:06,  8.84it/s]2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=306, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
 46%|████▌     | 46/100 [00:14<00:06,  8.52it/s]2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
 70%|███████   | 70/100 [00:14<00:00, 44.15it/s]2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
 93%|█████████▎| 93/100 [00:14<00:00, 77.39it/s]2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
2025-04-02 11:38:49  magnum.np:INFO [MinimizerBB] Successfully converged (iter=0, dm_tol = 1)
100%|██████████| 100/100 [00:14<00:00,  6.74it/s]
2025-04-02 11:38:49  magnum.np: ===============================================================================
2025-04-02 11:38:49  magnum.np: TIMER REPORT
2025-04-02 11:38:49  magnum.np: ===============================================================================
2025-04-02 11:38:49  magnum.np: Operation                        No of calls    Avg time [ms]    Total time [s]
2025-04-02 11:38:49  magnum.np: -----------------------------  -------------  ---------------  ----------------
2025-04-02 11:38:49  magnum.np: MinimizerBB.minimize                     100      145.499           14.5499
2025-04-02 11:38:49  magnum.np:     ExchangeField.h                     4154        2.12442          8.82484
2025-04-02 11:38:49  magnum.np:     UniaxialAnisotropyField.h           4154        0.7612           3.16202
2025-04-02 11:38:49  magnum.np:     ExternalField.h                     4154        0.0114796        0.0476863
2025-04-02 11:38:49  magnum.np: ExternalField.h                          100        0.0159161        0.00159161
2025-04-02 11:38:49  magnum.np: -----------------------------  -------------  ---------------  ----------------
2025-04-02 11:38:49  magnum.np: Total                                                               14.8558
2025-04-02 11:38:49  magnum.np: Missing                                                              0.304285
2025-04-02 11:38:49  magnum.np: ===============================================================================

Plot Results

[3]:
import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt("data/m.dat")
ref = np.loadtxt("ref/m_ref.dat")
data_dieter = np.loadtxt("ref/m_dieter.dat")
data_magnumaf = np.loadtxt("ref/m_magnumaf.dat")


fig, ax = plt.subplots(figsize=(15,5))
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']

ax.plot(data[:,2]*4*np.pi*1e-7, data[:,5], '-', color = cycle[0], label = "magnum.np")
ax.plot(ref[:,2]*4*np.pi*1e-7, ref[:,5], '-', color = cycle[0], linewidth = 6, alpha = 0.4, label = "reference")
ax.plot(data_dieter[:,1], data_dieter[:,3], '-', color = cycle[1], label = "dieter")
ax.plot(data_magnumaf[:,4]*4*np.pi*1e-7, data_magnumaf[:,2], '-', color = cycle[2], label = "magnum.af")
ax.axvline(x = 1.568, linestyle = '--', color = 'black', alpha = 0.2, label = 'analytic')

ax.set_xlim([1.4,1.8])
ax.set_ylim([-0.2,1.2])
ax.set_title("Standard Problem - Domainwall Pinning")
ax.set_xlabel("Applied Field $\mu$$_0$ H$_{ext}$ [T]")
ax.set_ylabel("Magnetization m$_y$")
ax.legend(ncol=2, loc='lower right')
ax.grid()
fig.savefig("data/results.png")
../_images/notebooks_sp_domainwall_pinning_7_0.png