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")
