{ "cells": [ { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Current induced domain wall motion using STT\n", "\n", "## Problem description\n", "\n", "In this tutorial we show how Zhang-Li spin transfer torque (STT) can be included in micromagnetic simulations. To illustrate that, we will try to move a domain wall pair using spin-polarised current.\n", "\n", "Let us simulate a two-dimensional sample with length $L = 500 \\,\\text{nm}$, width $w = 20 \\,\\text{nm}$ and discretisation cell $(2.5 \\,\\text{nm}, 2.5 \\,\\text{nm}, 2.5 \\,\\text{nm})$. The material parameters are:\n", "\n", "- exchange energy constant $A = 15 \\,\\text{pJ}\\,\\text{m}^{-1}$,\n", "- Dzyaloshinskii-Moriya energy constant $D = 3 \\,\\text{mJ}\\,\\text{m}^{-2}$,\n", "- uniaxial anisotropy constant $K = 0.5 \\,\\text{MJ}\\,\\text{m}^{-3}$ with easy axis $\\mathbf{u}$ in the out of plane direction $(0, 0, 1)$,\n", "- gyrotropic ratio $\\gamma = 2.211 \\times 10^{5} \\,\\text{m}\\,\\text{A}^{-1}\\,\\text{s}^{-1}$, and\n", "- Gilbert damping $\\alpha=0.3$.\n", "\n", "## Domain-wall pair" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [] }, "outputs": [], "source": [ "import oommfc as mc\n", "import discretisedfield as df\n", "import micromagneticmodel as mm\n", "\n", "# Definition of parameters\n", "L = 500e-9 # sample length (m)\n", "w = 20e-9 # sample width (m)\n", "d = 2.5e-9 # discretisation cell size (m)\n", "Ms = 5.8e5 # saturation magnetisation (A/m)\n", "A = 15e-12 # exchange energy constant (J/)\n", "D = 3e-3 # Dzyaloshinkii-Moriya energy constant (J/m**2)\n", "K = 0.5e6 # uniaxial anisotropy constant (J/m**3)\n", "u = (0, 0, 1) # easy axis\n", "gamma0 = 2.211e5 # gyromagnetic ratio (m/As)\n", "alpha = 0.3 # Gilbert damping\n", "\n", "# Mesh definition\n", "p1 = (0, 0, 0)\n", "p2 = (L, w, d)\n", "cell = (d, d, d)\n", "region = df.Region(p1=p1, p2=p2)\n", "mesh = df.Mesh(region=region, cell=cell)\n", "\n", "# Micromagnetic system definition\n", "system = mm.System(name='domain_wall_pair')\n", "system.energy = mm.Exchange(A=A) + \\\n", " mm.DMI(D=D, crystalclass='Cnv_z') + \\\n", " mm.UniaxialAnisotropy(K=K, u=u)\n", "system.dynamics = mm.Precession(gamma0=gamma0) + mm.Damping(alpha=alpha)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because we want to move a DW pair, we need to initialise the magnetisation in an appropriate way before we relax the system." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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ZWRkODqfcjVr1kxeXl5KT08vdS09PV1ms7nc5kUAAAAAAACoJKMGHuWgHlUxffv2VWRkpEaPHq1ff/31ptyzUtvVDxw4oHvuuUcPP/yw7r33XrVq1arMdxKYTCY999xz153k7/Xq1Uvr16/XqVOnbFXyvLw8bd68WREREWrQoIHD7wkAAAAAAAD7Vj7WRNSjKiY6OloxMTHq16+fBgwYoO7du6tt27aqX7/+DbmfyShvg3wZgoKCZDKZyt1bbzKZdPDgwQqNffz4cZ05c0aStHbtWq1du1aJiYm6/fbbJUmBgYE6c+aM/vznP8vX11djx46V2WzWokWLtHfvXq1bt07+/v7l3sf6S0CF8nKWXrd3dHYKdvs069/OTgEAAAAAgCqnTrNDzk7BofzfnOXsFBzu8PPPlhtz8uTJ665H1RZffPGFxo4dq8LCQlv90GQyyWQy6Q9/+INCQkIUHBxs+7Vx48bXfc9KFTnXr19vd+zDDz9cobEnTpx4zfG3bt0qX19fHTlyRNOnT9fu3btlGIY6duyouLg4tWvXzq77UOR0PIqcAAAAAACUVtOKnAFTa16R89DE8ouckq67HlVb9O/fX+np6fqf//kfRURE6MKFC0pLS1NaWpp++uknWSwWSf8tfB44cOC671mpImdNQJHT8ShyAgAAAABQWo0rcv6jBhY5X7SvyAn7dOjQQX5+fvrggw9KXbt8+bLS09N18OBB7d+/X+np6Xrvvfeu+552vZPzhRde0GuvvVbmezftVVBQoJdfflnTpk2r9BgAAAAAAABwLlOtXC6HimjSpIlatWpV5jU3Nze1b99e7du3d+g97equvmXLFj3yyCPau3dvpW7y73//W//7v/+r1NTUSn0eAAAAAAAAVYS1Bh5wqMjISH3//ffl9vNxJLuKnO+++67OnTungQMHKjo6Wrt375bVeu2fAKvVql27dumvf/2rBg0apPPnz+vdd991SNIAAAAAAABwDpNR8w441ujRo2W1WjV37tybdk+7tquHhIToo48+0pQpU/TRRx9p+/btatCgge655x61atVKjRs3loeHhy5cuKCcnBwdPXpUu3bt0sWLF2UYhvr376+XXnpJjRo1utHfDwAAAAAAAG4kioIox+jRoxUUFKS3335bR44c0dNPPy0/P78bes8KNx7av3+/Vq5cqe3btysnJ+e/A5lM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xAnddtttFfp+bqRasZJTknr16qWdO3fq1KlTtnN5eXnavHmzIiIi1KBBAydmB1QP9s6j3r17KyMjQ2lpabY4q9WqlJQUBQUFqVWrVjc9d+BmSk1N1fz58zV+/Pirvkyc+QRcW0FBgf7+979rwYIFpa599913kqTbbruNuQSUIyYmRqtWrSp1BAcHKzg4WKtWrdJf/vIX5hJgh8zMTLVv314JCQklzlssFqWmpsrT01P+/v61Yj6ZjJp33EgnT57U/PnzFRQUpE6dOpW4tnHjRv3lL3/RXXfdpbCwMI0bN07Hjh2zXc/JyZGHh0eZ72/18vKyrQYur+lV8fXy4goLC5Wbm1stm3jXipWckjR69Ght2rRJMTExGjt2rMxmsxYtWqRLly4pLi7O2ekBTnf8+HGdOXNG0pXVM5J0+PBh5eXlSZICAwPtnkdDhw7V+++/r7Fjx2rChAny9PRUcnKyjhw5osWLF9/8bw64iYqKijR16lT5+vrqnnvu0b59+0rFMJ+A8vn6+qp///7asGGDPDw8dP/990u60gn0008/1YABA+Tj48NcAsrRsmVLtWzZstT54qYSoaGhkuz//0vMJdRmd9xxh3r27Knly5fLxcVF4eHhysvL0+rVq5WRkaEpU6bIbDbXjvlk1L7OQ4WFhcrMzLxmzC233CIfH58S53JychQTE6OCggJNnz69xBZxSUpLS1N0dLSaNm2q77//XnPmzNF3332njz/+WLfccosuX75cZoFTutKk6ty5c5JUbjOr4uv2NL26fPmyLa74XFlxVa05Vq0pct56661avXq1pk+frri4OBmGoY4dO2rFihWltkABtdHbb7+t9evXlzgXGxtr+/3WrVvl6+tr1zyqX7++Vq5cqTfffFOTJk3SpUuXFBISogULFpR4wTJQE/3yyy/6+eefJUmPPPJImTHMJ8A+b7zxhoKCgrR+/Xr93//9n1xdXfWHP/xBEyZM0JNPPinJ/n/jMZeAa2MuAfaZNm2aQkJCtG7dOi1dulRms1khISGaN2+eunfvLql2zKfauF395MmT6tOnzzVjHn74YU2dOtX2dWZmpkaMGKEzZ85o8eLFJbZ+33XXXdqxY4caN26sOnWubLS+++671apVK0VHR2vJkiV65pln5O7uXmaDKunKzhd3d3dJsv1aWFho+315cWWNVxxzrbjic1WtOZbJMGph+R0AAAAAAACVEv5YQvlB1czO98Y7dLy0tDRFRUXJ3d1dCxcutHuBndVq1V133aXQ0FAtWbJEf/vb3/R///d/+v7770utvvzTn/6koKAgLVmyRHPnztVbb72lzZs3q0WLFiXiHn30UZ07d06ffvqpNmzYoOeff15Lly5VeHh4ibhnn31W27Zt07fffqvvvvtOQ4YM0ZQpU0ot3pgxY4YWLVqk7du3l1q56ky15p2cAAAAAAAAuH4ma807HOk///mPRowYocaNG2vNmjVXLXAWr5z8raKiIhUWFsrNzU2SFBwcLMMwdOjQoRJx2dnZys7OtjWoCg4OlqRSzawsFosOHz6sO++885pxxeeCg4NVt25dBQYGqm7duleNa9q0aZUqcEoUOQEAAAAAAFARhlHzDgexWCyKjY2Vq6urli5dqltvvbXMuJdeeklhYWG2xkHFtm7dKovForCwMElSz5495eLiog0bNpSIK/76gQcekCSFh4erUaNGpeK2bNmiixcv2uLatGkjPz8/paSk6Lebu/ft26cjR46od+/ekq68XzQ8PFybNm0q8e7NkydP6ssvv7SNV5XUmndyAgAAAAAA4Prd6G7k1dn69ev1ww8/KC4uTidOnNCJEydKXPfy8pKvr6+GDBmiTz75RE899ZRGjhyppk2bau/evZo3b578/PxsW8RvvfVWRUVFacmSJfLy8lJYWJj279+vxMREDRgwwLYy083NTXFxcZo8ebLeeOMNRUZGKjMzU9OmTdO9996rHj162HJ44YUXFBMTo+eee06PPvqocnJyNGPGDPn5+WnQoEG2uPHjx2vgwIF6+umnNXz4cF2+fFmJiYlq1KiRRo4ceROeZsXwTk4AAAAAAADYrevDM5ydgsNtXz/BIeNMnDixVFPf3/ptc6IDBw4oMTFRe/bsUV5ennx8fNSjRw+NGTNGnp6ets8YhqElS5Zo7dq1ysrKko+Pjx566CGNGjWqVPfzDz74QEuXLtXRo0fl6emp3r1765lnnpGHh0eJuM8++0xz5sxRenq66tevr27dumnChAlq2rRpibjvvvtOM2fO1L59+1S3bl117txZEyZMUMuWLa/vQd0AFDkBAAAAAABgt64PTXd2Cg63/cPnnJ0CrhPb1QEAAAAAAGA3RzfqARyBIicAAAAAAADsxjs5URVR5AQAAAAAAID9rFQ5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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def m_value(pos):\n", " x, y, z = pos\n", " if 20e-9 < x < 40e-9:\n", " return (0, 0, -1)\n", " else:\n", " return (0, 0, 1)\n", " \n", "system.m = df.Field(mesh, nvdim=3, value=m_value, norm=Ms)\n", "\n", "system.m.z.sel('z').mpl(scalar_kw={\"colorbar_label\": \"$m_z$\"}, figsize=(15, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can relax the magnetisation." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running OOMMF (ExeOOMMFRunner)[2023/10/23 16:04]... (8.5 s)\n" ] } ], "source": [ "md = mc.MinDriver()\n", "md.drive(system)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "system.m.z.sel('z').mpl(scalar_kw={\"colorbar_label\": \"$m_z$\"}, figsize=(15, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can add the STT term to the dynamics equation." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [] }, "outputs": [], "source": [ "ux = 400 # velocity in x-direction (m/s)\n", "beta = 0.5 # non-adiabatic STT parameter\n", "\n", "system.dynamics += mm.ZhangLi(u=ux, beta=beta) # please notice the use of `+=` operator" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And drive the system for $0.5 \\,\\text{ns}$:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running OOMMF (ExeOOMMFRunner)[2023/10/23 16:05]... (4.2 s)\n" ] } ], "source": [ "td = mc.TimeDriver()\n", "td.drive(system, t=0.5e-9, n=100)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABTkAAADJCAYAAADo3TbeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABHl0lEQVR4nO3deXwUVbr/8W+TdBIgkAUIKFGWELIgi5KJmgHkggQEuShzVdZRgQsBIWjEkXFGEEWHHUzYl2GTRfSKmBEYCKgDgwKigwgkAVSQCSIJS4BA0umu3x/80mPsDuks0Fk+79erXsCpp6tOV9eB9MOp85gMwzAEAAAAAAAAAJVUDXd3AAAAAAAAAADKgiQnAAAAAAAAgEqNJCcAAAAAAACASo0kJwAAAAAAAIBKjSQnAAAAAAAAgEqNJCcAAAAAAACASo0kJwAAAAAAAIBKjSQnAAAAAAAAgErN090dAAAAAAAAQOVh+6mlu7tQ7mo0Snd3F1BGJDkBAAAAAADgMpts7u5CueNR58qPJCcAAAAAAABcZjGs7u5CuSNBVvnxGQIAAAAAAMBlVXEmJyo/kpwAAAAAAABwmcUgyYmKhyQnAAAAAAAAXGaV4e4uAA5IcgIAAAAAAMBlNpKcqIBIcgIAAAAAAMBlFqN6JjkHDx6sffv2Od0XFxenF154QZKUmpqqWbNm6cCBA8rPz1fr1q0VHx+v6OjoQq85ffq0Zs6cqT179ignJ0ehoaGKi4tTbGxsobjz589r9uzZ2rlzpy5duqQmTZpo8ODB6tevX6G4a9euKTExUVu2bFFmZqbuuOMO9e3bVyNGjFCNGv+pH2+1WrV48WJt3LhRGRkZqlevnnr27KmxY8fKx8enPC6VW5DkBAAAAAAAgMuq8+PqrVq10qRJkxzag4KCJEmnTp3SwIED1bx5c82YMUM+Pj5auXKlhgwZojVr1qht27aSpEuXLmnAgAGqWbOmJk2apHr16umDDz5QfHy8EhMT7YlOi8WiZ599VpmZmXrppZd011136ZNPPtHEiRN1/fp1PfPMM/Y+jB07Vvv379e4ceMUHh6ur776Sm+//baysrL05z//2R43efJkbdiwQaNHj1Z0dLSOHTumadOm6YcfftCCBQtu4dW7tUhyAgAAAAAAwGWW6pvjVO3atdW6desi98+fP19Wq1WLFi1SYGCgJKl9+/aKjY3V7NmztWLFCknSqlWr9PPPPys5OVmhoaGSpKioKJ04cUIzZsywJzmTk5OVmpqqxYsX66GHHrIf7/Tp00pMTFS/fv3k4+OjvXv36rPPPtOECRM0cOBAe9zFixf117/+VUOGDNGdd96pH3/8UevWrdOQIUM0cuRIe5zNZtOkSZP05ZdfKioq6pZcu1utRvEhAAAAAAAAwA1WmarcVh4Mw1BKSopiYmLsCU5J8vLyUmxsrPbu3avs7GxJ0vbt2xUWFmZPcEqSyWRSr169dPLkSaWlpdnj/Pz81LFjx0LnevTRR3X16lXt2bPHHlfw+l/q3bu3bDabduzYIUnasWOHDMNQ7969C8X16tVLJpNJKSkp5XIt3IEkJwAAAAAAAFxmM6reVh4yMjJ0+fLlQonLAqGhobLZbEpPT1d+fr6+++67IuMk6ejRo5KktLQ0hYSEFFpTs6i4oKAg+fv7F4pr3ry5TCZToTiTyaSQkJBCcX5+fgoKCrLHVUY8rg4AAAAAAACX5VXjOXMXLlzQ+PHj9cUXXygzM1NNmjTRgAEDNHDgQGVlZUmSAgICHF5X0JaVlaXs7GxZLJabxp0/f97+a3h4uEtxzo7n5eUlX19fe1xWVpZ8fX3l5eXl9JgFcZURSU4AAAAAAAC4zGaUz+PdldHp06cVGxurmTNnKjs7W+vXr9frr7+u69ev24sKOUsgms1mSdL169eVm5vrUpwk5ebmuhxXq1Ytp302m83FHq8g7tKlS0W884qPJCcAAAAAAABclicPd3fBLZKSkuTp6SlfX197W+fOnfXUU08pMTFRy5Ytk3SjIvqv5eXlSZJq1qwpb29vl+IkycfHp0xxBbE+Pj4liquMSHICAAAAAADAZdV1Juev17uUbhQL6tq1qw4ePGhvc/bId2ZmpiSpQYMG8vPzk5eXV7FxklS/fn2X47777juHuOvXr+vKlSsKCgqyx12+fFl5eXkOMzqzsrKcPhpfWVTfRRQAAAAAAABQYu6uhO6u6uo2m035+fkO7QWPgteuXVsBAQH2yui/lJaWJrPZrJYtW8rDw0OhoaFFxklSq1atJEkRERE6fvy4bDZbsXE///yzLly4UCguPT3dIc4wDB07dqxQXGZmpjIzM+1xlRFJTgAAAAAAALjMYnhWua04p06dUps2bTRz5sxC7VarVSkpKfL391eLFi3UvXt37dmzR+fOnbPH5OTkaNu2berUqZNq164tSerRo4fS09OVmppqj7PZbEpOTlZ4eLiaNWtmj8vOztbOnTsLnXfTpk0KDAzU/fffb48zDEMfffRRobgPP/xQZrNZDz/8sCSpW7du8vT01KZNmxyOJ0mPPPJIsdeiouJxdQAAAAAAALjM1ZmPVcndd9+tbt26aeXKlfL09FRMTIxycnK0du1apaena/LkyTKbzRo1apS2bt2quLg4jRkzRmazWUuWLNG1a9eUkJBgP96gQYP0/vvva8yYMRo3bpz8/f21fv16nThxQkuXLrXH9ejRQ6tWrdKECRN05coVBQcHa8uWLfr00081ZcoUewGitm3bqlevXpozZ448PT0VHh6uzz//XOvWrdNzzz2nevXqSZIaNmyoIUOGaNmyZQoICFB0dLQOHz6sxMRE9e3bVxEREbf3wpYjk2EYhrs7AQAAAAAAgMrh799HursL5a57syPFxuTl5WnlypV67733lJGRIbPZrMjISA0dOlRdunSxx504cULTp0/Xvn37ZBiG2rVrp4SEBLVu3brQ8c6ePatp06Zp9+7dunbtmiIjIzV69Gh16NChUFx2drZmzpyplJQUZWdnq3nz5ho2bJh69+7t0L+kpCQlJycrMzNTwcHB6t+/v55++ulCcYZhaNmyZdqwYYMyMjIUFBSkxx57TCNHjrQnTSsjkpwAAAAAAABw2ebv73F3F8pdz2bfursLKCMeVwcAAAAAAIDLXFnDErjduCsBAAAAAADgMqtR/dbkRMVHkhMAAAAAAAAus6qGu7sAOCDJCQAAAAAAAJfxuDoqIu5KAAAAAAAAuIzH1VERkeQEAAAAAACAy5jJiYqIuxIAAAAAAAAus4mZnKh4SHICAAAAAADAZVaDwkOoeEhyAgAAAAAAwGUWw8PdXQAckOQEAAAAAACAy6xiJicqHpKcAAAAAAAAcBkzOVERkeQEAAAAAACAy2ysyYkKiCQnAAAAAAAAXGalujoqIJKcAAAAAAAAcJnFRjoJFQ93JQAAAAAAAFxmYyYnKiCSnAAAAAAAAHCZxUbhIVQ8JDkBAAAAAADgMqsoPISKhyQnAAAAAAAAXGYzeFwdFQ9JTgAAAAAAALjMYvC4OioekpwAAAAAAABwGTM5URGR5AQAAAAAAIDLmMmJiogkJwAAAAAAAFzGTE5URCQ5AQAAAAAA4DKbQXV1VDwkOQEAAAAAAOAyC0lOVEAkOQEAAAAAAOAyZnKiIiLJCQAAAAAAAJflV+Mk5549e5SUlKQjR47I29tbLVq00IgRI/TQQw9JkgYPHqx9+/Y5fW1cXJxeeOEF+59TU1M1a9YsHThwQPn5+WrdurXi4+MVHR1d6HWnT5/WzJkztWfPHuXk5Cg0NFRxcXGKjY0tFHf+/HnNnj1bO3fu1KVLl9SkSRMNHjxY/fr1KxR37do1JSYmasuWLcrMzNQdd9yhvn37asSIEapRo/J+tiQ5AQAAAAAA4LLqWnho586dGjlypDp16qSkpCQZhqEVK1Zo+PDhmjNnjh555BFJUqtWrTRp0iSH1wcFBdl/f+rUKQ0cOFDNmzfXjBkz5OPjo5UrV2rIkCFas2aN2rZtK0m6dOmSBgwYoJo1a2rSpEmqV6+ePvjgA8XHxysxMdGe6LRYLHr22WeVmZmpl156SXfddZc++eQTTZw4UdevX9czzzxjP/fYsWO1f/9+jRs3TuHh4frqq6/09ttvKysrS3/+859v4RW8tUhyAgAAAAAAwGX5Ng93d8EtZs+eraZNm2r+/Pkym82SpOjoaHXu3FmrV6+2Jzlr166t1q1b3/RY8+fPl9Vq1aJFixQYGChJat++vWJjYzV79mytWLFCkrRq1Sr9/PPPSk5OVmhoqCQpKipKJ06c0IwZM+xJzuTkZKWmpmrx4sX2WaXt27fX6dOnlZiYqH79+snHx0d79+7VZ599pgkTJmjgwIH2uIsXL+qvf/2rhgwZojvvvLN8L9xtUnnnoAIAAAAAAOC2s8lU5bbiGIahkSNHatKkSfYEpyTVrFlTTZo00U8//eTy9TMMQykpKYqJibEnOCXJy8tLsbGx2rt3r7KzsyVJ27dvV1hYmD3BKUkmk0m9evXSyZMnlZaWZo/z8/NTx44dC53r0Ucf1dWrV7Vnzx57XMHrf6l3796y2WzasWOHy++joiHJCQAAAAAAAJfZDFOV24pjMpnUs2dPPfDAA4XaLRaLTp48qbvvvtvl65eRkaHLly8XSlwWCA0Nlc1mU3p6uvLz8/Xdd98VGSdJR48elSSlpaUpJCTEYU1NZ3FBQUHy9/cvFNe8eXOZTCZ7XGXE4+oAAAAAAABwWb6NOXMFkpKSdPHiRQ0YMMDeduHCBY0fP15ffPGFMjMz1aRJEw0YMMD+eHhWVpYkKSAgwOF4BW1ZWVnKzs6WxWK5adz58+ftv4aHh7sU5+x4Xl5e8vX1tcdVRiQ5AQAAAAAA4LLqWnjo19avX6/Fixerb9++hSqdnz59WrGxsZo5c6ays7O1fv16vf7667p+/bqGDh2qvLw8STcSi79W8Cj89evXlZub61KcJOXm5rocV6tWLafvx2w22+MqI5KcAAAAAAAAcFm+wUzOuXPnKikpSb1799Ybb7xhb09KSpKnp6d8fX3tbZ07d9ZTTz2lxMREPfXUU/L29pZ041H3XytIgNasWdPlOEny8fEpU1xBrI+PTzHvvOIiyQkAAAAAAACXVfeZnBMnTtT69es1bNgwjRs3TibTf67Hr9e6lG6s59m1a1cdPHhQx48fV6NGjSTJ6aPhmZmZkqQGDRrIz89PXl5excZJUv369V2O++677xzirl+/ritXrigoKOim770iI8kJAAAAAAAAl1XnJOfs2bP17rvv6k9/+pN+//vfO+y32Wyy2Wzy9Cyccit4DNzb21uNGjVSQECAvTL6L6WlpclsNqtly5by8PBQaGhokXGS1KpVK0lSRESEPv/8c9lstkLFh5zFffHFF7pw4UKhtTnT09MLxVVGzC8GAAAAAACAy6y2GlVuc0VKSooWLlyoF1980WmC89SpU2rTpo1mzpxZ+HpZrUpJSZG/v79atGghSerevbv27Nmjc+fO2eNycnK0bds2derUSbVr15Yk9ejRQ+np6UpNTbXH2Ww2JScnKzw8XM2aNbPHZWdna+fOnYXOvWnTJgUGBur++++3xxmGoY8++qhQ3Icffiiz2ayHH37YpWtRETGTEwAAAAAAAC6zqfrN5MzPz9eUKVMUHBys+++/X4cOHXKICQsLU7du3bRy5Up5enoqJiZGOTk5Wrt2rdLT0zV58mR7IaBRo0Zp69atiouL05gxY2Q2m7VkyRJdu3ZNCQkJ9mMOGjRI77//vsaMGaNx48bJ399f69ev14kTJ7R06VJ7XI8ePbRq1SpNmDBBV65cUXBwsLZs2aJPP/1UU6ZMsZ+3bdu26tWrl+bMmSNPT0+Fh4fr888/17p16/Tcc8+pXr16t/hK3jomwzAMd3cCAAAAAAAAlcNvt7/s7i6Uu392m3rT/adPn1bXrl1vGrNjxw4FBQVp5cqVeu+995SRkSGz2azIyEgNHTpUXbp0KRR/4sQJTZ8+Xfv27ZNhGGrXrp0SEhLUunXrQnFnz57VtGnTtHv3bl27dk2RkZEaPXq0OnToUCguOztbM2fOVEpKirKzs9W8eXMNGzZMvXv3LhSXl5enpKQkJScnKzMzU8HBwerfv7+efvrp4i5ThUaSEwAAAAAAAC57cNt4d3eh3H0eO8XdXUAZ8bg6AAAAAAAAXGZU48JDqLhIcgIAAAAAAMBlVhtJTlQ8JDkBAAAAAADgsupYeAgVH0lOAAAAAAAAuMxqq+HuLgAOSpXkvH79uj799FN9+eWXOn36tM6fP6/s7GzVrVtXgYGBCg4OVlRUlDp37iwfH58SH3/Pnj1KSkrSkSNH5O3trRYtWmjEiBF66KGH7DGpqamaNWuWDhw4oPz8fLVu3Vrx8fGKjo4uzVsCAAAAAACACyhhjYqoRNXVL168qIULF+q9995TTk6ObvZSk8mkWrVq6cknn1RcXJz8/PxcOsfOnTs1cuRIderUSYMHD5ZhGFqxYoX27NmjOXPm6JFHHtGpU6f0+OOPq3nz5ho1apR8fHy0cuVK7d69W2vWrFHbtm1dfUsAAAAAAAAogTbJE9zdhXL3Te/X3d0FlJHLSc5t27ZpwoQJunjxoho3bqwOHTqoQ4cOat68uQICAlS3bl1lZ2fr/Pnz+v7777Vr1y7985//1L///W/5+/vrjTfeULdu3Yo9T+/evZWXl6e//e1vMpvNkqRr166pc+fOCgkJ0dq1azV+/Hht3bpVO3fuVGBgoCQpLy9PsbGxatq0qVasWFH6KwIAAAAAAIAitdr0mru7UO4O93nN3V1AGbn0uPrbb7+tBQsWKCwsTFOnTi302PgvBQYGKjAwUC1atLAnND/77DPNmjVL8fHxGjlypOLj44s8j2EYGjlypAIDA+0JTkmqWbOmmjRpop9++kmGYSglJUUxMTH2BKckeXl5KTY2VqtXr7Y/Og8AAAAAAIDyxePqqIhcSnIuXrxYzz//vIYPH64aNUq2uOxDDz2kjh07auHChZo/f/5Nk5wmk0k9e/Z0aLdYLDp58qQiIiKUkZGhy5cvKzQ01CEuNDRUNptN6enpioqKKlE/AQAAAAAAUDwbhYdQAbmU5Fy4cKE6duxY6pPUqFFDo0aNUps2bUr1+qSkJF28eFEDBgxQVlaWJCkgIMAhrqCtIAYAAAAAAADli4mcqIhcSnKWJcH5Sx06dCjxa9avX6/Fixerb9++io2N1ZdffinpxuPpv1bwiPv169eLPe5XJ+92aAv0sDiN9TGZStLlUrPegvne1nI/IgAAAFAx2Zy0WYv4Edsix5/xL9vMDm0/5gc6tO3Kbun0mB+faOXQZv6yjkNb0IFcp6/3+S7Toc24cNGxLc/J9xabs3cvydmTeM6+35TgiT3Tbfp+5G4lqNHr/Po7e72zuCKuvcnL8X40Bfg7tF0Lqe/09T+393Zos0Zddmh7NORbh7bf1jnm9Jh3eZ53aKtTw/F+NBeRAvNwdus5jXSdh6txt+C+zSviHrlkc+xV67tPl/v53cmwVY+/B1C5uJTk/DWr1aqVK1fqk08+0c8//6z8/HyncSaTSSkpKaXu3Ny5c5WUlKTevXvrjTfekCR5e9/4i9picfyLNC8vT9KNNTwBAAAAAABQ/gyDJCcqnlIlOadMmaJ33nmnZP+zVUITJ07U+vXrNWzYMI0bN87+v4UNGjSQJJ0/7/g/SJmZmYViAAAAAAAAUL4oPISKqFRJzp07d6p58+Z68803FRkZ6fTR8bKYPXu23n33Xf3pT3/S73//+0L7GjVqpICAAKWlpTm8Li0tTWazWS1bOn98BAAAAAAAAGVjUHgIFVCpkpxZWVl65ZVX1K5du3LujpSSkqKFCxdq3LhxDgnOAt27d9fGjRt17tw5+6zNnJwcbdu2TZ06dVLt2rWLPY+zdUPqmJwPUm+T42W6Fet5VES3Yp1QAAAA4HaxOV2pU7IYju21THkObVZdcGi7y8fxqTJJCqiT49B2obbjmpxWH+ffOwwP15IGhsVxuTDDemtW4zfVcPzeU52/IRi28n/3Jg/nq0o6W5PT8HSMtfo4f31+bce+1qtz1aHtbm/H+/lOT8f7XpIaejiOkdpOvkebTc77VKMMK3BWxO/gFqOoced8Sb+qhFQBKqJSJTmbNm1qX/+yPOXn52vKlCkKDg7W/fffr0OHDjnEhIWFadSoUdq6davi4uI0ZswYmc1mLVmyRNeuXVNCQkK59wsAAAAAAAA3UHgIFVGpkpxDhw7V3Llz1bNnTwUGOlYbLK2ffvpJP/74oyTpiSeecBqzY8cOBQcHa+3atZo+fboSEhJkGIbatWunVatWqUWLFuXWHwAAAAAAAPwKMzlRAZUqydm7d29lZmbq4YcfVteuXXXnnXfKbHacSm8ymfTcc8+5fNzg4GCna206ExISooULF7p8bAAAAAAAAJQd1dVREZW68NCsWbNksViUnJxcZFxJk5wAAAAAAACo4EhyogIqVZJzzpw5MplMevLJJxUZGSlvb+/y7hcAAAAAAAAqIh5XRyk98sgj6tmzp8aMGVPuxy5VkvPkyZP63//931vSodvF7OQ/HcxFVFd3VhmuhhwP4FHE628Xq5MKkWXlyX/OAAAAoBKzFfFN3Gxy8rOzzeLQ5F/DseBqI89LTo/ZsNYVh7af6zZwaMur47zydC1vL8dGZ5W3nVQ8V1FFnm1lq7p+C75iOFfWytmVpdRzDRc/T8npZ284uUfy6jj/Hmqp63hNGta67NhmvujQ5uy+l5xXUq9Vw3HpuqKqqDv7Hn0r3Irv5k6/bxfxdrxMZRt3lQKFh1BK33//vZYsWaKzZ8/qjTfekOkXf///+OOP2rBhg1588cVSHbtUI9/Pz0+NGzcu1QkBAAAAAABQeRlG1dtw+0yePFmff/65XnjhBeXn59vbz58/r6VLl5b6uKVKcvbq1Us7duwo9UkBAAAAAABQSRlVcMNt07RpU61du1bHjh3TyJEjdf369XI5bqmSnP/7v/8rHx8fDR8+XNu3b9eRI0d0/PhxpxsAAAAAAACqDpPNVOU23F4NGzbU6tWrlZWVpSFDhujKFcclX0qqVGtyxsTE2J+Z37VrV5FxJpNJR44cKV3PAAAAAAAAUPEw8xHlIDAwUKtWrVJcXJwGDx5c5to/pUpy/uY3vynTSV2Rmpqq559/Xt9//702b96skJAQh/2zZs3SgQMHlJ+fr9atWys+Pl7R0dGlPmdJFkd2d5EhZypinwAAAAB3cl7iR7I4+YLubXL8elTL5FiApYFnttNjBte66NB20C/foS23rmOhFkmy1nYsKuNpdow1OStIY3E8T6VSjRfEc/Z5SpLJy/F+sPo6KTxU1/kMNMPf8d51do/W83CcPVXL5Pzz8Da5VmTIWfFeVDHVeObjrchHVSdvvfWWGjVqZP+zr6+vli1bpjFjxugPf/hDmY5dqiTn6tWry3TS4qxZs0ZTpkyRn5+f0/2nTp3SwIED1bx5c82YMUM+Pj5auXKlhgwZojVr1qht27a3tH8AAAAAAADVVjX9fwnyUWXXt29fhzZvb2/Nnz9fr776qrZu3VrqY1e4qX/79u3T1KlTNXHiRD311FNOY+bPny+r1apFixbpv/7rv/Tggw8qMTFR9evX1+zZs29zjwEAAAAAAKoRdxcJclPhIfJRt46np6f+8pe/6Ouvvy79MUr7wvPnz+sf//iHzp49K4vFUmTc6NGjS3Rcf39/rV+/XpGRkUpKSnLYbxiGUlJSFBMTo8DAQHu7l5eXYmNjtXr1amVnZ6tu3bolOi8AAAAAAACKVx0L9ZCPKhmr1arly5dr+/btOnfunPz9/dWiRQtFRkYqIiJCERER5X6tSpXk3L9/v+Li4pSTkyPjJmunmEymEic5W7ZsedP9GRkZunz5skJDQx32hYaGymazKT09XVFRUSU6LwAAAAAAAFxQDR9XJx9VMnPmzNHSpUvtecOMjAwdOXJEH330kb2Y+R133GFPej733HNlPmepkpwzZ85Ubm6u+vTpo7Zt28rHx6fMHXFVVlaWJCkgIMBhX0FbQQwAAAAAAADKVxG1qao08lElk5ycLE9PT82ZM0edOnXS5cuXlZ6ertTUVKWmpuro0aM6ceKEMjIytGPHDvclOY8ePapBgwZp/PjxZe5ASeXl3agQ5+Wk0pz5/1cevH79eqmObZOtiHYno9dwjKW6OQAAAFA51JDjo5YeJsc2Hydt/jWuOT3mnd4XHdpq+TnG5vk7fpeRpHwnlbM9fbwdA6/mODQVVaHbcPK9pTpXMr+tnNw7zj4nk2cRX8u9He+H/NqO1c1z/Z0/Nlzbyb3X2Mk96ux+dnbfS87HiLOxhGrAqH6f+63MR1VF2dnZ6tixo7p27SpJCgwM1AMPPKAHHnjAHmOxWHT8+HGlpqaWyzlLleQ0m82KiIgolw6UlLf3jX/kna0DWnDD1axZ87b2CQAAAAAAoNqohv9XQj6qZMLDw2+6xKX0n/xieeUYSzX1MCIiQj/++GO5dKCkGjRoIOlG4aNfy8zMLBQDAAAAAACA8mWyVb2tOOSjSmbgwIHau3fvbX2Ev1RJzrFjx2rdunVKT08v7/4Uq1GjRgoICFBaWprDvrS0NJnN5mKLFwEAAAAAAKCUjCq4FYN8VMn06tVLsbGxGjVqlH7++efbcs5SPa5+5MgR3X///Xr88cf1wAMPqFmzZk7XJDCZTHrppZfK3Mlf6969uzZu3Khz587Zs+Q5OTnatm2bOnXqpNq1a5f7OQEAAAAAAODazMeqiHxUyQwfPlxxcXHq3bu3+vbtqy5duqhVq1aqVavWLTlfqZKcb731lkwmkwzD0D//+U/985//dBpXmiTn6dOndeHCBUmyZ3qPHz+unJwbi2uHhYVp1KhR2rp1q+Li4jRmzBiZzWYtWbJE165dU0JCgkvnsTjJ0lucLcotyex09DqZBFvE6wEAAAAUVhGLdtZw8jO+2Uk/69RwXI9Nku70uuDQ1qDOVYe2M351nb7eUtexKI13TcfCQyYvx+IzcrJGnCTJcDymYXOtsCpKwMl9YqrhrPCQk/ve7PxrueHks8+r6xib5+d8Ctpdda44tDU0X3Joc3Y/O7vvJedjxN2st+nedVaQ2GJYncbmVYfiXtWw8JCkcslHVRefffaZxowZI4vFIsMwtHz5cq1YsUImk0l33XWXIiMjFRERYf+1Xr16ZT5nqZKcf/nLX8p84qLMnTtXGzduLNQWHx9v//2OHTsUHBystWvXavr06UpISJBhGGrXrp1WrVqlFi1a3LK+AQAAAAAAVHfVdSZnw4YNyUe5aNasWcrLy9N//dd/qVOnTrpy5YpSU1OVmpqqH374QSdPntSWLVtkMplkMpl05MiRMp+zVEnOxx9/vMwnLsqUKVM0ZcqUYuNCQkK0cOHCW9YPAAAAAAAAOFENJqsWhXyUa3744QdFRkZqwYIFDvtyc3OVlpamo0eP6vDhw07XOS0Nl5KcL7/8st544w2n6266Ki8vT6+++qqmTp1a6mMAAAAAAADAvUzVOMkJ19SvX1/NmjVzus/b21tt2rRRmzZtyvWcLi2osX37dj3xxBM6ePBgqU7yr3/9S//zP/+jlJSUUr0eAAAAAAAAFYStCm4oV7Gxsfrmm29k3MY1al2ayfnOO+9o1KhR6tevnzp27Khhw4YpKipKNWoUnSO12Wzav3+/li5dqt27d6tRo0Z65513yq3jZXXVcHzrtYx858E21xZiroiLMAMAAABl5WEq/wIT+UUU7CiLW/HzuIcc37tPEVOYAj0cC700qp3t0HaqbkOnr8+t41gkqFYtx6fpPHx8HF9sKeK7jLPvbFYn195ZMSK4zmmRIcfP0+Tp+D3U5OzzlGSt7aTwUB3HzzO/rvPsTMOalx3anN2jzu5nZ/d9UZwV5LGVYHzbbkF2yXoLkioWOb6noooX51aD4cRMThRn1KhR2rZtm+bPn6/nnnvutpzTpSRnZGSkPvroI02ePFkfffSRdu3apdq1a+v+++9Xs2bNVK9ePfn6+urKlSvKysrS999/r7179+rq1asyDEN9+vTRK6+8Ij8/v1v9fgAAAAAAAHArkeREMUaNGqXw8HDNnTtXJ06c0HPPPaeQkJBbek6XCw/VrVtX06ZN09NPP63Vq1dr165d2rFjh32/yWQqNAW1Xr166tatmwYPHqzIyMjy7TUAAAAAAADcgpmcKM7+/fvtv9+8ebO2bNmiu+++W/fcc48iIiIUGRmpiIgIBQQElNs5S1xdvVWrVvbq56mpqfr+++91/vx5Xb58WXXq1FFgYKCaNWum8PDwcuskAAAAAAAAKgiSnCjGjh07dPToUaWmpio1NVVHjx7VyZMndfLkSX388ccy/f+lcBo2bKiIiAinVdhLqsRJzl8KDw8nmQkAAAAAAFCNmCjUg2I0btxYjRs31sMPP2xvu3Llij3hWfDr8ePH9emnn5bLOcuU5AQAAAAAAEA1w0xOlIKvr6+ioqIUFRVlb7Narfruu+/K5fiVOsmZmpqqWbNm6cCBA8rPz1fr1q0VHx+v6OjoYl97zlrbSetVp7G1TY6VCms4qQDn4aQAHfXWAQAAUN051pguh2M6qfhekp+9nVWPruHkmDYnVZqtRXy59zFZHNoCvXIc2ozazitP5zmprp5f17HCdo0rtRzaiqyFnefYJ5OtBNXVi6geXW2ZirjLnFRXl5P7yeTt+Hkavo6fpyTl1/FyaMur4+Q8vo7fVyXn956ze9SZoqqGW5Xn0OZ0jJQgA+bsTGWtju56bXfnnPfJse264fx+uGTzcWgLLWOfKhpmcqK8eHh4KDS0fEZIpc3BnTp1SgMHDtSFCxc0Y8YMLVy4UL6+vhoyZIgOHjzo7u4BAAAAAABUTUYV3FDpVdqZnPPnz5fVatWiRYsUGBgoSWrfvr1iY2M1e/ZsrVixwr0dBAAAAAAAqIKoro6KqFQzOU+dOlXe/SgRwzCUkpKimJgYe4JTkry8vBQbG6u9e/cqOzvbjT0EAAAAAACoomxVcEOlV6okZ2xsrJ555hlt3rxZFotra3qUp4yMDF2+fNnpM/uhoaGy2WxKT0+/7f0CAAAAAACo6kxG1dtQ+ZXqcfV27drpiy++0N69e+Xn56fHHntMTzzxhEJCQsq7f05lZWVJkgICAhz2FbQVxBSlW7PU8u8YAAAAgCqvXhHtzr4N9XAW2L6IAzxTmt4AwO1H4SFURKWaybl+/Xrt2LFDY8eOVYMGDbRixQo9+uij6t+/vz788ENdv369vPtZSF7ejYpuXl6O1ebMZrMk3fI+AAAAAAAAVEvuLhJE4SE4Uerq6o0bN1ZcXJySk5O1adMmDR06VGfPntX48ePVsWNHvf766zp69Gh59tXO29tbkpw+Kl+QAK1Zs+YtOTcAAAAAAEC15u6EJElOOFHqJOcvhYWFady4cdq5c6dWrlypFi1aaN26derbt68GDRqkzz77rDxOY9egQQNJ0vnz5x32ZWZmFooBAAAAAABA+XH3+pmsyQlnSrUmpzNnz55VcnKyPv74Y/sMznbt2unEiROKi4tT79699eabb9ofJy+LRo0aKSAgQGlpaQ770tLSZDab1bJlyzKfBwAAAAAAAIWRFERFVKYkp81m086dO/X+++9r9+7dys/PV926dTV48GD169dPISEhunbtmhITE7V8+XIFBgZq/Pjx5dLx7t27a+PGjTp37px91mZOTo62bdumTp06qXbt2uVyHgAAAAAAAPwChYdQAZkMwyhx/v3kyZN6//33tXHjRmVlZckwDLVp00b9+vVTr1697Gtm/tIf/vAH7dq1S59//nm5dPzs2bP67//+bwUHB2vMmDEym81asmSJDh48qPfee08tWrQol/MAAAAAAADgP9qNme3uLpS7fyW94O4uoIxKNZOze/fuMplMqlmzpp544gn1799fERERN31Nx44dlZycXKpOOtOwYUOtXbtW06dPV0JCggzDULt27bRq1SoSnAAAAAAAALeIiZmcqIBKVXgoLCxMEyZM0K5du/T6668Xm+CUpHvvvVczZswozemKFBISooULF+qrr77S119/reXLl6t169ZFxqempmr48OFq37692rZtq0GDBmnfvn3l2iegsktNTVWPHj0UFhamEydOON3vyjg6ffq0XnjhBd1///1q3bq1+vbtq23btt2OtwBUCHv27FH//v3Vtm1bRUdHa8CAAQ6F+BhPQPF27typAQMG6De/+Y3atWunfv36Odz/jCWgZPbv36/w8HANHjy4UDtjCSje4MGDFRYW5nSbPfs/sxur/HhydyV0qqvDiVIlOTdt2qT+/fuXaN3L4OBg9erVqzSnKxenTp3SwIEDdeHCBc2YMUMLFy6U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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "system.m.z.sel('z').mpl(scalar_kw={\"colorbar_label\": \"$m_z$\"}, figsize=(15, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the DW pair has moved to the positive $x$ direction. Now, let us visualise the motion using interactive plot." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [], "source": [ "import micromagneticdata as md\n", "\n", "data = md.Data(system.name)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "application/javascript": [ "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", " var py_version = '3.2.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n", " var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n", " var reloading = false;\n", " var Bokeh = root.Bokeh;\n", " var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", "\n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n", " root._bokeh_timeout = Date.now() + 5000;\n", " root._bokeh_failed_load = false;\n", " }\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) {\n", " if (callback != null)\n", " callback();\n", " });\n", " } finally {\n", " delete root._bokeh_onload_callbacks;\n", " }\n", " console.debug(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n", " if (css_urls == null) css_urls = [];\n", " if (js_urls == null) js_urls = [];\n", " if (js_modules == null) js_modules = [];\n", " if (js_exports == null) js_exports = {};\n", "\n", " root._bokeh_onload_callbacks.push(callback);\n", "\n", " if (root._bokeh_is_loading > 0) {\n", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " if (!reloading) {\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " }\n", "\n", " function on_load() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", " run_callbacks()\n", " }\n", " }\n", " window._bokeh_on_load = on_load\n", "\n", " function on_error() {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " var skip = [];\n", " if (window.requirejs) {\n", " window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n", " require([\"jspanel\"], function(jsPanel) {\n", "\twindow.jsPanel = jsPanel\n", "\ton_load()\n", " })\n", " require([\"jspanel-modal\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-tooltip\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-hint\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-layout\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-contextmenu\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-dock\"], function() {\n", "\ton_load()\n", " })\n", " require([\"gridstack\"], function(GridStack) {\n", "\twindow.GridStack = GridStack\n", "\ton_load()\n", " })\n", " require([\"notyf\"], function() {\n", "\ton_load()\n", " })\n", " root._bokeh_is_loading = css_urls.length + 9;\n", " } else {\n", " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n", " }\n", "\n", " var existing_stylesheets = []\n", " var links = document.getElementsByTagName('link')\n", " for (var i = 0; i < links.length; i++) {\n", " var link = links[i]\n", " if (link.href != null) {\n", "\texisting_stylesheets.push(link.href)\n", " }\n", " }\n", " for (var i = 0; i < css_urls.length; i++) {\n", " var url = css_urls[i];\n", " if (existing_stylesheets.indexOf(url) !== -1) {\n", "\ton_load()\n", "\tcontinue;\n", " }\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error;\n", " element.rel = \"stylesheet\";\n", " element.type = \"text/css\";\n", " element.href = url;\n", " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", " document.body.appendChild(element);\n", " } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } var existing_scripts = []\n", " var scripts = document.getElementsByTagName('script')\n", " for (var i = 0; i < scripts.length; i++) {\n", " var script = scripts[i]\n", " if (script.src != null) {\n", "\texisting_scripts.push(script.src)\n", " }\n", " }\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\n", " }\n", " var element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error;\n", " element.async = false;\n", " element.src = url;\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " for (var i = 0; i < js_modules.length; i++) {\n", " var url = js_modules[i];\n", " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\n", " }\n", " var element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error;\n", " element.async = false;\n", " element.src = url;\n", " element.type = \"module\";\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " for (const name in js_exports) {\n", " var url = js_exports[name];\n", " if (skip.indexOf(url) >= 0 || root[name] != null) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\n", " }\n", " var element = document.createElement('script');\n", " element.onerror = on_error;\n", " element.async = false;\n", " element.type = \"module\";\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " element.textContent = `\n", " import ${name} from \"${url}\"\n", " window.${name} = ${name}\n", " window._bokeh_on_load()\n", " `\n", " document.head.appendChild(element);\n", " }\n", " if (!js_urls.length && !js_modules.length) {\n", " on_load()\n", " }\n", " };\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\"];\n", " var js_modules = [];\n", " var js_exports = {};\n", " var css_urls = [];\n", " var inline_js = [ function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", "function(Bokeh) {} // ensure no trailing comma for IE\n", " ];\n", "\n", " function run_inline_js() {\n", " if ((root.Bokeh !== undefined) || (force === true)) {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\n", " // Cache old bokeh versions\n", " if (Bokeh != undefined && !reloading) {\n", "\tvar NewBokeh = root.Bokeh;\n", "\tif (Bokeh.versions === undefined) {\n", "\t Bokeh.versions = new Map();\n", "\t}\n", "\tif (NewBokeh.version !== Bokeh.version) {\n", "\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n", "\t}\n", "\troot.Bokeh = Bokeh;\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " }\n", " root._bokeh_is_initializing = false\n", " }\n", "\n", " function load_or_wait() {\n", " // Implement a backoff loop that tries to ensure we do not load multiple\n", " // versions of Bokeh and its dependencies at the same time.\n", " // In recent versions we use the root._bokeh_is_initializing flag\n", " // to determine whether there is an ongoing attempt to initialize\n", " // bokeh, however for backward compatibility we also try to ensure\n", " // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n", " // before older versions are fully initialized.\n", " if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n", " root._bokeh_is_initializing = false;\n", " root._bokeh_onload_callbacks = undefined;\n", " console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n", " load_or_wait();\n", " } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n", " setTimeout(load_or_wait, 100);\n", " } else {\n", " Bokeh = root.Bokeh;\n", " bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", " root._bokeh_is_initializing = true\n", " root._bokeh_onload_callbacks = []\n", " if (!reloading && (!bokeh_loaded || is_dev)) {\n", "\troot.Bokeh = undefined;\n", " }\n", " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n", "\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", "\trun_inline_js();\n", " });\n", " }\n", " }\n", " // Give older versions of the autoload script a head-start to ensure\n", " // they initialize before we start loading newer version.\n", " setTimeout(load_or_wait, 100)\n", "}(window));" ], "application/vnd.holoviews_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n var py_version = '3.2.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n var reloading = false;\n var Bokeh = root.Bokeh;\n var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n run_callbacks();\n return null;\n }\n if (!reloading) {\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n require([\"jspanel\"], function(jsPanel) {\n\twindow.jsPanel = jsPanel\n\ton_load()\n })\n require([\"jspanel-modal\"], function() {\n\ton_load()\n })\n require([\"jspanel-tooltip\"], function() {\n\ton_load()\n })\n require([\"jspanel-hint\"], function() {\n\ton_load()\n })\n require([\"jspanel-layout\"], function() {\n\ton_load()\n })\n require([\"jspanel-contextmenu\"], function() {\n\ton_load()\n })\n require([\"jspanel-dock\"], function() {\n\ton_load()\n })\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 9;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n var existing_stylesheets = []\n var links = document.getElementsByTagName('link')\n for (var i = 0; i < links.length; i++) {\n var link = links[i]\n if (link.href != null) {\n\texisting_stylesheets.push(link.href)\n }\n }\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n if (existing_stylesheets.indexOf(url) !== -1) {\n\ton_load()\n\tcontinue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } var existing_scripts = []\n var scripts = document.getElementsByTagName('script')\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n\texisting_scripts.push(script.src)\n }\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (var i = 0; i < js_modules.length; i++) {\n var url = js_modules[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n var url = js_exports[name];\n if (skip.indexOf(url) >= 0 || root[name] != null) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\"];\n var js_modules = [];\n var js_exports = {};\n var css_urls = [];\n var inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n\tvar NewBokeh = root.Bokeh;\n\tif (Bokeh.versions === undefined) {\n\t Bokeh.versions = new Map();\n\t}\n\tif (NewBokeh.version !== Bokeh.version) {\n\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n\t}\n\troot.Bokeh = Bokeh;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n Bokeh = root.Bokeh;\n bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n if (!reloading && (!bokeh_loaded || is_dev)) {\n\troot.Bokeh = undefined;\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n\trun_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));" }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "if ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n", " window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n", "}\n", "\n", "\n", " function JupyterCommManager() {\n", " }\n", "\n", " JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n", " if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", " comm_manager.register_target(comm_id, function(comm) {\n", " comm.on_msg(msg_handler);\n", " });\n", " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", " window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n", " comm.onMsg = msg_handler;\n", " });\n", " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", " google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n", " var messages = comm.messages[Symbol.asyncIterator]();\n", " function processIteratorResult(result) {\n", " var message = result.value;\n", " console.log(message)\n", " var content = {data: message.data, comm_id};\n", " var buffers = []\n", " for (var buffer of message.buffers || []) {\n", " buffers.push(new DataView(buffer))\n", " }\n", " var metadata = message.metadata || {};\n", " var msg = {content, buffers, metadata}\n", " msg_handler(msg);\n", " return messages.next().then(processIteratorResult);\n", " }\n", " return messages.next().then(processIteratorResult);\n", " })\n", " }\n", " }\n", "\n", " JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n", " if (comm_id in window.PyViz.comms) {\n", " return window.PyViz.comms[comm_id];\n", " } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", " var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n", " if (msg_handler) {\n", " comm.on_msg(msg_handler);\n", " }\n", " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", " var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n", " comm.open();\n", " if (msg_handler) {\n", " comm.onMsg = msg_handler;\n", " }\n", " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", " var comm_promise = google.colab.kernel.comms.open(comm_id)\n", " comm_promise.then((comm) => {\n", " window.PyViz.comms[comm_id] = comm;\n", " if (msg_handler) {\n", " var messages = comm.messages[Symbol.asyncIterator]();\n", " function processIteratorResult(result) {\n", " var message = result.value;\n", " var content = {data: message.data};\n", " var metadata = message.metadata || {comm_id};\n", " var msg = {content, metadata}\n", " msg_handler(msg);\n", " return messages.next().then(processIteratorResult);\n", " }\n", " return messages.next().then(processIteratorResult);\n", " }\n", " }) \n", " var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n", " return comm_promise.then((comm) => {\n", " comm.send(data, metadata, buffers, disposeOnDone);\n", " });\n", " };\n", " var comm = {\n", " send: sendClosure\n", " };\n", " }\n", " window.PyViz.comms[comm_id] = comm;\n", " return comm;\n", " }\n", " window.PyViz.comm_manager = new JupyterCommManager();\n", " \n", "\n", "\n", "var JS_MIME_TYPE = 'application/javascript';\n", "var HTML_MIME_TYPE = 'text/html';\n", "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n", "var CLASS_NAME = 'output';\n", "\n", "/**\n", " * Render data to the DOM node\n", " */\n", "function render(props, node) {\n", " var div = document.createElement(\"div\");\n", " var script = document.createElement(\"script\");\n", " node.appendChild(div);\n", " node.appendChild(script);\n", "}\n", "\n", "/**\n", " * Handle when a new output is added\n", " */\n", "function handle_add_output(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", " if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", " var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", " if (id !== undefined) {\n", " var nchildren = toinsert.length;\n", " var html_node = toinsert[nchildren-1].children[0];\n", " html_node.innerHTML = output.data[HTML_MIME_TYPE];\n", " var scripts = [];\n", " var nodelist = html_node.querySelectorAll(\"script\");\n", " for (var i in nodelist) {\n", " if (nodelist.hasOwnProperty(i)) {\n", " scripts.push(nodelist[i])\n", " }\n", " }\n", "\n", " scripts.forEach( function (oldScript) {\n", " var newScript = document.createElement(\"script\");\n", " var attrs = [];\n", " var nodemap = oldScript.attributes;\n", " for (var j in nodemap) {\n", " if (nodemap.hasOwnProperty(j)) {\n", " attrs.push(nodemap[j])\n", " }\n", " }\n", " attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n", " newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n", " oldScript.parentNode.replaceChild(newScript, oldScript);\n", " });\n", " if (JS_MIME_TYPE in output.data) {\n", " toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n", " }\n", " output_area._hv_plot_id = id;\n", " if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n", " window.PyViz.plot_index[id] = Bokeh.index[id];\n", " } else {\n", " window.PyViz.plot_index[id] = null;\n", " }\n", " } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", "}\n", "\n", "/**\n", " * Handle when an output is cleared or removed\n", " */\n", "function handle_clear_output(event, handle) {\n", " var id = handle.cell.output_area._hv_plot_id;\n", " var server_id = handle.cell.output_area._bokeh_server_id;\n", " if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n", " var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n", " if (server_id !== null) {\n", " comm.send({event_type: 'server_delete', 'id': server_id});\n", " return;\n", " } else if (comm !== null) {\n", " comm.send({event_type: 'delete', 'id': id});\n", " }\n", " delete PyViz.plot_index[id];\n", " if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n", " var doc = window.Bokeh.index[id].model.document\n", " doc.clear();\n", " const i = window.Bokeh.documents.indexOf(doc);\n", " if (i > -1) {\n", " window.Bokeh.documents.splice(i, 1);\n", " }\n", " }\n", "}\n", "\n", "/**\n", " * Handle kernel restart event\n", " */\n", "function handle_kernel_cleanup(event, handle) {\n", " delete PyViz.comms[\"hv-extension-comm\"];\n", " window.PyViz.plot_index = {}\n", "}\n", "\n", "/**\n", " * Handle update_display_data messages\n", " */\n", "function handle_update_output(event, handle) {\n", " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n", " handle_add_output(event, handle)\n", "}\n", "\n", "function register_renderer(events, OutputArea) {\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[0]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " events.on('output_added.OutputArea', handle_add_output);\n", " events.on('output_updated.OutputArea', handle_update_output);\n", " events.on('clear_output.CodeCell', handle_clear_output);\n", " events.on('delete.Cell', handle_clear_output);\n", " events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n", "\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " safe: true,\n", " index: 0\n", " });\n", "}\n", "\n", "if (window.Jupyter !== undefined) {\n", " try {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " } catch(err) {\n", " }\n", "}\n" ], "application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ ":DynamicMap [t]\n", " :Overlay\n", " .Image.I :Image [x,y] (field)\n", " .VectorField.I :VectorField [x,y] (angle,mag)" ] }, "execution_count": 9, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "p1002" } }, "output_type": "execute_result" } ], "source": [ "data[1].hv(kdims=[\"x\", \"y\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Single domain wall\n", "\n", "Modify the previous code to obtain one domain wall instead of a domain wall pair and move it using the same current.\n", "\n", "**Solution**" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [] }, "outputs": [], "source": [ "# Definition of parameters\n", "L = 500e-9 # sample length (m)\n", "w = 20e-9 # sample width (m)\n", "d = 2.5e-9 # discretisation cell size (m)\n", "Ms = 5.8e5 # saturation magnetisation (A/m)\n", "A = 15e-12 # exchange energy constant (J/)\n", "D = 3e-3 # Dzyaloshinkii-Moriya energy constant (J/m**2)\n", "K = 0.5e6 # uniaxial anisotropy constant (J/m**3)\n", "u = (0, 0, 1) # easy axis\n", "gamma0 = 2.211e5 # gyromagnetic ratio (m/As)\n", "alpha = 0.3 # Gilbert damping\n", "\n", "# Mesh definition\n", "p1 = (0, 0, 0)\n", "p2 = (L, w, d)\n", "cell = (d, d, d)\n", "region = df.Region(p1=p1, p2=p2)\n", "mesh = df.Mesh(region=region, cell=cell)\n", "\n", "# Micromagnetic system definition\n", "system = mm.System(name='domain_wall')\n", "system.energy = mm.Exchange(A=A) + \\\n", " mm.DMI(D=D, crystalclass='Cnv_z') + \\\n", " mm.UniaxialAnisotropy(K=K, u=u)\n", "system.dynamics = mm.Precession(gamma0=gamma0) + mm.Damping(alpha=alpha)\n", "\n", "def m_value(pos):\n", " x, y, z = pos\n", " # Modify the following line\n", " if 20e-9 < x:\n", " return (0, 0, -1)\n", " else:\n", " return (0, 0, 1)\n", " # We have added the y-component of 1e-8 to the magnetisation to be able to \n", " # plot the vector field. This will not be necessary in the long run.\n", " \n", "system.m = df.Field(mesh, nvdim=3, value=m_value, norm=Ms)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABTkAAADJCAYAAADo3TbeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCr0lEQVR4nO3de1hVZf7//9dWNqCSAipZMnkA5GAeSoaSUfKjiaY5lvOpPHZAB9EUC62smTTKGk1RgzxrnlJJ+2TGVI6i1ejX0rLGTAXMTDLMBA+oiMDe6/eHP/ZEoGxg6+bwfFzXupS13nutN0vW6Ly673WbDMMwBAAAAAAAAAA1VD1nNwAAAAAAAAAAVUHICQAAAAAAAKBGI+QEAAAAAAAAUKMRcgIAAAAAAACo0Qg5AQAAAAAAANRohJwAAAAAAAAAajRCTgAAAAAAAAA1GiEnAAAAAAAAgBrNxdkNAAAAAAAAoOaw/tLO2S04XL0WGc5uAVVEyAkAAAAAAAC7WWV1dgsOx1Tnmo+QEwAAAAAAAHYrNCzObsHhCMhqPv4MAQAAAAAAYLfaOJITNR8hJwAAAAAAAOxWaBByovoh5AQAAAAAAIDdLDKc3QJQCiEnAAAAAAAA7GYl5EQ1RMgJAAAAAAAAuxUadTPkHDFihPbs2VPmsZiYGD399NOSpLS0NM2ePVt79+5VUVGROnTooNjYWIWFhZX4zPHjx5WQkKBdu3YpLy9PAQEBiomJUWRkZIm606dPa86cOdq+fbvOnTunVq1aacSIERo8eHCJukuXLikxMVEff/yxsrOzdcstt2jQoEEaPXq06tX77/rxFotFixcv1saNG5WVlaWmTZuqX79+mjBhgtzd3R1xq5yCkBMAAAAAAAB2q8vT1du3b6/4+PhS+318fCRJmZmZGjZsmNq2batZs2bJ3d1dK1euVFRUlNasWaNOnTpJks6dO6ehQ4eqQYMGio+PV9OmTfXee+8pNjZWiYmJtqCzsLBQTzzxhLKzs/XMM8/oD3/4gz755BNNnTpV+fn5evzxx209TJgwQV9++aUmTZqkoKAgff3113rjjTeUk5Ojv//977a6adOmaf369Ro3bpzCwsJ0+PBhvf766/rxxx+1YMGC63j3ri9CTgAAAAAAANitsO5mnGrUqJE6dOhw1ePz58+XxWLRokWL5O3tLUnq0qWLIiMjNWfOHK1YsUKStGrVKv36669KSUlRQECAJCk0NFRHjhzRrFmzbCFnSkqK0tLStHjxYt1zzz228x0/flyJiYkaPHiw3N3dtXv3bn322WeaMmWKhg0bZqs7e/as3nrrLUVFRenWW2/VTz/9pHXr1ikqKkpjxoyx1VmtVsXHx+urr75SaGjodbl311u98ksAAAAAAACAKywy1brNEQzDUGpqqsLDw20BpyS5uroqMjJSu3fvVm5uriRp69atCgwMtAWckmQymdS/f38dO3ZM6enptromTZqoe/fuJa51//336+LFi9q1a5etrvjzvzVgwABZrVZt27ZNkrRt2zYZhqEBAwaUqOvfv79MJpNSU1Mdci+cgZATAAAAAAAAdrMatW9zhKysLJ0/f75EcFksICBAVqtVGRkZKioq0g8//HDVOkk6dOiQJCk9PV1+fn4l3ql5tTofHx95enqWqGvbtq1MJlOJOpPJJD8/vxJ1TZo0kY+Pj62uJmK6OgAAAAAAAOxWUIfHzJ05c0aTJ0/WF198oezsbLVq1UpDhw7VsGHDlJOTI0ny8vIq9bnifTk5OcrNzVVhYeE1606fPm37NSgoyK66ss7n6uoqDw8PW11OTo48PDzk6upa5jmL62oiQk4AAAAAAADYzWo4Znp3TXT8+HFFRkYqISFBubm5Sk5O1ssvv6z8/HzbokJlBYhms1mSlJ+fr8uXL9tVJ0mXL1+2u65hw4Zl9mw2m8s9X3HduXPnrvKdV3+EnAAAAAAAALBbgeo7uwWnSEpKkouLizw8PGz7evTooUceeUSJiYlatmyZpCsrov9eQUGBJKlBgwZyc3Ozq06S3N3dq1RXXOvu7l6hupqIkBMAAAAAAAB2q6sjOX//vkvpymJBvXr10r59+2z7yprynZ2dLUlq3ry5mjRpIldX13LrJKlZs2Z21/3www+l6vLz83XhwgX5+PjY6s6fP6+CgoJSIzpzcnLKnBpfU9TdlygAAAAAAACgwpy9ErqzVle3Wq0qKioqtb94KnijRo3k5eVlWxn9t9LT02U2m9WuXTvVr19fAQEBV62TpPbt20uSgoOD9f3338tqtZZb9+uvv+rMmTMl6jIyMkrVGYahw4cPl6jLzs5Wdna2ra4mIuQEAAAAAACA3QoNl1q3lSczM1MdO3ZUQkJCif0Wi0Wpqany9PSUv7+/+vTpo127dunUqVO2mry8PG3ZskURERFq1KiRJKlv377KyMhQWlqarc5qtSolJUVBQUFq06aNrS43N1fbt28vcd1NmzbJ29tbd911l63OMAx98MEHJeref/99mc1m3XvvvZKk3r17y8XFRZs2bSp1Pkm67777yr0X1RXT1QEAAAAAAGA3e0c+1ia33XabevfurZUrV8rFxUXh4eHKy8vT2rVrlZGRoWnTpslsNmvs2LHavHmzYmJiNH78eJnNZi1ZskSXLl1SXFyc7XzDhw/Xu+++q/Hjx2vSpEny9PRUcnKyjhw5oqVLl9rq+vbtq1WrVmnKlCm6cOGCfH199fHHH+vTTz/V9OnTbQsQderUSf3799fcuXPl4uKioKAgff7551q3bp2efPJJNW3aVJJ08803KyoqSsuWLZOXl5fCwsJ04MABJSYmatCgQQoODr6xN9aBTIZhGM5uAgAAAAAAADXDv46GOLsFh+vT5mC5NQUFBVq5cqU2bNigrKwsmc1mhYSEaOTIkerZs6et7siRI5o5c6b27NkjwzDUuXNnxcXFqUOHDiXOd/LkSb3++uvauXOnLl26pJCQEI0bN07dunUrUZebm6uEhASlpqYqNzdXbdu21ahRozRgwIBS/SUlJSklJUXZ2dny9fXVkCFD9Nhjj5WoMwxDy5Yt0/r165WVlSUfHx898MADGjNmjC00rYkIOQEAAAAAAGC3j47e7uwWHK5fm++c3QKqiOnqAAAAAAAAsJs977AEbjR+KgEAAAAAAGA3i1H33smJ6o+QEwAAAAAAAHazqJ6zWwBKIeQEAAAAAACA3ZiujuqIn0oAAAAAAADYjenqqI4IOQEAAAAAAGA3RnKiOuKnEgAAAAAAAHazipGcqH4IOQEAAAAAAGA3i8HCQ6h+CDkBAAAAAABgt0KjvrNbAEoh5AQAAAAAAIDdLGIkJ6ofQk4AAAAAAADYjZGcqI4IOQEAAAAAAGA3K+/kRDVEyAkAAAAAAAC7WVhdHdUQIScAAAAAAADsVmglTkL1w08lAAAAAAAA7GZlJCeqIUJOAAAAAAAA2K3QysJDqH4IOQEAAAAAAGA3i1h4CNUPIScAAAAAAADsZjWYro7qh5ATAAAAAAAAdis0mK6O6oeQEwAAAAAAAHZjJCeqI0JOAAAAAAAA2I2RnKiOCDkBAAAAAABgN0Zyojoi5AQAAAAAAIDdrAarq6P6IeQEAAAAAACA3QoJOVENEXICAAAAAADAbozkRHVEyAkAAAAAAAC7FdXhkHPXrl1KSkrSwYMH5ebmJn9/f40ePVr33HOPJGnEiBHas2dPmZ+NiYnR008/bfs6LS1Ns2fP1t69e1VUVKQOHTooNjZWYWFhJT53/PhxJSQkaNeuXcrLy1NAQIBiYmIUGRlZou706dOaM2eOtm/frnPnzqlVq1YaMWKEBg8eXKLu0qVLSkxM1Mcff6zs7GzdcsstGjRokEaPHq169Wruny0hJwAAAAAAAOxWVxce2r59u8aMGaOIiAglJSXJMAytWLFC0dHRmjt3ru677z5JUvv27RUfH1/q8z4+PrbfZ2ZmatiwYWrbtq1mzZold3d3rVy5UlFRUVqzZo06deokSTp37pyGDh2qBg0aKD4+Xk2bNtV7772n2NhYJSYm2oLOwsJCPfHEE8rOztYzzzyjP/zhD/rkk080depU5efn6/HHH7dde8KECfryyy81adIkBQUF6euvv9Ybb7yhnJwc/f3vf7+Od/D6IuQEAAAAAACA3Yqs9Z3dglPMmTNHrVu31vz582U2myVJYWFh6tGjh1avXm0LORs1aqQOHTpc81zz58+XxWLRokWL5O3tLUnq0qWLIiMjNWfOHK1YsUKStGrVKv36669KSUlRQECAJCk0NFRHjhzRrFmzbCFnSkqK0tLStHjxYtuo0i5duuj48eNKTEzU4MGD5e7urt27d+uzzz7TlClTNGzYMFvd2bNn9dZbbykqKkq33nqrY2/cDVJzx6ACAAAAAADghrPKVOu28hiGoTFjxig+Pt4WcEpSgwYN1KpVK/3yyy923z/DMJSamqrw8HBbwClJrq6uioyM1O7du5WbmytJ2rp1qwIDA20BpySZTCb1799fx44dU3p6uq2uSZMm6t69e4lr3X///bp48aJ27dplqyv+/G8NGDBAVqtV27Zts/v7qG4IOQEAAAAAAGA3q2GqdVt5TCaT+vXrp7vvvrvE/sLCQh07dky33Xab3fcvKytL58+fLxFcFgsICJDValVGRoaKior0ww8/XLVOkg4dOiRJSk9Pl5+fX6l3apZV5+PjI09PzxJ1bdu2lclkstXVRExXBwAAAAAAgN2KrIyZK5aUlKSzZ89q6NChtn1nzpzR5MmT9cUXXyg7O1utWrXS0KFDbdPDc3JyJEleXl6lzle8LycnR7m5uSosLLxm3enTp22/BgUF2VVX1vlcXV3l4eFhq6uJCDkBAAAAAABgt7q68NDvJScna/HixRo0aFCJlc6PHz+uyMhIJSQkKDc3V8nJyXr55ZeVn5+vkSNHqqCgQNKVYPH3iqfC5+fn6/Lly3bVSdLly5ftrmvYsGGZ34/ZbLbV1USEnAAAAAAAALBbkcFIzjfffFNJSUkaMGCAXnnlFdv+pKQkubi4yMPDw7avR48eeuSRR5SYmKhHHnlEbm5ukq5Mdf+94gC0QYMGdtdJkru7e5Xqimvd3d3L+c6rL0JOAAAAAAAA2K2uj+ScOnWqkpOTNWrUKE2aNEkm03/vx+/fdSldeZ9nr169tG/fPn3//fdq0aKFJJU5NTw7O1uS1Lx5czVp0kSurq7l1klSs2bN7K774YcfStXl5+frwoUL8vHxueb3Xp0RcgIAAAAAAMBudTnknDNnjt555x397W9/06OPPlrquNVqldVqlYtLyciteBq4m5ubWrRoIS8vL9vK6L+Vnp4us9msdu3aqX79+goICLhqnSS1b99ekhQcHKzPP/9cVqu1xOJDZdV98cUXOnPmTIl3c2ZkZJSoq4kYXwwAAAAAAAC7Waz1at1mj9TUVC1cuFATJ04sM+DMzMxUx44dlZCQUPJ+WSxKTU2Vp6en/P39JUl9+vTRrl27dOrUKVtdXl6etmzZooiICDVq1EiS1LdvX2VkZCgtLc1WZ7ValZKSoqCgILVp08ZWl5ubq+3bt5e49qZNm+Tt7a277rrLVmcYhj744IMSde+//77MZrPuvfdeu+5FdcRITgAAAAAAANjNqro3krOoqEjTp0+Xr6+v7rrrLu3fv79UTWBgoHr37q2VK1fKxcVF4eHhysvL09q1a5WRkaFp06bZFgIaO3asNm/erJiYGI0fP15ms1lLlizRpUuXFBcXZzvn8OHD9e6772r8+PGaNGmSPD09lZycrCNHjmjp0qW2ur59+2rVqlWaMmWKLly4IF9fX3388cf69NNPNX36dNt1O3XqpP79+2vu3LlycXFRUFCQPv/8c61bt05PPvmkmjZtep3v5PVjMgzDcHYTAAAAAAAAqBn+tPU5Z7fgcP+v94xrHj9+/Lh69ep1zZpt27bJx8dHK1eu1IYNG5SVlSWz2ayQkBCNHDlSPXv2LFF/5MgRzZw5U3v27JFhGOrcubPi4uLUoUOHEnUnT57U66+/rp07d+rSpUsKCQnRuHHj1K1btxJ1ubm5SkhIUGpqqnJzc9W2bVuNGjVKAwYMKFFXUFCgpKQkpaSkKDs7W76+vhoyZIgee+yx8m5TtUbICQAAAAAAALt13TLZ2S043OeR053dAqqI6eoAAAAAAACwm1GHFx5C9UXICQAAAAAAALtZrIScqH4IOQEAAAAAAGC3urjwEKo/Qk4AAAAAAADYzWKt5+wWgFIqFXLm5+fr008/1VdffaXjx4/r9OnTys3NVePGjeXt7S1fX1+FhoaqR48ecnd3r/D5d+3apaSkJB08eFBubm7y9/fX6NGjdc8999hq0tLSNHv2bO3du1dFRUXq0KGDYmNjFRYWVplvCQAAAAAAAHZgCWtURxVaXf3s2bNauHChNmzYoLy8PF3royaTSQ0bNtTDDz+smJgYNWnSxK5rbN++XWPGjFFERIRGjBghwzC0YsUK7dq1S3PnztV9992nzMxMPfjgg2rbtq3Gjh0rd3d3rVy5Ujt37tSaNWvUqVMne78lAAAAAAAAVEDHlCnObsHhvh3wsrNbQBXZHXJu2bJFU6ZM0dmzZ9WyZUt169ZN3bp1U9u2beXl5aXGjRsrNzdXp0+f1tGjR7Vjxw79v//3//Tzzz/L09NTr7zyinr37l3udQYMGKCCggL985//lNlsliRdunRJPXr0kJ+fn9auXavJkydr8+bN2r59u7y9vSVJBQUFioyMVOvWrbVixYrK3xEAAAAAAABcVftNLzm7BYc7MPAlZ7eAKrJruvobb7yhBQsWKDAwUDNmzCgxbfy3vL295e3tLX9/f1ug+dlnn2n27NmKjY3VmDFjFBsbe9XrGIahMWPGyNvb2xZwSlKDBg3UqlUr/fLLLzIMQ6mpqQoPD7cFnJLk6uqqyMhIrV692jZ1HgAAAAAAAI7FdHVUR3aFnIsXL9ZTTz2l6Oho1atXsZfL3nPPPerevbsWLlyo+fPnXzPkNJlM6tevX6n9hYWFOnbsmIKDg5WVlaXz588rICCgVF1AQICsVqsyMjIUGhpaoT4BAAAAAABQPisLD6EasivkXLhwobp3717pi9SrV09jx45Vx44dK/X5pKQknT17VkOHDlVOTo4kycvLq1Rd8b7iGgAAAAAAADgWAzlRHdkVclYl4Pytbt26VfgzycnJWrx4sQYNGqTIyEh99dVXkq5MT/+94inu+fn55Z7X+kvpkaDVUZ9bOzu7BQAAAAAAUAVbrRuc3YJDGVaTs1sASrEr5Pw9i8WilStX6pNPPtGvv/6qoqKiMutMJpNSU1Mr3dybb76ppKQkDRgwQK+88ookyc3NTdKVKey/V1BQIOnKOzwBAAAAAADgeIZByInqp1Ih5/Tp0/X222/LzoXZK2Xq1KlKTk7WqFGjNGnSJJlMVx6g5s2bS5JOnz5d6jPZ2dklagAAAAAAAOBYLDyE6qhSIef27dvVtm1bvfrqqwoJCSlz6nhVzJkzR++8847+9re/6dFHHy1xrEWLFvLy8lJ6enqpz6Wnp8tsNqtdu3YO7QcAAAAAAABXGCw8hGqoUj+VOTk5euyxx9S5c2eHB5ypqalauHChJk6cWCrgLNanTx/t2rVLp06dsu3Ly8vTli1bFBERoUaNGjm0JwAAAAAAAFxhGLVvQ81XqZGcrVu3tr3/0pGKioo0ffp0+fr66q677tL+/ftL1QQGBmrs2LHavHmzYmJiNH78eJnNZi1ZskSXLl1SXFycw/sCAAAAAADAFSw8hOqoUiHnyJEj9eabb6pfv37y9vZ2WDO//PKLfvrpJ0nSQw89VGbNtm3b5Ovrq7Vr12rmzJmKi4uTYRjq3LmzVq1aJX9/f4f1AwAAAAAAgN9h5COqoUqFnAMGDFB2drbuvfde9erVS7feeqvMZnOpOpPJpCeffNLu8/r6+pb5rs2y+Pn5aeHChXafGwAAAAAAAFXH6uqojiq98NDs2bNVWFiolJSUq9ZVNOQEAAAAAABANUfIiWqoUiHn3LlzZTKZ9PDDDyskJERubm6O7gsAAAAAAADVEdPVUUn33Xef+vXrp/Hjxzv83JUKOY8dO6a//vWv16UhAAAAAAAAVGMsPIRKOnr0qJYsWaKTJ0/qlVdekcn035+ln376SevXr9fEiRMrde56lflQkyZN1LJly0pdEAAAAAAAADWXYdS+DTfOtGnT9Pnnn+vpp59WUVGRbf/p06e1dOnSSp+3UiFn//79tW3btkpfFAAAAAAAADWUUQs33DCtW7fW2rVrdfjwYY0ZM0b5+fkOOW+lQs6//vWvcnd3V3R0tLZu3aqDBw/q+++/L3MDAAAAAABA7WGymmrdhhvr5ptv1urVq5WTk6OoqChduHChyues1Ds5w8PDbXPmd+zYcdU6k8mkgwcPVq4zAAAAAAAAVD+MfIQDeHt7a9WqVYqJidGIESOqvPZPpULOP/7xj1W6qD3S0tL01FNP6ejRo/roo4/k5+dX6vjs2bO1d+9eFRUVqUOHDoqNjVVYWNh17w0AAAAAAKDOqsMjH8mjqua1115TixYtbF97eHho2bJlGj9+vJ599tkqnbtSIefq1aurdNHyrFmzRtOnT1eTJk3KPJ6Zmalhw4apbdu2mjVrltzd3bVy5UpFRUVpzZo16tSp03XtDwAAAAAAoM6qoyM5yaOqbtCgQaX2ubm5af78+XrxxRe1efPmSp+7Uu/kvJ727NmjGTNmaOrUqXrkkUfKrJk/f74sFosWLVqk//mf/1HXrl2VmJioZs2aac6cOTe4YwAAAAAAgDrE2YsEOWnhIfKo68fFxUX/+Mc/9M0331T+HJX94OnTp/Xvf/9bJ0+eVGFh4VXrxo0bV6Hzenp6Kjk5WSEhIUpKSip13DAMpaamKjw8XN7e3rb9rq6uioyM1OrVq5Wbm6vGjRtX6LoAAAAAAAAoX11cqIc8qmIsFouWL1+urVu36tSpU/L09JS/v79CQkIUHBys4OBgh9+rSoWcX375pWJiYpSXlyfDuHrcbTKZKhxytmvX7prHs7KydP78eQUEBJQ6FhAQIKvVqoyMDIWGhlbougAAAAAAALBDHZyuTh5VMXPnztXSpUttuWFWVpYOHjyoDz74wLaY+S233GILPZ988skqX7NSIWdCQoIuX76sgQMHqlOnTnJ3d69yI/bKycmRJHl5eZU6VryvuAYAAAAAAACOZaqDISd5VMWkpKTIxcVFc+fOVUREhM6fP6+MjAylpaUpLS1Nhw4d0pEjR5SVlaVt27Y5L+Q8dOiQhg8frsmTJ1e5gYoqKCiQdGU48O+ZzWZJUn5+/g3tCQAAAAAAoM4w6t50dfKoisnNzVX37t3Vq1cvSZK3t7fuvvtu3X333baawsJCff/990pLS3PINSsVcprNZgUHBzukgYpyc3OTpDLfA1r8A9egQYMb2hMAAAAAAECdUQdHcpJHVUxQUNA1X3Ep/TdfdFTGWKnV1YODg/XTTz85pIGKat68uaQrCx/9XnZ2dokaAAAAAAAAOJbJWvu28pBHVcywYcO0e/fuGzqFv1Ih54QJE7Ru3TplZGQ4up9ytWjRQl5eXkpPTy91LD09XWazudzFiwAAAAAAAFBJRi3cykEeVTH9+/dXZGSkxo4dq19//fWGXLNS09UPHjyou+66Sw8++KDuvvtutWnTpsx3EphMJj3zzDNVbvL3+vTpo40bN+rUqVO2lDwvL09btmxRRESEGjVq5PBrAgAAAAAAwL6Rj7UReVTFREdHKyYmRgMGDNCgQYPUs2dPtW/fXg0bNrwu1zMZ5U2QL0NQUJBMJlO5c+tNJpMOHTpUoXMfP35cZ86ckSStX79e69evV2Jiom699VZJUmBgoM6cOaM///nP8vX11fjx42U2m7VkyRLt27dPGzZskL+/f7nXsf4SUKG+nKXPrZ2d3QIAAAAAAKiCrdYNzm7Bofxfn+PsFhzu+2efLrfm5MmTVc6j6orPPvtM48ePV2FhoS0/NJlMMplM+sMf/qCQkBAFBwfbfm3atGmVr1mpkHPjxo121z744IMVOvfkyZOvef5t27bJ19dXR44c0cyZM7Vnzx4ZhqHOnTsrLi5OHTp0sOs6hJwAAAAAAOBGqG0hZ8D02hdyHp5cfsgpqcp5VF0xcOBApaen63/+538UERGhCxcuKC0tTWlpafrxxx9lsVgk/Tf4PHjwYJWvWamQszYg5AQAAAAAADdCrQs5/1ELQ87n7Qs5YZ9OnTrJz89P7733Xqljly9fVnp6ug4dOqQDBw4oPT1d77zzTpWvadc7OZ977jm98sorZb53014FBQV68cUXNWPGjEqfAwAAAAAAAM5lqpPD5VARzZo1U5s2bco85ubmpo4dO6pjx44OvaZdq6tv3bpVDz30kPbt21epi/znP//R//7v/yo1NbVSnwcAAAAAAEA1Ya2FGxwqMjJS3377bbnr+TiSXSHn22+/rXPnzmnw4MGKjo7Wnj17ZLVe+yfAarVq9+7d+utf/6ohQ4bo/Pnzevvttx3SNAAAAAAAAJzDZNS+DY41duxYWa1WzZ8//4Zd067p6iEhIfrggw80bdo0ffDBB9qxY4caNWqku+66S23atFHTpk3l4eGhCxcuKCcnR0ePHtXu3bt18eJFGYahgQMH6oUXXlCTJk2u9/cDAAAAAACA64lQEOUYO3asgoKC9Oabb+rIkSN68skn5efnd12vWeGFhw4cOKDVq1drx44dysnJ+e+JTKYSQ1CbNm2qiIgIjRgxQiEhIY7r2EFYeAgAAAAAANwItW3hoaD42rfwUNpUFh5ypKCgoBJfm0wm3Xbbbbr99tsVHByskJAQBQcHy8vLy2HXrNLq6mlpaTp69KhOnz6t8+fP66abbpK3t7fatGlT6pupbgg5AQAAAADAjVDrQs6XamHI+RIhpyP9/PPPOnTokNLS0pSWlqZDhw7p559/th03mUySpJtvvlnBwcFasGBBla9p13T1qwkKCqr2YSYAAAAAAAAcx8RCPShHy5Yt1bJlS9177722fRcuXLAFnsW/fv/99/r0008dcs0qhZwAAAAAAACoY3gnJyrBw8NDoaGhCg0Nte2zWCz64YcfHHL+Gh1ypqWlafbs2dq7d6+KiorUoUMHxcbGKiwszNmtAQAAAAAA1EqM5ISj1K9fXwEBjnmlZD2HnMUJMjMzNWzYMJ05c0azZs3SwoUL5eHhoaioKO3bt8/Z7QEAAAAAANRORi3cUOPV2JGc8+fPl8Vi0aJFi+Tt7S1J6tKliyIjIzVnzhytWLHCuQ0CAAAAAADUQiZCQVRDlRrJmZmZ6eg+KsQwDKWmpio8PNwWcEqSq6urIiMjtXv3buXm5jqxQwAAAAAAgFrKWgs31HiVCjkjIyP1+OOP66OPPlJhYaGjeypXVlaWzp8/X+ac/YCAAFmtVmVkZNzwvgAAAAAAAGo7k1H7NtR8lZqu3rlzZ33xxRfavXu3mjRpogceeEAPPfSQ/Pz8HN1fmXJyciRJXl5epY4V7yuuuZp6LQ47vrHrYCv/NQEAAAAAAFQjLDyE6qhSIzmTk5O1bds2TZgwQc2bN9eKFSt0//33a8iQIXr//feVn5/v6D5LKCgokHRlevrvmc1mSbruPQAAAAAAANRJzl4kiIWHUIZKr67esmVLxcTEKCUlRZs2bdLIkSN18uRJTZ48Wd27d9fLL7+sQ4cOObJXGzc3N0kqc6p8cQDaoEGD63JtAAAAAACAOs3ZgSQhJ8pQ6ZDztwIDAzVp0iRt375dK1eulL+/v9atW6dBgwZp+PDh+uyzzxxxGZvmzZtLkk6fPl3qWHZ2dokaAAAAAAAAOI6z35/JOzlRlkq9k7MsJ0+eVEpKij788EPbCM7OnTvryJEjiomJ0YABA/Tqq6/appNXRYsWLeTl5aX09PRSx9LT02U2m9WuXbsqXwcAAAAAAAAlEQqiOqpSyGm1WrV9+3a9++672rlzp4qKitS4cWONGDFCgwcPlp+fny5duqTExEQtX75c3t7emjx5skMa79OnjzZu3KhTp07ZRm3m5eVpy5YtioiIUKNGjRxyHQAAAAAAAPwGCw+hGjIZhlHh/P3YsWN69913tXHjRuXk5MgwDHXs2FGDBw9W//79be/M/K1nn31WO3bs0Oeff+6Qxk+ePKk///nP8vX11fjx42U2m7VkyRLt27dPGzZskL+/v0OuAwAAAAAAgP/qPH6Os1twuP8kPe3sFlBFlRrJ2adPH5lMJjVo0EAPPfSQhgwZouDg4Gt+pnv37kpJSalUk2W5+eabtXbtWs2cOVNxcXEyDEOdO3fWqlWrCDgBAAAAAACuExMjOVENVWrhocDAQE2ZMkU7duzQyy+/XG7AKUl33HGHZs2aVZnLXZWfn58WLlyor7/+Wt98842WL1+uDh06XLU+LS1N0dHR6tKlizp16qThw4drz549Du0JqOnS0tLUt29fBQYG6siRI2Uet+c5On78uJ5++mnddddd6tChgwYNGqQtW7bciG8BqBZ27dqlIUOGqFOnTgoLC9PQoUNLLcTH8wSUb/v27Ro6dKj++Mc/qnPnzho8eHCpn3+eJaBivvzySwUFBWnEiBEl9vMsAeUbMWKEAgMDy9zmzPnv6MZa/zw5eyV0VldHGSoVcm7atElDhgyp0HsvfX191b9//8pcziEyMzM1bNgwnTlzRrNmzdLChQvl4eGhqKgo7du3z2l9AdXJmjVr9NBDD+nChQtlHrf3OTp37pyGDh2qgwcPKj4+Xm+99ZYCAwMVGxtbM/7CBqpo+/bteuKJJ+Th4aGkpCTNnDlTbm5uio6O1scffyyJ5wmwx6ZNmzRmzBi1bNlSc+fO1Zw5c+Ti4qLx48fro48+ksSzBFRUQUGBXnzxRf3+rWU8S4D92rdvr3fffbfUNnToUEl143ly9krorK6OslTqnZw10eTJk7V582Zt375d3t7ekq78BR8ZGanWrVtrxYoVzm0QcLI9e/Zo1KhRmjJlik6cOKE333xTH330kfz8/Gw19j5HSUlJmjdvnlJSUhQQECBJMgxDjzzyiM6ePVvt/8IGqmrAgAEqKCjQP//5T5nNZknSpUuX1KNHD/n5+Wnt2rU8T4AdevbsqVtuuUVr1qyx7btw4YLuuecetW/fXqtWreJZAipo7ty5Wr9+vW655RY1bNhQq1evlsS/8wB7FY+ALn52ylIXnqc7R9e+d3J+vYh3ctZ0lRrJWdMYhqHU1FSFh4fb/gdGklxdXRUZGandu3crNzfXiR0Czufp6ank5GT97//+b5nHK/Icbd26VYGBgba/qCXJZDKpf//+OnbsmNLT06/vNwM4kWEYGjNmjOLj420BpyQ1aNBArVq10i+//MLzBNjh8uXLGjlypCZMmFBiv4eHh9q2bausrCyeJaCCMjIytHTpUk2cOFENGza07edZAhynrjxPzh51yUhOlKVOhJxZWVk6f/58if/hKBYQECCr1aqMjAwndAZUH+3atVNISMhVj9v7HBUVFemHH364ap0kHTp0yHGNA9WMyWRSv379dPfdd5fYX1hYqGPHjum2227jeQLs4ObmpmHDhiksLKzE/sLCQp04cUJt2rThWQIqwGq1asqUKbrjjjv0l7/8pcQxniXAcerK82SyGrVuQ81XqdXVa5qcnBxJkpeXV6ljxfuKawCUzd7nKDc3V4WFhdesO3369HXsFKiekpKSdPbsWQ0dOpTnCagEi8WizMxMzZ49W5cvX1ZsbCzPElAB69at04EDB7Rp06ZSx3iWgIo5c+aMJk+erC+++ELZ2dlq1aqVhg4dqmHDhtWd54lM8JrOnz+v+fPn65///KfOnDmjW2+9VREREXryySdtf767d+/Wo48+etVzHDhwQC4uV2I7i8WixYsXa+PGjcrKylLTpk3Vr18/TZgwQe7u7iU+l5ycrLfffls//vijGjdurF69eikuLq7Uz9qWLVu0aNEiHT58WO7u7goPD9ekSZPk6+tbom7Pnj1KTEzUd999p3r16ik0NFRxcXEKCgpyxK1yqDoRchYUFEi6Mjz894qnEubn59/QnoCaxt7n6PLly3bVAXVJcnKyFi9erEGDBikyMlJfffWVJJ4nwF7vvfeenn/+eUlScHCwli9frttvv51nCbDTL7/8ooSEBEVHR6tt27aljvPvPKBijh8/rsjISCUkJCg3N1fJycl6+eWXlZ+fr06dOkmq/c8T07uvrrCwUKNGjdKRI0cUGxur4OBgfffdd0pMTNSePXu0ceNG1a9f31YfHx+v9u3blzpPccApSdOmTdP69es1btw4hYWF6fDhw3r99df1448/asGCBba6pUuXaubMmXriiSf00ksv6cSJE5oxY4YOHDig9evX28750Ucf6emn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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "system.m.z.sel('z').mpl(scalar_kw={\"colorbar_label\": \"$m_z$\"}, figsize=(15, 10))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running OOMMF (ExeOOMMFRunner)[2023/10/23 16:05]... (4.2 s)\n" ] } ], "source": [ "md = mc.MinDriver()\n", "md.drive(system)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "system.m.z.sel('z').mpl(scalar_kw={\"colorbar_label\": \"$m_z$\"}, figsize=(15, 10))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running OOMMF (ExeOOMMFRunner)[2023/10/23 16:05]... (3.8 s)\n" ] } ], "source": [ "ux = 400 # velocity in x direction (m/s)\n", "beta = 0.5 # non-adiabatic STT parameter\n", "\n", "system.dynamics += mm.ZhangLi(u=ux, beta=beta)\n", "\n", "td = mc.TimeDriver()\n", "td.drive(system, t=0.5e-9, n=100)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "system.m.z.sel('z').mpl(scalar_kw={\"colorbar_label\": \"$m_z$\"}, figsize=(15, 10))" ] } ], "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.12" }, "vscode": { "interpreter": { "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" } }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }