{ "cells": [ { "cell_type": "markdown", "id": "1ba082af-8832-47ae-b425-4c6522d30231", "metadata": {}, "source": [ "# Stoner-Wohlfarth Particle\n", "We are simulating the hard-axis loop of a Stoner-Wohlfarth particle with uniaxial anisotorpy with $K$ = 100 kJ/m$^3$.\n", "\n", "## Simulation\n", "### Import libraries" ] }, { "cell_type": "code", "execution_count": 1, "id": "c848cfa2-49fb-42ce-b469-b4ad2e094bcf", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2025-05-12 23:32:23 NeuralMag:INFO \u001b[1;37;32m[NeuralMag] Version 0.9.1\u001b[0m\n" ] } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from scipy import constants\n", "\n", "import neuralmag as nm" ] }, { "cell_type": "markdown", "id": "ed5480d3-039a-4d44-a4a3-aeb5d80b5b1e", "metadata": {}, "source": [ "### Initialize state, mesh and material parameters\n", "In order to simulate a Stoner-Wohlfarth particle, we setup a small 2 x 2 x 2 cell mesh whose size is well below the single-domain limit. As material parameters we choose the saturation magnetization $M_s$ and the exchange constant $A$ equal to those of Permalloy, but we add a uniaxial anisotropy in z-axis with anisotropy constant $K$ = 100 kJ/m$^3$ with a slight tilt into the x-direction in order to avoid an unstable equilibrium at saturation." ] }, { "cell_type": "code", "execution_count": 2, "id": "0f55919f-af7d-4665-8979-2d4ca3e374aa", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2025-05-12 23:32:23 NeuralMag:INFO \u001b[1;37;32m[Mesh] 3D, 2 x 2 x 2 (size = 5e-09 x 5e-09 x 5e-09)\u001b[0m\n", "2025-05-12 23:32:24 NeuralMag:INFO \u001b[1;37;32m[NeuralMag] Backend set to 'jax'.\u001b[0m\n", "2025-05-12 23:32:24 NeuralMag:INFO \u001b[1;37;32m[NeuralMag] Set default device to 'TFRT_CPU_0'.\u001b[0m\n", "2025-05-12 23:32:24 NeuralMag:INFO \u001b[1;37;32m[NeuralMag] Set default dtype to 'float32'.\u001b[0m\n", "2025-05-12 23:32:24 NeuralMag:INFO \u001b[1;37;32m[State] Running on device: TFRT_CPU_0 (dtype = float32, backend = jax)\u001b[0m\n" ] } ], "source": [ "mesh = nm.Mesh((2, 2, 2), (5e-9, 5e-9, 5e-9))\n", "state = nm.State(mesh)\n", "\n", "state.material.Ms = 8e5\n", "state.material.A = 1.3e-11\n", "state.material.Ku = 1e5\n", "state.material.Ku_axis = [0.01, 0, 1]\n", "state.material.alpha = 1.0" ] }, { "cell_type": "markdown", "id": "28c47e5f-40e5-4e5c-a03c-1945a7441630", "metadata": {}, "source": [ "### Initialize initial magnetization" ] }, { "cell_type": "code", "execution_count": 3, "id": "e9f0a90c-9397-4018-8781-08db3a7b7fc2", "metadata": {}, "outputs": [], "source": [ "state.m = nm.VectorFunction(state).fill((-1, 0, 0))" ] }, { "cell_type": "markdown", "id": "cdb7cb43-c164-4d33-b1fa-b48c709b4174", "metadata": {}, "source": [ "### Register effective field\n", "We register an effective field comprised of an exchange field, an uniaxial anisotropy and en external field the sweeps from $(-1.5 H_c, 0, 0)$ to $(+1.5 H_c, 0, 0)$ within 20 ns with $H_c$ being the the coercive field of the particle." ] }, { "cell_type": "code", "execution_count": 4, "id": "01998dbd-e7e9-4b6b-b8f5-06ec9a13fb3d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2025-05-12 23:32:24 NeuralMag:INFO \u001b[1;37;32m[ExchangeField] Register state methods (field: 'h_exchange', energy: 'E_exchange')\u001b[0m\n", "2025-05-12 23:32:24 NeuralMag:INFO \u001b[1;37;32m[UniaxialAnisotropyField] Register state methods (field: 'h_aniso', energy: 'E_aniso')\u001b[0m\n", "2025-05-12 23:32:24 NeuralMag:INFO \u001b[1;37;32m[ExternalField] Register state methods (field: 'h_external', energy: 'E_external')\u001b[0m\n", "2025-05-12 23:32:24 NeuralMag:INFO \u001b[1;37;32m[TotalField] Register state methods (field: 'h', energy: 'E')\u001b[0m\n" ] } ], "source": [ "nm.ExchangeField().register(state, \"exchange\")\n", "nm.UniaxialAnisotropyField().register(state, \"aniso\")\n", "Hc = 2 * 1e5 / (constants.mu_0 * 8e5)\n", "nm.ExternalField(lambda t: state.tensor([1.5 * (t - 10e-9) / 10e-9 * Hc, 0, 0])).register(state, \"external\")\n", "nm.TotalField(\"exchange\", \"aniso\", \"external\").register(state)" ] }, { "cell_type": "markdown", "id": "200ac2e7-4e55-447d-ab9b-423fee6c89f7", "metadata": {}, "source": [ "### Perform time integration" ] }, { "cell_type": "code", "execution_count": 5, "id": "103ad30e-6bd1-476e-82f4-6cd2edd6f418", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2025-05-12 23:32:24 NeuralMag:INFO \u001b[1;37;32m[LLGSolverJAX] Initialize RHS function\u001b[0m\n", "2025-05-12 23:32:28 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 0s\u001b[0m\n", "2025-05-12 23:32:44 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 2e-10s\u001b[0m\n", "2025-05-12 23:32:44 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 4e-10s\u001b[0m\n", "2025-05-12 23:32:44 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 6e-10s\u001b[0m\n", "2025-05-12 23:32:44 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 8e-10s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.2e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.4e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.6e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.8e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 2e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 2.2e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 2.4e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 2.6e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 2.8e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 3e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 3.2e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 3.4e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 3.6e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 3.8e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 4e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 4.2e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 4.4e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 4.6e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 4.8e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 5e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 5.2e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 5.4e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 5.6e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 5.8e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 6e-09s\u001b[0m\n", "2025-05-12 23:32:45 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 6.2e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 6.4e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 6.6e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 6.8e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 7e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 7.2e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 7.4e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 7.6e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 7.8e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 8e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 8.2e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 8.4e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 8.6e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 8.8e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 9e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 9.2e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 9.4e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 9.6e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 9.8e-09s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1e-08s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.02e-08s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.04e-08s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.06e-08s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.08e-08s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.1e-08s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.12e-08s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.14e-08s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.16e-08s\u001b[0m\n", "2025-05-12 23:32:46 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.18e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.2e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.22e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.24e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.26e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.28e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.3e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.32e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.34e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.36e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.38e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.4e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.42e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.44e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.46e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.48e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.5e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.52e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.54e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.56e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.58e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.6e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.62e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.64e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.66e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.68e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.7e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.72e-08s\u001b[0m\n", "2025-05-12 23:32:47 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.74e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.76e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.78e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.8e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.82e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.84e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.86e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.88e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.9e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.92e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.94e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.96e-08s\u001b[0m\n", "2025-05-12 23:32:48 NeuralMag:INFO \u001b[1;37;34m[LLGSolverJAX] Step: dt = 2e-10s, t = 1.98e-08s\u001b[0m\n" ] } ], "source": [ "llg = nm.LLGSolver(state)\n", "logger = nm.Logger(\n", " \"stoner-wohlfarth-hysteresis\",\n", " [\"t\", \"h_external\", \"m\", \"E\"],\n", " [\"m\"],\n", " fields_every=100,\n", ")\n", "while state.t < 20e-9:\n", " logger.log(state)\n", " llg.step(2e-10)" ] }, { "cell_type": "markdown", "id": "12815294-70da-40bb-abe2-0032d0aeb3db", "metadata": {}, "source": [ "### Plot the result" ] }, { "cell_type": "code", "execution_count": 6, "id": "703dfc82-1505-4fb0-87f3-529523e20ec3", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data = np.loadtxt(\"stoner-wohlfarth-hysteresis/log.dat\")\n", "plt.plot(data[:, 1], data[:, 4])\n", "plt.xlabel(\"H_x [A/m]\")\n", "plt.ylabel(\"m_x\")\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.17" } }, "nbformat": 4, "nbformat_minor": 5 }