Welcome to Fidimag’s documentation!

_images/bobber_toron_vis.png

Fidimag is a micromagnetic and atomistic simulation package, which can be used to simulate the magnetisation of nanoscale samples of materials.

The code for Fidimag is available under an open source license on GitHub.

Contents:

Installation

Please use these instructions to build and run Fidimag on Linux or OS X. We do not currently support Windows, as none of the developers use this as their operating system, though please make a pull request with instructions or let us know if you are able to get Fidimag working on a Windows machine.

Ubuntu

Users can run a quick convenience script in the folder Fidimag/bin by running the command:

sudo bash ubuntu_install_script.sh

Then, follow the instructions in ‘All Systems’ below.

Other Linux

Please install FFTW and Sundials using the scripts below, or use your package manager to do so.

  • install-fftw.sh

  • install-sundials.sh

We also need a number of Python packages:

  • numpy

  • scipy

  • cython

  • pytest

  • matplotlib

  • ipywidgets

  • pyvtk

  • ipython

These can be installed through the pip package manager with:

pip install numpy scipy cython pytest matplotlib ipywidgets pyvtk ipython

You will need a relatively recent installation of CMake (> version 3) to use the Sundials script. You may also need to install development versions of

  • BLAS

  • LAPACK

though many Linux distributions come with these.

Then, follow the instructions in ‘All Systems’ below.

OS X

OS X has not shipped with GCC since the release of OS X Mavericks. You therefore need to install this, as the version of clang which ships does not support OpenMP. We advise that you use the brew package manager, and install gcc5. We also strongly advise that you install the Anaconda Python distribution - we do not test against the version of Python that comes with OS X.

Once you have done this, you need to specify the compiler you are using:

export CC=gcc-5

You can then follow the same installation instructions as for ‘Other Linux’, but don’t worry about BLAS and LAPACK as Anaconda takes care of these for you.

Then, follow the instructions in ‘All Systems’ below.

All systems

Once you’ve built Fidimag, you need to add the libraries to your LD_LIBRARY_PATH, so that Fidimag can find them. If you installed SUNDIALS and FFTW using our scripts, you can do this with the command:

export LD_LIBRARY_PATH=/path/to/fidimag/local/lib:$LD_LIBRARY_PATH

You may want to add this and another command to the file ~/.bashrc on Linux or ~/.bash_profile on OS X:

export PYTHONPATH=/path/to/fidimag:$PYTHONPATH

Adding Fidimag to your PYTHONPATH allows fidimag to be imported in Python from any directory.

If you want to check everything has worked correctly, try the command ‘make test’ from the fidimag directory - if all tests pass, then you have a working installation!

OOMMF

Some additional tests check Fidimag against OOMMF. To run these, you need a working OOMMF installation, and you need need to tell the system where to find it. You can do this by setting the environment variable to the directory containing oommf.tcl:

export OOMMF_PATH=/path/to/folder/containing/OOMMF

User Guide

Run fidimag inside a Docker Container

Setup Docker

Install Docker, follow instructions at https://www.docker.com/products/docker

Setup fidimag docker container with Jupyter Notebook

Pull the fidimag notebook container:

docker pull fidimag/notebook

Start Notebook on container

docker run -p 30000:8888 fidimag/notebook

This command starts a Jupyter Notebook in which `fidimag <>`__ can be used. The Jupyter notebook inside the container is listening on port 8888.

The parameter -p 30000:8888 says that the port 8888 inside the container is exposed on the host system as port 30000.

On a Linux host machine, you can connect to http://localhost:30000 to see the notebook.

On a Mac, you need to find out the right IP address to which to connect. The information is provided by

docker-machine ip

For example, if docker-machine ip returns 192.168.99.100, then the right URL to paste into the browser on the host system is http://192.168.99.100:30000.

[How does this work on Windows? Pull requests welcome.]

Detach the docker image (to run in the background)

You can add the -d switch to the docker run command to detach the process:

docker run -d -p 30000:8888 fidimag/notebook

Show active Docker containers

docker ps lists all running containers.

To only show the ids, we can use

docker ps -q

To only show the containers that was last started, we can use the -l flag:

docker ps -l

Stop a docker container

To stop the last container started, we can use the docker stop ID command, where we need to find the ID first. We can do this using docker ps -l -q. Putting the commands together, we have

docker stop $(docker ps -l -q)

to stop the last container we started.

Explore the docker container / run Fidimag from (I)Python

We can start the docker container with the -ti switch, and we can provide bash as the command to execute:

docker run -ti fidimag/notebook bash

A bash prompt appears (and we are now inside the container):

jovyan@4df962d27520:~/work$

and can start Python inside the container, and import fidimag:

jovyan@4df962d27520:~/work$ python
Python 3.5.1 |Continuum Analytics, Inc.| (default, Jun 15 2016, 15:32:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import  fidimag

We could also start IPython:

jovyan@4df962d27520:~/work$ ipython
Python 3.5.1 |Continuum Analytics, Inc.| (default, Jun 15 2016, 15:32:45)
Type "copyright", "credits" or "license" for more information.

IPython 4.2.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]:

[The switch -t stands for Allocate a pseudo-TTY and -i for Keep STDIN open even if not attached.]

Mount the local file system to exchange files and data with container

Often, we may have a fidimag Python script run.py we want to execute in our current working directory in the host machine. We want output files from that command to be written to the same working directory on the host machine.

We can use the container like this to achieve that:

docker run -v `pwd:/io -ti fidimag/notebook python run.py`

The -v `pwd:/io` tells the docker container to take the current working directory on the host (`pwd`) and mount it to the path /io on the container. The container is set up so that the default working directory is /io.

Here is an example file run.py that reads

import fidimag   # to proof we can import it
print("Hello from the container")
# and write to a file
open("data.txt", "w").write("Data from the container.\n")

This can be executed with

docker run -v `pwd`:/io -ti fidimag/notebook python hello.py

and will create a data file data.txt that is visible from the host’s working directory.

Explore Jupyter notebook examples with the Docker container

git clone https://github.com/computationalmodelling/fidimag.git
cd fidimag/doc/ipynb/
docker run -v `pwd`:/io -p 30000:8888 -d fidimag/notebook

Use smaller docker containers

Two alternative docker containers are available that provide only Fidimag, but not the Jupyter Notebook, nor scipy. They are available under the names fidimag/minimal-py2 and fidimag/minimal-py3. Use these names instead of fidimag/notebook in the examples above.

The fidimag/minimal-py2 version uses Python2, the fidimag/minimal-py3 version uses Python 3.

Fidimag: A Basic Simulation

This notebook is a guide to the essential commands required to write and run basic Fidimag simulations. It can be downloaded from the github repository, found here.

The first step is to import Fidimag. Numpy and Matplotlib are also imported for later use, to demonstrate visualising simulations results.

[1]:
import fidimag
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

Meshes

                       Mesh                                              Cell
                                                                    +------------+
      +-----+-----+-----+-----+-----+-----+                        /            /|
     /     /     /     /     /     /     /|                       /            / |
    +-----+-----+-----+-----+-----+-----+ |                      /            /  | dz
   /     /     /     /     /     /     /| +                     +------------+   |
  +-----+-----+-----+-----+-----+-----+ |/          ----->      |            |   |
 /     /     /     /     /     /     /| +                       |            |   +
+-----+-----+-----+-----+-----+-----+ |/                        |            |  /
|     |     |     |     |     |     | +                         |            | /  dy
|     |     |     |     |     |     |/                          |            |/
+-----+-----+-----+-----+-----+-----+                           +------------+
                                                                     dx

We need to create a mesh. Meshes are created by specifying the dimensions of the finite difference cells, (dx, dy, dz) and the number of cells in each direction, (nx, ny, nz).

The cell dimensions are defined by dimensionless units. The dimensions of the mesh/cells are integrated by the parameter, unit_length.

In the the following example, the (cuboid) mesh consists of 50x20x1 cells (nx=50, ny=20 and nz=1), with each cell comprising of the dimensions, dx=3, dy=3 and dz=4. The unit_length = 1e-9 (nm).

Thus, the total size of the mesh is 150nm x 60nm x 4nm.

Required Fidimag Function

fidimag.common.CuboidMesh(nx, ny, nz, dx, dy, dz, unit_length)

[2]:
nx, ny, nz = 50, 20, 1
dx, dy, dz = 3, 3, 4 #nm
unit_length = 1e-9 # define the unit length of the dx units to nm.

mesh = fidimag.common.CuboidMesh(nx=nx, ny=ny, nz=nz, dx=dx, dy=dy, dz=dz, unit_length=unit_length)

Creating the Simulation Object

Now we can create the simulation object.

A mesh is required to create a simulation object. We also give the simulation object a name. Is this case, we call the simulation object, ‘sim_tutorial_basics’

Required Fidimag Function

fidimag.micro.Sim(mesh, name)

[3]:
sim_name = 'sim_tutorial_basics'

sim = fidimag.micro.Sim(mesh, name=sim_name)

Adding Interactions (and specifying material parameters)

The material specific interactions (and parameters) can now be added to the simulation object. Let’s first specify the material specific parameters:

[4]:
Ms = 1e6  # magnetisation saturation (A/m)
A = 1e-12  # exchange energy constant (J/m)
D = 1e-3  # DMI constant (J/m**2)
Ku = 1e5  # uniaxial anisotropy constant (J/m**3)
Kaxis = (0, 0, 1)  # uniaxial anisotropy axis
H = (0, 0, 1e3)  # external magnetic field (A/m)

The simulation object, sim created earlier has a property for the saturation magnetisation, Ms which is set in the following way:

[5]:
sim.Ms = 8.0e5

Now let’s add the following interactions:

  • Exchange

  • Uniaxial Anisotropy

  • Dyzaloshinskii-Moriya (bulk)

  • Zeeman Field

  • Demagnetisation

Required Fidimag Functions

to a simulation object named, sim:

  • sim.add(interaction)

where the interactions are:

interaction

function

exchange

fidimag.micro.UniformExchange(A)

uniaxial anisotropy

fidimag.micro.UniaxialAnisotropy(Ku, axis)

DMI

fidimag.micro.DMI(D)

Zeeman

fidimag.micro.Zeeman(H0)

Demag

fidimag.micro.Demag()

[6]:
exchange = fidimag.micro.UniformExchange(A=A)
sim.add(exchange)

anis = fidimag.micro.UniaxialAnisotropy(Ku=Ku, axis=Kaxis)
sim.add(anis)

dmi = fidimag.micro.DMI(D=D)
sim.add(dmi)

zeeman = fidimag.micro.Zeeman(H0=H)
sim.add(zeeman)

demag = fidimag.micro.Demag()
sim.add(demag)

So, at this point the Hamiltonian is created. Now, we can set parameters in the LLG equation. The sim object has properties for the values of alpha and gamma which are set in the following way:

[7]:
sim.driver.alpha = 0.5
sim.driver.gamma = 2.211e5
# sim.do_precession = True

You can also specfiy whether the magnetisation spins precess or not. The sim object has a property, do_precession, which can be set to either True of False. In this example, let’s have precession:

[8]:
sim.driver.do_precession = True

When both Hamiltonian and LLG equations are set, we need to set the intial magnetisation before we relax the system. Let’s set it to all point in the x-direction:

[9]:
m_init = (1,0,0)
sim.set_m(m_init)

Relaxing the Simulation

The simulation object is now set up: we’re now ready to relax the magnetisation.

Time Integrator Parameters

In order to do so, we need to specify the value of dt for the time integration. By default this is set to dt=1e-11.

We also need to tell the simulation when to stop, through the desired stoppping precision, stopping_dmdt. By default this is set to stopping_dmdt=0.01.

The maximum number of steps, max_steps the time integrator take also needs to be specified. By default this is set to 1000.

Data Saving Parameters

Within the relax function, when to save the magnetisation, save_m_steps, and vtk files of the magnetisation, save_vtk_steps, are also specified. By default they are set to save every 100 steps that the integrator takes. The final magnetisation is also saved. In this example we save the spatial magnetisation every 10 time steps.

When the relax function is called, a text file containing simulation data (including time, energies and average magnetisation) is created with the name sim_name.txt.

Sub-directories for the (spatial) magnetisation and vtk files are also created with the names, sim_name_npys and sim_name_vtks respectively, where the relevant data is subsequently saved. The names of these files are m_*.npy and m_*******.vts respectively, where * is replaced with the time integrator step (with leading zeros for the vts (vtk) file).

Required Fidimag Function

sim.relax(dt, stopping_dmdt, max_steps, save_m_steps, save_vtk_steps)

[10]:
%%capture
sim.driver.relax(dt=1e-11, stopping_dmdt=0.01, max_steps=200, save_m_steps=10, save_vtk_steps=100)

Inspecting the data

Now that a simulation has run, it is useful to inspect and visualise the generated data.

Structure of (spatial) m array

The spatial magnetisation array from the last relaxation step can be accessed via sim.spin. We also saved the spatial magnetisation for all time steps into the folder sim_basics_tutorial_npys.

The structure of sim.spin (and the also the data saved in the .npy files) is an 1-dimensional. For a mesh with n cells, the components are ordered as follows:

[mx(0), my(0), mz(0), mx(1), my(1), mz(1), ..., mx(n), my(n), mz(n)]

where the numbering of the mesh cell adheres to the following convention:

    +-------+
 .'       .:|
+-------+:::|
|       |:::|
|   30  |::;+-------+-------+-------+-------+-------+
|       |;'       .:| 11  .'  12  .'  13  .'  14  .:|
+-------+-------+:::|---+-------+-------+-------+:::|
|       |       |:::| .'   7  .'   8  .'   9  .:|:::|
|   15  |  16   |::;+-------+-------+-------+:::|:::+
|       |       |;'       .'      .'      .:|:::|::'
+-------+-------+-------+-------+-------+:::|:::+'
|       |       |       |       |       |:::|:.'
|   0   |   1   |   2   |   3   |   4   |:::+'
|       |       |       |       |       |::'
+-------+-------+-------+-------+-------+'

Plotting m (spatial)

There are built-in functions in fidimag to restructure this 1-D array, which is useful for creating spatial plots of the magnetisation. These are

Required Fidimag Function

TODO: write built-in helper functions!!

[11]:
m = sim.spin
m.shape = (-1,3)
mz = m[:,2]
[12]:
#the data shape should be (ny,nx) rather than (nx,ny)
mz.shape = (ny,nx)
[13]:
plt.pcolor(mz)
plt.xlabel('x (nm)')
plt.ylabel('y (nm)')
plt.colorbar(label=r"m$_z$")
plt.show()
_images/user_guide_ipynb_tutorial-basics_24_0.png

Plotting m (average)

It is also useful to plot the average components of m over time.

[14]:
# PYTEST_VALIDATE_IGNORE_OUTPUT
%ls
1d_domain_wall.ipynb              sim_tutorial_basics_vtks/
current-driven-domain-wall.ipynb  spin-polarised-current-driven-skyrmion.ipynb
isolated_skyrmion.ipynb           spin-waves-in-periodic-system.ipynb
runtimes.org                      standard_problem_4.ipynb
sanitize_file                     tutorial-basics.ipynb
sim_tutorial_basics_npys/         tutorial-docker-container.ipynb
sim_tutorial_basics.txt
[15]:
f  = fidimag.common.fileio.DataReader('sim_tutorial_basics.txt')
[16]:
mz = f.datadic['m_z']
t = f.datadic['time']
[17]:
plt.plot(t/1e-9, mz)
plt.xlabel("time (ns)")
plt.ylabel(r"$\left\langle \mathrm{m}_{\mathrm{z}} \right\rangle$", fontsize=14)
plt.show()
_images/user_guide_ipynb_tutorial-basics_29_0.png
[ ]:

1D domain wall

Author: Marijan Beg

Date: 26/02/2016

This notebook can be downloaded from the github repository, found here.

Problem specification

The domain wall profile is computed in a one-dimenaional domain of \(L=500 \,\text{nm}\) length.

Material paremeters of the simulated material are:

  • exchange energy constant \(A = 1.3 \times 10^{-11} \,\text{J/m}\),

  • magnetisation saturation \(M_\text{s} = 8.6 \times 10^{5} \,\text{A/m}\),

  • anisotropy constant \(K_{1} = 1.86 \times 10^{5} \,\text{J/m}^{3}\) with \((1, 0, 0)\) axis,

  • anisotropy constant \(K_{2} = -0.92 \times 10^{5} \,\text{J/m}^{3}\) with \((0, 0, 1)\) axis.

Simulation

[1]:
from fidimag.micro import Sim
from fidimag.common import CuboidMesh
from fidimag.micro import UniformExchange, UniaxialAnisotropy
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

Firstly, the mesh is created.

[2]:
# Mesh dimensions.
L = 500  # diameter (nm)

# Mesh discretisation.
dx = dy = dz = 2  # nm

mesh = CuboidMesh(nx=int(L/dx), ny=1, nz=1, dx=dx, dy=dy, dz=dz, unit_length=1e-9)

The simulation object is created, parameters set, and energies added.

[3]:
# NBVAL_IGNORE_OUTPUT
Ms = 8.6e5  # magnetisation saturation (A/m)
A = 1.3e-11  # exchange energy constant (J/m)
K1 = 1.86e5  # anisotropy energy constant (J/m**3)
K2 = -0.92e5  # anisotropy energy constant (J/m**3)
alpha = 0.5  # Gilbert damping
gamma = 2.211e5  # gyromagnetic ration (m/As)

# Create simulation object.
sim = Sim(mesh)

# Set simulation parameters.
sim.Ms = Ms
sim.driver.alpha = alpha
sim.driver.gamma = gamma

# Add energies.
sim.add(UniformExchange(A=A))
sim.add(UniaxialAnisotropy(K1, axis=(1,0,0)))
sim.add(UniaxialAnisotropy(K2, axis=(0,0,1)))

# Since the magnetisation dynamics is not important in this stage,
# the precession term in LLG equation can be set to artificially zero.
sim.driver.do_precession = False

In order to obtain the domain wall as the relaxed state, the system must be appropriatelly initialised. In this case, the initial magnetisation is set to be in \((0, 0, 1)\) direction for \(x < 0.4L \,\text{nm}\), in \((-1, 0, 0)\) direction for \(0.4L \,\text{nm} < x < 0.6L \,\text{nm}\), and in \((0, 0, 1)\) direction for \(x > 0.6L \,\text{nm}\).

[4]:
def m_init(pos):
    x = pos[0]

    if x < 0.45*L:
        return (1,0,0)
    elif x > 0.55*L:
        return (-1,0,0)
    else:
        return (0,1,0)

In the next step, the magnetisation is initialised, and the system is relaxed.

[5]:
# NBVAL_IGNORE_OUTPUT
# Initialise the system.
sim.set_m(m_init)

# Relax the system to its equilibrium state.
sim.driver.relax(dt=1e-13, stopping_dmdt=0.01, max_steps=5000, save_m_steps=None, save_vtk_steps=None)
#1    t=1e-13    dt=1e-13 max_dmdt=2.97e+04
#2    t=2e-13    dt=1e-13 max_dmdt=2.79e+04
#3    t=3e-13    dt=1e-13 max_dmdt=2.6e+04
#4    t=4e-13    dt=1e-13 max_dmdt=2.41e+04
#5    t=5e-13    dt=1e-13 max_dmdt=2.21e+04
#6    t=6e-13    dt=1e-13 max_dmdt=2.02e+04
#7    t=7e-13    dt=1e-13 max_dmdt=1.83e+04
#8    t=8e-13    dt=1e-13 max_dmdt=1.66e+04
#9    t=9e-13    dt=1e-13 max_dmdt=1.5e+04
#10   t=1e-12    dt=1e-13 max_dmdt=1.36e+04
#11   t=1.1e-12  dt=1e-13 max_dmdt=1.22e+04
#12   t=1.2e-12  dt=1e-13 max_dmdt=1.1e+04
#13   t=1.3e-12  dt=1e-13 max_dmdt=9.97e+03
#14   t=1.4e-12  dt=1e-13 max_dmdt=9.01e+03
#15   t=1.5e-12  dt=1e-13 max_dmdt=8.16e+03
#16   t=1.6e-12  dt=1e-13 max_dmdt=7.4e+03
#17   t=1.7e-12  dt=1e-13 max_dmdt=6.73e+03
#18   t=1.8e-12  dt=1e-13 max_dmdt=6.44e+03
#19   t=1.9e-12  dt=1e-13 max_dmdt=6.27e+03
#20   t=2e-12    dt=1e-13 max_dmdt=6.1e+03
#21   t=2.1e-12  dt=1e-13 max_dmdt=5.93e+03
#22   t=2.2e-12  dt=1e-13 max_dmdt=5.76e+03
#23   t=2.3e-12  dt=1e-13 max_dmdt=5.58e+03
#24   t=2.4e-12  dt=1e-13 max_dmdt=5.41e+03
#25   t=2.5e-12  dt=1e-13 max_dmdt=5.24e+03
#26   t=2.6e-12  dt=1e-13 max_dmdt=5.07e+03
#27   t=2.7e-12  dt=1e-13 max_dmdt=4.91e+03
#28   t=2.82e-12 dt=1.23e-13 max_dmdt=4.73e+03
#29   t=2.95e-12 dt=1.23e-13 max_dmdt=4.55e+03
#30   t=3.07e-12 dt=1.23e-13 max_dmdt=4.37e+03
#31   t=3.19e-12 dt=1.23e-13 max_dmdt=4.2e+03
#32   t=3.32e-12 dt=1.23e-13 max_dmdt=4.04e+03
#33   t=3.44e-12 dt=1.23e-13 max_dmdt=3.88e+03
#34   t=3.56e-12 dt=1.23e-13 max_dmdt=3.74e+03
#35   t=3.69e-12 dt=1.23e-13 max_dmdt=3.6e+03
#36   t=3.81e-12 dt=1.23e-13 max_dmdt=3.47e+03
#37   t=3.93e-12 dt=1.23e-13 max_dmdt=3.35e+03
#38   t=4.06e-12 dt=1.23e-13 max_dmdt=3.23e+03
#39   t=4.18e-12 dt=1.23e-13 max_dmdt=3.12e+03
#40   t=4.3e-12  dt=1.23e-13 max_dmdt=3.02e+03
#41   t=4.43e-12 dt=1.23e-13 max_dmdt=2.92e+03
#42   t=4.55e-12 dt=1.23e-13 max_dmdt=2.83e+03
#43   t=4.74e-12 dt=1.86e-13 max_dmdt=2.77e+03
#44   t=4.92e-12 dt=1.86e-13 max_dmdt=2.71e+03
#45   t=5.11e-12 dt=1.86e-13 max_dmdt=2.64e+03
#46   t=5.3e-12  dt=1.86e-13 max_dmdt=2.58e+03
#47   t=5.48e-12 dt=1.86e-13 max_dmdt=2.52e+03
#48   t=5.67e-12 dt=1.86e-13 max_dmdt=2.46e+03
#49   t=5.86e-12 dt=1.86e-13 max_dmdt=2.4e+03
#50   t=6.04e-12 dt=1.86e-13 max_dmdt=2.34e+03
#51   t=6.23e-12 dt=1.86e-13 max_dmdt=2.29e+03
#52   t=6.41e-12 dt=1.86e-13 max_dmdt=2.24e+03
#53   t=6.6e-12  dt=1.86e-13 max_dmdt=2.18e+03
#54   t=6.79e-12 dt=1.86e-13 max_dmdt=2.13e+03
#55   t=6.97e-12 dt=1.86e-13 max_dmdt=2.09e+03
#56   t=7.26e-12 dt=2.82e-13 max_dmdt=2.03e+03
#57   t=7.54e-12 dt=2.82e-13 max_dmdt=1.97e+03
#58   t=7.82e-12 dt=2.82e-13 max_dmdt=1.9e+03
#59   t=8.1e-12  dt=2.82e-13 max_dmdt=1.85e+03
#60   t=8.38e-12 dt=2.82e-13 max_dmdt=1.79e+03
#61   t=8.67e-12 dt=2.82e-13 max_dmdt=1.74e+03
#62   t=8.95e-12 dt=2.82e-13 max_dmdt=1.69e+03
#63   t=9.23e-12 dt=2.82e-13 max_dmdt=1.64e+03
#64   t=9.51e-12 dt=2.82e-13 max_dmdt=1.61e+03
#65   t=9.8e-12  dt=2.82e-13 max_dmdt=1.59e+03
#66   t=1.01e-11 dt=2.82e-13 max_dmdt=1.56e+03
#67   t=1.04e-11 dt=2.82e-13 max_dmdt=1.54e+03
#68   t=1.06e-11 dt=2.82e-13 max_dmdt=1.51e+03
#69   t=1.11e-11 dt=4.23e-13 max_dmdt=1.48e+03
#70   t=1.15e-11 dt=4.23e-13 max_dmdt=1.45e+03
#71   t=1.19e-11 dt=4.23e-13 max_dmdt=1.42e+03
#72   t=1.23e-11 dt=4.23e-13 max_dmdt=1.39e+03
#73   t=1.28e-11 dt=4.23e-13 max_dmdt=1.36e+03
#74   t=1.32e-11 dt=4.23e-13 max_dmdt=1.33e+03
#75   t=1.36e-11 dt=4.23e-13 max_dmdt=1.3e+03
#76   t=1.4e-11  dt=4.23e-13 max_dmdt=1.27e+03
#77   t=1.45e-11 dt=4.23e-13 max_dmdt=1.25e+03
#78   t=1.49e-11 dt=4.23e-13 max_dmdt=1.22e+03
#79   t=1.53e-11 dt=4.23e-13 max_dmdt=1.2e+03
#80   t=1.57e-11 dt=4.23e-13 max_dmdt=1.18e+03
#81   t=1.61e-11 dt=4.23e-13 max_dmdt=1.16e+03
#82   t=1.68e-11 dt=6.4e-13 max_dmdt=1.15e+03
#83   t=1.74e-11 dt=6.4e-13 max_dmdt=1.13e+03
#84   t=1.81e-11 dt=6.4e-13 max_dmdt=1.11e+03
#85   t=1.87e-11 dt=6.4e-13 max_dmdt=1.09e+03
#86   t=1.93e-11 dt=6.4e-13 max_dmdt=1.08e+03
#87   t=2e-11    dt=6.4e-13 max_dmdt=1.06e+03
#88   t=2.06e-11 dt=6.4e-13 max_dmdt=1.04e+03
#89   t=2.13e-11 dt=6.4e-13 max_dmdt=1.03e+03
#90   t=2.19e-11 dt=6.4e-13 max_dmdt=1.01e+03
#91   t=2.26e-11 dt=6.4e-13 max_dmdt=994
#92   t=2.32e-11 dt=6.4e-13 max_dmdt=980
#93   t=2.42e-11 dt=9.91e-13 max_dmdt=969
#94   t=2.52e-11 dt=9.91e-13 max_dmdt=956
#95   t=2.62e-11 dt=9.91e-13 max_dmdt=943
#96   t=2.72e-11 dt=9.91e-13 max_dmdt=929
#97   t=2.81e-11 dt=9.91e-13 max_dmdt=915
#98   t=2.91e-11 dt=9.91e-13 max_dmdt=901
#99   t=3.01e-11 dt=9.91e-13 max_dmdt=887
#100  t=3.11e-11 dt=9.91e-13 max_dmdt=872
#101  t=3.21e-11 dt=9.91e-13 max_dmdt=863
#102  t=3.31e-11 dt=9.91e-13 max_dmdt=854
#103  t=3.41e-11 dt=9.91e-13 max_dmdt=844
#104  t=3.51e-11 dt=9.91e-13 max_dmdt=834
#105  t=3.61e-11 dt=9.91e-13 max_dmdt=823
#106  t=3.71e-11 dt=9.91e-13 max_dmdt=811
#107  t=3.81e-11 dt=9.91e-13 max_dmdt=798
#108  t=3.9e-11  dt=9.91e-13 max_dmdt=786
#109  t=4.07e-11 dt=1.61e-12 max_dmdt=768
#110  t=4.23e-11 dt=1.61e-12 max_dmdt=748
#111  t=4.39e-11 dt=1.61e-12 max_dmdt=730
#112  t=4.55e-11 dt=1.61e-12 max_dmdt=711
#113  t=4.71e-11 dt=1.61e-12 max_dmdt=690
#114  t=4.87e-11 dt=1.61e-12 max_dmdt=669
#115  t=5.03e-11 dt=1.61e-12 max_dmdt=646
#116  t=5.19e-11 dt=1.61e-12 max_dmdt=623
#117  t=5.35e-11 dt=1.61e-12 max_dmdt=600
#118  t=5.51e-11 dt=1.61e-12 max_dmdt=576
#119  t=5.67e-11 dt=1.61e-12 max_dmdt=552
#120  t=5.83e-11 dt=1.61e-12 max_dmdt=530
#121  t=5.99e-11 dt=1.61e-12 max_dmdt=509
#122  t=6.15e-11 dt=1.61e-12 max_dmdt=488
#123  t=6.31e-11 dt=1.61e-12 max_dmdt=468
#124  t=6.48e-11 dt=1.61e-12 max_dmdt=447
#125  t=6.64e-11 dt=1.61e-12 max_dmdt=434
#126  t=6.8e-11  dt=1.61e-12 max_dmdt=422
#127  t=6.96e-11 dt=1.61e-12 max_dmdt=410
#128  t=7.12e-11 dt=1.61e-12 max_dmdt=397
#129  t=7.28e-11 dt=1.61e-12 max_dmdt=384
#130  t=7.44e-11 dt=1.61e-12 max_dmdt=371
#131  t=7.6e-11  dt=1.61e-12 max_dmdt=357
#132  t=7.76e-11 dt=1.61e-12 max_dmdt=344
#133  t=7.92e-11 dt=1.61e-12 max_dmdt=331
#134  t=8.08e-11 dt=1.61e-12 max_dmdt=318
#135  t=8.24e-11 dt=1.61e-12 max_dmdt=306
#136  t=8.4e-11  dt=1.61e-12 max_dmdt=293
#137  t=8.56e-11 dt=1.61e-12 max_dmdt=281
#138  t=8.72e-11 dt=1.61e-12 max_dmdt=269
#139  t=8.88e-11 dt=1.61e-12 max_dmdt=258
#140  t=9.05e-11 dt=1.61e-12 max_dmdt=246
#141  t=9.21e-11 dt=1.61e-12 max_dmdt=235
#142  t=9.37e-11 dt=1.61e-12 max_dmdt=225
#143  t=9.53e-11 dt=1.61e-12 max_dmdt=215
#144  t=9.77e-11 dt=2.41e-12 max_dmdt=202
#145  t=1e-10    dt=2.41e-12 max_dmdt=188
#146  t=1.03e-10 dt=2.41e-12 max_dmdt=175
#147  t=1.05e-10 dt=2.41e-12 max_dmdt=162
#148  t=1.07e-10 dt=2.41e-12 max_dmdt=151
#149  t=1.1e-10  dt=2.41e-12 max_dmdt=140
#150  t=1.12e-10 dt=2.41e-12 max_dmdt=129
#151  t=1.15e-10 dt=2.41e-12 max_dmdt=120
#152  t=1.17e-10 dt=2.41e-12 max_dmdt=111
#153  t=1.19e-10 dt=2.41e-12 max_dmdt=103
#154  t=1.22e-10 dt=2.41e-12 max_dmdt=94.9
#155  t=1.24e-10 dt=2.41e-12 max_dmdt=87.7
#156  t=1.27e-10 dt=2.41e-12 max_dmdt=81
#157  t=1.29e-10 dt=2.41e-12 max_dmdt=74.9
#158  t=1.31e-10 dt=2.41e-12 max_dmdt=69.1
#159  t=1.34e-10 dt=2.41e-12 max_dmdt=63.8
#160  t=1.36e-10 dt=2.41e-12 max_dmdt=58.9
#161  t=1.4e-10  dt=3.72e-12 max_dmdt=53.3
#162  t=1.44e-10 dt=3.72e-12 max_dmdt=47.1
#163  t=1.47e-10 dt=3.72e-12 max_dmdt=41.6
#164  t=1.51e-10 dt=3.72e-12 max_dmdt=36.8
#165  t=1.55e-10 dt=3.72e-12 max_dmdt=32.5
#166  t=1.59e-10 dt=3.72e-12 max_dmdt=28.7
#167  t=1.62e-10 dt=3.72e-12 max_dmdt=25.4
#168  t=1.66e-10 dt=3.72e-12 max_dmdt=22.5
#169  t=1.7e-10  dt=3.72e-12 max_dmdt=19.9
#170  t=1.73e-10 dt=3.72e-12 max_dmdt=17.6
#171  t=1.77e-10 dt=3.72e-12 max_dmdt=15.5
#172  t=1.81e-10 dt=3.72e-12 max_dmdt=13.7
#173  t=1.85e-10 dt=3.72e-12 max_dmdt=12.1
#174  t=1.88e-10 dt=3.72e-12 max_dmdt=10.7
#175  t=1.92e-10 dt=3.72e-12 max_dmdt=9.5
#176  t=1.96e-10 dt=3.72e-12 max_dmdt=8.41
#177  t=2e-10    dt=3.72e-12 max_dmdt=7.44
#178  t=2.03e-10 dt=3.72e-12 max_dmdt=6.58
#179  t=2.07e-10 dt=3.72e-12 max_dmdt=5.83
#180  t=2.11e-10 dt=3.72e-12 max_dmdt=5.16
#181  t=2.14e-10 dt=3.72e-12 max_dmdt=4.56
#182  t=2.2e-10  dt=5.7e-12 max_dmdt=3.91
#183  t=2.26e-10 dt=5.7e-12 max_dmdt=3.25
#184  t=2.31e-10 dt=5.7e-12 max_dmdt=2.7
#185  t=2.37e-10 dt=5.7e-12 max_dmdt=2.24
#186  t=2.43e-10 dt=5.7e-12 max_dmdt=1.86
#187  t=2.49e-10 dt=5.7e-12 max_dmdt=1.54
#188  t=2.54e-10 dt=5.7e-12 max_dmdt=1.28
#189  t=2.6e-10  dt=5.7e-12 max_dmdt=1.07
#190  t=2.66e-10 dt=5.7e-12 max_dmdt=0.886
#191  t=2.71e-10 dt=5.7e-12 max_dmdt=0.737
#192  t=2.77e-10 dt=5.7e-12 max_dmdt=0.614
#193  t=2.83e-10 dt=5.7e-12 max_dmdt=0.511
#194  t=2.89e-10 dt=5.7e-12 max_dmdt=0.425
#195  t=2.94e-10 dt=5.7e-12 max_dmdt=0.354
#196  t=3e-10    dt=5.7e-12 max_dmdt=0.295
#197  t=3.06e-10 dt=5.7e-12 max_dmdt=0.246
#198  t=3.11e-10 dt=5.7e-12 max_dmdt=0.205
#199  t=3.2e-10  dt=8.66e-12 max_dmdt=0.163
#200  t=3.29e-10 dt=8.66e-12 max_dmdt=0.123
#201  t=3.37e-10 dt=8.66e-12 max_dmdt=0.0936
#202  t=3.46e-10 dt=8.66e-12 max_dmdt=0.071
#203  t=3.55e-10 dt=8.66e-12 max_dmdt=0.0539
#204  t=3.63e-10 dt=8.66e-12 max_dmdt=0.041
#205  t=3.72e-10 dt=8.66e-12 max_dmdt=0.0311
#206  t=3.81e-10 dt=8.66e-12 max_dmdt=0.0236
#207  t=3.89e-10 dt=8.66e-12 max_dmdt=0.018
#208  t=3.98e-10 dt=8.66e-12 max_dmdt=0.0137
#209  t=4.07e-10 dt=8.66e-12 max_dmdt=0.0104
#210  t=4.2e-10  dt=1.36e-11 max_dmdt=0.0073

After the system is relaxed, the magnetisation profile can be plotted.

[6]:
#NBVAL_IGNORE_OUTPUT
m = np.copy(sim.spin)

m.shape = (-1, 3)

mx = m[:, 0]
my = m[:, 1]
mz = m[:, 2]

x_array = np.arange(0, L, dx)

plt.figure(figsize=(10,6))
plt.plot(x_array, mx, label='mx')
plt.plot(x_array, my, label='my')
plt.plot(x_array, mz, label='mz')
plt.xlabel('x (nm)')
plt.ylabel('<m>')
plt.xlim([0.4*L, 0.6*L])
plt.ylim([-1, 1])
plt.grid()
plt.legend()
[6]:
<matplotlib.legend.Legend at 0x119de3780>
_images/user_guide_ipynb_1d_domain_wall_15_1.png

Simulating an Anisotropic Grain Structure

[1]:
import fidimag
from scipy.spatial import cKDTree
import numpy as np

Here we set up a simple test system to show how to simulate magnetic grains which have different anisotropy orientations and strengths.

[2]:
A=1.3e-11
Ms=8.6e5
n = 40
d = 5

mesh = fidimag.common.CuboidMesh(nx=n, ny=n, nz=1, dx=d, dy=d, dz=d, unit_length=1e-9, periodicity=(False, False, False))
sim = fidimag.micro.Sim(mesh, name="Grains", driver='steepest_descent')
sim.alpha = 1.0
# Create positions to be grain centres, and create a cKDTree to
# perform Voronoi Tesselation
np.random.seed(10)
Ngrains = 15
grain_centres = np.random.uniform(0, n*d, (Ngrains, 2))
voronoi_kdtree = cKDTree(grain_centres)

# Define Anisotropy Strength
Ku = 1e6
# Generate random anisotropy axes
axes = np.random.uniform(-1, 1, (Ngrains, 3))
# Weight them towards +z - assume grains oriented along field cooled direction
axes[:, 2] += 1.0
# Normalise
axes /= np.linalg.norm(axes, axis=1)[:, np.newaxis]
# Generate a normal distribution of anisotropy strengths:
strengths = np.random.normal(Ku, Ku*0.2, Ngrains)

# We then use the cKDTree in two functions. We get the x, y position
# of each micromagnetic cell, and query the tree for the region that
# the cell sits in. The functions then return the axis and strength
# at that region index.

def K_axis(pos):
    x, y, z = pos
    _, test_point_regions = voronoi_kdtree.query(np.array([[x, y]]), k=1)
    region = test_point_regions[0]
    return axes[region]

def K_mag(pos):
    x, y, z = pos
    _, test_point_regions = voronoi_kdtree.query(np.array([[x, y]]), k=1)
    region = test_point_regions[0]
    return strengths[region]
[3]:
sim.set_Ms(Ms)
sim.set_m((0, 0, 1), normalise=True)

anisotropy = fidimag.micro.UniaxialAnisotropy(K_mag, K_axis)
sim.add(anisotropy)
sim.add(fidimag.micro.UniformExchange(A))
sim.add(fidimag.micro.Demag(pbc_2d=True))

To check that this looks sensible, we plot the strength of the anisotropy across the whole sample in each direction:

[4]:
#NBVAL_IGNORE_OUTPUT
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid

strength_x = anisotropy._axis[0::3].reshape(n, n) * anisotropy._Ku.reshape(n, n)
strength_y = anisotropy._axis[1::3].reshape(n, n) * anisotropy._Ku.reshape(n, n)
strength_z = anisotropy._axis[2::3].reshape(n, n) * anisotropy._Ku.reshape(n, n)

maxs = np.max([np.max(np.abs(strength_x)),
               np.max(np.abs(strength_y)),
               np.max(np.abs(strength_z))])



fig = plt.figure(figsize=(5, 3))

grid = ImageGrid(fig, 111,          # as in plt.subplot(111)
                 nrows_ncols=(1,3),
                 axes_pad=0.15,
                 share_all=True,
                 cbar_location="right",
                 cbar_mode="single",
                 cbar_size="7%",
                 cbar_pad=0.15,
                 )

axes = [axis for axis in grid]


axes[0].imshow(strength_x, origin='lower', cmap='RdBu', vmin=-maxs, vmax=maxs, extent=[0, n*d, 0, n*d])
axes[1].imshow(strength_y, origin='lower', cmap='RdBu', vmin=-maxs, vmax=maxs, extent=[0, n*d, 0, n*d])
im = axes[2].imshow(strength_z, origin='lower', cmap='RdBu', vmin=-maxs, vmax=maxs, extent=[0, n*d, 0, n*d])
axes[2].cax.colorbar(im)
axes[2].cax.toggle_label(True)

axes[0].set_title("$K_x$")
axes[1].set_title("$K_y$")
axes[2].set_title("$K_z$")

plt.savefig("Anisotropy.png", dpi=600)

_images/user_guide_ipynb_anisotropic-grain-structure_6_0.png

We can see that we have a granular structure in the anisotropy. We now simply minimise the system and plot the magnetisation:

[5]:
#NBVAL_IGNORE_OUTPUT
sim.driver.minimise(max_steps=20000, stopping_dm=1e-4, initial_t_step=1e-4, log_every=2000)
print('Done')
#0    max_tau=0.0001   max_dm=0.000171
#2000 max_tau=0.0001   max_dm=0.000163
#4000 max_tau=0.0001   max_dm=0.000137
#6000 max_tau=0.0001   max_dm=0.000142
#8000 max_tau=0.0001   max_dm=0.000143
#10000 max_tau=0.0001   max_dm=0.000131
#11820 max_tau=0.0001   max_dm=0.0001
Done

The remanent Magnetisation in the z-direction is then:

[6]:
#NBVAL_IGNORE_OUTPUT
fidimag.common.plot(sim)
_images/user_guide_ipynb_anisotropic-grain-structure_10_0.png
[7]:
remanence = np.mean(sim.spin[2::3])*Ms
print(remanence)
681223.4133387426

Spin-polarised-current-driven domain wall

Author: Marijan Beg, Weiwei Wang

Date: 18 Mar 2016

This notebook can be downloaded from the github repository, found here.

Problem specification

The simulated sample is a 1D nanowire cuboid with \(L=1000 \,\text{nm}\) length with finite difference discretisation \(d_{x} = d_{y} = d_{z} = 2 \,\text{nm}\).

The material parameters (similar to permalloy) are:

  • exchange energy constant \(A = 1.3 \times 10^{-11} \,\text{J/m}\),

  • magnetisation saturation \(M_\text{s} = 8.6 \times 10^{5} \,\text{A/m}\),

  • uniaxial anisotropy constant \(K=5 \times 10^{4} \,\text{J/m}^{3}\) with \((0, 0, 1)\) easy-axis,

  • Gilbert damping \(\alpha = 0.5\).

After the system is relaxed to a domain wall, a spin-polarised current with \(J=1 \times 10^{12} \text{A/m}^{2}\) density is applied in the positive x direction \((1, 0, 0)\).

Simulation functions

[1]:
import matplotlib.pyplot as plt
import numpy as np
from fidimag.micro import Sim, UniformExchange, UniaxialAnisotropy
from fidimag.common import CuboidMesh
%matplotlib inline

We start by defining parameters and a function for initialising the system so that it relaxes to the domain wall.

[2]:
Ms = 8.6e5  # magnetisation saturation (A/m)
A = 1.3e-11  # exchange energy constant (J/m)
alpha = 0.5  # Gilbert damping
gamma = 2.211e5  # gyromagnetic ration (m/As)
K = 5e4  # uniaxial anisotropy constant (J/m**3)
J = 1e12  # spin-polarised current density (A/m**2)
beta = 1  # STT parameter

def init_m(pos):
    x = pos[0]

    if x < 200:
        return (1, 0, 0)
    elif 200 <= x < 300:
        return (0, 1, 1)
    else:
        return (-1, 0, 0)

Using this function, we create a new function which relaxes the system to its equilibrium (domain wall) state according to the problem specification.

[3]:
def relax_system(mesh):
    # Create a simulation object.
    sim = Sim(mesh)

    # Set simulation parameters.
    sim.driver.set_tols(rtol=1e-8, atol=1e-8)
    sim.driver.alpha = alpha
    sim.driver.gamma = gamma
    sim.Ms = Ms

    # Add energies to the system.
    sim.add(UniformExchange(A=A))
    sim.add(UniaxialAnisotropy(K))

    # Initialise the system.
    sim.set_m(init_m)

    # Relax the system and save the state in m0.npy
    sim.driver.relax(dt=1e-14, stopping_dmdt=0.01, max_steps=5000,
                     save_m_steps=None, save_vtk_steps=None)

    np.save('m0.npy', sim.spin)

A plot of the system’s magnetisation can be created using the following convenience function.

[4]:
def plot_magnetisation(components):
    plt.figure(figsize=(8, 6))

    comp = {'mx': 0, 'my': 1, 'mz': 2}

    for element in components:
        data = np.load(element[0])
        data.shape = (-1, 3)

        mc = data[:, comp[element[1]]]

        # The label is the component and the file name
        plt.plot(mc, label=element[1])

    plt.legend()
    plt.xlabel('x (nm)')
    plt.ylabel('mx, my')
    plt.grid()
    plt.ylim([-1.05, 1.05])

Finally, we create a function for driving a domain wall using the spin-polarised current. All npy and vtk files are saved in the **{simulation_name}_npys** and **{simulation_name}_vtks** folders, respectively.

[5]:
def excite_system(mesh, time, snapshots):
    # Specify the stt dynamics in the simulation
    sim = Sim(mesh, name='dyn', driver='llg_stt')

    # Set the simulation parameters
    sim.driver.set_tols(rtol=1e-12, atol=1e-14)
    sim.driver.alpha = alpha
    sim.driver.gamma = gamma
    sim.Ms = Ms

    # Add energies to the system.
    sim.add(UniformExchange(A=A))
    sim.add(UniaxialAnisotropy(K))

    # Load the initial state from the npy file saved in the realxation stage.
    sim.set_m(np.load('m0.npy'))

    # Set the spin-polarised current in the x direction.
    sim.driver.jx = J
    sim.driver.beta = beta

    # The simulation will run for x ns and save
    # 'snaps' snapshots of the system in the process
    ts = np.linspace(0, time, snapshots)

    for t in ts:
        sim.driver.run_until(t)
        sim.save_vtk()
        sim.save_m()

Simulation

Before we run a simulation using previously defined functions, a finite difference mesh must be created.

[6]:
L = 2000  # nm
dx = dy = dz = 2  # nm

mesh = CuboidMesh(nx=int(L/dx), ny=1, nz=1, dx=dx, dy=dy, dz=dz, unit_length=1e-9)

Now, the system is relaxed and the domain wall equilibrium state is obtained, saved, and later used in the next stage.

[7]:
#NBVAL_IGNORE_OUTPUT
relax_system(mesh)
#1    t=1e-14    dt=1e-14 max_dmdt=6.47e+04
#2    t=2e-14    dt=1e-14 max_dmdt=6.48e+04
#3    t=3.05e-14 dt=1.05e-14 max_dmdt=6.48e+04
#4    t=4.09e-14 dt=1.05e-14 max_dmdt=6.47e+04
#5    t=5.14e-14 dt=1.05e-14 max_dmdt=6.47e+04
#6    t=6.19e-14 dt=1.05e-14 max_dmdt=6.45e+04
#7    t=7.23e-14 dt=1.05e-14 max_dmdt=6.43e+04
#8    t=8.28e-14 dt=1.05e-14 max_dmdt=6.41e+04
#9    t=9.33e-14 dt=1.05e-14 max_dmdt=6.38e+04
#10   t=1.04e-13 dt=1.05e-14 max_dmdt=6.35e+04
#11   t=1.23e-13 dt=1.91e-14 max_dmdt=6.29e+04
#12   t=1.42e-13 dt=1.91e-14 max_dmdt=6.21e+04
#13   t=1.61e-13 dt=1.91e-14 max_dmdt=6.11e+04
#14   t=1.8e-13  dt=1.91e-14 max_dmdt=6e+04
#15   t=1.99e-13 dt=1.91e-14 max_dmdt=5.88e+04
#16   t=2.18e-13 dt=1.91e-14 max_dmdt=5.74e+04
#17   t=2.37e-13 dt=1.91e-14 max_dmdt=5.6e+04
#18   t=2.56e-13 dt=1.91e-14 max_dmdt=5.44e+04
#19   t=2.75e-13 dt=1.91e-14 max_dmdt=5.28e+04
#20   t=3.09e-13 dt=3.37e-14 max_dmdt=5.03e+04
#21   t=3.43e-13 dt=3.37e-14 max_dmdt=4.7e+04
#22   t=3.77e-13 dt=3.37e-14 max_dmdt=4.59e+04
#23   t=4.01e-13 dt=2.47e-14 max_dmdt=4.51e+04
#24   t=4.26e-13 dt=2.47e-14 max_dmdt=4.42e+04
#25   t=4.51e-13 dt=2.47e-14 max_dmdt=4.31e+04
#26   t=4.75e-13 dt=2.47e-14 max_dmdt=4.2e+04
#27   t=5e-13    dt=2.47e-14 max_dmdt=4.07e+04
#28   t=5.25e-13 dt=2.47e-14 max_dmdt=3.92e+04
#29   t=5.49e-13 dt=2.47e-14 max_dmdt=3.77e+04
#30   t=5.74e-13 dt=2.47e-14 max_dmdt=3.61e+04
#31   t=5.99e-13 dt=2.47e-14 max_dmdt=3.45e+04
#32   t=6.37e-13 dt=3.85e-14 max_dmdt=3.23e+04
#33   t=6.76e-13 dt=3.85e-14 max_dmdt=2.96e+04
#34   t=7.14e-13 dt=3.85e-14 max_dmdt=2.75e+04
#35   t=7.52e-13 dt=3.85e-14 max_dmdt=2.64e+04
#36   t=7.91e-13 dt=3.85e-14 max_dmdt=2.52e+04
#37   t=8.29e-13 dt=3.85e-14 max_dmdt=2.46e+04
#38   t=8.68e-13 dt=3.85e-14 max_dmdt=2.4e+04
#39   t=9.06e-13 dt=3.85e-14 max_dmdt=2.32e+04
#40   t=9.45e-13 dt=3.85e-14 max_dmdt=2.23e+04
#41   t=9.83e-13 dt=3.85e-14 max_dmdt=2.15e+04
#42   t=1.02e-12 dt=3.85e-14 max_dmdt=2.15e+04
#43   t=1.06e-12 dt=3.85e-14 max_dmdt=2.13e+04
#44   t=1.1e-12  dt=3.85e-14 max_dmdt=2.1e+04
#45   t=1.14e-12 dt=3.85e-14 max_dmdt=2.06e+04
#46   t=1.18e-12 dt=3.85e-14 max_dmdt=2.01e+04
#47   t=1.21e-12 dt=3.85e-14 max_dmdt=1.94e+04
#48   t=1.25e-12 dt=3.85e-14 max_dmdt=1.87e+04
#49   t=1.29e-12 dt=3.85e-14 max_dmdt=1.79e+04
#50   t=1.33e-12 dt=3.85e-14 max_dmdt=1.71e+04
#51   t=1.37e-12 dt=3.85e-14 max_dmdt=1.63e+04
#52   t=1.41e-12 dt=3.85e-14 max_dmdt=1.54e+04
#53   t=1.44e-12 dt=3.85e-14 max_dmdt=1.49e+04
#54   t=1.48e-12 dt=3.85e-14 max_dmdt=1.47e+04
#55   t=1.52e-12 dt=3.85e-14 max_dmdt=1.44e+04
#56   t=1.56e-12 dt=3.85e-14 max_dmdt=1.41e+04
#57   t=1.6e-12  dt=3.85e-14 max_dmdt=1.37e+04
#58   t=1.64e-12 dt=3.85e-14 max_dmdt=1.33e+04
#59   t=1.68e-12 dt=3.85e-14 max_dmdt=1.28e+04
#60   t=1.71e-12 dt=3.85e-14 max_dmdt=1.24e+04
#61   t=1.75e-12 dt=3.85e-14 max_dmdt=1.2e+04
#62   t=1.79e-12 dt=3.85e-14 max_dmdt=1.19e+04
#63   t=1.83e-12 dt=3.85e-14 max_dmdt=1.17e+04
#64   t=1.87e-12 dt=3.85e-14 max_dmdt=1.16e+04
#65   t=1.91e-12 dt=3.85e-14 max_dmdt=1.13e+04
#66   t=1.94e-12 dt=3.85e-14 max_dmdt=1.11e+04
#67   t=1.98e-12 dt=3.85e-14 max_dmdt=1.09e+04
#68   t=2.02e-12 dt=3.85e-14 max_dmdt=1.06e+04
#69   t=2.06e-12 dt=3.85e-14 max_dmdt=1.03e+04
#70   t=2.1e-12  dt=3.85e-14 max_dmdt=1e+04
#71   t=2.14e-12 dt=3.85e-14 max_dmdt=9.71e+03
#72   t=2.18e-12 dt=3.85e-14 max_dmdt=9.49e+03
#73   t=2.21e-12 dt=3.85e-14 max_dmdt=9.38e+03
#74   t=2.25e-12 dt=3.85e-14 max_dmdt=9.25e+03
#75   t=2.29e-12 dt=3.85e-14 max_dmdt=9.09e+03
#76   t=2.33e-12 dt=3.85e-14 max_dmdt=8.92e+03
#77   t=2.37e-12 dt=3.85e-14 max_dmdt=8.74e+03
#78   t=2.41e-12 dt=3.85e-14 max_dmdt=8.54e+03
#79   t=2.44e-12 dt=3.85e-14 max_dmdt=8.34e+03
#80   t=2.48e-12 dt=3.85e-14 max_dmdt=8.13e+03
#81   t=2.54e-12 dt=5.79e-14 max_dmdt=7.86e+03
#82   t=2.6e-12  dt=5.79e-14 max_dmdt=7.53e+03
#83   t=2.66e-12 dt=5.79e-14 max_dmdt=7.21e+03
#84   t=2.71e-12 dt=5.79e-14 max_dmdt=6.9e+03
#85   t=2.77e-12 dt=5.79e-14 max_dmdt=6.59e+03
#86   t=2.83e-12 dt=5.79e-14 max_dmdt=6.46e+03
#87   t=2.89e-12 dt=5.79e-14 max_dmdt=6.33e+03
#88   t=2.95e-12 dt=5.79e-14 max_dmdt=6.29e+03
#89   t=3e-12    dt=5.79e-14 max_dmdt=6.23e+03
#90   t=3.06e-12 dt=5.79e-14 max_dmdt=6.15e+03
#91   t=3.12e-12 dt=5.79e-14 max_dmdt=6.06e+03
#92   t=3.18e-12 dt=5.79e-14 max_dmdt=5.96e+03
#93   t=3.24e-12 dt=5.79e-14 max_dmdt=5.85e+03
#94   t=3.29e-12 dt=5.79e-14 max_dmdt=5.73e+03
#95   t=3.35e-12 dt=5.79e-14 max_dmdt=5.6e+03
#96   t=3.41e-12 dt=5.79e-14 max_dmdt=5.48e+03
#97   t=3.47e-12 dt=5.79e-14 max_dmdt=5.36e+03
#98   t=3.52e-12 dt=5.79e-14 max_dmdt=5.23e+03
#99   t=3.58e-12 dt=5.79e-14 max_dmdt=5.11e+03
#100  t=3.64e-12 dt=5.79e-14 max_dmdt=4.99e+03
#101  t=3.7e-12  dt=5.79e-14 max_dmdt=4.87e+03
#102  t=3.76e-12 dt=5.79e-14 max_dmdt=4.76e+03
#103  t=3.81e-12 dt=5.79e-14 max_dmdt=4.65e+03
#104  t=3.87e-12 dt=5.79e-14 max_dmdt=4.54e+03
#105  t=3.93e-12 dt=5.79e-14 max_dmdt=4.45e+03
#106  t=3.99e-12 dt=5.79e-14 max_dmdt=4.38e+03
#107  t=4.08e-12 dt=8.74e-14 max_dmdt=4.28e+03
#108  t=4.16e-12 dt=8.74e-14 max_dmdt=4.17e+03
#109  t=4.25e-12 dt=8.74e-14 max_dmdt=4.08e+03
#110  t=4.34e-12 dt=8.74e-14 max_dmdt=4.02e+03
#111  t=4.43e-12 dt=8.74e-14 max_dmdt=3.96e+03
#112  t=4.51e-12 dt=8.74e-14 max_dmdt=3.89e+03
#113  t=4.6e-12  dt=8.74e-14 max_dmdt=3.82e+03
#114  t=4.69e-12 dt=8.74e-14 max_dmdt=3.75e+03
#115  t=4.77e-12 dt=8.74e-14 max_dmdt=3.68e+03
#116  t=4.86e-12 dt=8.74e-14 max_dmdt=3.61e+03
#117  t=4.95e-12 dt=8.74e-14 max_dmdt=3.53e+03
#118  t=5.04e-12 dt=8.74e-14 max_dmdt=3.46e+03
#119  t=5.12e-12 dt=8.74e-14 max_dmdt=3.38e+03
#120  t=5.21e-12 dt=8.74e-14 max_dmdt=3.31e+03
#121  t=5.3e-12  dt=8.74e-14 max_dmdt=3.25e+03
#122  t=5.39e-12 dt=8.74e-14 max_dmdt=3.2e+03
#123  t=5.47e-12 dt=8.74e-14 max_dmdt=3.15e+03
#124  t=5.56e-12 dt=8.74e-14 max_dmdt=3.1e+03
#125  t=5.65e-12 dt=8.74e-14 max_dmdt=3.05e+03
#126  t=5.74e-12 dt=8.74e-14 max_dmdt=3e+03
#127  t=5.82e-12 dt=8.74e-14 max_dmdt=2.96e+03
#128  t=5.91e-12 dt=8.74e-14 max_dmdt=2.91e+03
#129  t=6e-12    dt=8.74e-14 max_dmdt=2.86e+03
#130  t=6.09e-12 dt=8.74e-14 max_dmdt=2.82e+03
#131  t=6.17e-12 dt=8.74e-14 max_dmdt=2.78e+03
#132  t=6.26e-12 dt=8.74e-14 max_dmdt=2.73e+03
#133  t=6.35e-12 dt=8.74e-14 max_dmdt=2.69e+03
#134  t=6.44e-12 dt=8.74e-14 max_dmdt=2.65e+03
#135  t=6.52e-12 dt=8.74e-14 max_dmdt=2.61e+03
#136  t=6.61e-12 dt=8.74e-14 max_dmdt=2.57e+03
#137  t=6.7e-12  dt=8.74e-14 max_dmdt=2.53e+03
#138  t=6.78e-12 dt=8.74e-14 max_dmdt=2.49e+03
#139  t=6.87e-12 dt=8.74e-14 max_dmdt=2.45e+03
#140  t=6.96e-12 dt=8.74e-14 max_dmdt=2.42e+03
#141  t=7.05e-12 dt=8.74e-14 max_dmdt=2.38e+03
#142  t=7.13e-12 dt=8.74e-14 max_dmdt=2.35e+03
#143  t=7.22e-12 dt=8.74e-14 max_dmdt=2.31e+03
#144  t=7.31e-12 dt=8.74e-14 max_dmdt=2.29e+03
#145  t=7.4e-12  dt=8.74e-14 max_dmdt=2.27e+03
#146  t=7.48e-12 dt=8.74e-14 max_dmdt=2.25e+03
#147  t=7.57e-12 dt=8.74e-14 max_dmdt=2.23e+03
#148  t=7.66e-12 dt=8.74e-14 max_dmdt=2.21e+03
#149  t=7.75e-12 dt=8.74e-14 max_dmdt=2.18e+03
#150  t=7.83e-12 dt=8.74e-14 max_dmdt=2.16e+03
#151  t=7.92e-12 dt=8.74e-14 max_dmdt=2.14e+03
#152  t=8.01e-12 dt=8.74e-14 max_dmdt=2.12e+03
#153  t=8.1e-12  dt=8.74e-14 max_dmdt=2.1e+03
#154  t=8.18e-12 dt=8.74e-14 max_dmdt=2.08e+03
#155  t=8.27e-12 dt=8.74e-14 max_dmdt=2.06e+03
#156  t=8.36e-12 dt=8.74e-14 max_dmdt=2.04e+03
#157  t=8.45e-12 dt=8.74e-14 max_dmdt=2.02e+03
#158  t=8.53e-12 dt=8.74e-14 max_dmdt=2e+03
#159  t=8.62e-12 dt=8.74e-14 max_dmdt=1.98e+03
#160  t=8.71e-12 dt=8.74e-14 max_dmdt=1.96e+03
#161  t=8.79e-12 dt=8.74e-14 max_dmdt=1.94e+03
#162  t=8.88e-12 dt=8.74e-14 max_dmdt=1.92e+03
#163  t=8.97e-12 dt=8.74e-14 max_dmdt=1.9e+03
#164  t=9.06e-12 dt=8.74e-14 max_dmdt=1.88e+03
#165  t=9.14e-12 dt=8.74e-14 max_dmdt=1.86e+03
#166  t=9.28e-12 dt=1.32e-13 max_dmdt=1.84e+03
#167  t=9.41e-12 dt=1.32e-13 max_dmdt=1.81e+03
#168  t=9.54e-12 dt=1.32e-13 max_dmdt=1.78e+03
#169  t=9.67e-12 dt=1.32e-13 max_dmdt=1.76e+03
#170  t=9.81e-12 dt=1.32e-13 max_dmdt=1.73e+03
#171  t=1e-11    dt=2.01e-13 max_dmdt=1.7e+03
#172  t=1.02e-11 dt=2.01e-13 max_dmdt=1.66e+03
#173  t=1.04e-11 dt=2.01e-13 max_dmdt=1.63e+03
#174  t=1.06e-11 dt=2.01e-13 max_dmdt=1.59e+03
#175  t=1.08e-11 dt=2.01e-13 max_dmdt=1.57e+03
#176  t=1.1e-11  dt=2.01e-13 max_dmdt=1.54e+03
#177  t=1.12e-11 dt=2.01e-13 max_dmdt=1.52e+03
#178  t=1.14e-11 dt=2.01e-13 max_dmdt=1.5e+03
#179  t=1.16e-11 dt=2.01e-13 max_dmdt=1.47e+03
#180  t=1.18e-11 dt=2.01e-13 max_dmdt=1.45e+03
#181  t=1.2e-11  dt=2.01e-13 max_dmdt=1.43e+03
#182  t=1.22e-11 dt=2.01e-13 max_dmdt=1.41e+03
#183  t=1.24e-11 dt=2.01e-13 max_dmdt=1.38e+03
#184  t=1.26e-11 dt=2.01e-13 max_dmdt=1.36e+03
#185  t=1.28e-11 dt=2.01e-13 max_dmdt=1.34e+03
#186  t=1.3e-11  dt=2.01e-13 max_dmdt=1.32e+03
#187  t=1.32e-11 dt=2.01e-13 max_dmdt=1.3e+03
#188  t=1.34e-11 dt=2.01e-13 max_dmdt=1.28e+03
#189  t=1.36e-11 dt=2.01e-13 max_dmdt=1.26e+03
#190  t=1.38e-11 dt=2.01e-13 max_dmdt=1.24e+03
#191  t=1.4e-11  dt=2.01e-13 max_dmdt=1.22e+03
#192  t=1.42e-11 dt=2.01e-13 max_dmdt=1.21e+03
#193  t=1.44e-11 dt=2.01e-13 max_dmdt=1.19e+03
#194  t=1.46e-11 dt=2.01e-13 max_dmdt=1.17e+03
#195  t=1.48e-11 dt=2.01e-13 max_dmdt=1.15e+03
#196  t=1.51e-11 dt=3.05e-13 max_dmdt=1.14e+03
#197  t=1.54e-11 dt=3.05e-13 max_dmdt=1.12e+03
#198  t=1.58e-11 dt=3.05e-13 max_dmdt=1.1e+03
#199  t=1.61e-11 dt=3.05e-13 max_dmdt=1.08e+03
#200  t=1.64e-11 dt=3.05e-13 max_dmdt=1.06e+03
#201  t=1.67e-11 dt=3.05e-13 max_dmdt=1.05e+03
#202  t=1.7e-11  dt=3.05e-13 max_dmdt=1.03e+03
#203  t=1.73e-11 dt=3.05e-13 max_dmdt=1.01e+03
#204  t=1.76e-11 dt=3.05e-13 max_dmdt=997
#205  t=1.79e-11 dt=3.05e-13 max_dmdt=980
#206  t=1.82e-11 dt=3.05e-13 max_dmdt=965
#207  t=1.85e-11 dt=3.05e-13 max_dmdt=949
#208  t=1.88e-11 dt=3.05e-13 max_dmdt=934
#209  t=1.91e-11 dt=3.05e-13 max_dmdt=920
#210  t=1.94e-11 dt=3.05e-13 max_dmdt=905
#211  t=1.97e-11 dt=3.05e-13 max_dmdt=891
#212  t=2e-11    dt=3.05e-13 max_dmdt=878
#213  t=2.03e-11 dt=3.05e-13 max_dmdt=867
#214  t=2.06e-11 dt=3.05e-13 max_dmdt=857
#215  t=2.09e-11 dt=3.05e-13 max_dmdt=847
#216  t=2.12e-11 dt=3.05e-13 max_dmdt=837
#217  t=2.15e-11 dt=3.05e-13 max_dmdt=827
#218  t=2.18e-11 dt=3.05e-13 max_dmdt=817
#219  t=2.22e-11 dt=3.05e-13 max_dmdt=807
#220  t=2.25e-11 dt=3.05e-13 max_dmdt=798
#221  t=2.28e-11 dt=3.05e-13 max_dmdt=788
#222  t=2.31e-11 dt=3.05e-13 max_dmdt=779
#223  t=2.34e-11 dt=3.05e-13 max_dmdt=769
#224  t=2.37e-11 dt=3.05e-13 max_dmdt=760
#225  t=2.4e-11  dt=3.05e-13 max_dmdt=751
#226  t=2.43e-11 dt=3.05e-13 max_dmdt=742
#227  t=2.46e-11 dt=3.05e-13 max_dmdt=733
#228  t=2.49e-11 dt=3.05e-13 max_dmdt=724
#229  t=2.52e-11 dt=3.05e-13 max_dmdt=716
#230  t=2.55e-11 dt=3.05e-13 max_dmdt=707
#231  t=2.58e-11 dt=3.05e-13 max_dmdt=699
#232  t=2.61e-11 dt=3.05e-13 max_dmdt=691
#233  t=2.64e-11 dt=3.05e-13 max_dmdt=684
#234  t=2.67e-11 dt=3.05e-13 max_dmdt=677
#235  t=2.7e-11  dt=3.05e-13 max_dmdt=672
#236  t=2.73e-11 dt=3.05e-13 max_dmdt=667
#237  t=2.76e-11 dt=3.05e-13 max_dmdt=662
#238  t=2.79e-11 dt=3.05e-13 max_dmdt=657
#239  t=2.82e-11 dt=3.05e-13 max_dmdt=653
#240  t=2.85e-11 dt=3.05e-13 max_dmdt=649
#241  t=2.89e-11 dt=3.05e-13 max_dmdt=645
#242  t=2.92e-11 dt=3.05e-13 max_dmdt=641
#243  t=2.95e-11 dt=3.05e-13 max_dmdt=637
#244  t=2.98e-11 dt=3.05e-13 max_dmdt=634
#245  t=3.01e-11 dt=3.05e-13 max_dmdt=630
#246  t=3.04e-11 dt=3.05e-13 max_dmdt=627
#247  t=3.07e-11 dt=3.05e-13 max_dmdt=623
#248  t=3.1e-11  dt=3.05e-13 max_dmdt=620
#249  t=3.13e-11 dt=3.05e-13 max_dmdt=616
#250  t=3.16e-11 dt=3.05e-13 max_dmdt=613
#251  t=3.19e-11 dt=3.05e-13 max_dmdt=609
#252  t=3.22e-11 dt=3.05e-13 max_dmdt=606
#253  t=3.25e-11 dt=3.05e-13 max_dmdt=602
#254  t=3.28e-11 dt=3.05e-13 max_dmdt=599
#255  t=3.31e-11 dt=3.05e-13 max_dmdt=595
#256  t=3.34e-11 dt=3.05e-13 max_dmdt=591
#257  t=3.37e-11 dt=3.05e-13 max_dmdt=587
#258  t=3.4e-11  dt=3.05e-13 max_dmdt=583
#259  t=3.43e-11 dt=3.05e-13 max_dmdt=579
#260  t=3.46e-11 dt=3.05e-13 max_dmdt=575
#261  t=3.49e-11 dt=3.05e-13 max_dmdt=570
#262  t=3.53e-11 dt=3.05e-13 max_dmdt=566
#263  t=3.56e-11 dt=3.05e-13 max_dmdt=561
#264  t=3.59e-11 dt=3.05e-13 max_dmdt=557
#265  t=3.62e-11 dt=3.05e-13 max_dmdt=552
#266  t=3.65e-11 dt=3.05e-13 max_dmdt=547
#267  t=3.68e-11 dt=3.05e-13 max_dmdt=542
#268  t=3.71e-11 dt=3.05e-13 max_dmdt=537
#269  t=3.74e-11 dt=3.05e-13 max_dmdt=532
#270  t=3.77e-11 dt=3.05e-13 max_dmdt=526
#271  t=3.8e-11  dt=3.05e-13 max_dmdt=521
#272  t=3.83e-11 dt=3.05e-13 max_dmdt=516
#273  t=3.86e-11 dt=3.05e-13 max_dmdt=510
#274  t=3.89e-11 dt=3.05e-13 max_dmdt=505
#275  t=3.92e-11 dt=3.05e-13 max_dmdt=499
#276  t=3.95e-11 dt=3.05e-13 max_dmdt=493
#277  t=3.98e-11 dt=3.05e-13 max_dmdt=488
#278  t=4.01e-11 dt=3.05e-13 max_dmdt=482
#279  t=4.04e-11 dt=3.05e-13 max_dmdt=477
#280  t=4.07e-11 dt=3.05e-13 max_dmdt=471
#281  t=4.1e-11  dt=3.05e-13 max_dmdt=466
#282  t=4.13e-11 dt=3.05e-13 max_dmdt=460
#283  t=4.16e-11 dt=3.05e-13 max_dmdt=455
#284  t=4.2e-11  dt=3.05e-13 max_dmdt=454
#285  t=4.23e-11 dt=3.05e-13 max_dmdt=454
#286  t=4.26e-11 dt=3.05e-13 max_dmdt=453
#287  t=4.29e-11 dt=3.05e-13 max_dmdt=452
#288  t=4.32e-11 dt=3.05e-13 max_dmdt=452
#289  t=4.35e-11 dt=3.05e-13 max_dmdt=451
#290  t=4.38e-11 dt=3.05e-13 max_dmdt=450
#291  t=4.41e-11 dt=3.05e-13 max_dmdt=449
#292  t=4.44e-11 dt=3.05e-13 max_dmdt=448
#293  t=4.47e-11 dt=3.05e-13 max_dmdt=446
#294  t=4.5e-11  dt=3.05e-13 max_dmdt=445
#295  t=4.53e-11 dt=3.05e-13 max_dmdt=444
#296  t=4.56e-11 dt=3.05e-13 max_dmdt=442
#297  t=4.59e-11 dt=3.05e-13 max_dmdt=441
#298  t=4.62e-11 dt=3.05e-13 max_dmdt=439
#299  t=4.65e-11 dt=3.05e-13 max_dmdt=438
#300  t=4.68e-11 dt=3.05e-13 max_dmdt=437
#301  t=4.71e-11 dt=3.05e-13 max_dmdt=436
#302  t=4.74e-11 dt=3.05e-13 max_dmdt=435
#303  t=4.77e-11 dt=3.05e-13 max_dmdt=434
#304  t=4.8e-11  dt=3.05e-13 max_dmdt=433
#305  t=4.84e-11 dt=3.05e-13 max_dmdt=432
#306  t=4.87e-11 dt=3.05e-13 max_dmdt=431
#307  t=4.9e-11  dt=3.05e-13 max_dmdt=430
#308  t=4.93e-11 dt=3.05e-13 max_dmdt=429
#309  t=4.96e-11 dt=3.05e-13 max_dmdt=428
#310  t=4.98e-11 dt=2.25e-13 max_dmdt=427
#311  t=5e-11    dt=2.25e-13 max_dmdt=426
#312  t=5.02e-11 dt=2.25e-13 max_dmdt=425
#313  t=5.05e-11 dt=2.25e-13 max_dmdt=424
#314  t=5.07e-11 dt=2.25e-13 max_dmdt=423
#315  t=5.09e-11 dt=2.25e-13 max_dmdt=423
#316  t=5.11e-11 dt=2.25e-13 max_dmdt=423
#317  t=5.14e-11 dt=2.25e-13 max_dmdt=422
#318  t=5.16e-11 dt=2.25e-13 max_dmdt=422
#319  t=5.18e-11 dt=2.25e-13 max_dmdt=421
#320  t=5.2e-11  dt=2.25e-13 max_dmdt=421
#321  t=5.23e-11 dt=2.25e-13 max_dmdt=420
#322  t=5.25e-11 dt=2.25e-13 max_dmdt=420
#323  t=5.27e-11 dt=2.25e-13 max_dmdt=419
#324  t=5.29e-11 dt=2.25e-13 max_dmdt=419
#325  t=5.32e-11 dt=2.25e-13 max_dmdt=418
#326  t=5.34e-11 dt=2.25e-13 max_dmdt=418
#327  t=5.36e-11 dt=2.25e-13 max_dmdt=417
#328  t=5.39e-11 dt=2.25e-13 max_dmdt=416
#329  t=5.41e-11 dt=2.25e-13 max_dmdt=416
#330  t=5.43e-11 dt=2.25e-13 max_dmdt=417
#331  t=5.45e-11 dt=2.25e-13 max_dmdt=419
#332  t=5.48e-11 dt=2.25e-13 max_dmdt=422
#333  t=5.5e-11  dt=2.25e-13 max_dmdt=425
#334  t=5.52e-11 dt=2.25e-13 max_dmdt=427
#335  t=5.54e-11 dt=2.25e-13 max_dmdt=430
#336  t=5.57e-11 dt=2.25e-13 max_dmdt=432
#337  t=5.59e-11 dt=2.25e-13 max_dmdt=435
#338  t=5.61e-11 dt=2.25e-13 max_dmdt=437
#339  t=5.63e-11 dt=2.25e-13 max_dmdt=439
#340  t=5.66e-11 dt=2.25e-13 max_dmdt=442
#341  t=5.68e-11 dt=2.25e-13 max_dmdt=444
#342  t=5.7e-11  dt=2.25e-13 max_dmdt=446
#343  t=5.72e-11 dt=2.25e-13 max_dmdt=449
#344  t=5.75e-11 dt=2.25e-13 max_dmdt=451
#345  t=5.77e-11 dt=2.25e-13 max_dmdt=453
#346  t=5.79e-11 dt=2.25e-13 max_dmdt=455
#347  t=5.81e-11 dt=2.25e-13 max_dmdt=457
#348  t=5.84e-11 dt=2.25e-13 max_dmdt=459
#349  t=5.86e-11 dt=2.25e-13 max_dmdt=461
#350  t=5.88e-11 dt=2.25e-13 max_dmdt=463
#351  t=5.9e-11  dt=2.25e-13 max_dmdt=465
#352  t=5.93e-11 dt=2.25e-13 max_dmdt=467
#353  t=5.95e-11 dt=2.25e-13 max_dmdt=468
#354  t=5.97e-11 dt=2.25e-13 max_dmdt=470
#355  t=5.99e-11 dt=2.25e-13 max_dmdt=472
#356  t=6.02e-11 dt=2.25e-13 max_dmdt=473
#357  t=6.04e-11 dt=2.25e-13 max_dmdt=475
#358  t=6.06e-11 dt=2.25e-13 max_dmdt=477
#359  t=6.08e-11 dt=2.25e-13 max_dmdt=478
#360  t=6.11e-11 dt=2.25e-13 max_dmdt=480
#361  t=6.13e-11 dt=2.25e-13 max_dmdt=481
#362  t=6.15e-11 dt=2.25e-13 max_dmdt=483
#363  t=6.17e-11 dt=2.25e-13 max_dmdt=484
#364  t=6.2e-11  dt=2.25e-13 max_dmdt=486
#365  t=6.22e-11 dt=2.25e-13 max_dmdt=487
#366  t=6.24e-11 dt=2.25e-13 max_dmdt=488
#367  t=6.26e-11 dt=2.25e-13 max_dmdt=490
#368  t=6.29e-11 dt=2.25e-13 max_dmdt=491
#369  t=6.31e-11 dt=2.25e-13 max_dmdt=492
#370  t=6.33e-11 dt=2.25e-13 max_dmdt=494
#371  t=6.35e-11 dt=2.25e-13 max_dmdt=495
#372  t=6.38e-11 dt=2.25e-13 max_dmdt=496
#373  t=6.4e-11  dt=2.25e-13 max_dmdt=498
#374  t=6.42e-11 dt=2.25e-13 max_dmdt=499
#375  t=6.44e-11 dt=2.25e-13 max_dmdt=500
#376  t=6.47e-11 dt=2.25e-13 max_dmdt=501
#377  t=6.5e-11  dt=3.43e-13 max_dmdt=502
#378  t=6.54e-11 dt=3.43e-13 max_dmdt=504
#379  t=6.57e-11 dt=3.43e-13 max_dmdt=506
#380  t=6.6e-11  dt=3.43e-13 max_dmdt=507
#381  t=6.64e-11 dt=3.43e-13 max_dmdt=509
#382  t=6.67e-11 dt=3.43e-13 max_dmdt=510
#383  t=6.71e-11 dt=3.43e-13 max_dmdt=511
#384  t=6.74e-11 dt=3.43e-13 max_dmdt=513
#385  t=6.78e-11 dt=3.43e-13 max_dmdt=514
#386  t=6.81e-11 dt=3.43e-13 max_dmdt=515
#387  t=6.86e-11 dt=5.15e-13 max_dmdt=517
#388  t=6.91e-11 dt=5.15e-13 max_dmdt=518
#389  t=6.96e-11 dt=5.15e-13 max_dmdt=520
#390  t=7.02e-11 dt=5.15e-13 max_dmdt=521
#391  t=7.07e-11 dt=5.15e-13 max_dmdt=523
#392  t=7.12e-11 dt=5.15e-13 max_dmdt=524
#393  t=7.17e-11 dt=5.15e-13 max_dmdt=525
#394  t=7.22e-11 dt=5.15e-13 max_dmdt=526
#395  t=7.27e-11 dt=5.15e-13 max_dmdt=527
#396  t=7.35e-11 dt=7.88e-13 max_dmdt=528
#397  t=7.43e-11 dt=7.88e-13 max_dmdt=529
#398  t=7.51e-11 dt=7.88e-13 max_dmdt=530
#399  t=7.59e-11 dt=7.88e-13 max_dmdt=531
#400  t=7.67e-11 dt=7.88e-13 max_dmdt=532
#401  t=7.75e-11 dt=7.88e-13 max_dmdt=532
#402  t=7.83e-11 dt=7.88e-13 max_dmdt=533
#403  t=7.9e-11  dt=7.88e-13 max_dmdt=533
#404  t=7.98e-11 dt=7.88e-13 max_dmdt=533
#405  t=8.06e-11 dt=7.88e-13 max_dmdt=533
#406  t=8.14e-11 dt=7.88e-13 max_dmdt=533
#407  t=8.22e-11 dt=7.88e-13 max_dmdt=533
#408  t=8.3e-11  dt=7.88e-13 max_dmdt=532
#409  t=8.38e-11 dt=7.88e-13 max_dmdt=532
#410  t=8.46e-11 dt=7.88e-13 max_dmdt=531
#411  t=8.53e-11 dt=7.88e-13 max_dmdt=531
#412  t=8.61e-11 dt=7.88e-13 max_dmdt=530
#413  t=8.69e-11 dt=7.88e-13 max_dmdt=529
#414  t=8.77e-11 dt=7.88e-13 max_dmdt=529
#415  t=8.85e-11 dt=7.88e-13 max_dmdt=528
#416  t=8.93e-11 dt=7.88e-13 max_dmdt=527
#417  t=9.01e-11 dt=7.88e-13 max_dmdt=526
#418  t=9.09e-11 dt=7.88e-13 max_dmdt=524
#419  t=9.17e-11 dt=7.88e-13 max_dmdt=523
#420  t=9.24e-11 dt=7.88e-13 max_dmdt=522
#421  t=9.32e-11 dt=7.88e-13 max_dmdt=521
#422  t=9.44e-11 dt=1.21e-12 max_dmdt=519
#423  t=9.56e-11 dt=1.21e-12 max_dmdt=517
#424  t=9.68e-11 dt=1.21e-12 max_dmdt=514
#425  t=9.81e-11 dt=1.21e-12 max_dmdt=512
#426  t=9.93e-11 dt=1.21e-12 max_dmdt=509
#427  t=1e-10    dt=1.21e-12 max_dmdt=507
#428  t=1.02e-10 dt=1.21e-12 max_dmdt=504
#429  t=1.03e-10 dt=1.21e-12 max_dmdt=501
#430  t=1.04e-10 dt=1.21e-12 max_dmdt=498
#431  t=1.05e-10 dt=1.21e-12 max_dmdt=495
#432  t=1.06e-10 dt=1.21e-12 max_dmdt=491
#433  t=1.08e-10 dt=1.21e-12 max_dmdt=488
#434  t=1.09e-10 dt=1.21e-12 max_dmdt=484
#435  t=1.1e-10  dt=1.21e-12 max_dmdt=481
#436  t=1.11e-10 dt=1.21e-12 max_dmdt=477
#437  t=1.13e-10 dt=1.21e-12 max_dmdt=473
#438  t=1.14e-10 dt=1.21e-12 max_dmdt=469
#439  t=1.15e-10 dt=1.21e-12 max_dmdt=465
#440  t=1.16e-10 dt=1.21e-12 max_dmdt=461
#441  t=1.17e-10 dt=1.21e-12 max_dmdt=457
#442  t=1.19e-10 dt=1.21e-12 max_dmdt=453
#443  t=1.2e-10  dt=1.21e-12 max_dmdt=449
#444  t=1.21e-10 dt=1.21e-12 max_dmdt=444
#445  t=1.22e-10 dt=1.21e-12 max_dmdt=440
#446  t=1.23e-10 dt=1.21e-12 max_dmdt=435
#447  t=1.25e-10 dt=1.21e-12 max_dmdt=431
#448  t=1.26e-10 dt=1.21e-12 max_dmdt=426
#449  t=1.27e-10 dt=1.21e-12 max_dmdt=421
#450  t=1.28e-10 dt=1.21e-12 max_dmdt=421
#451  t=1.29e-10 dt=1.21e-12 max_dmdt=424
#452  t=1.31e-10 dt=1.21e-12 max_dmdt=426
#453  t=1.32e-10 dt=1.21e-12 max_dmdt=428
#454  t=1.33e-10 dt=1.21e-12 max_dmdt=429
#455  t=1.34e-10 dt=1.21e-12 max_dmdt=431
#456  t=1.35e-10 dt=1.21e-12 max_dmdt=432
#457  t=1.37e-10 dt=1.21e-12 max_dmdt=432
#458  t=1.38e-10 dt=1.21e-12 max_dmdt=433
#459  t=1.39e-10 dt=1.21e-12 max_dmdt=433
#460  t=1.4e-10  dt=1.21e-12 max_dmdt=433
#461  t=1.41e-10 dt=1.21e-12 max_dmdt=433
#462  t=1.43e-10 dt=1.21e-12 max_dmdt=432
#463  t=1.44e-10 dt=1.21e-12 max_dmdt=431
#464  t=1.45e-10 dt=1.21e-12 max_dmdt=430
#465  t=1.46e-10 dt=1.21e-12 max_dmdt=429
#466  t=1.48e-10 dt=1.21e-12 max_dmdt=427
#467  t=1.49e-10 dt=1.21e-12 max_dmdt=425
#468  t=1.5e-10  dt=1.21e-12 max_dmdt=423
#469  t=1.51e-10 dt=1.21e-12 max_dmdt=421
#470  t=1.52e-10 dt=1.21e-12 max_dmdt=418
#471  t=1.54e-10 dt=1.21e-12 max_dmdt=416
#472  t=1.55e-10 dt=1.21e-12 max_dmdt=413
#473  t=1.56e-10 dt=1.21e-12 max_dmdt=410
#474  t=1.57e-10 dt=1.21e-12 max_dmdt=406
#475  t=1.58e-10 dt=1.21e-12 max_dmdt=403
#476  t=1.6e-10  dt=1.21e-12 max_dmdt=399
#477  t=1.61e-10 dt=1.21e-12 max_dmdt=395
#478  t=1.62e-10 dt=1.21e-12 max_dmdt=391
#479  t=1.63e-10 dt=1.21e-12 max_dmdt=386
#480  t=1.64e-10 dt=1.21e-12 max_dmdt=382
#481  t=1.66e-10 dt=1.21e-12 max_dmdt=377
#482  t=1.67e-10 dt=1.21e-12 max_dmdt=372
#483  t=1.68e-10 dt=1.21e-12 max_dmdt=367
#484  t=1.69e-10 dt=1.21e-12 max_dmdt=362
#485  t=1.7e-10  dt=1.21e-12 max_dmdt=356
#486  t=1.72e-10 dt=1.21e-12 max_dmdt=351
#487  t=1.73e-10 dt=1.21e-12 max_dmdt=345
#488  t=1.74e-10 dt=1.21e-12 max_dmdt=339
#489  t=1.75e-10 dt=1.21e-12 max_dmdt=333
#490  t=1.77e-10 dt=1.81e-12 max_dmdt=326
#491  t=1.79e-10 dt=1.81e-12 max_dmdt=316
#492  t=1.81e-10 dt=1.81e-12 max_dmdt=307
#493  t=1.82e-10 dt=1.81e-12 max_dmdt=297
#494  t=1.84e-10 dt=1.81e-12 max_dmdt=287
#495  t=1.86e-10 dt=1.81e-12 max_dmdt=277
#496  t=1.88e-10 dt=1.81e-12 max_dmdt=267
#497  t=1.9e-10  dt=1.81e-12 max_dmdt=257
#498  t=1.92e-10 dt=1.81e-12 max_dmdt=246
#499  t=1.93e-10 dt=1.81e-12 max_dmdt=236
#500  t=1.95e-10 dt=1.81e-12 max_dmdt=226
#501  t=1.97e-10 dt=1.81e-12 max_dmdt=219
#502  t=1.99e-10 dt=1.81e-12 max_dmdt=221
#503  t=2.01e-10 dt=1.81e-12 max_dmdt=223
#504  t=2.02e-10 dt=1.81e-12 max_dmdt=224
#505  t=2.04e-10 dt=1.81e-12 max_dmdt=224
#506  t=2.06e-10 dt=1.81e-12 max_dmdt=225
#507  t=2.08e-10 dt=1.81e-12 max_dmdt=225
#508  t=2.1e-10  dt=1.81e-12 max_dmdt=224
#509  t=2.11e-10 dt=1.81e-12 max_dmdt=224
#510  t=2.13e-10 dt=1.81e-12 max_dmdt=223
#511  t=2.15e-10 dt=1.81e-12 max_dmdt=222
#512  t=2.17e-10 dt=1.81e-12 max_dmdt=220
#513  t=2.19e-10 dt=1.81e-12 max_dmdt=218
#514  t=2.21e-10 dt=1.81e-12 max_dmdt=216
#515  t=2.22e-10 dt=1.81e-12 max_dmdt=214
#516  t=2.24e-10 dt=1.81e-12 max_dmdt=212
#517  t=2.26e-10 dt=1.81e-12 max_dmdt=209
#518  t=2.28e-10 dt=1.81e-12 max_dmdt=207
#519  t=2.3e-10  dt=1.81e-12 max_dmdt=204
#520  t=2.31e-10 dt=1.81e-12 max_dmdt=201
#521  t=2.33e-10 dt=1.81e-12 max_dmdt=197
#522  t=2.35e-10 dt=1.81e-12 max_dmdt=194
#523  t=2.37e-10 dt=1.81e-12 max_dmdt=191
#524  t=2.39e-10 dt=1.81e-12 max_dmdt=187
#525  t=2.4e-10  dt=1.81e-12 max_dmdt=184
#526  t=2.42e-10 dt=1.81e-12 max_dmdt=180
#527  t=2.44e-10 dt=1.81e-12 max_dmdt=176
#528  t=2.46e-10 dt=1.81e-12 max_dmdt=172
#529  t=2.48e-10 dt=1.81e-12 max_dmdt=168
#530  t=2.49e-10 dt=1.81e-12 max_dmdt=164
#531  t=2.51e-10 dt=1.81e-12 max_dmdt=160
#532  t=2.53e-10 dt=1.81e-12 max_dmdt=156
#533  t=2.55e-10 dt=1.81e-12 max_dmdt=152
#534  t=2.57e-10 dt=1.81e-12 max_dmdt=148
#535  t=2.59e-10 dt=1.81e-12 max_dmdt=144
#536  t=2.6e-10  dt=1.81e-12 max_dmdt=140
#537  t=2.62e-10 dt=1.81e-12 max_dmdt=136
#538  t=2.64e-10 dt=1.81e-12 max_dmdt=132
#539  t=2.67e-10 dt=2.74e-12 max_dmdt=127
#540  t=2.69e-10 dt=2.74e-12 max_dmdt=121
#541  t=2.72e-10 dt=2.74e-12 max_dmdt=115
#542  t=2.75e-10 dt=2.74e-12 max_dmdt=110
#543  t=2.78e-10 dt=2.74e-12 max_dmdt=104
#544  t=2.8e-10  dt=2.74e-12 max_dmdt=98.3
#545  t=2.83e-10 dt=2.74e-12 max_dmdt=92.9
#546  t=2.86e-10 dt=2.74e-12 max_dmdt=87.7
#547  t=2.89e-10 dt=2.74e-12 max_dmdt=82.8
#548  t=2.91e-10 dt=2.74e-12 max_dmdt=78
#549  t=2.94e-10 dt=2.74e-12 max_dmdt=77.7
#550  t=2.97e-10 dt=2.74e-12 max_dmdt=78.4
#551  t=3e-10    dt=2.74e-12 max_dmdt=78.9
#552  t=3.02e-10 dt=2.74e-12 max_dmdt=79.1
#553  t=3.05e-10 dt=2.74e-12 max_dmdt=79.1
#554  t=3.08e-10 dt=2.74e-12 max_dmdt=78.9
#555  t=3.11e-10 dt=2.74e-12 max_dmdt=78.5
#556  t=3.13e-10 dt=2.74e-12 max_dmdt=77.9
#557  t=3.16e-10 dt=2.74e-12 max_dmdt=77.1
#558  t=3.19e-10 dt=2.74e-12 max_dmdt=76.2
#559  t=3.22e-10 dt=2.74e-12 max_dmdt=75.1
#560  t=3.24e-10 dt=2.74e-12 max_dmdt=73.9
#561  t=3.27e-10 dt=2.74e-12 max_dmdt=72.5
#562  t=3.3e-10  dt=2.74e-12 max_dmdt=71.1
#563  t=3.32e-10 dt=2.74e-12 max_dmdt=69.5
#564  t=3.35e-10 dt=2.74e-12 max_dmdt=67.8
#565  t=3.38e-10 dt=2.74e-12 max_dmdt=66.1
#566  t=3.41e-10 dt=2.74e-12 max_dmdt=64.2
#567  t=3.43e-10 dt=2.74e-12 max_dmdt=62.3
#568  t=3.46e-10 dt=2.74e-12 max_dmdt=60.4
#569  t=3.49e-10 dt=2.74e-12 max_dmdt=58.4
#570  t=3.52e-10 dt=2.74e-12 max_dmdt=56.4
#571  t=3.54e-10 dt=2.74e-12 max_dmdt=54.3
#572  t=3.57e-10 dt=2.74e-12 max_dmdt=52.2
#573  t=3.6e-10  dt=2.74e-12 max_dmdt=50.1
#574  t=3.63e-10 dt=2.74e-12 max_dmdt=48
#575  t=3.65e-10 dt=2.74e-12 max_dmdt=45.9
#576  t=3.68e-10 dt=2.74e-12 max_dmdt=43.8
#577  t=3.71e-10 dt=2.74e-12 max_dmdt=41.7
#578  t=3.74e-10 dt=2.74e-12 max_dmdt=39.7
#579  t=3.76e-10 dt=2.74e-12 max_dmdt=37.7
#580  t=3.79e-10 dt=2.74e-12 max_dmdt=35.8
#581  t=3.82e-10 dt=2.74e-12 max_dmdt=34
#582  t=3.85e-10 dt=2.74e-12 max_dmdt=32.2
#583  t=3.87e-10 dt=2.74e-12 max_dmdt=31.5
#584  t=3.9e-10  dt=2.74e-12 max_dmdt=31.8
#585  t=3.93e-10 dt=2.74e-12 max_dmdt=32
#586  t=3.96e-10 dt=2.74e-12 max_dmdt=32.1
#587  t=3.98e-10 dt=2.74e-12 max_dmdt=32.1
#588  t=4.01e-10 dt=2.74e-12 max_dmdt=32.1
#589  t=4.04e-10 dt=2.74e-12 max_dmdt=32
#590  t=4.06e-10 dt=2.74e-12 max_dmdt=31.8
#591  t=4.09e-10 dt=2.74e-12 max_dmdt=31.5
#592  t=4.12e-10 dt=2.74e-12 max_dmdt=31.2
#593  t=4.15e-10 dt=2.74e-12 max_dmdt=30.8
#594  t=4.17e-10 dt=2.74e-12 max_dmdt=30.3
#595  t=4.2e-10  dt=2.74e-12 max_dmdt=29.8
#596  t=4.23e-10 dt=2.74e-12 max_dmdt=29.3
#597  t=4.26e-10 dt=2.74e-12 max_dmdt=28.7
#598  t=4.28e-10 dt=2.74e-12 max_dmdt=28.1
#599  t=4.31e-10 dt=2.74e-12 max_dmdt=27.4
#600  t=4.34e-10 dt=2.74e-12 max_dmdt=26.7
#601  t=4.37e-10 dt=2.74e-12 max_dmdt=26
#602  t=4.39e-10 dt=2.74e-12 max_dmdt=25.2
#603  t=4.42e-10 dt=2.74e-12 max_dmdt=24.4
#604  t=4.45e-10 dt=2.74e-12 max_dmdt=23.6
#605  t=4.48e-10 dt=2.74e-12 max_dmdt=22.8
#606  t=4.5e-10  dt=2.74e-12 max_dmdt=21.9
#607  t=4.53e-10 dt=2.74e-12 max_dmdt=21.1
#608  t=4.57e-10 dt=4.11e-12 max_dmdt=20
#609  t=4.61e-10 dt=4.11e-12 max_dmdt=18.8
#610  t=4.65e-10 dt=4.11e-12 max_dmdt=17.5
#611  t=4.69e-10 dt=4.11e-12 max_dmdt=16.3
#612  t=4.74e-10 dt=4.11e-12 max_dmdt=15.1
#613  t=4.78e-10 dt=4.11e-12 max_dmdt=14
#614  t=4.82e-10 dt=4.11e-12 max_dmdt=13
#615  t=4.86e-10 dt=4.11e-12 max_dmdt=12.9
#616  t=4.9e-10  dt=4.11e-12 max_dmdt=13.1
#617  t=4.94e-10 dt=4.11e-12 max_dmdt=13.1
#618  t=4.98e-10 dt=4.11e-12 max_dmdt=13.2
#619  t=5.02e-10 dt=4.11e-12 max_dmdt=13.1
#620  t=5.06e-10 dt=4.11e-12 max_dmdt=13
#621  t=5.11e-10 dt=4.11e-12 max_dmdt=12.8
#622  t=5.15e-10 dt=4.11e-12 max_dmdt=12.5
#623  t=5.19e-10 dt=4.11e-12 max_dmdt=12.2
#624  t=5.23e-10 dt=4.11e-12 max_dmdt=11.8
#625  t=5.27e-10 dt=4.11e-12 max_dmdt=11.4
#626  t=5.31e-10 dt=4.11e-12 max_dmdt=11
#627  t=5.35e-10 dt=4.11e-12 max_dmdt=10.6
#628  t=5.39e-10 dt=4.11e-12 max_dmdt=10.1
#629  t=5.44e-10 dt=4.11e-12 max_dmdt=9.56
#630  t=5.48e-10 dt=4.11e-12 max_dmdt=9.03
#631  t=5.52e-10 dt=4.11e-12 max_dmdt=8.5
#632  t=5.56e-10 dt=4.11e-12 max_dmdt=7.96
#633  t=5.6e-10  dt=4.11e-12 max_dmdt=7.43
#634  t=5.64e-10 dt=4.11e-12 max_dmdt=6.91
#635  t=5.68e-10 dt=4.11e-12 max_dmdt=6.42
#636  t=5.72e-10 dt=4.11e-12 max_dmdt=5.95
#637  t=5.76e-10 dt=4.11e-12 max_dmdt=5.52
#638  t=5.81e-10 dt=4.11e-12 max_dmdt=5.5
#639  t=5.85e-10 dt=4.11e-12 max_dmdt=5.56
#640  t=5.89e-10 dt=4.11e-12 max_dmdt=5.59
#641  t=5.93e-10 dt=4.11e-12 max_dmdt=5.59
#642  t=5.97e-10 dt=4.11e-12 max_dmdt=5.55
#643  t=6.01e-10 dt=4.11e-12 max_dmdt=5.49
#644  t=6.05e-10 dt=4.11e-12 max_dmdt=5.41
#645  t=6.09e-10 dt=4.11e-12 max_dmdt=5.3
#646  t=6.13e-10 dt=4.11e-12 max_dmdt=5.17
#647  t=6.18e-10 dt=4.11e-12 max_dmdt=5.02
#648  t=6.22e-10 dt=4.11e-12 max_dmdt=4.85
#649  t=6.26e-10 dt=4.11e-12 max_dmdt=4.67
#650  t=6.3e-10  dt=4.11e-12 max_dmdt=4.48
#651  t=6.34e-10 dt=4.11e-12 max_dmdt=4.28
#652  t=6.38e-10 dt=4.11e-12 max_dmdt=4.07
#653  t=6.42e-10 dt=4.11e-12 max_dmdt=3.85
#654  t=6.46e-10 dt=4.11e-12 max_dmdt=3.63
#655  t=6.5e-10  dt=4.11e-12 max_dmdt=3.4
#656  t=6.55e-10 dt=4.11e-12 max_dmdt=3.18
#657  t=6.59e-10 dt=4.11e-12 max_dmdt=2.97
#658  t=6.63e-10 dt=4.11e-12 max_dmdt=2.76
#659  t=6.67e-10 dt=4.11e-12 max_dmdt=2.56
#660  t=6.71e-10 dt=4.11e-12 max_dmdt=2.38
#661  t=6.75e-10 dt=4.11e-12 max_dmdt=2.26
#662  t=6.79e-10 dt=4.11e-12 max_dmdt=2.31
#663  t=6.83e-10 dt=4.11e-12 max_dmdt=2.33
#664  t=6.89e-10 dt=6.18e-12 max_dmdt=2.34
#665  t=6.96e-10 dt=6.18e-12 max_dmdt=2.33
#666  t=7.02e-10 dt=6.18e-12 max_dmdt=2.28
#667  t=7.08e-10 dt=6.18e-12 max_dmdt=2.22
#668  t=7.14e-10 dt=6.18e-12 max_dmdt=2.13
#669  t=7.2e-10  dt=6.18e-12 max_dmdt=2.02
#670  t=7.27e-10 dt=6.18e-12 max_dmdt=1.91
#671  t=7.33e-10 dt=6.18e-12 max_dmdt=1.78
#672  t=7.39e-10 dt=6.18e-12 max_dmdt=1.64
#673  t=7.45e-10 dt=6.18e-12 max_dmdt=1.5
#674  t=7.51e-10 dt=6.18e-12 max_dmdt=1.35
#675  t=7.57e-10 dt=6.18e-12 max_dmdt=1.22
#676  t=7.64e-10 dt=6.18e-12 max_dmdt=1.09
#677  t=7.7e-10  dt=6.18e-12 max_dmdt=0.979
#678  t=7.76e-10 dt=6.18e-12 max_dmdt=1
#679  t=7.82e-10 dt=6.18e-12 max_dmdt=1.01
#680  t=7.88e-10 dt=6.18e-12 max_dmdt=1.01
#681  t=7.95e-10 dt=6.18e-12 max_dmdt=0.994
#682  t=8.01e-10 dt=6.18e-12 max_dmdt=0.968
#683  t=8.07e-10 dt=6.18e-12 max_dmdt=0.933
#684  t=8.13e-10 dt=6.18e-12 max_dmdt=0.891
#685  t=8.19e-10 dt=6.18e-12 max_dmdt=0.843
#686  t=8.25e-10 dt=6.18e-12 max_dmdt=0.789
#687  t=8.32e-10 dt=6.18e-12 max_dmdt=0.732
#688  t=8.38e-10 dt=6.18e-12 max_dmdt=0.672
#689  t=8.44e-10 dt=6.18e-12 max_dmdt=0.612
#690  t=8.5e-10  dt=6.18e-12 max_dmdt=0.552
#691  t=8.56e-10 dt=6.18e-12 max_dmdt=0.496
#692  t=8.63e-10 dt=6.18e-12 max_dmdt=0.448
#693  t=8.69e-10 dt=6.18e-12 max_dmdt=0.42
#694  t=8.75e-10 dt=6.18e-12 max_dmdt=0.429
#695  t=8.81e-10 dt=6.18e-12 max_dmdt=0.432
#696  t=8.87e-10 dt=6.18e-12 max_dmdt=0.43
#697  t=8.93e-10 dt=6.18e-12 max_dmdt=0.422
#698  t=9e-10    dt=6.18e-12 max_dmdt=0.41
#699  t=9.06e-10 dt=6.18e-12 max_dmdt=0.394
#700  t=9.12e-10 dt=6.18e-12 max_dmdt=0.375
#701  t=9.18e-10 dt=6.18e-12 max_dmdt=0.353
#702  t=9.28e-10 dt=9.45e-12 max_dmdt=0.323
#703  t=9.37e-10 dt=9.45e-12 max_dmdt=0.283
#704  t=9.47e-10 dt=9.45e-12 max_dmdt=0.243
#705  t=9.56e-10 dt=9.45e-12 max_dmdt=0.21
#706  t=9.65e-10 dt=9.45e-12 max_dmdt=0.184
#707  t=9.75e-10 dt=9.45e-12 max_dmdt=0.189
#708  t=9.84e-10 dt=9.45e-12 max_dmdt=0.188
#709  t=9.94e-10 dt=9.45e-12 max_dmdt=0.181
#710  t=1e-09    dt=9.45e-12 max_dmdt=0.171
#711  t=1.01e-09 dt=9.45e-12 max_dmdt=0.158
#712  t=1.02e-09 dt=9.45e-12 max_dmdt=0.142
#713  t=1.03e-09 dt=9.45e-12 max_dmdt=0.125
#714  t=1.04e-09 dt=9.45e-12 max_dmdt=0.109
#715  t=1.05e-09 dt=9.45e-12 max_dmdt=0.0946
#716  t=1.06e-09 dt=9.45e-12 max_dmdt=0.0805
#717  t=1.07e-09 dt=9.45e-12 max_dmdt=0.0812
#718  t=1.08e-09 dt=9.45e-12 max_dmdt=0.0814
#719  t=1.09e-09 dt=9.45e-12 max_dmdt=0.0792
#720  t=1.1e-09  dt=9.45e-12 max_dmdt=0.0752
#721  t=1.11e-09 dt=9.45e-12 max_dmdt=0.0697
#722  t=1.12e-09 dt=9.45e-12 max_dmdt=0.0633
#723  t=1.13e-09 dt=9.45e-12 max_dmdt=0.0564
#724  t=1.14e-09 dt=9.45e-12 max_dmdt=0.0494
#725  t=1.14e-09 dt=9.45e-12 max_dmdt=0.0425
#726  t=1.15e-09 dt=9.45e-12 max_dmdt=0.0357
#727  t=1.16e-09 dt=9.45e-12 max_dmdt=0.0356
#728  t=1.18e-09 dt=1.42e-11 max_dmdt=0.0355
#729  t=1.19e-09 dt=1.42e-11 max_dmdt=0.0338
#730  t=1.21e-09 dt=1.42e-11 max_dmdt=0.0305
#731  t=1.22e-09 dt=1.42e-11 max_dmdt=0.0262
#732  t=1.23e-09 dt=1.42e-11 max_dmdt=0.0214
#733  t=1.25e-09 dt=1.42e-11 max_dmdt=0.0166
#734  t=1.26e-09 dt=1.42e-11 max_dmdt=0.0155
#735  t=1.28e-09 dt=1.42e-11 max_dmdt=0.0156
#736  t=1.29e-09 dt=1.42e-11 max_dmdt=0.0147
#737  t=1.31e-09 dt=1.42e-11 max_dmdt=0.0131
#738  t=1.32e-09 dt=1.42e-11 max_dmdt=0.0111
#739  t=1.33e-09 dt=1.42e-11 max_dmdt=0.00887

Plot the magnetisation components of the relaxed state.

[8]:
#NBVAL_IGNORE_OUTPUT
plot_magnetisation([['m0.npy', 'mx'], ['m0.npy', 'my'], ['m0.npy', 'mz']])
_images/user_guide_ipynb_current-driven-domain-wall_20_0.png

The DW is at the maximum value of \(|m_z|\) or \(|m_y|\). Consequently, the domain wall position is:

[9]:
m0_z = np.load('m0.npy').reshape(-1, 3)[:, 2]
x = np.arange(len(m0_z))
index_max = np.argmax(np.abs(m0_z))

print('Maximum |m_z| at x = %s' % x[index_max])
Maximum |m_z| at x = 124

Using the obtained domain wall equilibrium state, we now simulate its motion in presence of a spin-polarised current.

[10]:
#NBVAL_IGNORE_OUTPUT
excite_system(mesh, 1.5e-9, 151)

We plot once again to compare the initial state with the ones after a SP current was applied.

[11]:
#NBVAL_IGNORE_OUTPUT
# We can plot the m_x component for a number snapshots
# to observe the DW motion
# We will plot the 100th and 150th files (we can also compute
# until the system reaches ~5 ns to improve the effect)
plot_magnetisation([['m0.npy', 'mx'],
                    ['dyn_npys/m_100.npy', 'mx'],
                    ['dyn_npys/m_150.npy', 'mx']])
plt.xlim([0, 200])
[11]:
(0, 200)
_images/user_guide_ipynb_current-driven-domain-wall_26_1.png

FMR standard problem

Problem specification

We choose a cuboidal thin film permalloy sample measuring \(120 \times 120 \times 10 \,\text{nm}^{3}\). The choice of a cuboid is important as it ensures that the finite difference method employed by OOMMF does not introduce errors due to irregular boundaries that cannot be discretized well. We choose the thin film geometry to be thin enough so that the variation of magnetization dynamics along the out-of-film direction can be neglected. Material parameters based on permalloy are:

Exchange energy constant \(A = 1.3 \times 10^{-11} \,\text{J/m}\),

Magnetisation saturation \(M_\text{s} = 8 \times 10^{5} \,\text{A/m}\),

Gilbert damping \(\alpha = 0.008\).

An external magnetic bias field with magnitude \(80 \,\text{kA/m}\) is applied along the direction \(e = (1, 0.715, 0)\).

We choose the external magnetic field direction slightly off the sample diagonal in order to break the system’s symmetry and thus avoid degenerate eigenmodes. First, we initialize the system with a uniform out-of-plane magnetization \(m_{0} = (0, 0, 1)\). We relax the system using the Steepest Descent method. We refer to this stage of simulation as the relaxation stage, and its final relaxed magnetization configuration is saved to serve as the initial configuration for the next dynamic stage.

In the next step (dynamic stage), a simulation is started using the equilibrium magnetisation configuration from the relaxation stage as the initial configuration. Now, the direction of an external magnetic field is altered to \(e = (1, 0.7, 0)\). This simulation stage runs for \(T = 10 \,\text{ns}\) while the (average and spatially resolved) magnetization \(M(t)\) is recorded every \(\Delta t = 5 \,\text{ps}\). The Gilbert damping in this dynamic simulation stage is \(\alpha = 0.008\).

Details of this standard problem specification can be found in Ref. 1.

[1]:
import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack
import scipy.signal
%matplotlib inline
import fidimag

Lx = Ly = 120 # nm
Lz = 10 # nm
dx = dy = dz = 5 # nm
nx = int(Lx/dx)
ny = int(Ly/dy)
nz = int(Lz/dz)


A = 1.3e-11 # J/m
Ms = 8e5 # A/m
alpha = 0.008
B_mag = 80e3 # A / m
B_axis = np.array([1.0, 0.715, 0.0])
B = B_mag * B_axis / np.linalg.norm(B_axis)
m_init = np.array([0, 0, 1])
t_init = 5e-9

We create and relax the system.

[2]:
#NBVAL_IGNORE_OUTPUT
mesh = fidimag.common.CuboidMesh(nx=nx, ny=ny, nz=nz,
                                 dx=dx, dy=dy, dz=dz,
                                 unit_length=1e-9)

sim = fidimag.micro.Sim(mesh, name='relax', driver='steepest_descent')
sim.driver.alpha = 1.0
sim.set_Ms(Ms)
sim.set_m(m_init)
sim.add(fidimag.micro.UniformExchange(A))
sim.add(fidimag.micro.Demag())
sim.add(fidimag.micro.Zeeman(B))
sim.driver.minimise(stopping_dm=1e-7, max_steps=20000)
np.save('m_relax.npy', sim.spin)
#max_tau=0.01     max_dm=2.34e-05   counter=0
#max_tau=0.01     max_dm=0.00164    counter=1000
#max_tau=0.01     max_dm=4.22e-05   counter=2000
#max_tau=0.01     max_dm=1.14e-05   counter=3000
#max_tau=0.01     max_dm=4.48e-06   counter=4000
#max_tau=0.01     max_dm=2.24e-06   counter=5000
#max_tau=0.01     max_dm=1.2e-06    counter=6000
#max_tau=0.01     max_dm=6.67e-07   counter=7000
#max_tau=0.01     max_dm=3.79e-07   counter=8000
#max_tau=0.01     max_dm=2.17e-07   counter=9000
#max_tau=0.01     max_dm=1.25e-07   counter=10000
FINISHED AT: max_tau=0.01     max_dm=9.99e-08   counter=10402

We can now plot the \(z\) slice of magnetisation.

[3]:
fidimag.common.plot(sim, component='all')
_images/user_guide_ipynb_ferromagnetic-resonance-stdprob_5_0.png

Dynamic stage

In the dynamic stage, we change the field, ‘shocking’ the system, and allow the system to evolve in time. This can be thought about in the same way as plucking a guitar string and exciting different modes of the string.

[4]:
Nsteps = 2001 # Number of steps in dynamic stage

# Change the external field
B_axis = np.array([1.0, 0.7, 0.0])
B = B_mag * B_axis / np.linalg.norm(B_axis)

mesh = fidimag.common.CuboidMesh(nx=nx, ny=ny, nz=nz,
                                 dx=dx, dy=dy, dz=dz,
                                 unit_length=1e-9)

sim = fidimag.micro.Sim(mesh, name='dynamic', driver='llg')
sim.driver.alpha = 1.0
sim.set_Ms(Ms)
sim.set_m(np.load('m_relax.npy'))
sim.add(fidimag.micro.UniformExchange(A))
sim.add(fidimag.micro.Demag())
sim.add(fidimag.micro.Zeeman(B))

sim.get_interaction('Zeeman').update_field(B)
sim.driver.alpha = alpha

ts = np.linspace(0, 10e-9, Nsteps)
[5]:
#NBVAL_IGNORE_OUTPUT
for i, t in enumerate(ts):
    if i % 50 == 0:
        print('Step {}, t = {}'.format(i, t))
    sim.driver.run_until(t)
    sim.save_m()
    sim.save_vtk()
Step 0, t = 0.0
Step 50, t = 2.5e-10
Step 100, t = 5e-10
Step 150, t = 7.500000000000001e-10
Step 200, t = 1e-09
Step 250, t = 1.25e-09
Step 300, t = 1.5000000000000002e-09
Step 350, t = 1.7500000000000002e-09
Step 400, t = 2e-09
Step 450, t = 2.2500000000000003e-09
Step 500, t = 2.5e-09
Step 550, t = 2.7500000000000002e-09
Step 600, t = 3.0000000000000004e-09
Step 650, t = 3.25e-09
Step 700, t = 3.5000000000000003e-09
Step 750, t = 3.7500000000000005e-09
Step 800, t = 4e-09
Step 850, t = 4.250000000000001e-09
Step 900, t = 4.500000000000001e-09
Step 950, t = 4.75e-09
Step 1000, t = 5e-09
Step 1050, t = 5.250000000000001e-09
Step 1100, t = 5.5000000000000004e-09
Step 1150, t = 5.75e-09
Step 1200, t = 6.000000000000001e-09
Step 1250, t = 6.2500000000000005e-09
Step 1300, t = 6.5e-09
Step 1350, t = 6.750000000000001e-09
Step 1400, t = 7.000000000000001e-09
Step 1450, t = 7.25e-09
Step 1500, t = 7.500000000000001e-09
Step 1550, t = 7.750000000000002e-09
Step 1600, t = 8e-09
Step 1650, t = 8.250000000000001e-09
Step 1700, t = 8.500000000000002e-09
Step 1750, t = 8.75e-09
Step 1800, t = 9.000000000000001e-09
Step 1850, t = 9.25e-09
Step 1900, t = 9.5e-09
Step 1950, t = 9.750000000000001e-09
Step 2000, t = 1e-08

Postprocessing

We read in the data files and compute the spatially averaged power spectral density, which shows the distribution of power in the excited modes.

[6]:
m_0 = np.load('m_relax.npy')
mxs = []
mys = []
mzs = []
for i in range(Nsteps):
    m = np.load('dynamic_npys/m_{}.npy'.format(i)) - m_0
    mxs.append(np.mean(m[0::3]))
    mys.append(np.mean(m[1::3]))
    mzs.append(np.mean(m[2::3]))
[7]:
plt.figure(figsize=(8, 6))
plt.plot(ts, mxs)
plt.xlabel('t (ns)')
plt.ylabel('mx average')
plt.grid()
_images/user_guide_ipynb_ferromagnetic-resonance-stdprob_11_0.png
[8]:
import scipy.fftpack
psd = np.log10(np.abs(scipy.fftpack.fft(mxs))**2 + \
               np.abs(scipy.fftpack.fft(mys))**2 + \
               np.abs(scipy.fftpack.fft(mzs))**2)
f_axis = scipy.fftpack.fftfreq(Nsteps, d=20e-9/4000)

plt.plot(f_axis/1e9, psd)
plt.xlim([0, 40])
plt.grid()
plt.xlabel('f (GHz)')
plt.ylabel('Psa (a.u.)')

peakind = scipy.signal.find_peaks(psd, width=2)[0]
plt.plot(f_axis/1e9, psd)
plt.scatter(f_axis[peakind]/1e9, psd[peakind])
plt.xlim([0, 50])
[8]:
(0, 50)
_images/user_guide_ipynb_ferromagnetic-resonance-stdprob_12_1.png
[9]:
print("Lowest frequency peak = {} GHz".format(f_axis[peakind[0]]/1e9))
Lowest frequency peak = 8.295852073963019 GHz

Isolated skyrmion in confined helimagnetic nanostructure

Authors: Marijan Beg, Marc-Antonio Bisotti, Weiwei Wang, Ryan Pepper, David Cortes-Ortuno

Date: 26 June 2016 (Updated 24 Jan 2019)

This notebook can be downloaded from the github repository, found here.

Problem specification

A thin film disk sample with thickness \(t=10 \,\text{nm}\) and diameter \(d=100 \,\text{nm}\) is simulated. The material is FeGe with material parameters [1]:

  • exchange energy constant \(A = 8.78 \times 10^{-12} \,\text{J/m}\),

  • magnetisation saturation \(M_\text{s} = 3.84 \times 10^{5} \,\text{A/m}\), and

  • Dzyaloshinskii-Moriya energy constant \(D = 1.58 \times 10^{-3} \,\text{J/m}^{2}\).

It is expected that when the system is initialised in the uniform out-of-plane direction \(\mathbf{m}_\text{init} = (0, 0, 1)\), it relaxes to the isolated Skyrmion (Sk) state (See Supplementary Information in Ref. 1). (Note that LLG dynamics is important, which means that artificially disable the precession term in LLG may lead to other states).

Simulation using the LLG equation

[1]:
from fidimag.micro import Sim
from fidimag.common import CuboidMesh
from fidimag.micro import UniformExchange, Demag, DMI
from fidimag.common import plot
import time
%matplotlib inline

The cuboidal thin film mesh which contains the disk is created:

[2]:
d = 100  # diameter (nm)
t = 10  # thickness (nm)

# Mesh discretisation.
dx = dy  = 2.5  # nm
dz = 2

mesh = CuboidMesh(nx=int(d/dx), ny=int(d/dy), nz=int(t/dz), dx=dx, dy=dy, dz=dz, unit_length=1e-9)

Since the disk geometry is simulated, it is required to set the saturation magnetisation to zero in the regions of the mesh outside the disk. In order to do that, the following function is created:

[3]:
def Ms_function(Ms):
    def wrapped_function(pos):
        x, y, z = pos[0], pos[1], pos[2]

        r = ((x-d/2.)**2 + (y-d/2.)**2)**0.5  # distance from the centre

        if r <= d/2:
            # Mesh point is inside the disk.
            return Ms
        else:
            # Mesh point is outside the disk.
            return 0
    return wrapped_function

To reduce the relaxation time, we define a state using a python function.

[4]:
def init_m(pos):
    x,y,z = pos
    x0, y0 = d/2., d/2.
    r = ((x-x0)**2 + (y-y0)**2)**0.5

    if r<10:
        return (0,0, 1)
    elif r<30:
        return (0,0, -1)
    elif r<60:
        return (0, 0, 1)
    else:
        return (0, 0, -1)

Having the magnetisation saturation function, the simulation object can be created:

[5]:
# FeGe material paremeters.
Ms = 3.84e5  # saturation magnetisation (A/m)
A = 8.78e-12  # exchange energy constant (J/m)
D = 1.58e-3  # Dzyaloshinkii-Moriya energy constant (J/m**2)
alpha = 1  # Gilbert damping
gamma = 2.211e5  # gyromagnetic ration (m/As)

# Create simulation object.
sim = Sim(mesh)
# sim = Sim(mesh, driver='steepest_descent')
sim.Ms = Ms_function(Ms)
sim.driver.alpha = alpha
sim.driver.gamma = gamma

# Add energies.
sim.add(UniformExchange(A=A))
sim.add(DMI(D=D))
sim.add(Demag())

# Since the magnetisation dynamics is not important in this stage,
# the precession term in LLG equation can be set to artificially zero.
# sim.driver.do_precession = False

# Initialise the system.
sim.set_m(init_m)

This is the initial configuration used before relaxation:

[6]:
plot(sim, component='all', z=0.0, cmap='RdBu')
_images/user_guide_ipynb_isolated_skyrmion_15_0.png

Now the system is relaxed to find a metastable state of the system:

[7]:
# Relax the system to its equilibrium.
start = time.time()
sim.driver.relax(dt=1e-13, stopping_dmdt=0.1, max_steps=10000,
                 save_m_steps=None, save_vtk_steps=None, printing=False)
end = time.time()
[8]:
#NBVAL_IGNORE_OUTPUT
print('Timing: ', end - start)
Timing:  77.00890803337097
[9]:
sim.save_vtk()

The magnetisation components of obtained equilibrium configuration can be plotted in the following way:

We plot the magnetisation at the bottom of the sample:

[10]:
plot(sim, component='all', z=0.0, cmap='RdBu')
_images/user_guide_ipynb_isolated_skyrmion_22_0.png

and at the top of the sample:

[11]:
plot(sim, component='all', z=10.0, cmap='RdBu')
_images/user_guide_ipynb_isolated_skyrmion_24_0.png

and we plot the xy spin angle through the middle of the sample:

[12]:
plot(sim, component='angle', z=5.0, cmap='hsv')
_images/user_guide_ipynb_isolated_skyrmion_26_0.png

Simulation using Steepest Descent

An alternative method for the minimisation of the energy is using a SteepestDescent method:

[13]:
# Create simulation object.
sim = Sim(mesh, driver='steepest_descent')
sim.Ms = Ms_function(Ms)
sim.driver.gamma = gamma

# Add energies.
sim.add(UniformExchange(A=A))
sim.add(DMI(D=D))
sim.add(Demag())

# The maximum timestep:
sim.driver.tmax = 1

# Initialise the system.
sim.set_m(init_m)

In this case the driver has a minimise method

[14]:
start = time.time()
sim.driver.minimise(max_steps=10000, stopping_dm=0.5e-4, initial_t_step=1e-2)
end = time.time()
#0    max_tau=0.01     max_dm=0.0477
#1000 max_tau=0.01     max_dm=0.0022
#2000 max_tau=0.01     max_dm=0.000592
#3000 max_tau=0.01     max_dm=0.000327
#4000 max_tau=0.01     max_dm=0.000179
#5000 max_tau=0.01     max_dm=9.82e-05
#6000 max_tau=0.01     max_dm=5.43e-05
#6141 max_tau=0.01     max_dm=5e-05
[15]:
#NBVAL_IGNORE_OUTPUT
print('Timing: ', end - start)
Timing:  67.3641722202301

And the final state is equivalent to the one found with the LLG technique

[16]:
plot(sim, component='all', z=0.0, cmap='RdBu')
_images/user_guide_ipynb_isolated_skyrmion_34_0.png

References

[1] Beg, M. et al. Ground state search, hysteretic behaviour, and reversal mechanism of skyrmionic textures in confined helimagnetic nanostructures. Sci. Rep. 5, 17137 (2015).

Simulating an Anisotropic Grain Structure

[1]:
import fidimag
from scipy.spatial import cKDTree
import numpy as np

Here we set up a simple test system to show how to simulate magnetic grains which have different anisotropy orientations and strengths.

[2]:
A=1.3e-11
Ms=8.6e5
n = 40
d = 5

mesh = fidimag.common.CuboidMesh(nx=n, ny=n, nz=1, dx=d, dy=d, dz=d, unit_length=1e-9, periodicity=(True, True, False))
sim = fidimag.micro.Sim(mesh, name="Grains")
sim.alpha = 1.0
[3]:
# Create positions to be grain centres, and create a cKDTree to
# perform Voronoi Tesselation
np.random.seed(10)
Ngrains = 15
grain_centres = np.random.uniform(0, n*d, (Ngrains, 2))
voronoi_kdtree = cKDTree(grain_centres)

# Define Anisotropy Strength
Ku = 1e6
# Generate random anisotropy axes
axes = np.random.uniform(-1, 1, (Ngrains, 3))
# Weight them towards +z - assume grains oriented along field cooled direction
axes[:, 2] += 1.0
# Normalise
axes /= np.linalg.norm(axes, axis=1)[:, np.newaxis]
# Generate a normal distribution of anisotropy strengths:
strengths = np.random.normal(Ku, Ku*0.2, Ngrains)

# We then use the cKDTree in two functions. We get the x, y position
# of each micromagnetic cell, and query the tree for the region that
# the cell sits in. The functions then return the axis and strength
# at that region index.

def K_axis(pos):
    x, y, z = pos
    _, test_point_regions = voronoi_kdtree.query(np.array([[x, y]]), k=1)
    region = test_point_regions[0]
    return axes[region]

def K_mag(pos):
    x, y, z = pos
    _, test_point_regions = voronoi_kdtree.query(np.array([[x, y]]), k=1)
    region = test_point_regions[0]
    return strengths[region]
[4]:
sim.set_m((0, 0, 1), normalise=True)

sim.set_Ms(Ms)
anisotropy = fidimag.micro.UniaxialAnisotropy(K_mag, K_axis)
sim.add(anisotropy)
sim.add(fidimag.micro.UniformExchange(A))
sim.add(fidimag.micro.Demag(pbc_2d=True))

To check that this looks sensible, we plot the strength of the anisotropy across the whole sample in each direction:

[5]:
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid

strength_x = anisotropy._axis[0::3].reshape(n, n) * anisotropy._Ku.reshape(n, n)
strength_y = anisotropy._axis[1::3].reshape(n, n) * anisotropy._Ku.reshape(n, n)
strength_z = anisotropy._axis[2::3].reshape(n, n) * anisotropy._Ku.reshape(n, n)

maxs = np.max([np.max(np.abs(strength_x)),
               np.max(np.abs(strength_y)),
               np.max(np.abs(strength_z))])



fig = plt.figure(figsize=(5, 3))

grid = ImageGrid(fig, 111,          # as in plt.subplot(111)
                 nrows_ncols=(1,3),
                 axes_pad=0.15,
                 share_all=True,
                 cbar_location="right",
                 cbar_mode="single",
                 cbar_size="7%",
                 cbar_pad=0.15,
                 )

axes = [axis for axis in grid]


axes[0].imshow(strength_x, origin='lower', cmap='RdBu', vmin=-maxs, vmax=maxs, extent=[0, n*d, 0, n*d])
axes[1].imshow(strength_y, origin='lower', cmap='RdBu', vmin=-maxs, vmax=maxs, extent=[0, n*d, 0, n*d])
im = axes[2].imshow(strength_z, origin='lower', cmap='RdBu', vmin=-maxs, vmax=maxs, extent=[0, n*d, 0, n*d])
axes[2].cax.colorbar(im)
axes[2].cax.toggle_label(True)

axes[0].set_title("$K_x$")
axes[1].set_title("$K_y$")
axes[2].set_title("$K_z$")

plt.savefig("Anisotropy.png", dpi=600)

_images/user_guide_ipynb_Simulating_an_Anisotropic_Grain_Structure_7_0.png

We can see that we have a granular structure in the anisotropy. We now simply relax the system and plot the magnetisation:

[6]:
sim.relax(dt=1e-12, stopping_dmdt=1.0, max_steps=10000, save_vtk_steps=10, printing=False)
print('Done')
Done
[7]:
fidimag.common.plot(sim, component='z')
_images/user_guide_ipynb_Simulating_an_Anisotropic_Grain_Structure_10_0.png

The remanent Magnetisation in the z-direction is then:

[8]:
remanence = np.mean(sim.spin[2::3])*Ms
print(remanence)
521197.7929881685
[22]:
import fidimag
from fidimag.micro import Sim
from fidimag.common import CuboidMesh
from fidimag.micro import Zeeman, Demag, DMI, UniformExchange
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

Here we set parameters of the system. We choose a 250 x 80 x 3 nm\(^3\) nanotrack, and apply periodicity in the x-direction to approximate an infinite nanotrack.

[43]:
dx = dy = 2.5
dz = 1.0


Lx = 250.0
Ly = 80.0
Lz = 3.0
nx = int(Lx/dx)
ny = int(Ly/dy)
nz = int(Lz/dz)

mesh = CuboidMesh(nx=nx, ny=ny, nz=nz, dx=dx, dy=dy, dz=dz,
                  unit_length=1e-9, periodicity=(True, False, False))

We choose material parameters for Fe0.7Co0.3Si as used in the paper “Skyrmions in thin films with easy-plane magnetocrystalline anisotropy” (http://dx.doi.org/10.1063/1.4945262). We set the initial state to be uniform in the +z direction.

[44]:
Ms = 9.5e4  # magnetisation saturation (A/m)
A = 4e-13  # exchange stiffness (J/m)
D = 2.7e-4  # DMI constant (J/m**2)
H = (0, 0, 3.8e5)  # external magnetic field (A/m)

K0 = D**2 / A
K1 = -0.16*K0

alpha = 0.5  # Gilbert damping
gamma = 2.211e5  # gyromagnetic ratio (m/As)

sim  = Sim(mesh)  # create simulation object

# Set parameters.
sim.Ms = Ms
sim.driver.alpha = alpha
sim.driver.gamma = gamma
sim.driver.do_precession = False

# Add energies.
sim.add(UniformExchange(A=A))
sim.add(DMI(D))
sim.add(Zeeman(H))
sim.add(Demag(pbc_2d=True))
# Seed random number generator so that this simulation is reproducible.
np.random.seed(0)

def m_init(pos):
    m = np.random.uniform(-1, 1, 3)
    return m

sim.set_m(m_init, normalise=True)

We now relax the system to find a metastable state.

[45]:
sim.driver.relax(dt=1e-13, stopping_dmdt=0.1, max_steps=5000, save_m_steps=None, save_vtk_steps=None)
#1    t=1e-13    dt=1e-13 max_dmdt=7.78e+04
#2    t=2e-13    dt=1e-13 max_dmdt=7.99e+04
#3    t=3e-13    dt=1e-13 max_dmdt=8.02e+04
#4    t=4e-13    dt=1e-13 max_dmdt=7.76e+04
#5    t=5e-13    dt=1e-13 max_dmdt=7.97e+04
#6    t=6e-13    dt=1e-13 max_dmdt=7.75e+04
#7    t=7e-13    dt=1e-13 max_dmdt=7.6e+04
#8    t=8e-13    dt=1e-13 max_dmdt=7.94e+04
#9    t=9e-13    dt=1e-13 max_dmdt=8.26e+04
#10   t=1e-12    dt=1e-13 max_dmdt=8.09e+04
#11   t=1.1e-12  dt=1e-13 max_dmdt=7.43e+04
#12   t=1.2e-12  dt=1e-13 max_dmdt=7.65e+04
#13   t=1.3e-12  dt=1e-13 max_dmdt=7.76e+04
#14   t=1.4e-12  dt=1e-13 max_dmdt=7.48e+04
#15   t=1.5e-12  dt=1e-13 max_dmdt=7.09e+04
#16   t=1.6e-12  dt=1e-13 max_dmdt=6.41e+04
#17   t=1.7e-12  dt=1e-13 max_dmdt=6.47e+04
#18   t=1.8e-12  dt=1e-13 max_dmdt=6.4e+04
#19   t=1.9e-12  dt=1e-13 max_dmdt=6.21e+04
#20   t=2e-12    dt=1e-13 max_dmdt=6.01e+04
#21   t=2.1e-12  dt=1e-13 max_dmdt=5.71e+04
#22   t=2.2e-12  dt=1e-13 max_dmdt=5.64e+04
#23   t=2.3e-12  dt=1e-13 max_dmdt=5.48e+04
#24   t=2.4e-12  dt=1e-13 max_dmdt=5.25e+04
#25   t=2.5e-12  dt=1e-13 max_dmdt=5.1e+04
#26   t=2.6e-12  dt=1e-13 max_dmdt=5.1e+04
#27   t=2.7e-12  dt=1e-13 max_dmdt=5.02e+04
#28   t=2.8e-12  dt=1e-13 max_dmdt=4.87e+04
#29   t=2.9e-12  dt=1e-13 max_dmdt=4.65e+04
#30   t=3e-12    dt=1e-13 max_dmdt=4.38e+04
#31   t=3.1e-12  dt=1e-13 max_dmdt=4.24e+04
#32   t=3.2e-12  dt=1e-13 max_dmdt=4.19e+04
#33   t=3.3e-12  dt=1e-13 max_dmdt=4.09e+04
#34   t=3.4e-12  dt=1e-13 max_dmdt=3.95e+04
#35   t=3.5e-12  dt=1e-13 max_dmdt=3.93e+04
#36   t=3.6e-12  dt=1e-13 max_dmdt=3.92e+04
#37   t=3.7e-12  dt=1e-13 max_dmdt=4e+04
#38   t=3.8e-12  dt=1e-13 max_dmdt=4.07e+04
#39   t=3.9e-12  dt=1e-13 max_dmdt=4.07e+04
#40   t=4e-12    dt=1e-13 max_dmdt=4.08e+04
#41   t=4.1e-12  dt=1e-13 max_dmdt=4.11e+04
#42   t=4.2e-12  dt=1e-13 max_dmdt=4.12e+04
#43   t=4.3e-12  dt=1e-13 max_dmdt=4.11e+04
#44   t=4.4e-12  dt=1e-13 max_dmdt=4.09e+04
#45   t=4.5e-12  dt=1e-13 max_dmdt=4.05e+04
#46   t=4.6e-12  dt=1e-13 max_dmdt=3.99e+04
#47   t=4.7e-12  dt=1e-13 max_dmdt=3.92e+04
#48   t=4.8e-12  dt=1e-13 max_dmdt=3.84e+04
#49   t=4.9e-12  dt=1e-13 max_dmdt=3.74e+04
#50   t=5e-12    dt=1e-13 max_dmdt=3.64e+04
#51   t=5.1e-12  dt=1e-13 max_dmdt=3.53e+04
#52   t=5.2e-12  dt=1e-13 max_dmdt=3.42e+04
#53   t=5.3e-12  dt=1e-13 max_dmdt=3.3e+04
#54   t=5.4e-12  dt=1e-13 max_dmdt=3.24e+04
#55   t=5.5e-12  dt=1e-13 max_dmdt=3.2e+04
#56   t=5.6e-12  dt=1e-13 max_dmdt=3.23e+04
#57   t=5.7e-12  dt=1e-13 max_dmdt=3.24e+04
#58   t=5.8e-12  dt=1e-13 max_dmdt=3.25e+04
#59   t=5.9e-12  dt=1e-13 max_dmdt=3.28e+04
#60   t=6e-12    dt=1e-13 max_dmdt=3.3e+04
#61   t=6.1e-12  dt=1e-13 max_dmdt=3.3e+04
#62   t=6.2e-12  dt=1e-13 max_dmdt=3.3e+04
#63   t=6.3e-12  dt=1e-13 max_dmdt=3.28e+04
#64   t=6.4e-12  dt=1e-13 max_dmdt=3.25e+04
#65   t=6.5e-12  dt=1e-13 max_dmdt=3.21e+04
#66   t=6.6e-12  dt=1e-13 max_dmdt=3.17e+04
#67   t=6.7e-12  dt=1e-13 max_dmdt=3.12e+04
#68   t=6.8e-12  dt=1e-13 max_dmdt=3.11e+04
#69   t=6.9e-12  dt=1e-13 max_dmdt=3.1e+04
#70   t=7e-12    dt=1e-13 max_dmdt=3.07e+04
#71   t=7.1e-12  dt=1e-13 max_dmdt=3.04e+04
#72   t=7.2e-12  dt=1e-13 max_dmdt=3.02e+04
#73   t=7.3e-12  dt=1e-13 max_dmdt=3.01e+04
#74   t=7.4e-12  dt=1e-13 max_dmdt=3.04e+04
#75   t=7.5e-12  dt=1e-13 max_dmdt=3.06e+04
#76   t=7.6e-12  dt=1e-13 max_dmdt=3.07e+04
#77   t=7.7e-12  dt=1e-13 max_dmdt=3.07e+04
#78   t=7.8e-12  dt=1e-13 max_dmdt=3.07e+04
#79   t=7.9e-12  dt=1e-13 max_dmdt=3.05e+04
#80   t=8e-12    dt=1e-13 max_dmdt=3.03e+04
#81   t=8.1e-12  dt=1e-13 max_dmdt=2.99e+04
#82   t=8.23e-12 dt=1.27e-13 max_dmdt=2.94e+04
#83   t=8.35e-12 dt=1.27e-13 max_dmdt=2.87e+04
#84   t=8.48e-12 dt=1.27e-13 max_dmdt=2.79e+04
#85   t=8.61e-12 dt=1.27e-13 max_dmdt=2.69e+04
#86   t=8.73e-12 dt=1.27e-13 max_dmdt=2.6e+04
#87   t=8.86e-12 dt=1.27e-13 max_dmdt=2.63e+04
#88   t=8.99e-12 dt=1.27e-13 max_dmdt=2.65e+04
#89   t=9.12e-12 dt=1.27e-13 max_dmdt=2.66e+04
#90   t=9.24e-12 dt=1.27e-13 max_dmdt=2.66e+04
#91   t=9.37e-12 dt=1.27e-13 max_dmdt=2.64e+04
#92   t=9.5e-12  dt=1.27e-13 max_dmdt=2.62e+04
#93   t=9.62e-12 dt=1.27e-13 max_dmdt=2.58e+04
#94   t=9.75e-12 dt=1.27e-13 max_dmdt=2.54e+04
#95   t=9.88e-12 dt=1.27e-13 max_dmdt=2.49e+04
#96   t=1e-11    dt=1.27e-13 max_dmdt=2.44e+04
#97   t=1.01e-11 dt=1.27e-13 max_dmdt=2.43e+04
#98   t=1.03e-11 dt=1.27e-13 max_dmdt=2.42e+04
#99   t=1.04e-11 dt=1.27e-13 max_dmdt=2.39e+04
#100  t=1.05e-11 dt=1.27e-13 max_dmdt=2.36e+04
#101  t=1.06e-11 dt=1.27e-13 max_dmdt=2.33e+04
#102  t=1.08e-11 dt=1.27e-13 max_dmdt=2.29e+04
#103  t=1.09e-11 dt=1.27e-13 max_dmdt=2.24e+04
#104  t=1.1e-11  dt=1.27e-13 max_dmdt=2.19e+04
#105  t=1.11e-11 dt=1.27e-13 max_dmdt=2.13e+04
#106  t=1.13e-11 dt=1.27e-13 max_dmdt=2.07e+04
#107  t=1.14e-11 dt=1.27e-13 max_dmdt=2.01e+04
#108  t=1.15e-11 dt=1.27e-13 max_dmdt=1.99e+04
#109  t=1.17e-11 dt=1.27e-13 max_dmdt=1.98e+04
#110  t=1.18e-11 dt=1.27e-13 max_dmdt=1.97e+04
#111  t=1.19e-11 dt=1.27e-13 max_dmdt=1.95e+04
#112  t=1.2e-11  dt=1.27e-13 max_dmdt=1.93e+04
#113  t=1.22e-11 dt=1.27e-13 max_dmdt=1.9e+04
#114  t=1.23e-11 dt=1.27e-13 max_dmdt=1.88e+04
#115  t=1.24e-11 dt=1.27e-13 max_dmdt=1.84e+04
#116  t=1.25e-11 dt=1.27e-13 max_dmdt=1.86e+04
#117  t=1.27e-11 dt=1.27e-13 max_dmdt=1.93e+04
#118  t=1.28e-11 dt=1.27e-13 max_dmdt=1.99e+04
#119  t=1.29e-11 dt=1.27e-13 max_dmdt=2.05e+04
#120  t=1.3e-11  dt=1.27e-13 max_dmdt=2.1e+04
#121  t=1.32e-11 dt=1.27e-13 max_dmdt=2.15e+04
#122  t=1.33e-11 dt=1.27e-13 max_dmdt=2.19e+04
#123  t=1.34e-11 dt=1.27e-13 max_dmdt=2.22e+04
#124  t=1.36e-11 dt=1.27e-13 max_dmdt=2.25e+04
#125  t=1.37e-11 dt=1.27e-13 max_dmdt=2.27e+04
#126  t=1.38e-11 dt=1.27e-13 max_dmdt=2.28e+04
#127  t=1.39e-11 dt=1.27e-13 max_dmdt=2.28e+04
#128  t=1.41e-11 dt=1.27e-13 max_dmdt=2.27e+04
#129  t=1.42e-11 dt=1.27e-13 max_dmdt=2.26e+04
#130  t=1.43e-11 dt=1.27e-13 max_dmdt=2.24e+04
#131  t=1.44e-11 dt=1.27e-13 max_dmdt=2.21e+04
#132  t=1.46e-11 dt=1.27e-13 max_dmdt=2.18e+04
#133  t=1.47e-11 dt=1.27e-13 max_dmdt=2.14e+04
#134  t=1.48e-11 dt=1.27e-13 max_dmdt=2.09e+04
#135  t=1.5e-11  dt=1.27e-13 max_dmdt=2.04e+04
#136  t=1.51e-11 dt=1.27e-13 max_dmdt=1.99e+04
#137  t=1.52e-11 dt=1.27e-13 max_dmdt=1.93e+04
#138  t=1.53e-11 dt=1.27e-13 max_dmdt=1.88e+04
#139  t=1.55e-11 dt=1.27e-13 max_dmdt=1.88e+04
#140  t=1.56e-11 dt=1.27e-13 max_dmdt=1.88e+04
#141  t=1.58e-11 dt=1.93e-13 max_dmdt=1.88e+04
#142  t=1.6e-11  dt=1.93e-13 max_dmdt=1.86e+04
#143  t=1.62e-11 dt=1.93e-13 max_dmdt=1.84e+04
#144  t=1.64e-11 dt=1.93e-13 max_dmdt=1.81e+04
#145  t=1.65e-11 dt=1.93e-13 max_dmdt=1.78e+04
#146  t=1.67e-11 dt=1.93e-13 max_dmdt=1.79e+04
#147  t=1.69e-11 dt=1.93e-13 max_dmdt=1.82e+04
#148  t=1.71e-11 dt=1.93e-13 max_dmdt=1.83e+04
#149  t=1.73e-11 dt=1.93e-13 max_dmdt=1.84e+04
#150  t=1.75e-11 dt=1.93e-13 max_dmdt=1.85e+04
#151  t=1.77e-11 dt=1.93e-13 max_dmdt=1.84e+04
#152  t=1.79e-11 dt=1.93e-13 max_dmdt=1.82e+04
#153  t=1.81e-11 dt=1.93e-13 max_dmdt=1.8e+04
#154  t=1.83e-11 dt=1.93e-13 max_dmdt=1.78e+04
#155  t=1.85e-11 dt=1.93e-13 max_dmdt=1.78e+04
#156  t=1.87e-11 dt=1.93e-13 max_dmdt=1.77e+04
#157  t=1.89e-11 dt=1.93e-13 max_dmdt=1.76e+04
#158  t=1.91e-11 dt=1.93e-13 max_dmdt=1.75e+04
#159  t=1.92e-11 dt=1.93e-13 max_dmdt=1.73e+04
#160  t=1.94e-11 dt=1.93e-13 max_dmdt=1.71e+04
#161  t=1.96e-11 dt=1.93e-13 max_dmdt=1.68e+04
#162  t=1.98e-11 dt=1.93e-13 max_dmdt=1.64e+04
#163  t=2e-11    dt=1.93e-13 max_dmdt=1.6e+04
#164  t=2.02e-11 dt=1.93e-13 max_dmdt=1.56e+04
#165  t=2.04e-11 dt=1.93e-13 max_dmdt=1.52e+04
#166  t=2.06e-11 dt=1.93e-13 max_dmdt=1.49e+04
#167  t=2.08e-11 dt=1.93e-13 max_dmdt=1.52e+04
#168  t=2.1e-11  dt=1.93e-13 max_dmdt=1.54e+04
#169  t=2.12e-11 dt=1.93e-13 max_dmdt=1.55e+04
#170  t=2.14e-11 dt=1.93e-13 max_dmdt=1.57e+04
#171  t=2.16e-11 dt=1.93e-13 max_dmdt=1.59e+04
#172  t=2.17e-11 dt=1.93e-13 max_dmdt=1.6e+04
#173  t=2.19e-11 dt=1.93e-13 max_dmdt=1.61e+04
#174  t=2.21e-11 dt=1.93e-13 max_dmdt=1.61e+04
#175  t=2.23e-11 dt=1.93e-13 max_dmdt=1.61e+04
#176  t=2.25e-11 dt=1.93e-13 max_dmdt=1.61e+04
#177  t=2.27e-11 dt=1.93e-13 max_dmdt=1.6e+04
#178  t=2.29e-11 dt=1.93e-13 max_dmdt=1.58e+04
#179  t=2.31e-11 dt=1.93e-13 max_dmdt=1.56e+04
#180  t=2.33e-11 dt=1.93e-13 max_dmdt=1.54e+04
#181  t=2.35e-11 dt=1.93e-13 max_dmdt=1.51e+04
#182  t=2.37e-11 dt=1.93e-13 max_dmdt=1.48e+04
#183  t=2.39e-11 dt=1.93e-13 max_dmdt=1.44e+04
#184  t=2.41e-11 dt=1.93e-13 max_dmdt=1.39e+04
#185  t=2.43e-11 dt=1.93e-13 max_dmdt=1.35e+04
#186  t=2.44e-11 dt=1.93e-13 max_dmdt=1.3e+04
#187  t=2.46e-11 dt=1.93e-13 max_dmdt=1.24e+04
#188  t=2.48e-11 dt=1.93e-13 max_dmdt=1.19e+04
#189  t=2.5e-11  dt=1.93e-13 max_dmdt=1.13e+04
#190  t=2.52e-11 dt=1.93e-13 max_dmdt=1.09e+04
#191  t=2.54e-11 dt=1.93e-13 max_dmdt=1.1e+04
#192  t=2.56e-11 dt=1.93e-13 max_dmdt=1.11e+04
#193  t=2.58e-11 dt=1.93e-13 max_dmdt=1.11e+04
#194  t=2.6e-11  dt=1.93e-13 max_dmdt=1.11e+04
#195  t=2.62e-11 dt=1.93e-13 max_dmdt=1.11e+04
#196  t=2.64e-11 dt=1.93e-13 max_dmdt=1.1e+04
#197  t=2.66e-11 dt=1.93e-13 max_dmdt=1.09e+04
#198  t=2.68e-11 dt=1.93e-13 max_dmdt=1.07e+04
#199  t=2.69e-11 dt=1.93e-13 max_dmdt=1.05e+04
#200  t=2.72e-11 dt=2.89e-13 max_dmdt=1.06e+04
#201  t=2.75e-11 dt=2.89e-13 max_dmdt=1.1e+04
#202  t=2.78e-11 dt=2.89e-13 max_dmdt=1.13e+04
#203  t=2.81e-11 dt=2.89e-13 max_dmdt=1.16e+04
#204  t=2.84e-11 dt=2.89e-13 max_dmdt=1.19e+04
#205  t=2.87e-11 dt=2.89e-13 max_dmdt=1.21e+04
#206  t=2.9e-11  dt=2.89e-13 max_dmdt=1.23e+04
#207  t=2.93e-11 dt=2.89e-13 max_dmdt=1.27e+04
#208  t=2.95e-11 dt=2.89e-13 max_dmdt=1.37e+04
#209  t=2.98e-11 dt=2.89e-13 max_dmdt=1.47e+04
#210  t=3.01e-11 dt=2.89e-13 max_dmdt=1.56e+04
#211  t=3.04e-11 dt=2.89e-13 max_dmdt=1.64e+04
#212  t=3.07e-11 dt=2.89e-13 max_dmdt=1.71e+04
#213  t=3.1e-11  dt=2.89e-13 max_dmdt=1.77e+04
#214  t=3.13e-11 dt=2.89e-13 max_dmdt=1.81e+04
#215  t=3.16e-11 dt=2.89e-13 max_dmdt=1.84e+04
#216  t=3.19e-11 dt=2.89e-13 max_dmdt=1.84e+04
#217  t=3.21e-11 dt=2.89e-13 max_dmdt=1.83e+04
#218  t=3.24e-11 dt=2.89e-13 max_dmdt=1.8e+04
#219  t=3.27e-11 dt=2.89e-13 max_dmdt=1.76e+04
#220  t=3.3e-11  dt=2.89e-13 max_dmdt=1.7e+04
#221  t=3.33e-11 dt=2.89e-13 max_dmdt=1.64e+04
#222  t=3.36e-11 dt=2.89e-13 max_dmdt=1.56e+04
#223  t=3.39e-11 dt=2.89e-13 max_dmdt=1.48e+04
#224  t=3.42e-11 dt=2.89e-13 max_dmdt=1.39e+04
#225  t=3.45e-11 dt=2.89e-13 max_dmdt=1.31e+04
#226  t=3.47e-11 dt=2.89e-13 max_dmdt=1.22e+04
#227  t=3.5e-11  dt=2.89e-13 max_dmdt=1.14e+04
#228  t=3.53e-11 dt=2.89e-13 max_dmdt=1.06e+04
#229  t=3.56e-11 dt=2.89e-13 max_dmdt=9.81e+03
#230  t=3.59e-11 dt=2.89e-13 max_dmdt=9.08e+03
#231  t=3.62e-11 dt=2.89e-13 max_dmdt=8.4e+03
#232  t=3.65e-11 dt=2.89e-13 max_dmdt=8.38e+03
#233  t=3.68e-11 dt=2.89e-13 max_dmdt=8.43e+03
#234  t=3.71e-11 dt=2.89e-13 max_dmdt=8.46e+03
#235  t=3.73e-11 dt=2.89e-13 max_dmdt=8.47e+03
#236  t=3.76e-11 dt=2.89e-13 max_dmdt=8.46e+03
#237  t=3.79e-11 dt=2.89e-13 max_dmdt=8.43e+03
#238  t=3.82e-11 dt=2.89e-13 max_dmdt=8.39e+03
#239  t=3.85e-11 dt=2.89e-13 max_dmdt=8.34e+03
#240  t=3.88e-11 dt=2.89e-13 max_dmdt=8.27e+03
#241  t=3.91e-11 dt=2.89e-13 max_dmdt=8.19e+03
#242  t=3.94e-11 dt=2.89e-13 max_dmdt=8.09e+03
#243  t=3.97e-11 dt=2.89e-13 max_dmdt=7.99e+03
#244  t=3.99e-11 dt=2.89e-13 max_dmdt=7.88e+03
#245  t=4.02e-11 dt=2.89e-13 max_dmdt=7.76e+03
#246  t=4.07e-11 dt=4.5e-13 max_dmdt=7.6e+03
#247  t=4.11e-11 dt=4.5e-13 max_dmdt=7.39e+03
#248  t=4.16e-11 dt=4.5e-13 max_dmdt=7.18e+03
#249  t=4.2e-11  dt=4.5e-13 max_dmdt=6.96e+03
#250  t=4.25e-11 dt=4.5e-13 max_dmdt=6.73e+03
#251  t=4.29e-11 dt=4.5e-13 max_dmdt=6.51e+03
#252  t=4.34e-11 dt=4.5e-13 max_dmdt=6.28e+03
#253  t=4.38e-11 dt=4.5e-13 max_dmdt=6.06e+03
#254  t=4.43e-11 dt=4.5e-13 max_dmdt=5.84e+03
#255  t=4.47e-11 dt=4.5e-13 max_dmdt=5.62e+03
#256  t=4.52e-11 dt=4.5e-13 max_dmdt=5.41e+03
#257  t=4.56e-11 dt=4.5e-13 max_dmdt=5.21e+03
#258  t=4.61e-11 dt=4.5e-13 max_dmdt=5.01e+03
#259  t=4.65e-11 dt=4.5e-13 max_dmdt=4.82e+03
#260  t=4.7e-11  dt=4.5e-13 max_dmdt=4.81e+03
#261  t=4.74e-11 dt=4.5e-13 max_dmdt=4.78e+03
#262  t=4.79e-11 dt=4.5e-13 max_dmdt=4.74e+03
#263  t=4.83e-11 dt=4.5e-13 max_dmdt=4.69e+03
#264  t=4.88e-11 dt=4.5e-13 max_dmdt=4.61e+03
#265  t=4.92e-11 dt=4.5e-13 max_dmdt=4.52e+03
#266  t=4.97e-11 dt=4.5e-13 max_dmdt=4.42e+03
#267  t=5.01e-11 dt=4.5e-13 max_dmdt=4.31e+03
#268  t=5.06e-11 dt=4.5e-13 max_dmdt=4.18e+03
#269  t=5.1e-11  dt=4.5e-13 max_dmdt=4.05e+03
#270  t=5.15e-11 dt=4.5e-13 max_dmdt=3.9e+03
#271  t=5.19e-11 dt=4.5e-13 max_dmdt=3.76e+03
#272  t=5.24e-11 dt=4.5e-13 max_dmdt=3.61e+03
#273  t=5.28e-11 dt=4.5e-13 max_dmdt=3.45e+03
#274  t=5.33e-11 dt=4.5e-13 max_dmdt=3.3e+03
#275  t=5.37e-11 dt=4.5e-13 max_dmdt=3.14e+03
#276  t=5.42e-11 dt=4.5e-13 max_dmdt=2.99e+03
#277  t=5.5e-11  dt=7.86e-13 max_dmdt=2.78e+03
#278  t=5.57e-11 dt=7.86e-13 max_dmdt=2.75e+03
#279  t=5.65e-11 dt=7.86e-13 max_dmdt=2.72e+03
#280  t=5.73e-11 dt=7.86e-13 max_dmdt=2.7e+03
#281  t=5.81e-11 dt=7.86e-13 max_dmdt=2.67e+03
#282  t=5.89e-11 dt=7.86e-13 max_dmdt=2.64e+03
#283  t=5.97e-11 dt=7.86e-13 max_dmdt=2.61e+03
#284  t=6.05e-11 dt=7.86e-13 max_dmdt=2.58e+03
#285  t=6.13e-11 dt=7.86e-13 max_dmdt=2.55e+03
#286  t=6.2e-11  dt=7.86e-13 max_dmdt=2.54e+03
#287  t=6.28e-11 dt=7.86e-13 max_dmdt=2.52e+03
#288  t=6.36e-11 dt=7.86e-13 max_dmdt=2.5e+03
#289  t=6.44e-11 dt=7.86e-13 max_dmdt=2.47e+03
#290  t=6.52e-11 dt=7.86e-13 max_dmdt=2.45e+03
#291  t=6.6e-11  dt=7.86e-13 max_dmdt=2.42e+03
#292  t=6.68e-11 dt=7.86e-13 max_dmdt=2.39e+03
#293  t=6.75e-11 dt=7.86e-13 max_dmdt=2.36e+03
#294  t=6.83e-11 dt=7.86e-13 max_dmdt=2.33e+03
#295  t=6.91e-11 dt=7.86e-13 max_dmdt=2.29e+03
#296  t=6.99e-11 dt=7.86e-13 max_dmdt=2.26e+03
#297  t=7.07e-11 dt=7.86e-13 max_dmdt=2.22e+03
#298  t=7.15e-11 dt=7.86e-13 max_dmdt=2.18e+03
#299  t=7.23e-11 dt=7.86e-13 max_dmdt=2.14e+03
#300  t=7.35e-11 dt=1.2e-12 max_dmdt=2.13e+03
#301  t=7.47e-11 dt=1.2e-12 max_dmdt=2.12e+03
#302  t=7.59e-11 dt=1.2e-12 max_dmdt=2.1e+03
#303  t=7.71e-11 dt=1.2e-12 max_dmdt=2.08e+03
#304  t=7.83e-11 dt=1.2e-12 max_dmdt=2.06e+03
#305  t=7.95e-11 dt=1.2e-12 max_dmdt=2.04e+03
#306  t=8.07e-11 dt=1.2e-12 max_dmdt=2.01e+03
#307  t=8.19e-11 dt=1.2e-12 max_dmdt=1.98e+03
#308  t=8.31e-11 dt=1.2e-12 max_dmdt=1.95e+03
#309  t=8.43e-11 dt=1.2e-12 max_dmdt=1.92e+03
#310  t=8.55e-11 dt=1.2e-12 max_dmdt=1.88e+03
#311  t=8.67e-11 dt=1.2e-12 max_dmdt=1.85e+03
#312  t=8.79e-11 dt=1.2e-12 max_dmdt=1.81e+03
#313  t=8.91e-11 dt=1.2e-12 max_dmdt=1.78e+03
#314  t=9.03e-11 dt=1.2e-12 max_dmdt=1.74e+03
#315  t=9.15e-11 dt=1.2e-12 max_dmdt=1.7e+03
#316  t=9.27e-11 dt=1.2e-12 max_dmdt=1.68e+03
#317  t=9.39e-11 dt=1.2e-12 max_dmdt=1.71e+03
#318  t=9.51e-11 dt=1.2e-12 max_dmdt=1.73e+03
#319  t=9.64e-11 dt=1.2e-12 max_dmdt=1.75e+03
#320  t=9.76e-11 dt=1.2e-12 max_dmdt=1.77e+03
#321  t=9.88e-11 dt=1.2e-12 max_dmdt=1.78e+03
#322  t=1e-10    dt=1.2e-12 max_dmdt=1.8e+03
#323  t=1.01e-10 dt=1.2e-12 max_dmdt=1.81e+03
#324  t=1.02e-10 dt=1.2e-12 max_dmdt=1.83e+03
#325  t=1.04e-10 dt=1.2e-12 max_dmdt=1.84e+03
#326  t=1.05e-10 dt=1.2e-12 max_dmdt=1.84e+03
#327  t=1.06e-10 dt=1.2e-12 max_dmdt=1.88e+03
#328  t=1.07e-10 dt=1.2e-12 max_dmdt=1.94e+03
#329  t=1.08e-10 dt=1.2e-12 max_dmdt=1.99e+03
#330  t=1.1e-10  dt=1.2e-12 max_dmdt=2.04e+03
#331  t=1.11e-10 dt=1.2e-12 max_dmdt=2.09e+03
#332  t=1.12e-10 dt=1.2e-12 max_dmdt=2.13e+03
#333  t=1.13e-10 dt=1.2e-12 max_dmdt=2.16e+03
#334  t=1.14e-10 dt=1.2e-12 max_dmdt=2.2e+03
#335  t=1.16e-10 dt=1.81e-12 max_dmdt=2.23e+03
#336  t=1.18e-10 dt=1.81e-12 max_dmdt=2.27e+03
#337  t=1.2e-10  dt=1.81e-12 max_dmdt=2.29e+03
#338  t=1.22e-10 dt=1.81e-12 max_dmdt=2.31e+03
#339  t=1.23e-10 dt=1.81e-12 max_dmdt=2.32e+03
#340  t=1.25e-10 dt=1.81e-12 max_dmdt=2.31e+03
#341  t=1.27e-10 dt=1.81e-12 max_dmdt=2.31e+03
#342  t=1.29e-10 dt=1.81e-12 max_dmdt=2.29e+03
#343  t=1.31e-10 dt=1.81e-12 max_dmdt=2.26e+03
#344  t=1.33e-10 dt=1.81e-12 max_dmdt=2.23e+03
#345  t=1.34e-10 dt=1.81e-12 max_dmdt=2.2e+03
#346  t=1.36e-10 dt=1.81e-12 max_dmdt=2.16e+03
#347  t=1.38e-10 dt=1.81e-12 max_dmdt=2.12e+03
#348  t=1.4e-10  dt=1.81e-12 max_dmdt=2.07e+03
#349  t=1.42e-10 dt=1.81e-12 max_dmdt=2.02e+03
#350  t=1.43e-10 dt=1.81e-12 max_dmdt=1.97e+03
#351  t=1.45e-10 dt=1.81e-12 max_dmdt=1.91e+03
#352  t=1.47e-10 dt=1.81e-12 max_dmdt=1.86e+03
#353  t=1.49e-10 dt=1.81e-12 max_dmdt=1.8e+03
#354  t=1.51e-10 dt=1.81e-12 max_dmdt=1.74e+03
#355  t=1.52e-10 dt=1.81e-12 max_dmdt=1.69e+03
#356  t=1.54e-10 dt=1.81e-12 max_dmdt=1.63e+03
#357  t=1.56e-10 dt=1.81e-12 max_dmdt=1.57e+03
#358  t=1.58e-10 dt=1.81e-12 max_dmdt=1.51e+03
#359  t=1.6e-10  dt=1.81e-12 max_dmdt=1.46e+03
#360  t=1.61e-10 dt=1.81e-12 max_dmdt=1.41e+03
#361  t=1.64e-10 dt=2.74e-12 max_dmdt=1.34e+03
#362  t=1.67e-10 dt=2.74e-12 max_dmdt=1.27e+03
#363  t=1.7e-10  dt=2.74e-12 max_dmdt=1.2e+03
#364  t=1.72e-10 dt=2.74e-12 max_dmdt=1.13e+03
#365  t=1.75e-10 dt=2.74e-12 max_dmdt=1.08e+03
#366  t=1.78e-10 dt=2.74e-12 max_dmdt=1.07e+03
#367  t=1.81e-10 dt=2.74e-12 max_dmdt=1.06e+03
#368  t=1.83e-10 dt=2.74e-12 max_dmdt=1.05e+03
#369  t=1.86e-10 dt=2.74e-12 max_dmdt=1.04e+03
#370  t=1.89e-10 dt=2.74e-12 max_dmdt=1.02e+03
#371  t=1.92e-10 dt=2.74e-12 max_dmdt=997
#372  t=1.94e-10 dt=2.74e-12 max_dmdt=975
#373  t=1.97e-10 dt=2.74e-12 max_dmdt=951
#374  t=2e-10    dt=2.74e-12 max_dmdt=929
#375  t=2.03e-10 dt=2.74e-12 max_dmdt=924
#376  t=2.05e-10 dt=2.74e-12 max_dmdt=917
#377  t=2.08e-10 dt=2.74e-12 max_dmdt=910
#378  t=2.11e-10 dt=2.74e-12 max_dmdt=901
#379  t=2.14e-10 dt=2.74e-12 max_dmdt=891
#380  t=2.16e-10 dt=2.74e-12 max_dmdt=880
#381  t=2.19e-10 dt=2.74e-12 max_dmdt=869
#382  t=2.22e-10 dt=2.74e-12 max_dmdt=871
#383  t=2.25e-10 dt=2.74e-12 max_dmdt=881
#384  t=2.27e-10 dt=2.74e-12 max_dmdt=901
#385  t=2.3e-10  dt=2.74e-12 max_dmdt=923
#386  t=2.33e-10 dt=2.74e-12 max_dmdt=943
#387  t=2.35e-10 dt=2.74e-12 max_dmdt=961
#388  t=2.38e-10 dt=2.74e-12 max_dmdt=977
#389  t=2.41e-10 dt=2.74e-12 max_dmdt=990
#390  t=2.44e-10 dt=2.74e-12 max_dmdt=1e+03
#391  t=2.46e-10 dt=2.74e-12 max_dmdt=1.01e+03
#392  t=2.49e-10 dt=2.74e-12 max_dmdt=1.02e+03
#393  t=2.52e-10 dt=2.74e-12 max_dmdt=1.02e+03
#394  t=2.55e-10 dt=2.74e-12 max_dmdt=1.02e+03
#395  t=2.57e-10 dt=2.74e-12 max_dmdt=1.02e+03
#396  t=2.6e-10  dt=2.74e-12 max_dmdt=1.01e+03
#397  t=2.63e-10 dt=2.74e-12 max_dmdt=1.01e+03
#398  t=2.66e-10 dt=2.74e-12 max_dmdt=998
#399  t=2.68e-10 dt=2.74e-12 max_dmdt=986
#400  t=2.71e-10 dt=2.74e-12 max_dmdt=973
#401  t=2.74e-10 dt=2.74e-12 max_dmdt=957
#402  t=2.77e-10 dt=2.74e-12 max_dmdt=940
#403  t=2.79e-10 dt=2.74e-12 max_dmdt=921
#404  t=2.82e-10 dt=2.74e-12 max_dmdt=900
#405  t=2.85e-10 dt=2.74e-12 max_dmdt=898
#406  t=2.88e-10 dt=2.74e-12 max_dmdt=903
#407  t=2.92e-10 dt=4.28e-12 max_dmdt=907
#408  t=2.96e-10 dt=4.28e-12 max_dmdt=909
#409  t=3e-10    dt=4.28e-12 max_dmdt=907
#410  t=3.05e-10 dt=4.28e-12 max_dmdt=902
#411  t=3.09e-10 dt=4.28e-12 max_dmdt=893
#412  t=3.13e-10 dt=4.28e-12 max_dmdt=881
#413  t=3.18e-10 dt=4.28e-12 max_dmdt=866
#414  t=3.22e-10 dt=4.28e-12 max_dmdt=848
#415  t=3.26e-10 dt=4.28e-12 max_dmdt=828
#416  t=3.3e-10  dt=4.28e-12 max_dmdt=806
#417  t=3.35e-10 dt=4.28e-12 max_dmdt=782
#418  t=3.39e-10 dt=4.28e-12 max_dmdt=757
#419  t=3.43e-10 dt=4.28e-12 max_dmdt=731
#420  t=3.48e-10 dt=4.28e-12 max_dmdt=705
#421  t=3.52e-10 dt=4.28e-12 max_dmdt=677
#422  t=3.56e-10 dt=4.28e-12 max_dmdt=661
#423  t=3.6e-10  dt=4.28e-12 max_dmdt=654
#424  t=3.65e-10 dt=4.28e-12 max_dmdt=646
#425  t=3.69e-10 dt=4.28e-12 max_dmdt=636
#426  t=3.73e-10 dt=4.28e-12 max_dmdt=625
#427  t=3.77e-10 dt=4.28e-12 max_dmdt=613
#428  t=3.82e-10 dt=4.28e-12 max_dmdt=600
#429  t=3.86e-10 dt=4.28e-12 max_dmdt=586
#430  t=3.9e-10  dt=4.28e-12 max_dmdt=571
#431  t=3.95e-10 dt=4.28e-12 max_dmdt=555
#432  t=3.99e-10 dt=4.28e-12 max_dmdt=539
#433  t=4.03e-10 dt=4.28e-12 max_dmdt=530
#434  t=4.07e-10 dt=4.28e-12 max_dmdt=525
#435  t=4.12e-10 dt=4.28e-12 max_dmdt=518
#436  t=4.16e-10 dt=4.28e-12 max_dmdt=511
#437  t=4.2e-10  dt=4.28e-12 max_dmdt=504
#438  t=4.25e-10 dt=4.28e-12 max_dmdt=497
#439  t=4.29e-10 dt=4.28e-12 max_dmdt=490
#440  t=4.33e-10 dt=4.28e-12 max_dmdt=486
#441  t=4.37e-10 dt=4.28e-12 max_dmdt=484
#442  t=4.42e-10 dt=4.28e-12 max_dmdt=482
#443  t=4.46e-10 dt=4.28e-12 max_dmdt=479
#444  t=4.5e-10  dt=4.28e-12 max_dmdt=476
#445  t=4.54e-10 dt=4.28e-12 max_dmdt=473
#446  t=4.59e-10 dt=4.28e-12 max_dmdt=469
#447  t=4.63e-10 dt=4.28e-12 max_dmdt=472
#448  t=4.67e-10 dt=4.28e-12 max_dmdt=476
#449  t=4.72e-10 dt=4.28e-12 max_dmdt=479
#450  t=4.78e-10 dt=6.52e-12 max_dmdt=484
#451  t=4.85e-10 dt=6.52e-12 max_dmdt=488
#452  t=4.91e-10 dt=6.52e-12 max_dmdt=491
#453  t=4.98e-10 dt=6.52e-12 max_dmdt=494
#454  t=5.04e-10 dt=6.52e-12 max_dmdt=496
#455  t=5.11e-10 dt=6.52e-12 max_dmdt=497
#456  t=5.17e-10 dt=6.52e-12 max_dmdt=498
#457  t=5.24e-10 dt=6.52e-12 max_dmdt=498
#458  t=5.3e-10  dt=6.52e-12 max_dmdt=496
#459  t=5.37e-10 dt=6.52e-12 max_dmdt=495
#460  t=5.43e-10 dt=6.52e-12 max_dmdt=492
#461  t=5.5e-10  dt=6.52e-12 max_dmdt=489
#462  t=5.56e-10 dt=6.52e-12 max_dmdt=485
#463  t=5.63e-10 dt=6.52e-12 max_dmdt=480
#464  t=5.69e-10 dt=6.52e-12 max_dmdt=475
#465  t=5.76e-10 dt=6.52e-12 max_dmdt=469
#466  t=5.82e-10 dt=6.52e-12 max_dmdt=462
#467  t=5.89e-10 dt=6.52e-12 max_dmdt=454
#468  t=5.96e-10 dt=6.52e-12 max_dmdt=447
#469  t=6.02e-10 dt=6.52e-12 max_dmdt=438
#470  t=6.09e-10 dt=6.52e-12 max_dmdt=433
#471  t=6.15e-10 dt=6.52e-12 max_dmdt=433
#472  t=6.22e-10 dt=6.52e-12 max_dmdt=432
#473  t=6.28e-10 dt=6.52e-12 max_dmdt=430
#474  t=6.35e-10 dt=6.52e-12 max_dmdt=428
#475  t=6.41e-10 dt=6.52e-12 max_dmdt=425
#476  t=6.48e-10 dt=6.52e-12 max_dmdt=422
#477  t=6.54e-10 dt=6.52e-12 max_dmdt=419
#478  t=6.61e-10 dt=6.52e-12 max_dmdt=415
#479  t=6.67e-10 dt=6.52e-12 max_dmdt=412
#480  t=6.74e-10 dt=6.52e-12 max_dmdt=412
#481  t=6.8e-10  dt=6.52e-12 max_dmdt=412
#482  t=6.87e-10 dt=6.52e-12 max_dmdt=412
#483  t=6.93e-10 dt=6.52e-12 max_dmdt=411
#484  t=7e-10    dt=6.52e-12 max_dmdt=410
#485  t=7.06e-10 dt=6.52e-12 max_dmdt=408
#486  t=7.13e-10 dt=6.52e-12 max_dmdt=406
#487  t=7.19e-10 dt=6.52e-12 max_dmdt=403
#488  t=7.26e-10 dt=6.52e-12 max_dmdt=400
#489  t=7.32e-10 dt=6.52e-12 max_dmdt=396
#490  t=7.39e-10 dt=6.52e-12 max_dmdt=392
#491  t=7.46e-10 dt=6.52e-12 max_dmdt=387
#492  t=7.52e-10 dt=6.52e-12 max_dmdt=382
#493  t=7.59e-10 dt=6.52e-12 max_dmdt=377
#494  t=7.65e-10 dt=6.52e-12 max_dmdt=371
#495  t=7.72e-10 dt=6.52e-12 max_dmdt=365
#496  t=7.78e-10 dt=6.52e-12 max_dmdt=362
#497  t=7.85e-10 dt=6.52e-12 max_dmdt=359
#498  t=7.91e-10 dt=6.52e-12 max_dmdt=356
#499  t=7.98e-10 dt=6.52e-12 max_dmdt=353
#500  t=8.04e-10 dt=6.52e-12 max_dmdt=349
#501  t=8.11e-10 dt=6.52e-12 max_dmdt=345
#502  t=8.17e-10 dt=6.52e-12 max_dmdt=341
#503  t=8.24e-10 dt=6.52e-12 max_dmdt=336
#504  t=8.3e-10  dt=6.52e-12 max_dmdt=331
#505  t=8.37e-10 dt=6.52e-12 max_dmdt=326
#506  t=8.43e-10 dt=6.52e-12 max_dmdt=321
#507  t=8.5e-10  dt=6.52e-12 max_dmdt=315
#508  t=8.56e-10 dt=6.52e-12 max_dmdt=309
#509  t=8.63e-10 dt=6.52e-12 max_dmdt=304
#510  t=8.69e-10 dt=6.52e-12 max_dmdt=298
#511  t=8.76e-10 dt=6.52e-12 max_dmdt=292
#512  t=8.82e-10 dt=6.52e-12 max_dmdt=286
#513  t=8.89e-10 dt=6.52e-12 max_dmdt=279
#514  t=8.96e-10 dt=6.52e-12 max_dmdt=274
#515  t=9.02e-10 dt=6.52e-12 max_dmdt=271
#516  t=9.09e-10 dt=6.52e-12 max_dmdt=268
#517  t=9.15e-10 dt=6.52e-12 max_dmdt=264
#518  t=9.22e-10 dt=6.52e-12 max_dmdt=261
#519  t=9.28e-10 dt=6.52e-12 max_dmdt=258
#520  t=9.35e-10 dt=6.52e-12 max_dmdt=254
#521  t=9.41e-10 dt=6.52e-12 max_dmdt=251
#522  t=9.48e-10 dt=6.52e-12 max_dmdt=251
#523  t=9.54e-10 dt=6.52e-12 max_dmdt=251
#524  t=9.61e-10 dt=6.52e-12 max_dmdt=251
#525  t=9.67e-10 dt=6.52e-12 max_dmdt=251
#526  t=9.74e-10 dt=6.52e-12 max_dmdt=251
#527  t=9.8e-10  dt=6.52e-12 max_dmdt=250
#528  t=9.87e-10 dt=6.52e-12 max_dmdt=249
#529  t=9.93e-10 dt=6.52e-12 max_dmdt=248
#530  t=1e-09    dt=6.52e-12 max_dmdt=247
#531  t=1.01e-09 dt=6.52e-12 max_dmdt=246
#532  t=1.01e-09 dt=6.52e-12 max_dmdt=244
#533  t=1.02e-09 dt=9.8e-12 max_dmdt=244
#534  t=1.03e-09 dt=9.8e-12 max_dmdt=243
#535  t=1.04e-09 dt=9.8e-12 max_dmdt=242
#536  t=1.05e-09 dt=9.8e-12 max_dmdt=240
#537  t=1.06e-09 dt=9.8e-12 max_dmdt=238
#538  t=1.07e-09 dt=9.8e-12 max_dmdt=236
#539  t=1.08e-09 dt=9.8e-12 max_dmdt=235
#540  t=1.09e-09 dt=9.8e-12 max_dmdt=234
#541  t=1.1e-09  dt=9.8e-12 max_dmdt=236
#542  t=1.11e-09 dt=9.8e-12 max_dmdt=239
#543  t=1.12e-09 dt=9.8e-12 max_dmdt=241
#544  t=1.13e-09 dt=9.8e-12 max_dmdt=243
#545  t=1.14e-09 dt=9.8e-12 max_dmdt=245
#546  t=1.15e-09 dt=9.8e-12 max_dmdt=246
#547  t=1.16e-09 dt=9.8e-12 max_dmdt=247
#548  t=1.17e-09 dt=9.8e-12 max_dmdt=248
#549  t=1.18e-09 dt=9.8e-12 max_dmdt=248
#550  t=1.19e-09 dt=9.8e-12 max_dmdt=248
#551  t=1.2e-09  dt=9.8e-12 max_dmdt=247
#552  t=1.21e-09 dt=9.8e-12 max_dmdt=246
#553  t=1.22e-09 dt=9.8e-12 max_dmdt=246
#554  t=1.23e-09 dt=9.8e-12 max_dmdt=245
#555  t=1.24e-09 dt=9.8e-12 max_dmdt=243
#556  t=1.25e-09 dt=9.8e-12 max_dmdt=242
#557  t=1.26e-09 dt=9.8e-12 max_dmdt=240
#558  t=1.27e-09 dt=9.8e-12 max_dmdt=237
#559  t=1.28e-09 dt=9.8e-12 max_dmdt=238
#560  t=1.29e-09 dt=9.8e-12 max_dmdt=242
#561  t=1.3e-09  dt=9.8e-12 max_dmdt=246
#562  t=1.31e-09 dt=9.8e-12 max_dmdt=250
#563  t=1.32e-09 dt=9.8e-12 max_dmdt=253
#564  t=1.33e-09 dt=9.8e-12 max_dmdt=256
#565  t=1.34e-09 dt=9.8e-12 max_dmdt=258
#566  t=1.35e-09 dt=9.8e-12 max_dmdt=260
#567  t=1.36e-09 dt=9.8e-12 max_dmdt=262
#568  t=1.37e-09 dt=9.8e-12 max_dmdt=263
#569  t=1.38e-09 dt=9.8e-12 max_dmdt=264
#570  t=1.39e-09 dt=9.8e-12 max_dmdt=264
#571  t=1.4e-09  dt=9.8e-12 max_dmdt=264
#572  t=1.41e-09 dt=9.8e-12 max_dmdt=263
#573  t=1.41e-09 dt=9.8e-12 max_dmdt=262
#574  t=1.42e-09 dt=9.8e-12 max_dmdt=261
#575  t=1.43e-09 dt=9.8e-12 max_dmdt=261
#576  t=1.44e-09 dt=9.8e-12 max_dmdt=261
#577  t=1.45e-09 dt=9.8e-12 max_dmdt=260
#578  t=1.46e-09 dt=9.8e-12 max_dmdt=259
#579  t=1.47e-09 dt=9.8e-12 max_dmdt=258
#580  t=1.48e-09 dt=9.8e-12 max_dmdt=257
#581  t=1.49e-09 dt=9.8e-12 max_dmdt=255
#582  t=1.5e-09  dt=9.8e-12 max_dmdt=252
#583  t=1.51e-09 dt=9.8e-12 max_dmdt=250
#584  t=1.52e-09 dt=9.8e-12 max_dmdt=247
#585  t=1.53e-09 dt=9.8e-12 max_dmdt=244
#586  t=1.54e-09 dt=9.8e-12 max_dmdt=240
#587  t=1.55e-09 dt=9.8e-12 max_dmdt=236
#588  t=1.56e-09 dt=9.8e-12 max_dmdt=233
#589  t=1.57e-09 dt=9.8e-12 max_dmdt=228
#590  t=1.59e-09 dt=1.48e-11 max_dmdt=223
#591  t=1.6e-09  dt=1.48e-11 max_dmdt=216
#592  t=1.62e-09 dt=1.48e-11 max_dmdt=212
#593  t=1.63e-09 dt=1.48e-11 max_dmdt=211
#594  t=1.65e-09 dt=1.48e-11 max_dmdt=210
#595  t=1.66e-09 dt=1.48e-11 max_dmdt=208
#596  t=1.68e-09 dt=1.48e-11 max_dmdt=206
#597  t=1.69e-09 dt=1.48e-11 max_dmdt=203
#598  t=1.7e-09  dt=1.48e-11 max_dmdt=200
#599  t=1.72e-09 dt=1.48e-11 max_dmdt=196
#600  t=1.73e-09 dt=1.48e-11 max_dmdt=192
#601  t=1.75e-09 dt=1.48e-11 max_dmdt=188
#602  t=1.76e-09 dt=1.48e-11 max_dmdt=184
#603  t=1.78e-09 dt=1.48e-11 max_dmdt=181
#604  t=1.79e-09 dt=1.48e-11 max_dmdt=181
#605  t=1.81e-09 dt=1.48e-11 max_dmdt=180
#606  t=1.82e-09 dt=1.48e-11 max_dmdt=180
#607  t=1.84e-09 dt=1.48e-11 max_dmdt=178
#608  t=1.85e-09 dt=1.48e-11 max_dmdt=177
#609  t=1.87e-09 dt=1.48e-11 max_dmdt=176
#610  t=1.88e-09 dt=1.48e-11 max_dmdt=189
#611  t=1.9e-09  dt=1.48e-11 max_dmdt=208
#612  t=1.91e-09 dt=1.48e-11 max_dmdt=231
#613  t=1.92e-09 dt=1.05e-11 max_dmdt=254
#614  t=1.93e-09 dt=1.05e-11 max_dmdt=276
#615  t=1.94e-09 dt=1.05e-11 max_dmdt=301
#616  t=1.95e-09 dt=1.05e-11 max_dmdt=329
#617  t=1.96e-09 dt=1.05e-11 max_dmdt=361
#618  t=1.97e-09 dt=7.61e-12 max_dmdt=392
#619  t=1.98e-09 dt=7.61e-12 max_dmdt=420
#620  t=1.99e-09 dt=7.61e-12 max_dmdt=451
#621  t=1.99e-09 dt=7.61e-12 max_dmdt=484
#622  t=2e-09    dt=7.61e-12 max_dmdt=518
#623  t=2.01e-09 dt=7.61e-12 max_dmdt=553
#624  t=2.01e-09 dt=5.31e-12 max_dmdt=581
#625  t=2.02e-09 dt=5.31e-12 max_dmdt=603
#626  t=2.03e-09 dt=5.31e-12 max_dmdt=622
#627  t=2.03e-09 dt=5.31e-12 max_dmdt=641
#628  t=2.04e-09 dt=5.31e-12 max_dmdt=681
#629  t=2.04e-09 dt=5.31e-12 max_dmdt=728
#630  t=2.05e-09 dt=5.31e-12 max_dmdt=804
#631  t=2.05e-09 dt=5.31e-12 max_dmdt=882
#632  t=2.06e-09 dt=3.87e-12 max_dmdt=947
#633  t=2.06e-09 dt=3.87e-12 max_dmdt=1e+03
#634  t=2.06e-09 dt=3.87e-12 max_dmdt=1.05e+03
#635  t=2.07e-09 dt=3.87e-12 max_dmdt=1.09e+03
#636  t=2.07e-09 dt=3.87e-12 max_dmdt=1.13e+03
#637  t=2.08e-09 dt=3.87e-12 max_dmdt=1.16e+03
#638  t=2.08e-09 dt=3.87e-12 max_dmdt=1.18e+03
#639  t=2.08e-09 dt=3.87e-12 max_dmdt=1.19e+03
#640  t=2.09e-09 dt=3.87e-12 max_dmdt=1.19e+03
#641  t=2.09e-09 dt=3.87e-12 max_dmdt=1.18e+03
#642  t=2.09e-09 dt=3.87e-12 max_dmdt=1.16e+03
#643  t=2.1e-09  dt=3.87e-12 max_dmdt=1.14e+03
#644  t=2.1e-09  dt=3.87e-12 max_dmdt=1.11e+03
#645  t=2.11e-09 dt=3.87e-12 max_dmdt=1.07e+03
#646  t=2.11e-09 dt=3.87e-12 max_dmdt=1.03e+03
#647  t=2.11e-09 dt=3.87e-12 max_dmdt=987
#648  t=2.12e-09 dt=3.87e-12 max_dmdt=942
#649  t=2.12e-09 dt=3.87e-12 max_dmdt=895
#650  t=2.13e-09 dt=3.87e-12 max_dmdt=849
#651  t=2.13e-09 dt=3.87e-12 max_dmdt=803
#652  t=2.13e-09 dt=3.87e-12 max_dmdt=790
#653  t=2.14e-09 dt=3.87e-12 max_dmdt=776
#654  t=2.14e-09 dt=3.87e-12 max_dmdt=760
#655  t=2.15e-09 dt=3.87e-12 max_dmdt=742
#656  t=2.15e-09 dt=3.87e-12 max_dmdt=722
#657  t=2.15e-09 dt=3.87e-12 max_dmdt=701
#658  t=2.16e-09 dt=3.87e-12 max_dmdt=680
#659  t=2.16e-09 dt=3.87e-12 max_dmdt=657
#660  t=2.16e-09 dt=3.87e-12 max_dmdt=635
#661  t=2.17e-09 dt=3.87e-12 max_dmdt=613
#662  t=2.17e-09 dt=3.87e-12 max_dmdt=591
#663  t=2.18e-09 dt=3.87e-12 max_dmdt=569
#664  t=2.18e-09 dt=3.87e-12 max_dmdt=547
#665  t=2.18e-09 dt=3.87e-12 max_dmdt=526
#666  t=2.19e-09 dt=3.87e-12 max_dmdt=506
#667  t=2.19e-09 dt=3.87e-12 max_dmdt=486
#668  t=2.2e-09  dt=3.87e-12 max_dmdt=467
#669  t=2.2e-09  dt=3.87e-12 max_dmdt=448
#670  t=2.2e-09  dt=3.87e-12 max_dmdt=430
#671  t=2.21e-09 dt=3.87e-12 max_dmdt=413
#672  t=2.21e-09 dt=3.87e-12 max_dmdt=401
#673  t=2.22e-09 dt=6.42e-12 max_dmdt=386
#674  t=2.22e-09 dt=6.42e-12 max_dmdt=369
#675  t=2.23e-09 dt=6.42e-12 max_dmdt=352
#676  t=2.24e-09 dt=6.42e-12 max_dmdt=335
#677  t=2.24e-09 dt=6.42e-12 max_dmdt=320
#678  t=2.25e-09 dt=6.42e-12 max_dmdt=305
#679  t=2.26e-09 dt=6.42e-12 max_dmdt=291
#680  t=2.26e-09 dt=6.42e-12 max_dmdt=277
#681  t=2.27e-09 dt=6.42e-12 max_dmdt=264
#682  t=2.28e-09 dt=6.42e-12 max_dmdt=252
#683  t=2.28e-09 dt=6.42e-12 max_dmdt=244
#684  t=2.29e-09 dt=6.42e-12 max_dmdt=237
#685  t=2.29e-09 dt=6.42e-12 max_dmdt=229
#686  t=2.3e-09  dt=6.42e-12 max_dmdt=222
#687  t=2.31e-09 dt=6.42e-12 max_dmdt=217
#688  t=2.31e-09 dt=6.42e-12 max_dmdt=212
#689  t=2.32e-09 dt=6.42e-12 max_dmdt=207
#690  t=2.33e-09 dt=6.42e-12 max_dmdt=202
#691  t=2.33e-09 dt=6.42e-12 max_dmdt=197
#692  t=2.34e-09 dt=6.42e-12 max_dmdt=193
#693  t=2.35e-09 dt=6.42e-12 max_dmdt=188
#694  t=2.35e-09 dt=6.42e-12 max_dmdt=183
#695  t=2.36e-09 dt=6.42e-12 max_dmdt=178
#696  t=2.36e-09 dt=6.42e-12 max_dmdt=174
#697  t=2.38e-09 dt=1.04e-11 max_dmdt=168
#698  t=2.39e-09 dt=1.04e-11 max_dmdt=161
#699  t=2.4e-09  dt=1.04e-11 max_dmdt=154
#700  t=2.41e-09 dt=1.04e-11 max_dmdt=148
#701  t=2.42e-09 dt=1.04e-11 max_dmdt=141
#702  t=2.43e-09 dt=1.04e-11 max_dmdt=135
#703  t=2.44e-09 dt=1.04e-11 max_dmdt=132
#704  t=2.45e-09 dt=1.04e-11 max_dmdt=131
#705  t=2.46e-09 dt=1.04e-11 max_dmdt=130
#706  t=2.47e-09 dt=1.04e-11 max_dmdt=129
#707  t=2.48e-09 dt=1.04e-11 max_dmdt=128
#708  t=2.49e-09 dt=1.04e-11 max_dmdt=127
#709  t=2.5e-09  dt=1.04e-11 max_dmdt=126
#710  t=2.51e-09 dt=1.04e-11 max_dmdt=125
#711  t=2.52e-09 dt=1.04e-11 max_dmdt=124
#712  t=2.53e-09 dt=1.04e-11 max_dmdt=123
#713  t=2.54e-09 dt=1.04e-11 max_dmdt=121
#714  t=2.55e-09 dt=1.04e-11 max_dmdt=120
#715  t=2.56e-09 dt=1.04e-11 max_dmdt=119
#716  t=2.57e-09 dt=1.04e-11 max_dmdt=117
#717  t=2.58e-09 dt=1.04e-11 max_dmdt=116
#718  t=2.59e-09 dt=1.04e-11 max_dmdt=114
#719  t=2.6e-09  dt=1.04e-11 max_dmdt=113
#720  t=2.61e-09 dt=1.04e-11 max_dmdt=111
#721  t=2.62e-09 dt=1.04e-11 max_dmdt=110
#722  t=2.63e-09 dt=1.04e-11 max_dmdt=108
#723  t=2.64e-09 dt=1.04e-11 max_dmdt=107
#724  t=2.66e-09 dt=1.58e-11 max_dmdt=105
#725  t=2.68e-09 dt=1.58e-11 max_dmdt=102
#726  t=2.69e-09 dt=1.58e-11 max_dmdt=100
#727  t=2.71e-09 dt=1.58e-11 max_dmdt=97.8
#728  t=2.72e-09 dt=1.58e-11 max_dmdt=95.5
#729  t=2.74e-09 dt=1.58e-11 max_dmdt=93.2
#730  t=2.76e-09 dt=1.58e-11 max_dmdt=90.9
#731  t=2.77e-09 dt=1.58e-11 max_dmdt=89.8
#732  t=2.79e-09 dt=1.58e-11 max_dmdt=88.7
#733  t=2.8e-09  dt=1.58e-11 max_dmdt=88.4
#734  t=2.82e-09 dt=1.58e-11 max_dmdt=88
#735  t=2.83e-09 dt=1.58e-11 max_dmdt=87.6
#736  t=2.85e-09 dt=1.58e-11 max_dmdt=87.1
#737  t=2.87e-09 dt=1.58e-11 max_dmdt=86.6
#738  t=2.88e-09 dt=1.58e-11 max_dmdt=86.1
#739  t=2.9e-09  dt=1.58e-11 max_dmdt=85.6
#740  t=2.91e-09 dt=1.58e-11 max_dmdt=85
#741  t=2.93e-09 dt=1.58e-11 max_dmdt=84.4
#742  t=2.94e-09 dt=1.58e-11 max_dmdt=83.8
#743  t=2.96e-09 dt=1.58e-11 max_dmdt=83.2
#744  t=2.98e-09 dt=1.58e-11 max_dmdt=82.5
#745  t=2.99e-09 dt=1.58e-11 max_dmdt=81.9
#746  t=3.01e-09 dt=1.58e-11 max_dmdt=81.2
#747  t=3.02e-09 dt=1.58e-11 max_dmdt=80.5
#748  t=3.04e-09 dt=1.58e-11 max_dmdt=79.7
#749  t=3.06e-09 dt=1.58e-11 max_dmdt=79.3
#750  t=3.07e-09 dt=1.58e-11 max_dmdt=79.6
#751  t=3.09e-09 dt=1.58e-11 max_dmdt=79.9
#752  t=3.1e-09  dt=1.58e-11 max_dmdt=80.1
#753  t=3.13e-09 dt=2.39e-11 max_dmdt=80.3
#754  t=3.15e-09 dt=2.39e-11 max_dmdt=80.6
#755  t=3.17e-09 dt=2.39e-11 max_dmdt=80.8
#756  t=3.2e-09  dt=2.39e-11 max_dmdt=81
#757  t=3.22e-09 dt=2.39e-11 max_dmdt=81.1
#758  t=3.25e-09 dt=2.39e-11 max_dmdt=81.2
#759  t=3.27e-09 dt=2.39e-11 max_dmdt=81.3
#760  t=3.31e-09 dt=3.67e-11 max_dmdt=81.3
#761  t=3.34e-09 dt=3.67e-11 max_dmdt=81.3
#762  t=3.38e-09 dt=3.67e-11 max_dmdt=81.1
#763  t=3.42e-09 dt=3.67e-11 max_dmdt=80.9
#764  t=3.45e-09 dt=3.67e-11 max_dmdt=80.6
#765  t=3.49e-09 dt=3.67e-11 max_dmdt=80.3
#766  t=3.53e-09 dt=3.67e-11 max_dmdt=79.9
#767  t=3.56e-09 dt=3.67e-11 max_dmdt=79.4
#768  t=3.6e-09  dt=3.67e-11 max_dmdt=78.9
#769  t=3.64e-09 dt=3.67e-11 max_dmdt=78.3
#770  t=3.67e-09 dt=3.67e-11 max_dmdt=77.7
#771  t=3.71e-09 dt=3.67e-11 max_dmdt=77
#772  t=3.75e-09 dt=3.67e-11 max_dmdt=76.3
#773  t=3.78e-09 dt=3.67e-11 max_dmdt=75.5
#774  t=3.82e-09 dt=3.67e-11 max_dmdt=76.7
#775  t=3.86e-09 dt=3.67e-11 max_dmdt=78
#776  t=3.89e-09 dt=3.67e-11 max_dmdt=79.3
#777  t=3.93e-09 dt=3.67e-11 max_dmdt=80.6
#778  t=3.97e-09 dt=3.67e-11 max_dmdt=81.9
#779  t=4e-09    dt=3.67e-11 max_dmdt=83.2
#780  t=4.04e-09 dt=3.67e-11 max_dmdt=84.5
#781  t=4.08e-09 dt=3.67e-11 max_dmdt=85.8
#782  t=4.11e-09 dt=3.67e-11 max_dmdt=87
#783  t=4.15e-09 dt=3.67e-11 max_dmdt=88.3
#784  t=4.19e-09 dt=3.67e-11 max_dmdt=89.5
#785  t=4.22e-09 dt=3.67e-11 max_dmdt=90.7
#786  t=4.26e-09 dt=3.67e-11 max_dmdt=91.9
#787  t=4.3e-09  dt=3.67e-11 max_dmdt=93
#788  t=4.33e-09 dt=3.67e-11 max_dmdt=94.1
#789  t=4.37e-09 dt=3.67e-11 max_dmdt=95.1
#790  t=4.41e-09 dt=3.67e-11 max_dmdt=96
#791  t=4.44e-09 dt=3.67e-11 max_dmdt=96.8
#792  t=4.48e-09 dt=3.67e-11 max_dmdt=99.1
#793  t=4.52e-09 dt=3.67e-11 max_dmdt=103
#794  t=4.55e-09 dt=3.67e-11 max_dmdt=108
#795  t=4.59e-09 dt=3.67e-11 max_dmdt=112
#796  t=4.63e-09 dt=3.67e-11 max_dmdt=116
#797  t=4.66e-09 dt=3.67e-11 max_dmdt=120
#798  t=4.7e-09  dt=3.67e-11 max_dmdt=124
#799  t=4.74e-09 dt=3.67e-11 max_dmdt=127
#800  t=4.77e-09 dt=3.67e-11 max_dmdt=130
#801  t=4.81e-09 dt=3.67e-11 max_dmdt=132
#802  t=4.85e-09 dt=3.67e-11 max_dmdt=133
#803  t=4.87e-09 dt=2.64e-11 max_dmdt=134
#804  t=4.9e-09  dt=2.64e-11 max_dmdt=133
#805  t=4.93e-09 dt=2.64e-11 max_dmdt=132
#806  t=4.95e-09 dt=2.64e-11 max_dmdt=135
#807  t=4.98e-09 dt=2.64e-11 max_dmdt=138
#808  t=5.01e-09 dt=2.64e-11 max_dmdt=139
#809  t=5.03e-09 dt=2.64e-11 max_dmdt=140
#810  t=5.06e-09 dt=2.64e-11 max_dmdt=140
#811  t=5.09e-09 dt=2.64e-11 max_dmdt=140
#812  t=5.11e-09 dt=2.64e-11 max_dmdt=140
#813  t=5.14e-09 dt=2.64e-11 max_dmdt=139
#814  t=5.16e-09 dt=2.64e-11 max_dmdt=137
#815  t=5.19e-09 dt=2.64e-11 max_dmdt=135
#816  t=5.22e-09 dt=2.64e-11 max_dmdt=132
#817  t=5.24e-09 dt=2.64e-11 max_dmdt=128
#818  t=5.27e-09 dt=2.64e-11 max_dmdt=124
#819  t=5.3e-09  dt=2.64e-11 max_dmdt=122
#820  t=5.32e-09 dt=2.64e-11 max_dmdt=122
#821  t=5.35e-09 dt=2.64e-11 max_dmdt=121
#822  t=5.38e-09 dt=2.64e-11 max_dmdt=119
#823  t=5.4e-09  dt=2.64e-11 max_dmdt=117
#824  t=5.43e-09 dt=2.64e-11 max_dmdt=115
#825  t=5.46e-09 dt=2.64e-11 max_dmdt=112
#826  t=5.48e-09 dt=2.64e-11 max_dmdt=109
#827  t=5.51e-09 dt=2.64e-11 max_dmdt=106
#828  t=5.53e-09 dt=2.64e-11 max_dmdt=102
#829  t=5.56e-09 dt=2.64e-11 max_dmdt=99
#830  t=5.59e-09 dt=2.64e-11 max_dmdt=97.2
#831  t=5.61e-09 dt=2.64e-11 max_dmdt=96.6
#832  t=5.64e-09 dt=2.64e-11 max_dmdt=97.5
#833  t=5.67e-09 dt=2.64e-11 max_dmdt=98.3
#834  t=5.69e-09 dt=2.64e-11 max_dmdt=99
#835  t=5.72e-09 dt=2.64e-11 max_dmdt=99.5
#836  t=5.75e-09 dt=2.64e-11 max_dmdt=100
#837  t=5.77e-09 dt=2.64e-11 max_dmdt=100
#838  t=5.8e-09  dt=2.64e-11 max_dmdt=100
#839  t=5.83e-09 dt=2.64e-11 max_dmdt=101
#840  t=5.85e-09 dt=2.64e-11 max_dmdt=101
#841  t=5.88e-09 dt=2.64e-11 max_dmdt=100
#842  t=5.9e-09  dt=2.64e-11 max_dmdt=100
#843  t=5.93e-09 dt=2.64e-11 max_dmdt=99.9
#844  t=5.96e-09 dt=2.64e-11 max_dmdt=99.8
#845  t=5.98e-09 dt=2.64e-11 max_dmdt=99.6
#846  t=6.01e-09 dt=2.64e-11 max_dmdt=99.2
#847  t=6.04e-09 dt=2.64e-11 max_dmdt=98.6
#848  t=6.06e-09 dt=2.64e-11 max_dmdt=97.9
#849  t=6.09e-09 dt=2.64e-11 max_dmdt=98.4
#850  t=6.12e-09 dt=2.64e-11 max_dmdt=99
#851  t=6.14e-09 dt=2.64e-11 max_dmdt=99.5
#852  t=6.17e-09 dt=2.64e-11 max_dmdt=99.8
#853  t=6.2e-09  dt=2.64e-11 max_dmdt=100
#854  t=6.22e-09 dt=2.64e-11 max_dmdt=100
#855  t=6.25e-09 dt=2.64e-11 max_dmdt=100
#856  t=6.27e-09 dt=2.64e-11 max_dmdt=99.9
#857  t=6.3e-09  dt=2.64e-11 max_dmdt=99.5
#858  t=6.33e-09 dt=2.64e-11 max_dmdt=99.1
#859  t=6.35e-09 dt=2.64e-11 max_dmdt=98.5
#860  t=6.38e-09 dt=2.64e-11 max_dmdt=97.8
#861  t=6.41e-09 dt=2.64e-11 max_dmdt=97
#862  t=6.43e-09 dt=2.64e-11 max_dmdt=96.1
#863  t=6.46e-09 dt=2.64e-11 max_dmdt=95.1
#864  t=6.49e-09 dt=2.64e-11 max_dmdt=93.9
#865  t=6.51e-09 dt=2.64e-11 max_dmdt=92.7
#866  t=6.54e-09 dt=2.64e-11 max_dmdt=91.4
#867  t=6.57e-09 dt=2.64e-11 max_dmdt=89.9
#868  t=6.59e-09 dt=2.64e-11 max_dmdt=89.3
#869  t=6.62e-09 dt=2.64e-11 max_dmdt=88.9
#870  t=6.64e-09 dt=2.64e-11 max_dmdt=88.4
#871  t=6.67e-09 dt=2.64e-11 max_dmdt=87.8
#872  t=6.7e-09  dt=2.64e-11 max_dmdt=87
#873  t=6.72e-09 dt=2.64e-11 max_dmdt=86.2
#874  t=6.75e-09 dt=2.64e-11 max_dmdt=85.1
#875  t=6.78e-09 dt=2.64e-11 max_dmdt=84
#876  t=6.8e-09  dt=2.64e-11 max_dmdt=82.8
#877  t=6.83e-09 dt=2.64e-11 max_dmdt=81.5
#878  t=6.86e-09 dt=2.64e-11 max_dmdt=80.1
#879  t=6.88e-09 dt=2.64e-11 max_dmdt=78.7
#880  t=6.91e-09 dt=2.64e-11 max_dmdt=77.1
#881  t=6.94e-09 dt=2.64e-11 max_dmdt=75.6
#882  t=6.96e-09 dt=2.64e-11 max_dmdt=76.4
#883  t=6.99e-09 dt=2.64e-11 max_dmdt=77.8
#884  t=7.01e-09 dt=2.64e-11 max_dmdt=79.1
#885  t=7.04e-09 dt=2.64e-11 max_dmdt=81.3
#886  t=7.07e-09 dt=2.64e-11 max_dmdt=83.6
#887  t=7.09e-09 dt=2.64e-11 max_dmdt=86
#888  t=7.12e-09 dt=2.64e-11 max_dmdt=88.5
#889  t=7.15e-09 dt=2.64e-11 max_dmdt=91
#890  t=7.17e-09 dt=2.64e-11 max_dmdt=93.5
#891  t=7.2e-09  dt=2.64e-11 max_dmdt=96.1
#892  t=7.23e-09 dt=2.64e-11 max_dmdt=100
#893  t=7.25e-09 dt=2.64e-11 max_dmdt=105
#894  t=7.28e-09 dt=2.64e-11 max_dmdt=109
#895  t=7.31e-09 dt=2.64e-11 max_dmdt=114
#896  t=7.33e-09 dt=2.64e-11 max_dmdt=119
#897  t=7.36e-09 dt=2.64e-11 max_dmdt=124
#898  t=7.38e-09 dt=2.64e-11 max_dmdt=129
#899  t=7.41e-09 dt=2.64e-11 max_dmdt=134
#900  t=7.44e-09 dt=2.64e-11 max_dmdt=139
#901  t=7.46e-09 dt=2.64e-11 max_dmdt=144
#902  t=7.49e-09 dt=2.64e-11 max_dmdt=149
#903  t=7.52e-09 dt=2.64e-11 max_dmdt=153
#904  t=7.54e-09 dt=2.64e-11 max_dmdt=157
#905  t=7.57e-09 dt=2.64e-11 max_dmdt=161
#906  t=7.6e-09  dt=2.64e-11 max_dmdt=164
#907  t=7.62e-09 dt=2.64e-11 max_dmdt=166
#908  t=7.65e-09 dt=2.64e-11 max_dmdt=170
#909  t=7.68e-09 dt=2.64e-11 max_dmdt=178
#910  t=7.7e-09  dt=2.64e-11 max_dmdt=187
#911  t=7.73e-09 dt=2.64e-11 max_dmdt=195
#912  t=7.75e-09 dt=2.64e-11 max_dmdt=201
#913  t=7.78e-09 dt=2.64e-11 max_dmdt=207
#914  t=7.81e-09 dt=2.64e-11 max_dmdt=212
#915  t=7.83e-09 dt=1.93e-11 max_dmdt=214
#916  t=7.85e-09 dt=1.93e-11 max_dmdt=215
#917  t=7.87e-09 dt=1.93e-11 max_dmdt=216
#918  t=7.88e-09 dt=1.93e-11 max_dmdt=215
#919  t=7.9e-09  dt=1.93e-11 max_dmdt=213
#920  t=7.92e-09 dt=1.93e-11 max_dmdt=210
#921  t=7.94e-09 dt=1.93e-11 max_dmdt=207
#922  t=7.96e-09 dt=1.93e-11 max_dmdt=208
#923  t=7.98e-09 dt=1.93e-11 max_dmdt=208
#924  t=8e-09    dt=1.93e-11 max_dmdt=209
#925  t=8.02e-09 dt=1.93e-11 max_dmdt=211
#926  t=8.04e-09 dt=1.93e-11 max_dmdt=212
#927  t=8.06e-09 dt=1.93e-11 max_dmdt=212
#928  t=8.08e-09 dt=1.93e-11 max_dmdt=211
#929  t=8.1e-09  dt=1.93e-11 max_dmdt=210
#930  t=8.12e-09 dt=1.93e-11 max_dmdt=208
#931  t=8.14e-09 dt=1.93e-11 max_dmdt=206
#932  t=8.16e-09 dt=1.93e-11 max_dmdt=202
#933  t=8.17e-09 dt=1.93e-11 max_dmdt=199
#934  t=8.19e-09 dt=1.93e-11 max_dmdt=195
#935  t=8.21e-09 dt=1.93e-11 max_dmdt=191
#936  t=8.23e-09 dt=1.93e-11 max_dmdt=188
#937  t=8.25e-09 dt=1.93e-11 max_dmdt=188
#938  t=8.27e-09 dt=1.93e-11 max_dmdt=187
#939  t=8.29e-09 dt=1.93e-11 max_dmdt=185
#940  t=8.31e-09 dt=1.93e-11 max_dmdt=184
#941  t=8.33e-09 dt=1.93e-11 max_dmdt=182
#942  t=8.35e-09 dt=1.93e-11 max_dmdt=182
#943  t=8.37e-09 dt=1.93e-11 max_dmdt=184
#944  t=8.39e-09 dt=1.93e-11 max_dmdt=185
#945  t=8.41e-09 dt=1.93e-11 max_dmdt=186
#946  t=8.43e-09 dt=1.93e-11 max_dmdt=186
#947  t=8.45e-09 dt=1.93e-11 max_dmdt=186
#948  t=8.46e-09 dt=1.93e-11 max_dmdt=185
#949  t=8.48e-09 dt=1.93e-11 max_dmdt=183
#950  t=8.5e-09  dt=1.93e-11 max_dmdt=181
#951  t=8.52e-09 dt=1.93e-11 max_dmdt=178
#952  t=8.54e-09 dt=1.93e-11 max_dmdt=174
#953  t=8.56e-09 dt=1.93e-11 max_dmdt=172
#954  t=8.58e-09 dt=1.93e-11 max_dmdt=173
#955  t=8.6e-09  dt=1.93e-11 max_dmdt=173
#956  t=8.62e-09 dt=1.93e-11 max_dmdt=172
#957  t=8.64e-09 dt=1.93e-11 max_dmdt=170
#958  t=8.66e-09 dt=1.93e-11 max_dmdt=168
#959  t=8.68e-09 dt=1.93e-11 max_dmdt=166
#960  t=8.7e-09  dt=1.93e-11 max_dmdt=163
#961  t=8.72e-09 dt=1.93e-11 max_dmdt=159
#962  t=8.74e-09 dt=1.93e-11 max_dmdt=155
#963  t=8.75e-09 dt=1.93e-11 max_dmdt=150
#964  t=8.77e-09 dt=1.93e-11 max_dmdt=146
#965  t=8.79e-09 dt=1.93e-11 max_dmdt=141
#966  t=8.81e-09 dt=1.93e-11 max_dmdt=136
#967  t=8.83e-09 dt=1.93e-11 max_dmdt=132
#968  t=8.85e-09 dt=1.93e-11 max_dmdt=128
#969  t=8.87e-09 dt=1.93e-11 max_dmdt=123
#970  t=8.89e-09 dt=1.93e-11 max_dmdt=119
#971  t=8.91e-09 dt=1.93e-11 max_dmdt=115
#972  t=8.93e-09 dt=1.93e-11 max_dmdt=111
#973  t=8.95e-09 dt=1.93e-11 max_dmdt=107
#974  t=8.97e-09 dt=1.93e-11 max_dmdt=104
#975  t=8.99e-09 dt=1.93e-11 max_dmdt=104
#976  t=9.01e-09 dt=1.93e-11 max_dmdt=103
#977  t=9.03e-09 dt=1.93e-11 max_dmdt=103
#978  t=9.04e-09 dt=1.93e-11 max_dmdt=102
#979  t=9.06e-09 dt=1.93e-11 max_dmdt=101
#980  t=9.08e-09 dt=1.93e-11 max_dmdt=99.9
#981  t=9.1e-09  dt=1.93e-11 max_dmdt=98.8
#982  t=9.12e-09 dt=1.93e-11 max_dmdt=97.5
#983  t=9.14e-09 dt=1.93e-11 max_dmdt=96.2
#984  t=9.16e-09 dt=1.93e-11 max_dmdt=94.7
#985  t=9.18e-09 dt=1.93e-11 max_dmdt=93.2
#986  t=9.2e-09  dt=1.93e-11 max_dmdt=91.6
#987  t=9.22e-09 dt=1.93e-11 max_dmdt=89.9
#988  t=9.25e-09 dt=3e-11 max_dmdt=87.7
#989  t=9.28e-09 dt=3e-11 max_dmdt=84.9
#990  t=9.31e-09 dt=3e-11 max_dmdt=83.3
#991  t=9.34e-09 dt=3e-11 max_dmdt=82.2
#992  t=9.37e-09 dt=3e-11 max_dmdt=81.4
#993  t=9.4e-09  dt=3e-11 max_dmdt=80.6
#994  t=9.43e-09 dt=3e-11 max_dmdt=79.6
#995  t=9.46e-09 dt=3e-11 max_dmdt=78.5
#996  t=9.49e-09 dt=3e-11 max_dmdt=77.3
#997  t=9.52e-09 dt=3e-11 max_dmdt=75.9
#998  t=9.55e-09 dt=3e-11 max_dmdt=74.5
#999  t=9.58e-09 dt=3e-11 max_dmdt=73
#1000 t=9.61e-09 dt=3e-11 max_dmdt=71.4
#1001 t=9.64e-09 dt=3e-11 max_dmdt=69.8
#1002 t=9.67e-09 dt=3e-11 max_dmdt=68.1
#1003 t=9.7e-09  dt=3e-11 max_dmdt=66.4
#1004 t=9.73e-09 dt=3e-11 max_dmdt=64.7
#1005 t=9.76e-09 dt=3e-11 max_dmdt=62.9
#1006 t=9.79e-09 dt=3e-11 max_dmdt=61.2
#1007 t=9.84e-09 dt=4.71e-11 max_dmdt=58.9
#1008 t=9.88e-09 dt=4.71e-11 max_dmdt=57.2
#1009 t=9.93e-09 dt=4.71e-11 max_dmdt=55.8
#1010 t=9.98e-09 dt=4.71e-11 max_dmdt=54.3
#1011 t=1e-08    dt=4.71e-11 max_dmdt=52.8
#1012 t=1.01e-08 dt=4.71e-11 max_dmdt=51.2
#1013 t=1.01e-08 dt=4.71e-11 max_dmdt=49.6
#1014 t=1.02e-08 dt=4.71e-11 max_dmdt=48
#1015 t=1.02e-08 dt=4.71e-11 max_dmdt=46.4
#1016 t=1.03e-08 dt=4.71e-11 max_dmdt=44.8
#1017 t=1.03e-08 dt=4.71e-11 max_dmdt=43.2
#1018 t=1.04e-08 dt=4.71e-11 max_dmdt=41.6
#1019 t=1.04e-08 dt=4.71e-11 max_dmdt=40
#1020 t=1.04e-08 dt=4.71e-11 max_dmdt=38.5
#1021 t=1.05e-08 dt=4.71e-11 max_dmdt=37
#1022 t=1.05e-08 dt=4.71e-11 max_dmdt=35.6
#1023 t=1.06e-08 dt=4.71e-11 max_dmdt=34.2
#1024 t=1.06e-08 dt=4.71e-11 max_dmdt=32.8
#1025 t=1.07e-08 dt=4.71e-11 max_dmdt=31.5
#1026 t=1.07e-08 dt=4.71e-11 max_dmdt=30.3
#1027 t=1.08e-08 dt=4.71e-11 max_dmdt=29
#1028 t=1.08e-08 dt=7.1e-11 max_dmdt=27.6
#1029 t=1.09e-08 dt=7.1e-11 max_dmdt=26.4
#1030 t=1.1e-08  dt=7.1e-11 max_dmdt=25.2
#1031 t=1.11e-08 dt=7.1e-11 max_dmdt=24.1
#1032 t=1.11e-08 dt=7.1e-11 max_dmdt=23
#1033 t=1.12e-08 dt=7.1e-11 max_dmdt=22
#1034 t=1.13e-08 dt=7.1e-11 max_dmdt=21
#1035 t=1.13e-08 dt=7.1e-11 max_dmdt=20
#1036 t=1.14e-08 dt=7.1e-11 max_dmdt=19.1
#1037 t=1.15e-08 dt=7.1e-11 max_dmdt=18.2
#1038 t=1.16e-08 dt=7.1e-11 max_dmdt=17.4
#1039 t=1.16e-08 dt=7.1e-11 max_dmdt=16.6
#1040 t=1.17e-08 dt=7.1e-11 max_dmdt=15.8
#1041 t=1.18e-08 dt=7.1e-11 max_dmdt=15.1
#1042 t=1.18e-08 dt=7.1e-11 max_dmdt=14.4
#1043 t=1.19e-08 dt=7.1e-11 max_dmdt=13.8
#1044 t=1.2e-08  dt=7.1e-11 max_dmdt=13.2
#1045 t=1.21e-08 dt=1.08e-10 max_dmdt=12.5
#1046 t=1.22e-08 dt=1.08e-10 max_dmdt=11.8
#1047 t=1.23e-08 dt=1.08e-10 max_dmdt=11.1
#1048 t=1.24e-08 dt=1.08e-10 max_dmdt=10.5
#1049 t=1.25e-08 dt=1.08e-10 max_dmdt=9.91
#1050 t=1.26e-08 dt=1.08e-10 max_dmdt=9.37
#1051 t=1.27e-08 dt=1.08e-10 max_dmdt=8.86
#1052 t=1.28e-08 dt=1.08e-10 max_dmdt=8.39
#1053 t=1.3e-08  dt=1.08e-10 max_dmdt=7.95
#1054 t=1.31e-08 dt=1.08e-10 max_dmdt=7.53
#1055 t=1.32e-08 dt=1.08e-10 max_dmdt=7.14
#1056 t=1.33e-08 dt=1.08e-10 max_dmdt=6.78
#1057 t=1.34e-08 dt=1.08e-10 max_dmdt=6.44
#1058 t=1.35e-08 dt=1.08e-10 max_dmdt=6.12
#1059 t=1.36e-08 dt=1.08e-10 max_dmdt=5.82
#1060 t=1.37e-08 dt=1.08e-10 max_dmdt=5.54
#1061 t=1.38e-08 dt=1.08e-10 max_dmdt=5.28
#1062 t=1.39e-08 dt=1.08e-10 max_dmdt=5.09
#1063 t=1.4e-08  dt=1.08e-10 max_dmdt=4.92
#1064 t=1.42e-08 dt=1.64e-10 max_dmdt=4.71
#1065 t=1.44e-08 dt=1.64e-10 max_dmdt=4.48
#1066 t=1.45e-08 dt=1.64e-10 max_dmdt=4.25
#1067 t=1.47e-08 dt=1.64e-10 max_dmdt=4.04
#1068 t=1.49e-08 dt=1.64e-10 max_dmdt=3.84
#1069 t=1.5e-08  dt=1.64e-10 max_dmdt=3.65
#1070 t=1.52e-08 dt=1.64e-10 max_dmdt=3.47
#1071 t=1.53e-08 dt=1.64e-10 max_dmdt=3.3
#1072 t=1.55e-08 dt=1.64e-10 max_dmdt=3.13
#1073 t=1.57e-08 dt=1.64e-10 max_dmdt=2.98
#1074 t=1.58e-08 dt=1.64e-10 max_dmdt=2.83
#1075 t=1.6e-08  dt=1.64e-10 max_dmdt=2.7
#1076 t=1.62e-08 dt=1.64e-10 max_dmdt=2.57
#1077 t=1.63e-08 dt=1.64e-10 max_dmdt=2.44
#1078 t=1.65e-08 dt=1.64e-10 max_dmdt=2.32
#1079 t=1.67e-08 dt=1.64e-10 max_dmdt=2.21
#1080 t=1.68e-08 dt=1.64e-10 max_dmdt=2.11
#1081 t=1.7e-08  dt=1.64e-10 max_dmdt=2.01
#1082 t=1.72e-08 dt=1.64e-10 max_dmdt=1.91
#1083 t=1.74e-08 dt=2.5e-10 max_dmdt=1.8
#1084 t=1.77e-08 dt=2.5e-10 max_dmdt=1.67
#1085 t=1.79e-08 dt=2.5e-10 max_dmdt=1.56
#1086 t=1.82e-08 dt=2.5e-10 max_dmdt=1.45
#1087 t=1.84e-08 dt=2.5e-10 max_dmdt=1.35
#1088 t=1.87e-08 dt=2.5e-10 max_dmdt=1.26
#1089 t=1.89e-08 dt=2.5e-10 max_dmdt=1.17
#1090 t=1.92e-08 dt=2.5e-10 max_dmdt=1.09
#1091 t=1.94e-08 dt=2.5e-10 max_dmdt=1.02
#1092 t=1.97e-08 dt=2.5e-10 max_dmdt=0.952
#1093 t=1.99e-08 dt=2.5e-10 max_dmdt=0.89
#1094 t=2.02e-08 dt=2.5e-10 max_dmdt=0.833
#1095 t=2.04e-08 dt=2.5e-10 max_dmdt=0.779
#1096 t=2.07e-08 dt=2.5e-10 max_dmdt=0.73
#1097 t=2.09e-08 dt=2.5e-10 max_dmdt=0.684
#1098 t=2.12e-08 dt=2.5e-10 max_dmdt=0.642
#1099 t=2.14e-08 dt=2.5e-10 max_dmdt=0.602
#1100 t=2.17e-08 dt=2.5e-10 max_dmdt=0.566
#1101 t=2.19e-08 dt=2.5e-10 max_dmdt=0.532
#1102 t=2.22e-08 dt=2.5e-10 max_dmdt=0.501
#1103 t=2.24e-08 dt=2.5e-10 max_dmdt=0.471
#1104 t=2.27e-08 dt=2.5e-10 max_dmdt=0.444
#1105 t=2.29e-08 dt=2.5e-10 max_dmdt=0.419
#1106 t=2.32e-08 dt=2.5e-10 max_dmdt=0.396
#1107 t=2.34e-08 dt=2.5e-10 max_dmdt=0.374
#1108 t=2.37e-08 dt=2.5e-10 max_dmdt=0.354
#1109 t=2.39e-08 dt=2.5e-10 max_dmdt=0.335
#1110 t=2.42e-08 dt=2.5e-10 max_dmdt=0.318
#1111 t=2.44e-08 dt=2.5e-10 max_dmdt=0.301
#1112 t=2.47e-08 dt=2.5e-10 max_dmdt=0.286
#1113 t=2.49e-08 dt=2.5e-10 max_dmdt=0.272
#1114 t=2.52e-08 dt=2.5e-10 max_dmdt=0.259
#1115 t=2.54e-08 dt=2.5e-10 max_dmdt=0.247
#1116 t=2.57e-08 dt=2.5e-10 max_dmdt=0.236
#1117 t=2.59e-08 dt=2.5e-10 max_dmdt=0.225
#1118 t=2.62e-08 dt=2.5e-10 max_dmdt=0.215
#1119 t=2.64e-08 dt=2.5e-10 max_dmdt=0.206
#1120 t=2.67e-08 dt=2.5e-10 max_dmdt=0.198
#1121 t=2.69e-08 dt=2.5e-10 max_dmdt=0.19
#1122 t=2.72e-08 dt=2.5e-10 max_dmdt=0.182
#1123 t=2.75e-08 dt=3.81e-10 max_dmdt=0.174
#1124 t=2.79e-08 dt=3.81e-10 max_dmdt=0.164
#1125 t=2.83e-08 dt=3.81e-10 max_dmdt=0.156
#1126 t=2.87e-08 dt=3.81e-10 max_dmdt=0.148
#1127 t=2.91e-08 dt=3.81e-10 max_dmdt=0.141
#1128 t=2.95e-08 dt=3.81e-10 max_dmdt=0.135
#1129 t=2.98e-08 dt=3.81e-10 max_dmdt=0.13
#1130 t=3.02e-08 dt=3.81e-10 max_dmdt=0.126
#1131 t=3.06e-08 dt=3.81e-10 max_dmdt=0.121
#1132 t=3.1e-08  dt=3.81e-10 max_dmdt=0.118
#1133 t=3.14e-08 dt=3.81e-10 max_dmdt=0.114
#1134 t=3.17e-08 dt=3.81e-10 max_dmdt=0.112
#1135 t=3.21e-08 dt=3.81e-10 max_dmdt=0.11
#1136 t=3.25e-08 dt=3.81e-10 max_dmdt=0.109
#1137 t=3.29e-08 dt=3.81e-10 max_dmdt=0.107
#1138 t=3.33e-08 dt=3.81e-10 max_dmdt=0.106
#1139 t=3.36e-08 dt=3.81e-10 max_dmdt=0.104
#1140 t=3.4e-08  dt=3.81e-10 max_dmdt=0.103
#1141 t=3.46e-08 dt=5.81e-10 max_dmdt=0.102
#1142 t=3.52e-08 dt=5.81e-10 max_dmdt=0.101
#1143 t=3.58e-08 dt=5.81e-10 max_dmdt=0.1
#1144 t=3.63e-08 dt=5.81e-10 max_dmdt=0.101
#1145 t=3.69e-08 dt=5.81e-10 max_dmdt=0.102
#1146 t=3.75e-08 dt=5.81e-10 max_dmdt=0.103
#1147 t=3.81e-08 dt=5.81e-10 max_dmdt=0.103
#1148 t=3.87e-08 dt=5.81e-10 max_dmdt=0.104
#1149 t=3.92e-08 dt=5.81e-10 max_dmdt=0.104
#1150 t=3.98e-08 dt=5.81e-10 max_dmdt=0.104
#1151 t=4.04e-08 dt=5.81e-10 max_dmdt=0.105
#1152 t=4.1e-08  dt=5.81e-10 max_dmdt=0.105
#1153 t=4.16e-08 dt=5.81e-10 max_dmdt=0.105
#1154 t=4.22e-08 dt=5.81e-10 max_dmdt=0.105
#1155 t=4.27e-08 dt=5.81e-10 max_dmdt=0.105
#1156 t=4.36e-08 dt=8.77e-10 max_dmdt=0.105
#1157 t=4.45e-08 dt=8.77e-10 max_dmdt=0.106
#1158 t=4.54e-08 dt=8.77e-10 max_dmdt=0.106
#1159 t=4.62e-08 dt=8.77e-10 max_dmdt=0.106
#1160 t=4.71e-08 dt=8.77e-10 max_dmdt=0.106
#1161 t=4.8e-08  dt=8.77e-10 max_dmdt=0.106
#1162 t=4.89e-08 dt=8.77e-10 max_dmdt=0.106
#1163 t=4.98e-08 dt=8.77e-10 max_dmdt=0.106
#1164 t=5.06e-08 dt=8.77e-10 max_dmdt=0.106
#1165 t=5.2e-08  dt=1.33e-09 max_dmdt=0.105
#1166 t=5.33e-08 dt=1.33e-09 max_dmdt=0.105
#1167 t=5.46e-08 dt=1.33e-09 max_dmdt=0.105
#1168 t=5.6e-08  dt=1.33e-09 max_dmdt=0.105
#1169 t=5.73e-08 dt=1.33e-09 max_dmdt=0.105
#1170 t=5.86e-08 dt=1.33e-09 max_dmdt=0.105
#1171 t=6.07e-08 dt=2.04e-09 max_dmdt=0.105
#1172 t=6.27e-08 dt=2.04e-09 max_dmdt=0.105
#1173 t=6.48e-08 dt=2.04e-09 max_dmdt=0.105
#1174 t=6.68e-08 dt=2.04e-09 max_dmdt=0.104
#1175 t=6.88e-08 dt=2.04e-09 max_dmdt=0.104
#1176 t=7.19e-08 dt=3.12e-09 max_dmdt=0.104
#1177 t=7.51e-08 dt=3.12e-09 max_dmdt=0.104
#1178 t=7.82e-08 dt=3.12e-09 max_dmdt=0.104
#1179 t=8.13e-08 dt=3.12e-09 max_dmdt=0.103
#1180 t=8.65e-08 dt=5.26e-09 max_dmdt=0.103
#1181 t=9.18e-08 dt=5.26e-09 max_dmdt=0.103
#1182 t=9.99e-08 dt=8.1e-09 max_dmdt=0.102
#1183 t=1.08e-07 dt=8.1e-09 max_dmdt=0.101
#1184 t=1.16e-07 dt=8.1e-09 max_dmdt=0.1
#1185 t=1.24e-07 dt=8.1e-09 max_dmdt=0.0997
[46]:
def plot_field(field, sim, fieldname, layer=0):
    nx = sim.mesh.nx
    ny = sim.mesh.ny
    n_layer = sim.mesh.nx * sim.mesh.ny
    m = field.reshape(-1, 3)

    fx = m[:, 0][layer*n_layer:(layer+1)*n_layer]
    fy = m[:, 1][layer*n_layer:(layer+1)*n_layer]
    fz = m[:, 2][layer*n_layer:(layer+1)*n_layer]
    fx.shape = (ny, nx)
    fy.shape = (ny, nx)
    fz.shape = (ny, nx)

    extent = [0, nx*sim.mesh.dx, 0, ny*sim.mesh.dy]
    plt.figure(figsize=(20, 10))
    plt.subplot(1, 3, 1)
    plt.imshow(fx, extent=extent, cmap='RdBu', origin='lower')
    plt.title('{}_x'.format(fieldname))
    plt.xlabel('x (nm)')
    plt.ylabel('y (nm)')
    plt.subplot(1, 3, 2)
    plt.imshow(fy, extent=extent, cmap='RdBu', origin='lower')
    plt.xlabel('x (nm)')
    plt.ylabel('y (nm)')
    plt.title('{}_y'.format(fieldname))
    plt.subplot(1, 3, 3)
    plt.imshow(fz, extent=extent, cmap='RdBu', origin='lower')
    plt.xlabel('x (nm)')
    plt.ylabel('y (nm)')
    plt.title('{}_z'.format(fieldname))

plot_field(sim.spin, sim, 'm')
_images/user_guide_ipynb_skyrmions-applied-field-gradient_7_0.png

We now apply a field gradient which acts to move the Skyrmions. Below we construct a function to impose this gradient, and just plot the resulting Zeeman field.

[47]:
H0 = 0.3 / (4*np.pi*1e-7) # Apply a field of 0.4T

def H_Gradient(pos):
    x, y, z = pos
    return (0, 0, H0 * y/Ly)

zee = Zeeman(H_Gradient)
sim.add(zee)
plot_field(zee.field, sim, 'HZeeman')
_images/user_guide_ipynb_skyrmions-applied-field-gradient_9_0.png

We now evolve in time, showing snapshots of the magnetisation every 1ns.

[48]:
sim.driver.reset_integrator()
for i, t in enumerate(np.linspace(0, 20e-9, 21)):
    print('i = {}, t = {}ns'.format(i, t))
    sim.driver.run_until(t)
    plot_field(sim.spin, sim, 'm')

i = 0, t = 0.0ns
i = 1, t = 1e-09ns
i = 2, t = 2e-09ns
i = 3, t = 3.0000000000000004e-09ns
i = 4, t = 4e-09ns
i = 5, t = 5e-09ns
i = 6, t = 6.000000000000001e-09ns
i = 7, t = 7.000000000000001e-09ns
i = 8, t = 8e-09ns
i = 9, t = 9.000000000000001e-09ns
i = 10, t = 1e-08ns
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_1.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_2.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_3.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_4.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_5.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_6.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_7.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_8.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_9.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_10.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_11_11.png

We can see that the core of the Skyrmions in the high-field region is smaller than than in the low field region, and there is some motion away from this area boundary.

We can also plot particular fields:

[51]:
# Plot the Effective Field
plot_field(sim.driver.field, sim, 'H')
_images/user_guide_ipynb_skyrmions-applied-field-gradient_13_0.png
[52]:
plot_field(sim.get_interaction('UniformExchange').field, sim, 'HExchange')

plot_field(sim.get_interaction('DMI').field, sim, 'HDMI')

plot_field(sim.get_interaction('Demag').field, sim, 'HDemag')
_images/user_guide_ipynb_skyrmions-applied-field-gradient_14_0.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_14_1.png
_images/user_guide_ipynb_skyrmions-applied-field-gradient_14_2.png

Spin-polarised current driven skyrmion

Author: Marijan Beg, Weiwei Wang

Date: 30 July 2016

This notebook can be downloaded from the github repository, found here.

In this tutorial, a single magnetic skyrmion is driven by a spin-polarised current.

Firstly, we define a function which will be subsequently used for plotting the z component of magnetisation.

[1]:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

def plot_magnetisation(m, mesh, title=None):
    m.shape = (-1, 3)
    mx = m[:, 0]
    my = m[:, 1]
    mz = m[:, 2]
    nx, ny = mesh.nx, mesh.ny
    mx.shape = (ny, nx)
    my.shape = (ny, nx)
    mz.shape = (ny, nx)


    #plt.imshow(mz, extent=extent)
    #plt.xlabel('x (nm)')
    #plt.ylabel('y (nm)')


    fig = plt.figure(figsize=(8,8))
    plt.axes().set_aspect('equal')
    plt.quiver(mx[::3,::3], my[::3,::3], mz[::3,::3], pivot='mid', alpha=0.9, scale=18, width=0.005,  cmap=plt.get_cmap('jet'), edgecolors='None' )
    if title is not None:
        plt.title(title)
    plt.xticks([])
    plt.yticks([])
    plt.show()

Now, we create a finite difference mesh.

[2]:
from fidimag.micro import Sim
from fidimag.common import CuboidMesh
from fidimag.micro import Zeeman, Demag, DMI, UniformExchange

mesh = CuboidMesh(nx=51, ny=30, nz=1, dx=2.5, dy=2.5, dz=2, unit_length=1e-9, periodicity=(True, True, False))

We create a simulation object that contains uniform exchange, DMI, and Zeeman energy contributions.

[3]:
# PYTEST_VALIDATE_IGNORE_OUTPUT
Ms = 8.6e5  # magnetisation saturation (A/m)
A = 1.3e-11  # exchange stiffness (J/m)
D = 4e-3  # DMI constant (J/m**2)
H = (0, 0, 3.8e5)  # external magnetic field (A/m)
alpha = 0.5  # Gilbert damping
gamma = 2.211e5  # gyromagnetic ratio (m/As)

sim  = Sim(mesh)  # create simulation object

# Set parameters.
sim.Ms = Ms
sim.driver.alpha = alpha
sim.driver.gamma = gamma
sim.driver.do_precession = False

# Add energies.
sim.add(UniformExchange(A=A))
sim.add(DMI(D))
sim.add(Zeeman(H))

In order to get a skyrmion as a relaxed state, we need to initialise the system in an appropriate way. For that, we use the following function, and plot the initial state.

[4]:
def m_initial(coord):
    # Extract x and y coordinates.
    x = coord[0]
    y = coord[1]

    # The centre of the circle
    x_centre = 15*2.5
    y_centre = 15*2.5

    # Compute the circle radius.
    r = ((x-x_centre)**2 + (y-y_centre)**2)**0.5

    if r < 8.0:
        return (0, 0, -1)
    else:
        return (0, 0, 1)

sim.set_m(m_initial)

Now, we can relax the system, save and plot the relaxed state.

[5]:
%%capture
sim.driver.relax(dt=1e-13, stopping_dmdt=0.1, max_steps=5000, save_m_steps=None, save_vtk_steps=None)
np.save('m0.npy', sim.spin)
[6]:
plot_magnetisation(sim.spin.copy(), mesh, title='t=0 ns')
_images/user_guide_ipynb_spin-polarised-current-driven-skyrmion_12_0.png

Using the obtained relaxed state, we create a new smulation object and specify the driver to be ‘llg_stt’. By applying a spin-polarised current of \(J = 5 \times 10^{12} \,\text{A/m}^{2}\) in the \(x\) directions with \(\beta = 0.2\), we move a skyrmion in the simulated sample.

[7]:
# PYTEST_VALIDATE_IGNORE_OUTPUT
sim2  = Sim(mesh, driver='llg_stt')  # create simulation object

# Set parameters.
sim2.Ms = Ms
sim2.alpha = alpha
sim2.driver.gamma = gamma

# Add energies.
sim2.add(UniformExchange(A=A))
sim2.add(DMI(D))
sim2.add(Zeeman(H))

sim2.driver.jx = -5e12
sim2.alpha = 0.2
sim2.driver.beta = 0.2

sim2.set_m(np.load('m0.npy'))

for t in [0, 0.1, 0.2]:
    sim2.driver.run_until(t*1e-9)
    plot_magnetisation(sim2.spin.copy(), mesh, title='t=%g ns'%t)
_images/user_guide_ipynb_spin-polarised-current-driven-skyrmion_14_0.png
_images/user_guide_ipynb_spin-polarised-current-driven-skyrmion_14_1.png
_images/user_guide_ipynb_spin-polarised-current-driven-skyrmion_14_2.png

Spin wave propagation in periodic system

This notebook can be downloaded from the github repository, found here.

[1]:
from fidimag.micro import Sim
from fidimag.common import CuboidMesh
from fidimag.micro import UniformExchange, Demag

The mesh in this example is a three-dimensional stripe with edge lengths \(a\) and \(b\) and thickness \(d\). The discretisation in this regular mesh is 1 nm along all edges. System is periodic in the x direction.

[2]:
a = 90  # nm
b = 50  # nm

dx = dy = dz = 1  # nm

mesh = CuboidMesh(nx=a, ny=b, nz=1, dx=dx, dy=dy, dz=dz, unit_length=1e-9, periodicity=(True, False, False))

The used material is Permalloy with the following parameters (saturation magnetsiation \(M_\text{s}\), exchange constant \(A\), and Gilbert damping \(\alpha\)):

  • magnetisation saturation \(M_\text{s} = 10^6 \text{A/m}\)

  • exchange energy constant \(A = 13 \times 10^{-12} \text{J/m}\)

  • Gilbert damping \(\alpha = 0.02\)

[3]:
Ms = 1e6  # magnetisation saturation (A/m)
A = 13e-12  # exchange stiffness (J/m)
alpha = 0.2  # Gilbert damping
gamma = 2.211e5  # gyromagnetic ratio (m/As)

Now, the simulation object is created and exchange and demagnetisation energies are added to the simulation. In addition, one-dimensional periodic boundary conditions are posed.

[4]:
sim  = Sim(mesh)  # create simulation object

# Set parameters.
sim.Ms = Ms
sim.driver.alpha = alpha
sim.driver.gamma = gamma

# Add energies.
sim.add(UniformExchange(A=A))
sim.add(Demag())

The initial magnetisation is not defined at this point. Since the spin waves should occur, system has to be initialised in an appropriate way. In this case, the magnetisation is uniform at all mesh nodes, except in a circular region at the left edge of the boundary. The function which will be used for magnetisation initialisation is:

[5]:
def m_initial(coord):
    # Extract x and y coordinates.
    x = coord[0]
    y = coord[1]

    # The centre of the circle
    x_centre = a/10.
    y_centre = b/2.

    # Compute the circle radius.
    r = ((x-x_centre)**2 + (y-y_centre)**2)**0.5

    if r < 5:
        return (1, 0, 0.2)
    else:
        return (1, 0, 0)

sim.set_m(m_initial)

The function used for plotting magnetisation \(z\) component in all subsequent plots.

[6]:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

def plot_magnetisation(m):
    m.shape = (-1, 3)
    mx = m[:, 0]
    my = m[:, 1]
    mz = m[:, 2]
    mx.shape = (b, a)
    my.shape = (b, a)
    mz.shape = (b, a)

    extent = [0, a, 0, b]
    plt.figure(figsize=(8, 4))
    plt.imshow(mz, extent=extent)
    plt.xlabel('x (nm)')
    plt.ylabel('y (nm)')
    plt.title('mz')

plot_magnetisation(np.copy(sim.spin))
_images/user_guide_ipynb_spin-waves-in-periodic-system_12_0.png

When the initial magnetisation is set, the simulation is executed for 2 ps, and the magnetisation is plotted every \(\Delta t = 0.25 \text{ps}\)

[7]:
import numpy as np

t_sim = 3e-12  # simulation time (s)
dt = 0.5e-12  # plotting time step (s)
t_array = np.arange(dt, t_sim, dt)

for t in t_array:
    sim.driver.run_until(t)
    plot_magnetisation(np.copy(sim.spin))
_images/user_guide_ipynb_spin-waves-in-periodic-system_14_0.png
_images/user_guide_ipynb_spin-waves-in-periodic-system_14_1.png
_images/user_guide_ipynb_spin-waves-in-periodic-system_14_2.png
_images/user_guide_ipynb_spin-waves-in-periodic-system_14_3.png
_images/user_guide_ipynb_spin-waves-in-periodic-system_14_4.png
_images/user_guide_ipynb_spin-waves-in-periodic-system_14_5.png

It can be seen that the spin wave “travels across” the left boundary in \(x\) direction.

Micromagnetic standard problem 4

Author: Marijan Beg, Marc-Antonio Bisotti

Date: 18 Mar 2016

This notebook can be downloaded from the github repository, found here.

[1]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

Problem specification

The simulated sample is a thin film cuboid with dimensions: - length \(L = 500 \,\text{nm}\), - width \(d = 125 \,\text{nm}\), and - thickness \(t = 3 \,\text{nm}\).

[2]:
from fidimag.common import CuboidMesh
mesh = CuboidMesh(nx=160, ny=40, nz=1, dx=3.125, dy=3.125, dz=3, unit_length=1e-9)

The material parameters (similar to permalloy) are:

  • exchange energy constant \(A = 1.3 \times 10^{-11} \,\text{J/m}\),

  • magnetisation saturation \(M_\text{s} = 8 \times 10^{5} \,\text{A/m}\).

Magnetisation dynamics is governed by the Landau-Lifshitz-Gilbert equation

\[\frac{d\mathbf{m}}{dt} = -\gamma_{0}(\mathbf{m} \times \mathbf{H}_\text{eff}) + \alpha\left(\mathbf{m} \times \frac{d\mathbf{m}}{dt}\right)\]

where \(\gamma_{0} = 2.211 \times 10^{5} \,\text{m}\,\text{A}^{-1}\,\text{s}^{-1}\) is the gyromagnetic ratio and \(\alpha=0.02\) is the Gilbert damping.

[3]:
A = 13e-12
Ms = 8.0e5
alpha = 0.02
gamma = 2.211e5

In the standard problem 4, the system is firstly relaxed at zero external magnetic field and then, stating from the obtained equlibrium configuration, the magnetisation dynamics is simulated for each of two different external magnetic fields:

  1. \(\mathbf{H}_{1} = (-24.6, 4.3, 0.0) \,\text{mT}\)

  2. \(\mathbf{H}_{2} = (-35.5, -6.3, 0.0) \,\text{mT}\)

The micromagnetic standard problem 4 specification can be also found in Ref. 1.

Simulation

Getting the Initial Magnetisation

The simulation object is created and parameters set.

[4]:
from fidimag.micro import Sim, UniformExchange, Demag, Zeeman, TimeZeeman

sim = Sim(mesh)  # create simulation object

sim.driver.set_tols(rtol=1e-10, atol=1e-10)
sim.Ms = Ms
sim.driver.alpha = 0.5  # large value since the magnetisation dynamics is not important in the relexation stage
sim.driver.gamma = gamma
sim.driver.do_precession = False  # speeds up the simulation


# Starting magnetisation.
sim.set_m((1, 0.25, 0.1))
sim.add(UniformExchange(A=A))
sim.add(Demag())

We have ignored the decaying external field. Finally, the system can be relaxed and the obtained equilibrium configuration saved, so that it can be used as an initial state for simulating magnetisation dynamics.

[5]:
# PYTEST_VALIDATE_IGNORE_OUTPUT
sim.driver.relax(dt=1e-13, stopping_dmdt=0.01, max_steps=5000, save_m_steps=None, save_vtk_steps=None);
np.save("m0.npy", sim.spin)  # save equilibrium configuration
step=1, time=1e-13, max_dmdt=517 ode_step=0
step=2, time=2e-13, max_dmdt=510 ode_step=1.8e-14
step=3, time=3e-13, max_dmdt=502 ode_step=4.38e-14
step=4, time=4e-13, max_dmdt=495 ode_step=4.38e-14
step=5, time=5e-13, max_dmdt=489 ode_step=7.03e-14
step=6, time=6e-13, max_dmdt=482 ode_step=7.03e-14
step=7, time=7e-13, max_dmdt=476 ode_step=7.03e-14
step=8, time=8e-13, max_dmdt=470 ode_step=7.03e-14
step=9, time=9e-13, max_dmdt=464 ode_step=7.03e-14
step=10, time=1e-12, max_dmdt=459 ode_step=7.03e-14
step=11, time=1.14e-12, max_dmdt=453 ode_step=1.43e-13
step=12, time=1.29e-12, max_dmdt=445 ode_step=1.43e-13
step=13, time=1.43e-12, max_dmdt=439 ode_step=1.43e-13
step=14, time=1.57e-12, max_dmdt=433 ode_step=1.43e-13
step=15, time=1.72e-12, max_dmdt=428 ode_step=1.43e-13
step=16, time=1.86e-12, max_dmdt=422 ode_step=1.43e-13
step=17, time=2e-12, max_dmdt=417 ode_step=1.43e-13
step=18, time=2.15e-12, max_dmdt=412 ode_step=1.43e-13
step=19, time=2.29e-12, max_dmdt=407 ode_step=1.43e-13
step=20, time=2.51e-12, max_dmdt=401 ode_step=2.15e-13
step=21, time=2.72e-12, max_dmdt=394 ode_step=2.15e-13
step=22, time=2.94e-12, max_dmdt=387 ode_step=2.15e-13
step=23, time=3.15e-12, max_dmdt=381 ode_step=2.15e-13
step=24, time=3.37e-12, max_dmdt=375 ode_step=2.15e-13
step=25, time=3.58e-12, max_dmdt=369 ode_step=2.15e-13
step=26, time=3.8e-12, max_dmdt=364 ode_step=2.15e-13
step=27, time=4.01e-12, max_dmdt=358 ode_step=2.15e-13
step=28, time=4.23e-12, max_dmdt=353 ode_step=2.15e-13
step=29, time=4.44e-12, max_dmdt=348 ode_step=2.15e-13
step=30, time=4.66e-12, max_dmdt=343 ode_step=2.15e-13
step=31, time=4.87e-12, max_dmdt=338 ode_step=2.15e-13
step=32, time=5.09e-12, max_dmdt=333 ode_step=2.15e-13
step=33, time=5.3e-12, max_dmdt=328 ode_step=2.15e-13
step=34, time=5.52e-12, max_dmdt=324 ode_step=2.15e-13
step=35, time=5.73e-12, max_dmdt=320 ode_step=2.15e-13
step=36, time=5.95e-12, max_dmdt=315 ode_step=2.15e-13
step=37, time=6.16e-12, max_dmdt=311 ode_step=2.15e-13
step=38, time=6.38e-12, max_dmdt=307 ode_step=2.15e-13
step=39, time=6.59e-12, max_dmdt=303 ode_step=2.15e-13
step=40, time=6.81e-12, max_dmdt=299 ode_step=2.15e-13
step=41, time=7.02e-12, max_dmdt=295 ode_step=2.15e-13
step=42, time=7.24e-12, max_dmdt=291 ode_step=2.15e-13
step=43, time=7.45e-12, max_dmdt=288 ode_step=2.15e-13
step=44, time=7.78e-12, max_dmdt=283 ode_step=3.29e-13
step=45, time=8.11e-12, max_dmdt=278 ode_step=3.29e-13
step=46, time=8.44e-12, max_dmdt=273 ode_step=3.29e-13
step=47, time=8.77e-12, max_dmdt=268 ode_step=3.29e-13
step=48, time=9.09e-12, max_dmdt=263 ode_step=3.29e-13
step=49, time=9.42e-12, max_dmdt=258 ode_step=3.29e-13
step=50, time=9.75e-12, max_dmdt=254 ode_step=3.29e-13
step=51, time=1.01e-11, max_dmdt=249 ode_step=3.29e-13
step=52, time=1.04e-11, max_dmdt=245 ode_step=3.29e-13
step=53, time=1.07e-11, max_dmdt=240 ode_step=3.29e-13
step=54, time=1.11e-11, max_dmdt=236 ode_step=3.29e-13
step=55, time=1.14e-11, max_dmdt=232 ode_step=3.29e-13
step=56, time=1.17e-11, max_dmdt=229 ode_step=3.29e-13
step=57, time=1.21e-11, max_dmdt=225 ode_step=3.29e-13
step=58, time=1.24e-11, max_dmdt=221 ode_step=3.29e-13
step=59, time=1.27e-11, max_dmdt=218 ode_step=3.29e-13
step=60, time=1.3e-11, max_dmdt=214 ode_step=3.29e-13
step=61, time=1.34e-11, max_dmdt=211 ode_step=3.29e-13
step=62, time=1.37e-11, max_dmdt=208 ode_step=3.29e-13
step=63, time=1.4e-11, max_dmdt=204 ode_step=3.29e-13
step=64, time=1.45e-11, max_dmdt=201 ode_step=4.94e-13
step=65, time=1.5e-11, max_dmdt=196 ode_step=4.94e-13
step=66, time=1.55e-11, max_dmdt=192 ode_step=4.94e-13
step=67, time=1.6e-11, max_dmdt=188 ode_step=4.94e-13
step=68, time=1.65e-11, max_dmdt=184 ode_step=4.94e-13
step=69, time=1.7e-11, max_dmdt=180 ode_step=4.94e-13
step=70, time=1.75e-11, max_dmdt=177 ode_step=4.94e-13
step=71, time=1.8e-11, max_dmdt=173 ode_step=4.94e-13
step=72, time=1.85e-11, max_dmdt=170 ode_step=4.94e-13
step=73, time=1.9e-11, max_dmdt=167 ode_step=4.94e-13
step=74, time=1.95e-11, max_dmdt=164 ode_step=4.94e-13
step=75, time=2e-11, max_dmdt=161 ode_step=4.94e-13
step=76, time=2.04e-11, max_dmdt=159 ode_step=4.94e-13
step=77, time=2.09e-11, max_dmdt=156 ode_step=4.94e-13
step=78, time=2.17e-11, max_dmdt=153 ode_step=7.48e-13
step=79, time=2.24e-11, max_dmdt=150 ode_step=7.48e-13
step=80, time=2.32e-11, max_dmdt=147 ode_step=7.48e-13
step=81, time=2.39e-11, max_dmdt=144 ode_step=7.48e-13
step=82, time=2.47e-11, max_dmdt=141 ode_step=7.48e-13
step=83, time=2.54e-11, max_dmdt=138 ode_step=7.48e-13
step=84, time=2.62e-11, max_dmdt=136 ode_step=7.48e-13
step=85, time=2.69e-11, max_dmdt=134 ode_step=7.48e-13
step=86, time=2.77e-11, max_dmdt=131 ode_step=7.48e-13
step=87, time=2.84e-11, max_dmdt=129 ode_step=7.48e-13
step=88, time=2.92e-11, max_dmdt=127 ode_step=7.48e-13
step=89, time=2.99e-11, max_dmdt=125 ode_step=7.48e-13
step=90, time=3.07e-11, max_dmdt=124 ode_step=7.48e-13
step=91, time=3.14e-11, max_dmdt=122 ode_step=7.48e-13
step=92, time=3.22e-11, max_dmdt=120 ode_step=7.48e-13
step=93, time=3.29e-11, max_dmdt=119 ode_step=7.48e-13
step=94, time=3.37e-11, max_dmdt=118 ode_step=7.48e-13
step=95, time=3.44e-11, max_dmdt=116 ode_step=7.48e-13
step=96, time=3.52e-11, max_dmdt=115 ode_step=7.48e-13
step=97, time=3.59e-11, max_dmdt=114 ode_step=7.48e-13
step=98, time=3.67e-11, max_dmdt=113 ode_step=7.48e-13
step=99, time=3.74e-11, max_dmdt=112 ode_step=7.48e-13
step=100, time=3.82e-11, max_dmdt=111 ode_step=7.48e-13
step=101, time=3.89e-11, max_dmdt=110 ode_step=7.48e-13
step=102, time=3.97e-11, max_dmdt=109 ode_step=7.48e-13
step=103, time=4.04e-11, max_dmdt=108 ode_step=7.48e-13
step=104, time=4.12e-11, max_dmdt=107 ode_step=7.48e-13
step=105, time=4.19e-11, max_dmdt=107 ode_step=7.48e-13
step=106, time=4.26e-11, max_dmdt=106 ode_step=7.48e-13
step=107, time=4.34e-11, max_dmdt=105 ode_step=7.48e-13
step=108, time=4.41e-11, max_dmdt=104 ode_step=7.48e-13
step=109, time=4.49e-11, max_dmdt=104 ode_step=7.48e-13
step=110, time=4.56e-11, max_dmdt=103 ode_step=7.48e-13
step=111, time=4.64e-11, max_dmdt=102 ode_step=7.48e-13
step=112, time=4.71e-11, max_dmdt=102 ode_step=7.48e-13
step=113, time=4.79e-11, max_dmdt=101 ode_step=7.48e-13
step=114, time=4.86e-11, max_dmdt=101 ode_step=7.48e-13
step=115, time=4.94e-11, max_dmdt=100 ode_step=7.48e-13
step=116, time=5.01e-11, max_dmdt=99.6 ode_step=7.48e-13
step=117, time=5.09e-11, max_dmdt=99.1 ode_step=7.48e-13
step=118, time=5.16e-11, max_dmdt=98.6 ode_step=7.48e-13
step=119, time=5.24e-11, max_dmdt=98.2 ode_step=7.48e-13
step=120, time=5.31e-11, max_dmdt=97.7 ode_step=7.48e-13
step=121, time=5.39e-11, max_dmdt=97.2 ode_step=7.48e-13
step=122, time=5.46e-11, max_dmdt=96.8 ode_step=7.48e-13
step=123, time=5.54e-11, max_dmdt=96.3 ode_step=7.48e-13
step=124, time=5.61e-11, max_dmdt=95.9 ode_step=7.48e-13
step=125, time=5.69e-11, max_dmdt=95.5 ode_step=7.48e-13
step=126, time=5.8e-11, max_dmdt=95 ode_step=1.14e-12
step=127, time=5.91e-11, max_dmdt=94.4 ode_step=1.14e-12
step=128, time=6.03e-11, max_dmdt=93.8 ode_step=1.14e-12
step=129, time=6.14e-11, max_dmdt=93.2 ode_step=1.14e-12
step=130, time=6.26e-11, max_dmdt=92.7 ode_step=1.14e-12
step=131, time=6.37e-11, max_dmdt=92.2 ode_step=1.14e-12
step=132, time=6.48e-11, max_dmdt=91.6 ode_step=1.14e-12
step=133, time=6.6e-11, max_dmdt=91.1 ode_step=1.14e-12
step=134, time=6.71e-11, max_dmdt=90.6 ode_step=1.14e-12
step=135, time=6.82e-11, max_dmdt=90.1 ode_step=1.14e-12
step=136, time=6.94e-11, max_dmdt=89.6 ode_step=1.14e-12
step=137, time=7.05e-11, max_dmdt=89.2 ode_step=1.14e-12
step=138, time=7.17e-11, max_dmdt=88.7 ode_step=1.14e-12
step=139, time=7.28e-11, max_dmdt=88.2 ode_step=1.14e-12
step=140, time=7.39e-11, max_dmdt=87.8 ode_step=1.14e-12
step=141, time=7.51e-11, max_dmdt=87.3 ode_step=1.14e-12
step=142, time=7.62e-11, max_dmdt=86.9 ode_step=1.14e-12
step=143, time=7.74e-11, max_dmdt=86.4 ode_step=1.14e-12
step=144, time=7.85e-11, max_dmdt=86 ode_step=1.14e-12
step=145, time=7.96e-11, max_dmdt=85.6 ode_step=1.14e-12
step=146, time=8.08e-11, max_dmdt=85.2 ode_step=1.14e-12
step=147, time=8.19e-11, max_dmdt=84.8 ode_step=1.14e-12
step=148, time=8.3e-11, max_dmdt=84.4 ode_step=1.14e-12
step=149, time=8.42e-11, max_dmdt=84 ode_step=1.14e-12
step=150, time=8.53e-11, max_dmdt=83.5 ode_step=1.14e-12
step=151, time=8.65e-11, max_dmdt=83.1 ode_step=1.14e-12
step=152, time=8.76e-11, max_dmdt=82.7 ode_step=1.14e-12
step=153, time=8.87e-11, max_dmdt=82.3 ode_step=1.14e-12
step=154, time=8.99e-11, max_dmdt=82 ode_step=1.14e-12
step=155, time=9.1e-11, max_dmdt=81.6 ode_step=1.14e-12
step=156, time=9.21e-11, max_dmdt=81.2 ode_step=1.14e-12
step=157, time=9.33e-11, max_dmdt=80.8 ode_step=1.14e-12
step=158, time=9.44e-11, max_dmdt=80.4 ode_step=1.14e-12
step=159, time=9.56e-11, max_dmdt=80 ode_step=1.14e-12
step=160, time=9.67e-11, max_dmdt=79.6 ode_step=1.14e-12
step=161, time=9.78e-11, max_dmdt=79.3 ode_step=1.14e-12
step=162, time=9.9e-11, max_dmdt=78.9 ode_step=1.14e-12
step=163, time=1.01e-10, max_dmdt=78.4 ode_step=1.75e-12
step=164, time=1.02e-10, max_dmdt=77.8 ode_step=1.75e-12
step=165, time=1.04e-10, max_dmdt=77.3 ode_step=1.75e-12
step=166, time=1.06e-10, max_dmdt=76.7 ode_step=1.75e-12
step=167, time=1.08e-10, max_dmdt=76.1 ode_step=1.75e-12
step=168, time=1.09e-10, max_dmdt=75.6 ode_step=1.75e-12
step=169, time=1.11e-10, max_dmdt=75 ode_step=1.75e-12
step=170, time=1.13e-10, max_dmdt=74.5 ode_step=1.75e-12
step=171, time=1.15e-10, max_dmdt=74 ode_step=1.75e-12
step=172, time=1.16e-10, max_dmdt=73.4 ode_step=1.75e-12
step=173, time=1.18e-10, max_dmdt=72.9 ode_step=1.75e-12
step=174, time=1.2e-10, max_dmdt=72.4 ode_step=1.75e-12
step=175, time=1.22e-10, max_dmdt=71.8 ode_step=1.75e-12
step=176, time=1.23e-10, max_dmdt=71.3 ode_step=1.75e-12
step=177, time=1.25e-10, max_dmdt=70.8 ode_step=1.75e-12
step=178, time=1.27e-10, max_dmdt=70.3 ode_step=1.75e-12
step=179, time=1.29e-10, max_dmdt=69.8 ode_step=1.75e-12
step=180, time=1.3e-10, max_dmdt=69.3 ode_step=1.75e-12
step=181, time=1.32e-10, max_dmdt=68.8 ode_step=1.75e-12
step=182, time=1.34e-10, max_dmdt=68.3 ode_step=1.75e-12
step=183, time=1.36e-10, max_dmdt=67.8 ode_step=1.75e-12
step=184, time=1.37e-10, max_dmdt=67.3 ode_step=1.75e-12
step=185, time=1.39e-10, max_dmdt=66.8 ode_step=1.75e-12
step=186, time=1.41e-10, max_dmdt=66.3 ode_step=1.75e-12
step=187, time=1.43e-10, max_dmdt=65.8 ode_step=1.75e-12
step=188, time=1.44e-10, max_dmdt=65.3 ode_step=1.75e-12
step=189, time=1.46e-10, max_dmdt=64.8 ode_step=1.75e-12
step=190, time=1.48e-10, max_dmdt=64.4 ode_step=1.75e-12
step=191, time=1.5e-10, max_dmdt=63.9 ode_step=1.75e-12
step=192, time=1.52e-10, max_dmdt=63.3 ode_step=2.69e-12
step=193, time=1.55e-10, max_dmdt=62.6 ode_step=2.69e-12
step=194, time=1.58e-10, max_dmdt=61.9 ode_step=2.69e-12
step=195, time=1.6e-10, max_dmdt=61.2 ode_step=2.69e-12
step=196, time=1.63e-10, max_dmdt=60.5 ode_step=2.69e-12
step=197, time=1.66e-10, max_dmdt=59.8 ode_step=2.69e-12
step=198, time=1.69e-10, max_dmdt=59.1 ode_step=2.69e-12
step=199, time=1.71e-10, max_dmdt=58.4 ode_step=2.69e-12
step=200, time=1.74e-10, max_dmdt=57.8 ode_step=2.69e-12
step=201, time=1.77e-10, max_dmdt=57.1 ode_step=2.69e-12
step=202, time=1.79e-10, max_dmdt=56.5 ode_step=2.69e-12
step=203, time=1.83e-10, max_dmdt=55.7 ode_step=4.09e-12
step=204, time=1.87e-10, max_dmdt=54.7 ode_step=4.09e-12
step=205, time=1.92e-10, max_dmdt=53.8 ode_step=4.09e-12
step=206, time=1.96e-10, max_dmdt=52.8 ode_step=4.09e-12
step=207, time=2e-10, max_dmdt=51.9 ode_step=4.09e-12
step=208, time=2.04e-10, max_dmdt=51 ode_step=4.09e-12
step=209, time=2.08e-10, max_dmdt=50.2 ode_step=4.09e-12
step=210, time=2.12e-10, max_dmdt=49.3 ode_step=4.09e-12
step=211, time=2.16e-10, max_dmdt=48.5 ode_step=4.09e-12
step=212, time=2.2e-10, max_dmdt=47.6 ode_step=4.09e-12
step=213, time=2.24e-10, max_dmdt=46.8 ode_step=4.09e-12
step=214, time=2.28e-10, max_dmdt=46 ode_step=4.09e-12
step=215, time=2.32e-10, max_dmdt=45.3 ode_step=4.09e-12
step=216, time=2.37e-10, max_dmdt=44.5 ode_step=4.09e-12
step=217, time=2.41e-10, max_dmdt=43.7 ode_step=4.09e-12
step=218, time=2.45e-10, max_dmdt=43 ode_step=4.09e-12
step=219, time=2.49e-10, max_dmdt=42.3 ode_step=4.09e-12
step=220, time=2.53e-10, max_dmdt=41.6 ode_step=4.09e-12
step=221, time=2.57e-10, max_dmdt=40.9 ode_step=4.09e-12
step=222, time=2.61e-10, max_dmdt=40.2 ode_step=4.09e-12
step=223, time=2.65e-10, max_dmdt=39.5 ode_step=4.09e-12
step=224, time=2.69e-10, max_dmdt=38.9 ode_step=4.09e-12
step=225, time=2.73e-10, max_dmdt=38.2 ode_step=4.09e-12
step=226, time=2.77e-10, max_dmdt=37.6 ode_step=4.09e-12
step=227, time=2.81e-10, max_dmdt=37 ode_step=4.09e-12
step=228, time=2.86e-10, max_dmdt=36.4 ode_step=4.09e-12
step=229, time=2.9e-10, max_dmdt=35.8 ode_step=4.09e-12
step=230, time=2.94e-10, max_dmdt=35.2 ode_step=4.09e-12
step=231, time=3e-10, max_dmdt=34.5 ode_step=6.13e-12
step=232, time=3.06e-10, max_dmdt=33.6 ode_step=6.13e-12
step=233, time=3.12e-10, max_dmdt=32.8 ode_step=6.13e-12
step=234, time=3.18e-10, max_dmdt=32.1 ode_step=6.13e-12
step=235, time=3.24e-10, max_dmdt=31.3 ode_step=6.13e-12
step=236, time=3.31e-10, max_dmdt=30.6 ode_step=6.13e-12
step=237, time=3.37e-10, max_dmdt=29.9 ode_step=6.13e-12
step=238, time=3.43e-10, max_dmdt=29.3 ode_step=6.13e-12
step=239, time=3.49e-10, max_dmdt=28.6 ode_step=6.13e-12
step=240, time=3.55e-10, max_dmdt=28 ode_step=6.13e-12
step=241, time=3.61e-10, max_dmdt=27.4 ode_step=6.13e-12
step=242, time=3.67e-10, max_dmdt=27 ode_step=6.13e-12
step=243, time=3.73e-10, max_dmdt=26.6 ode_step=6.13e-12
step=244, time=3.8e-10, max_dmdt=26.2 ode_step=6.13e-12
step=245, time=3.86e-10, max_dmdt=25.8 ode_step=6.13e-12
step=246, time=3.92e-10, max_dmdt=25.4 ode_step=6.13e-12
step=247, time=3.98e-10, max_dmdt=25.1 ode_step=6.13e-12
step=248, time=4.04e-10, max_dmdt=24.7 ode_step=6.13e-12
step=249, time=4.1e-10, max_dmdt=24.3 ode_step=6.13e-12
step=250, time=4.16e-10, max_dmdt=24 ode_step=6.13e-12
step=251, time=4.22e-10, max_dmdt=23.6 ode_step=6.13e-12
step=252, time=4.29e-10, max_dmdt=23.3 ode_step=6.13e-12
step=253, time=4.35e-10, max_dmdt=22.9 ode_step=6.13e-12
step=254, time=4.41e-10, max_dmdt=22.6 ode_step=6.13e-12
step=255, time=4.51e-10, max_dmdt=22.2 ode_step=9.71e-12
step=256, time=4.6e-10, max_dmdt=21.7 ode_step=9.71e-12
step=257, time=4.7e-10, max_dmdt=21.2 ode_step=9.71e-12
step=258, time=4.8e-10, max_dmdt=20.7 ode_step=9.71e-12
step=259, time=4.89e-10, max_dmdt=20.2 ode_step=9.71e-12
step=260, time=4.99e-10, max_dmdt=19.7 ode_step=9.71e-12
step=261, time=5.09e-10, max_dmdt=19.4 ode_step=9.71e-12
step=262, time=5.19e-10, max_dmdt=19.2 ode_step=9.71e-12
step=263, time=5.28e-10, max_dmdt=19 ode_step=9.71e-12
step=264, time=5.38e-10, max_dmdt=18.8 ode_step=9.71e-12
step=265, time=5.48e-10, max_dmdt=18.7 ode_step=9.71e-12
step=266, time=5.57e-10, max_dmdt=18.5 ode_step=9.71e-12
step=267, time=5.67e-10, max_dmdt=18.3 ode_step=9.71e-12
step=268, time=5.77e-10, max_dmdt=18.1 ode_step=9.71e-12
step=269, time=5.87e-10, max_dmdt=18 ode_step=9.71e-12
step=270, time=5.96e-10, max_dmdt=17.8 ode_step=9.71e-12
step=271, time=6.06e-10, max_dmdt=17.6 ode_step=9.71e-12
step=272, time=6.16e-10, max_dmdt=17.4 ode_step=9.71e-12
step=273, time=6.25e-10, max_dmdt=17.2 ode_step=9.71e-12
step=274, time=6.35e-10, max_dmdt=17.1 ode_step=9.71e-12
step=275, time=6.45e-10, max_dmdt=16.9 ode_step=9.71e-12
step=276, time=6.54e-10, max_dmdt=16.7 ode_step=9.71e-12
step=277, time=6.64e-10, max_dmdt=16.5 ode_step=9.71e-12
step=278, time=6.74e-10, max_dmdt=16.3 ode_step=9.71e-12
step=279, time=6.84e-10, max_dmdt=16.1 ode_step=9.71e-12
step=280, time=6.93e-10, max_dmdt=15.9 ode_step=9.71e-12
step=281, time=7.03e-10, max_dmdt=15.7 ode_step=9.71e-12
step=282, time=7.13e-10, max_dmdt=15.5 ode_step=9.71e-12
step=283, time=7.22e-10, max_dmdt=15.3 ode_step=9.71e-12
step=284, time=7.32e-10, max_dmdt=15.1 ode_step=9.71e-12
step=285, time=7.42e-10, max_dmdt=14.9 ode_step=9.71e-12
step=286, time=7.52e-10, max_dmdt=14.7 ode_step=9.71e-12
step=287, time=7.61e-10, max_dmdt=14.5 ode_step=9.71e-12
step=288, time=7.71e-10, max_dmdt=14.3 ode_step=9.71e-12
step=289, time=7.81e-10, max_dmdt=14.2 ode_step=9.71e-12
step=290, time=7.9e-10, max_dmdt=14 ode_step=9.71e-12
step=291, time=8.06e-10, max_dmdt=13.7 ode_step=1.53e-11
step=292, time=8.21e-10, max_dmdt=13.4 ode_step=1.53e-11
step=293, time=8.36e-10, max_dmdt=13.1 ode_step=1.53e-11
step=294, time=8.52e-10, max_dmdt=12.8 ode_step=1.53e-11
step=295, time=8.67e-10, max_dmdt=12.5 ode_step=1.53e-11
step=296, time=8.82e-10, max_dmdt=12.2 ode_step=1.53e-11
step=297, time=8.97e-10, max_dmdt=11.9 ode_step=1.53e-11
step=298, time=9.13e-10, max_dmdt=11.6 ode_step=1.53e-11
step=299, time=9.28e-10, max_dmdt=11.3 ode_step=1.53e-11
step=300, time=9.43e-10, max_dmdt=11.1 ode_step=1.53e-11
step=301, time=9.59e-10, max_dmdt=10.8 ode_step=1.53e-11
step=302, time=9.74e-10, max_dmdt=10.5 ode_step=1.53e-11
step=303, time=9.89e-10, max_dmdt=10.2 ode_step=1.53e-11
step=304, time=1e-09, max_dmdt=9.99 ode_step=1.53e-11
step=305, time=1.02e-09, max_dmdt=9.73 ode_step=1.53e-11
step=306, time=1.04e-09, max_dmdt=9.48 ode_step=1.53e-11
step=307, time=1.05e-09, max_dmdt=9.24 ode_step=1.53e-11
step=308, time=1.07e-09, max_dmdt=9 ode_step=1.53e-11
step=309, time=1.08e-09, max_dmdt=8.76 ode_step=1.53e-11
step=310, time=1.1e-09, max_dmdt=8.54 ode_step=1.53e-11
step=311, time=1.11e-09, max_dmdt=8.32 ode_step=1.53e-11
step=312, time=1.13e-09, max_dmdt=8.1 ode_step=1.53e-11
step=313, time=1.14e-09, max_dmdt=7.89 ode_step=1.53e-11
step=314, time=1.16e-09, max_dmdt=7.68 ode_step=1.53e-11
step=315, time=1.17e-09, max_dmdt=7.48 ode_step=1.53e-11
step=316, time=1.19e-09, max_dmdt=7.28 ode_step=1.53e-11
step=317, time=1.2e-09, max_dmdt=7.09 ode_step=1.53e-11
step=318, time=1.22e-09, max_dmdt=6.91 ode_step=1.53e-11
step=319, time=1.23e-09, max_dmdt=6.72 ode_step=1.53e-11
step=320, time=1.25e-09, max_dmdt=6.54 ode_step=1.53e-11
step=321, time=1.26e-09, max_dmdt=6.37 ode_step=1.53e-11
step=322, time=1.28e-09, max_dmdt=6.2 ode_step=1.53e-11
step=323, time=1.3e-09, max_dmdt=6.04 ode_step=1.53e-11
step=324, time=1.31e-09, max_dmdt=5.88 ode_step=1.53e-11
step=325, time=1.33e-09, max_dmdt=5.72 ode_step=1.53e-11
step=326, time=1.34e-09, max_dmdt=5.57 ode_step=1.53e-11
step=327, time=1.36e-09, max_dmdt=5.42 ode_step=1.53e-11
step=328, time=1.37e-09, max_dmdt=5.28 ode_step=1.53e-11
step=329, time=1.39e-09, max_dmdt=5.14 ode_step=1.53e-11
step=330, time=1.4e-09, max_dmdt=5 ode_step=1.53e-11
step=331, time=1.43e-09, max_dmdt=4.84 ode_step=2.31e-11
step=332, time=1.45e-09, max_dmdt=4.64 ode_step=2.31e-11
step=333, time=1.47e-09, max_dmdt=4.46 ode_step=2.31e-11
step=334, time=1.49e-09, max_dmdt=4.28 ode_step=2.31e-11
step=335, time=1.52e-09, max_dmdt=4.11 ode_step=2.31e-11
step=336, time=1.54e-09, max_dmdt=3.95 ode_step=2.31e-11
step=337, time=1.56e-09, max_dmdt=3.79 ode_step=2.31e-11
step=338, time=1.59e-09, max_dmdt=3.65 ode_step=2.31e-11
step=339, time=1.61e-09, max_dmdt=3.5 ode_step=2.31e-11
step=340, time=1.63e-09, max_dmdt=3.37 ode_step=2.31e-11
step=341, time=1.66e-09, max_dmdt=3.24 ode_step=2.31e-11
step=342, time=1.68e-09, max_dmdt=3.11 ode_step=2.31e-11
step=343, time=1.7e-09, max_dmdt=2.99 ode_step=2.31e-11
step=344, time=1.73e-09, max_dmdt=2.87 ode_step=2.31e-11
step=345, time=1.75e-09, max_dmdt=2.76 ode_step=2.31e-11
step=346, time=1.77e-09, max_dmdt=2.66 ode_step=2.31e-11
step=347, time=1.8e-09, max_dmdt=2.55 ode_step=2.31e-11
step=348, time=1.82e-09, max_dmdt=2.46 ode_step=2.31e-11
step=349, time=1.84e-09, max_dmdt=2.36 ode_step=2.31e-11
step=350, time=1.86e-09, max_dmdt=2.27 ode_step=2.31e-11
step=351, time=1.89e-09, max_dmdt=2.19 ode_step=2.31e-11
step=352, time=1.91e-09, max_dmdt=2.1 ode_step=2.31e-11
step=353, time=1.93e-09, max_dmdt=2.02 ode_step=2.31e-11
step=354, time=1.96e-09, max_dmdt=1.95 ode_step=2.31e-11
step=355, time=1.98e-09, max_dmdt=1.87 ode_step=2.31e-11
step=356, time=2e-09, max_dmdt=1.8 ode_step=2.31e-11
step=357, time=2.03e-09, max_dmdt=1.74 ode_step=2.31e-11
step=358, time=2.05e-09, max_dmdt=1.67 ode_step=2.31e-11
step=359, time=2.07e-09, max_dmdt=1.61 ode_step=2.31e-11
step=360, time=2.1e-09, max_dmdt=1.55 ode_step=2.31e-11
step=361, time=2.12e-09, max_dmdt=1.49 ode_step=2.31e-11
step=362, time=2.14e-09, max_dmdt=1.44 ode_step=2.31e-11
step=363, time=2.16e-09, max_dmdt=1.38 ode_step=2.31e-11
step=364, time=2.19e-09, max_dmdt=1.33 ode_step=2.31e-11
step=365, time=2.21e-09, max_dmdt=1.28 ode_step=2.31e-11
step=366, time=2.23e-09, max_dmdt=1.23 ode_step=2.31e-11
step=367, time=2.26e-09, max_dmdt=1.19 ode_step=2.31e-11
step=368, time=2.28e-09, max_dmdt=1.15 ode_step=2.31e-11
step=369, time=2.3e-09, max_dmdt=1.1 ode_step=2.31e-11
step=370, time=2.33e-09, max_dmdt=1.06 ode_step=2.31e-11
step=371, time=2.35e-09, max_dmdt=1.02 ode_step=2.31e-11
step=372, time=2.37e-09, max_dmdt=0.988 ode_step=2.31e-11
step=373, time=2.4e-09, max_dmdt=0.952 ode_step=2.31e-11
step=374, time=2.43e-09, max_dmdt=0.909 ode_step=3.51e-11
step=375, time=2.47e-09, max_dmdt=0.859 ode_step=3.51e-11
step=376, time=2.5e-09, max_dmdt=0.812 ode_step=3.51e-11
step=377, time=2.54e-09, max_dmdt=0.768 ode_step=3.51e-11
step=378, time=2.57e-09, max_dmdt=0.727 ode_step=3.51e-11
step=379, time=2.61e-09, max_dmdt=0.688 ode_step=3.51e-11
step=380, time=2.64e-09, max_dmdt=0.651 ode_step=3.51e-11
step=381, time=2.68e-09, max_dmdt=0.616 ode_step=3.51e-11
step=382, time=2.71e-09, max_dmdt=0.583 ode_step=3.51e-11
step=383, time=2.75e-09, max_dmdt=0.552 ode_step=3.51e-11
step=384, time=2.78e-09, max_dmdt=0.522 ode_step=3.51e-11
step=385, time=2.82e-09, max_dmdt=0.494 ode_step=3.51e-11
step=386, time=2.85e-09, max_dmdt=0.468 ode_step=3.51e-11
step=387, time=2.89e-09, max_dmdt=0.443 ode_step=3.51e-11
step=388, time=2.92e-09, max_dmdt=0.42 ode_step=3.51e-11
step=389, time=2.96e-09, max_dmdt=0.397 ode_step=3.51e-11
step=390, time=2.99e-09, max_dmdt=0.376 ode_step=3.51e-11
step=391, time=3.03e-09, max_dmdt=0.357 ode_step=3.51e-11
step=392, time=3.06e-09, max_dmdt=0.338 ode_step=3.51e-11
step=393, time=3.1e-09, max_dmdt=0.32 ode_step=3.51e-11
step=394, time=3.13e-09, max_dmdt=0.303 ode_step=3.51e-11
step=395, time=3.17e-09, max_dmdt=0.287 ode_step=3.51e-11
step=396, time=3.2e-09, max_dmdt=0.272 ode_step=3.51e-11
step=397, time=3.24e-09, max_dmdt=0.258 ode_step=3.51e-11
step=398, time=3.27e-09, max_dmdt=0.245 ode_step=3.51e-11
step=399, time=3.31e-09, max_dmdt=0.232 ode_step=3.51e-11
step=400, time=3.34e-09, max_dmdt=0.22 ode_step=3.51e-11
step=401, time=3.38e-09, max_dmdt=0.208 ode_step=3.51e-11
step=402, time=3.42e-09, max_dmdt=0.197 ode_step=3.51e-11
step=403, time=3.45e-09, max_dmdt=0.187 ode_step=3.51e-11
step=404, time=3.49e-09, max_dmdt=0.177 ode_step=3.51e-11
step=405, time=3.52e-09, max_dmdt=0.168 ode_step=3.51e-11
step=406, time=3.56e-09, max_dmdt=0.159 ode_step=3.51e-11
step=407, time=3.59e-09, max_dmdt=0.151 ode_step=3.51e-11
step=408, time=3.63e-09, max_dmdt=0.143 ode_step=3.51e-11
step=409, time=3.66e-09, max_dmdt=0.136 ode_step=3.51e-11
step=410, time=3.7e-09, max_dmdt=0.129 ode_step=3.51e-11
step=411, time=3.76e-09, max_dmdt=0.12 ode_step=5.91e-11
step=412, time=3.81e-09, max_dmdt=0.11 ode_step=5.91e-11
step=413, time=3.87e-09, max_dmdt=0.101 ode_step=5.91e-11
step=414, time=3.93e-09, max_dmdt=0.092 ode_step=5.91e-11
step=415, time=3.99e-09, max_dmdt=0.0841 ode_step=5.91e-11
step=416, time=4.05e-09, max_dmdt=0.077 ode_step=5.91e-11
step=417, time=4.11e-09, max_dmdt=0.0705 ode_step=5.91e-11
step=418, time=4.17e-09, max_dmdt=0.0645 ode_step=5.91e-11
step=419, time=4.23e-09, max_dmdt=0.059 ode_step=5.91e-11
step=420, time=4.29e-09, max_dmdt=0.054 ode_step=5.91e-11
step=421, time=4.35e-09, max_dmdt=0.0494 ode_step=5.91e-11
step=422, time=4.41e-09, max_dmdt=0.0453 ode_step=5.91e-11
step=423, time=4.47e-09, max_dmdt=0.0414 ode_step=5.91e-11
step=424, time=4.52e-09, max_dmdt=0.0379 ode_step=5.91e-11
step=425, time=4.58e-09, max_dmdt=0.0347 ode_step=5.91e-11
step=426, time=4.64e-09, max_dmdt=0.0318 ode_step=5.91e-11
step=427, time=4.7e-09, max_dmdt=0.0291 ode_step=5.91e-11
step=428, time=4.76e-09, max_dmdt=0.0267 ode_step=5.91e-11
step=429, time=4.82e-09, max_dmdt=0.0244 ode_step=5.91e-11
step=430, time=4.88e-09, max_dmdt=0.0224 ode_step=5.91e-11
step=431, time=4.94e-09, max_dmdt=0.0205 ode_step=5.91e-11
step=432, time=5e-09, max_dmdt=0.0187 ode_step=5.91e-11
step=433, time=5.09e-09, max_dmdt=0.0168 ode_step=8.9e-11
step=434, time=5.18e-09, max_dmdt=0.0147 ode_step=8.9e-11
step=435, time=5.26e-09, max_dmdt=0.0129 ode_step=8.9e-11
step=436, time=5.35e-09, max_dmdt=0.0113 ode_step=8.9e-11
step=437, time=5.44e-09, max_dmdt=0.0099 ode_step=8.9e-11

We not plot the magnetisation configuration,

[6]:
# PYTEST_VALIDATE_IGNORE_OUTPUT
m = sim.spin
m.shape = (-1,3)
mx = m[:,0]
my = m[:,1]
mx.shape = (40, 160)
my.shape = (40, 160)
fig = plt.figure(figsize=(15,5))
plt.axes().set_aspect('equal')
plt.quiver(mx[1::4,1::4], my[::4,::4], my[::4,::4], pivot='mid', alpha=0.9, scale=45, cmap=plt.get_cmap('jet'), edgecolors='None' )
plt.xlim([-0.5,39.5])
plt.xticks([])
plt.yticks([])
plt.show()
print(np.average(m[:,:], axis=0))
_images/user_guide_ipynb_standard_problem_4_15_0.png
[  9.66821767e-01   1.25543432e-01   3.11232500e-18]

With the obtained relaxed magnetisation, the magnetisation evolution can be simulated for the two different external magnetic fields using the following function:

[7]:
def field_simulation(H, name):
    print(name)
    sim = Sim(mesh, name)
    sim.driver.alpha = alpha
    sim.driver.gamma = gamma
    sim.Ms = Ms
    sim.add(UniformExchange(A=A))
    sim.add(Demag())
    sim.add(Zeeman(H))
    sim.set_m(np.load('m0.npy'))  # load the equilibrium magnetisation from the previous step

    timesteps = np.linspace(0, 0.2e-9, 21)
    for i, t in enumerate(timesteps):
        sim.driver.run_until(t)
        if i % 10 == 0:
            print("\tsimulated {} s".format(t))

Using the created field_simulation function, we obtain the average magnetisation components time evolutions. Note that we only run the simulation for a short time, a full version of this standard problem 4 can be found in folder examples/micromagnetic/std4.

[8]:
# PYTEST_VALIDATE_IGNORE_OUTPUT
mu0 = 4 * np.pi * 1e-7  # magnetic constant (H/m)
mT = 1e-3 / mu0  # millitesla

field_simulation([-24.6 * mT,  4.3 * mT, 0], "field_1")
#field_simulation([-35.5 * mT, -6.3 * mT, 0], "field_2")
field_1
        simulated 0.0 s
        simulated 1e-10 s
        simulated 2e-10 s

We could have saved the magnetisation dynamics in python objects on the fly. Instead, we chose to make use of fidimag’s automatic saving capabilities and will now read our simulation results back in.

[9]:
# PYTEST_VALIDATE_IGNORE_OUTPUT
import matplotlib.pyplot as plt
%matplotlib inline
from fidimag.common.fileio import DataReader

def do_plot(data_name):
    dynamics = DataReader(data_name)
    # we could load the data with np.loadtxt, but using the DataReader gives
    # us the possibility to use the column headers to access our data
    fig = plt.figure(figsize=(8, 6))
    axes = fig.add_subplot(111)
    axes.plot(dynamics["time"] * 1e9, dynamics["m_x"], "b-", label="m_x")
    axes.plot(dynamics["time"] * 1e9, dynamics["m_y"], "r--", label="m_y")
    axes.plot(dynamics["time"] * 1e9, dynamics["m_z"], "g--", label="m_z")
    axes.set_xlabel("time (ns)")
    axes.set_xlim((0, 0.25))
    axes.set_ylabel("unit magnetisation (1)")
    axes.set_ylim((-1.05, 1))
    axes.legend()
    plt.show()

do_plot('field_1.txt')
_images/user_guide_ipynb_standard_problem_4_21_0.png
References

[1] muMAG Micromagnetics Website. URL: http://www.ctcms.nist.gov/~rdm/mumag.org.html (Date of access: 26/02/2016)

Steepest Descent minimiser

Notebook showing how to use the implementation of an optimised version of the Steepest Descent (SD) algorithm in Fidimag, for an atomistic system.

This SD algorithm is based on Exl et al. Journal of Applied Physics 115, 17D118 (2014) https://aip.scitation.org/doi/10.1063/1.4862839

The following links are also relevant:

The SD driver inherits from the minimiser base class in fidimag/common/ and can be specified in the driver option of the Simulation class

[1]:
import matplotlib.pyplot as plt
import fidimag
import fidimag.common.constant as C
import numpy as np
%matplotlib inline
[2]:
# import imp
# imp.reload(fidimag)

1D example

We start defining parameters for an atomistic simulation

[3]:
# System parameters
L = 100

# Some atomistic parameters
J = 5.88 * C.meV
D = 1.56 * C.meV
Ku = 0.41 * C.meV
mus = 3 * C.mu_B

# Lattice constants (in nm)
a = 0.2715
az = 0.408

# Magnetic field in Tesla
B = 2

# Free electron gyrom ratio
gamma = 1.76e11

Define the mesh of the system

[4]:
nx, ny, nz = 100, 1, 1
dx, dy, dz = a, a, az

mesh = fidimag.common.CuboidMesh(nx=nx, ny=ny, nz=nz, dx=dx, dy=dy, dz=dz,
                                periodicity=(False, False, False),
                                unit_length=1e-9)

Steepest Descent

Here we set the minimiser by specifying it in the driver argument in the Simulation class:

[5]:
sim = fidimag.atomistic.Sim(mesh, name='one_dim_SD', driver='steepest_descent')

# Define the magnetisation
sim.set_mu_s(mus)

# Add the magnetic interactions
sim.add(fidimag.atomistic.Exchange(J))
sim.add(fidimag.atomistic.Anisotropy(Ku, axis=(0, 0, 1)))
sim.add(fidimag.atomistic.DMI(D, dmi_type='interfacial'))
sim.add(fidimag.atomistic.Zeeman((0, 0, B)))

xs = mesh.coordinates[:, 0]
centre_x = (xs.max() + xs.min()) * 0.5 + xs.min()

def m_initial(r):
    x, y, z = r[0], r[1], r[2]
    if np.abs(x - centre_x) < 2:
        return (0, 0.1, -.9)
    else:
        return (0, 0.1, .9)

# sim.set_m((0.1, 0, 0.9))
sim.set_m(m_initial)

The initial configuration showing \(m_{z}\), we want a domain wall after relaxation:

[6]:
plt.plot(sim.mesh.coordinates[:, 0], sim.spin.reshape(-1, 3)[:, 2], 'o-')
plt.show()
_images/user_guide_ipynb_steepest_descent_atomistic_12_0.png

Here we relax the system with the steepest descent. In this case, the relevant parameter to stop the minimisation is the dm difference of the magnetisation with the previous step:

[7]:
sim.driver.tmax = 1e-1
sim.driver.minimise(max_steps=20000, stopping_dm=1e-10, initial_t_step=1e-2)
#0    max_tau=0.01     max_dm=0.191
#711  max_tau=0.01     max_dm=9.75e-11

The performance of the algorithm can be tuned by modifying the tmax and tmin tolerances in the driver. By defalt, tmax is around 0.01 (MuMax3 uses this magnitude) and tmin must be significantly small. These values seem to work reasonably well for most atomistic simulations:

[8]:
# sim.driver.tmax =
# sim.driver.tmin =

We finally obtain the \(360^\circ\) domain wall:

[9]:
plt.plot(sim.mesh.coordinates[:, 0], sim.spin.reshape(-1, 3)[:, 0], 'o-')
plt.plot(sim.mesh.coordinates[:, 0], sim.spin.reshape(-1, 3)[:, 2], 'o-')
plt.show()
_images/user_guide_ipynb_steepest_descent_atomistic_18_0.png
LLG

We can compare the previous result with the LLG driver, which is widely tested:

[10]:
sim = fidimag.atomistic.Sim(mesh, name='one_dim', driver='llg')

# Define the magnetisation
sim.set_mu_s(mus)

# Add the magnetic interactions
sim.add(fidimag.atomistic.Exchange(J))
sim.add(fidimag.atomistic.Anisotropy(Ku, axis=(0, 0, 1)))
sim.add(fidimag.atomistic.DMI(D, dmi_type='interfacial'))
sim.add(fidimag.atomistic.Zeeman((0, 0, B)))

xs = mesh.coordinates[:, 0]
centre_x = (xs.max() + xs.min()) * 0.5 + xs.min()

def m_initial(r):
    x, y, z = r[0], r[1], r[2]
    if np.abs(x - centre_x) < 2:
        return (0, 0.1, -.9)
    else:
        return (0, 0.1, .9)

# sim.set_m((0.1, 0, 0.9))
sim.set_m(m_initial)
[11]:
plt.plot(sim.mesh.coordinates[:, 0], sim.spin.reshape(-1, 3)[:, 2], 'o-')
plt.show()
_images/user_guide_ipynb_steepest_descent_atomistic_22_0.png
[12]:
sim.driver.do_precession = False
sim.relax()
#1    t=1e-11    dt=1e-11 max_dmdt=1.77
#2    t=3.53e-10 dt=3.43e-10 max_dmdt=1.77
#3    t=3.79e-09 dt=3.43e-09 max_dmdt=1.77
#4    t=3.81e-08 dt=3.43e-08 max_dmdt=1.77
#5    t=3.81e-07 dt=3.43e-07 max_dmdt=1.77
#6    t=3.81e-06 dt=3.43e-06 max_dmdt=1.77
#7    t=2.51e-05 dt=2.13e-05 max_dmdt=1.77
#8    t=8.19e-05 dt=5.67e-05 max_dmdt=1.77
#9    t=0.000197 dt=0.000115 max_dmdt=1.77
#10   t=0.000417 dt=0.00022 max_dmdt=1.77
#11   t=0.000637 dt=0.00022 max_dmdt=1.77
#12   t=0.000856 dt=0.00022 max_dmdt=1.77
#13   t=0.00108  dt=0.00022 max_dmdt=1.77
#14   t=0.00161  dt=0.000532 max_dmdt=1.78
#15   t=0.00214  dt=0.000532 max_dmdt=1.78
#16   t=0.00267  dt=0.000532 max_dmdt=1.78
#17   t=0.0032   dt=0.000532 max_dmdt=1.78
#18   t=0.00374  dt=0.000532 max_dmdt=1.79
#19   t=0.00483  dt=0.00109 max_dmdt=1.79
#20   t=0.00591  dt=0.00109 max_dmdt=1.8
#21   t=0.007    dt=0.00109 max_dmdt=1.8
#22   t=0.00809  dt=0.00109 max_dmdt=1.81
#23   t=0.00918  dt=0.00109 max_dmdt=1.82
#24   t=0.0109   dt=0.0017 max_dmdt=1.82
#25   t=0.0126   dt=0.0017 max_dmdt=1.83
#26   t=0.0143   dt=0.0017 max_dmdt=1.84
#27   t=0.016    dt=0.0017 max_dmdt=1.85
#28   t=0.0177   dt=0.0017 max_dmdt=1.86
#29   t=0.0203   dt=0.00262 max_dmdt=1.87
#30   t=0.0229   dt=0.00262 max_dmdt=1.88
#31   t=0.027    dt=0.00405 max_dmdt=1.9
#32   t=0.031    dt=0.00405 max_dmdt=1.92
#33   t=0.0351   dt=0.00405 max_dmdt=1.95
#34   t=0.0391   dt=0.00405 max_dmdt=1.97
#35   t=0.0432   dt=0.00405 max_dmdt=1.99
#36   t=0.0472   dt=0.00405 max_dmdt=2.01
#37   t=0.0513   dt=0.00405 max_dmdt=2.03
#38   t=0.0553   dt=0.00405 max_dmdt=2.05
#39   t=0.0594   dt=0.00405 max_dmdt=2.07
#40   t=0.0658   dt=0.0064 max_dmdt=2.1
#41   t=0.0722   dt=0.0064 max_dmdt=2.13
#42   t=0.0786   dt=0.0064 max_dmdt=2.16
#43   t=0.085    dt=0.0064 max_dmdt=2.19
#44   t=0.0913   dt=0.0064 max_dmdt=2.22
#45   t=0.0977   dt=0.0064 max_dmdt=2.24
#46   t=0.104    dt=0.0064 max_dmdt=2.27
#47   t=0.111    dt=0.0064 max_dmdt=2.29
#48   t=0.117    dt=0.0064 max_dmdt=2.31
#49   t=0.123    dt=0.0064 max_dmdt=2.32
#50   t=0.13     dt=0.0064 max_dmdt=2.34
#51   t=0.136    dt=0.0064 max_dmdt=2.35
#52   t=0.143    dt=0.0064 max_dmdt=2.36
#53   t=0.149    dt=0.0064 max_dmdt=2.37
#54   t=0.155    dt=0.0064 max_dmdt=2.37
#55   t=0.162    dt=0.0064 max_dmdt=2.37
#56   t=0.168    dt=0.0064 max_dmdt=2.37
#57   t=0.174    dt=0.0064 max_dmdt=2.36
#58   t=0.181    dt=0.0064 max_dmdt=2.35
#59   t=0.187    dt=0.0064 max_dmdt=2.34
#60   t=0.194    dt=0.0064 max_dmdt=2.32
#61   t=0.2      dt=0.0064 max_dmdt=2.3
#62   t=0.206    dt=0.0064 max_dmdt=2.28
#63   t=0.213    dt=0.0064 max_dmdt=2.25
#64   t=0.219    dt=0.0064 max_dmdt=2.22
#65   t=0.226    dt=0.0064 max_dmdt=2.19
#66   t=0.232    dt=0.0064 max_dmdt=2.16
#67   t=0.238    dt=0.0064 max_dmdt=2.12
#68   t=0.245    dt=0.0064 max_dmdt=2.08
#69   t=0.251    dt=0.0064 max_dmdt=2.04
#70   t=0.258    dt=0.0064 max_dmdt=2
#71   t=0.264    dt=0.0064 max_dmdt=1.95
#72   t=0.27     dt=0.0064 max_dmdt=1.91
#73   t=0.277    dt=0.0064 max_dmdt=1.86
#74   t=0.283    dt=0.0064 max_dmdt=1.81
#75   t=0.29     dt=0.0064 max_dmdt=1.77
#76   t=0.296    dt=0.0064 max_dmdt=1.72
#77   t=0.302    dt=0.0064 max_dmdt=1.67
#78   t=0.309    dt=0.0064 max_dmdt=1.62
#79   t=0.315    dt=0.0064 max_dmdt=1.6
#80   t=0.322    dt=0.0064 max_dmdt=1.59
#81   t=0.328    dt=0.0064 max_dmdt=1.58
#82   t=0.334    dt=0.0064 max_dmdt=1.57
#83   t=0.341    dt=0.0064 max_dmdt=1.55
#84   t=0.347    dt=0.0064 max_dmdt=1.53
#85   t=0.354    dt=0.0064 max_dmdt=1.52
#86   t=0.36     dt=0.0064 max_dmdt=1.5
#87   t=0.366    dt=0.0064 max_dmdt=1.47
#88   t=0.376    dt=0.00964 max_dmdt=1.45
#89   t=0.386    dt=0.00964 max_dmdt=1.41
#90   t=0.395    dt=0.00964 max_dmdt=1.37
#91   t=0.405    dt=0.00964 max_dmdt=1.34
#92   t=0.415    dt=0.00964 max_dmdt=1.3
#93   t=0.424    dt=0.00964 max_dmdt=1.26
#94   t=0.434    dt=0.00964 max_dmdt=1.22
#95   t=0.443    dt=0.00964 max_dmdt=1.18
#96   t=0.453    dt=0.00964 max_dmdt=1.14
#97   t=0.463    dt=0.00964 max_dmdt=1.11
#98   t=0.472    dt=0.00964 max_dmdt=1.07
#99   t=0.482    dt=0.00964 max_dmdt=1.03
#100  t=0.492    dt=0.00964 max_dmdt=0.997
#101  t=0.501    dt=0.00964 max_dmdt=0.963
#102  t=0.511    dt=0.00964 max_dmdt=0.93
#103  t=0.521    dt=0.00964 max_dmdt=0.907
#104  t=0.53     dt=0.00964 max_dmdt=0.89
#105  t=0.54     dt=0.00964 max_dmdt=0.874
#106  t=0.549    dt=0.00964 max_dmdt=0.857
#107  t=0.559    dt=0.00964 max_dmdt=0.84
#108  t=0.569    dt=0.00964 max_dmdt=0.823
#109  t=0.578    dt=0.00964 max_dmdt=0.807
#110  t=0.588    dt=0.00964 max_dmdt=0.791
#111  t=0.598    dt=0.00964 max_dmdt=0.775
#112  t=0.607    dt=0.00964 max_dmdt=0.759
#113  t=0.617    dt=0.00964 max_dmdt=0.744
#114  t=0.627    dt=0.00964 max_dmdt=0.728
#115  t=0.636    dt=0.00964 max_dmdt=0.713
#116  t=0.651    dt=0.0145 max_dmdt=0.695
#117  t=0.665    dt=0.0145 max_dmdt=0.674
#118  t=0.68     dt=0.0145 max_dmdt=0.653
#119  t=0.694    dt=0.0145 max_dmdt=0.633
#120  t=0.708    dt=0.0145 max_dmdt=0.614
#121  t=0.723    dt=0.0145 max_dmdt=0.595
#122  t=0.737    dt=0.0145 max_dmdt=0.577
#123  t=0.752    dt=0.0145 max_dmdt=0.56
#124  t=0.766    dt=0.0145 max_dmdt=0.543
#125  t=0.781    dt=0.0145 max_dmdt=0.527
#126  t=0.795    dt=0.0145 max_dmdt=0.512
#127  t=0.81     dt=0.0145 max_dmdt=0.502
#128  t=0.824    dt=0.0145 max_dmdt=0.495
#129  t=0.839    dt=0.0145 max_dmdt=0.489
#130  t=0.853    dt=0.0145 max_dmdt=0.482
#131  t=0.867    dt=0.0145 max_dmdt=0.475
#132  t=0.882    dt=0.0145 max_dmdt=0.469
#133  t=0.896    dt=0.0145 max_dmdt=0.462
#134  t=0.911    dt=0.0145 max_dmdt=0.456
#135  t=0.925    dt=0.0145 max_dmdt=0.449
#136  t=0.94     dt=0.0145 max_dmdt=0.443
#137  t=0.954    dt=0.0145 max_dmdt=0.436
#138  t=0.969    dt=0.0145 max_dmdt=0.43
#139  t=0.983    dt=0.0145 max_dmdt=0.424
#140  t=1.01     dt=0.0219 max_dmdt=0.416
#141  t=1.03     dt=0.0219 max_dmdt=0.407
#142  t=1.05     dt=0.0219 max_dmdt=0.398
#143  t=1.07     dt=0.0219 max_dmdt=0.389
#144  t=1.09     dt=0.0219 max_dmdt=0.381
#145  t=1.11     dt=0.0219 max_dmdt=0.373
#146  t=1.14     dt=0.0219 max_dmdt=0.365
#147  t=1.16     dt=0.0219 max_dmdt=0.357
#148  t=1.18     dt=0.0219 max_dmdt=0.35
#149  t=1.2      dt=0.0219 max_dmdt=0.342
#150  t=1.22     dt=0.0219 max_dmdt=0.335
#151  t=1.25     dt=0.0219 max_dmdt=0.329
#152  t=1.27     dt=0.0219 max_dmdt=0.322
#153  t=1.29     dt=0.0219 max_dmdt=0.315
#154  t=1.31     dt=0.0219 max_dmdt=0.309
#155  t=1.33     dt=0.0219 max_dmdt=0.303
#156  t=1.36     dt=0.0219 max_dmdt=0.297
#157  t=1.38     dt=0.0219 max_dmdt=0.292
#158  t=1.4      dt=0.0219 max_dmdt=0.286
#159  t=1.42     dt=0.0219 max_dmdt=0.281
#160  t=1.44     dt=0.0219 max_dmdt=0.276
#161  t=1.46     dt=0.0219 max_dmdt=0.271
#162  t=1.49     dt=0.0219 max_dmdt=0.266
#163  t=1.51     dt=0.0219 max_dmdt=0.261
#164  t=1.54     dt=0.0331 max_dmdt=0.256
#165  t=1.57     dt=0.0331 max_dmdt=0.249
#166  t=1.61     dt=0.0331 max_dmdt=0.245
#167  t=1.64     dt=0.0331 max_dmdt=0.242
#168  t=1.67     dt=0.0331 max_dmdt=0.239
#169  t=1.71     dt=0.0331 max_dmdt=0.237
#170  t=1.74     dt=0.0331 max_dmdt=0.234
#171  t=1.77     dt=0.0331 max_dmdt=0.232
#172  t=1.81     dt=0.0331 max_dmdt=0.23
#173  t=1.84     dt=0.0331 max_dmdt=0.227
#174  t=1.87     dt=0.0331 max_dmdt=0.226
#175  t=1.91     dt=0.0331 max_dmdt=0.224
#176  t=1.94     dt=0.0331 max_dmdt=0.222
#177  t=1.97     dt=0.0331 max_dmdt=0.22
#178  t=2.01     dt=0.0331 max_dmdt=0.219
#179  t=2.04     dt=0.0331 max_dmdt=0.217
#180  t=2.07     dt=0.0331 max_dmdt=0.216
#181  t=2.1      dt=0.0331 max_dmdt=0.214
#182  t=2.14     dt=0.0331 max_dmdt=0.213
#183  t=2.17     dt=0.0331 max_dmdt=0.212
#184  t=2.2      dt=0.0331 max_dmdt=0.211
#185  t=2.25     dt=0.0502 max_dmdt=0.209
#186  t=2.3      dt=0.0502 max_dmdt=0.208
#187  t=2.35     dt=0.0502 max_dmdt=0.207
#188  t=2.4      dt=0.0502 max_dmdt=0.205
#189  t=2.45     dt=0.0502 max_dmdt=0.204
#190  t=2.5      dt=0.0502 max_dmdt=0.203
#191  t=2.56     dt=0.0502 max_dmdt=0.202
#192  t=2.61     dt=0.0502 max_dmdt=0.201
#193  t=2.66     dt=0.0502 max_dmdt=0.2
#194  t=2.71     dt=0.0502 max_dmdt=0.199
#195  t=2.76     dt=0.0502 max_dmdt=0.198
#196  t=2.81     dt=0.0502 max_dmdt=0.197
#197  t=2.86     dt=0.0502 max_dmdt=0.197
#198  t=2.91     dt=0.0502 max_dmdt=0.196
#199  t=2.96     dt=0.0502 max_dmdt=0.195
#200  t=3.01     dt=0.0502 max_dmdt=0.195
#201  t=3.06     dt=0.0502 max_dmdt=0.194
#202  t=3.11     dt=0.0502 max_dmdt=0.193
#203  t=3.16     dt=0.0502 max_dmdt=0.193
#204  t=3.21     dt=0.0502 max_dmdt=0.192
#205  t=3.26     dt=0.0502 max_dmdt=0.192
#206  t=3.31     dt=0.0502 max_dmdt=0.191
#207  t=3.36     dt=0.0502 max_dmdt=0.19
#208  t=3.41     dt=0.0502 max_dmdt=0.19
#209  t=3.46     dt=0.0502 max_dmdt=0.189
#210  t=3.51     dt=0.0502 max_dmdt=0.189
#211  t=3.56     dt=0.0502 max_dmdt=0.188
#212  t=3.63     dt=0.0763 max_dmdt=0.188
#213  t=3.71     dt=0.0763 max_dmdt=0.187
#214  t=3.79     dt=0.0763 max_dmdt=0.186
#215  t=3.86     dt=0.0763 max_dmdt=0.185
#216  t=3.94     dt=0.0763 max_dmdt=0.184
#217  t=4.02     dt=0.0763 max_dmdt=0.183
#218  t=4.09     dt=0.0763 max_dmdt=0.182
#219  t=4.17     dt=0.0763 max_dmdt=0.181
#220  t=4.24     dt=0.0763 max_dmdt=0.18
#221  t=4.32     dt=0.0763 max_dmdt=0.179
#222  t=4.4      dt=0.0763 max_dmdt=0.178
#223  t=4.47     dt=0.0763 max_dmdt=0.177
#224  t=4.55     dt=0.0763 max_dmdt=0.176
#225  t=4.63     dt=0.0763 max_dmdt=0.175
#226  t=4.7      dt=0.0763 max_dmdt=0.173
#227  t=4.78     dt=0.0763 max_dmdt=0.172
#228  t=4.86     dt=0.0763 max_dmdt=0.171
#229  t=4.93     dt=0.0763 max_dmdt=0.169
#230  t=5.01     dt=0.0763 max_dmdt=0.168
#231  t=5.08     dt=0.0763 max_dmdt=0.166
#232  t=5.16     dt=0.0763 max_dmdt=0.165
#233  t=5.24     dt=0.0763 max_dmdt=0.163
#234  t=5.31     dt=0.0763 max_dmdt=0.163
#235  t=5.39     dt=0.0763 max_dmdt=0.163
#236  t=5.47     dt=0.0763 max_dmdt=0.163
#237  t=5.54     dt=0.0763 max_dmdt=0.162
#238  t=5.66     dt=0.115 max_dmdt=0.162
#239  t=5.77     dt=0.115 max_dmdt=0.161
#240  t=5.89     dt=0.115 max_dmdt=0.16
#241  t=6        dt=0.115 max_dmdt=0.159
#242  t=6.12     dt=0.115 max_dmdt=0.158
#243  t=6.23     dt=0.115 max_dmdt=0.157
#244  t=6.35     dt=0.115 max_dmdt=0.156
#245  t=6.46     dt=0.115 max_dmdt=0.155
#246  t=6.58     dt=0.115 max_dmdt=0.153
#247  t=6.69     dt=0.115 max_dmdt=0.152
#248  t=6.81     dt=0.115 max_dmdt=0.15
#249  t=6.92     dt=0.115 max_dmdt=0.148
#250  t=7.04     dt=0.115 max_dmdt=0.146
#251  t=7.15     dt=0.115 max_dmdt=0.144
#252  t=7.27     dt=0.115 max_dmdt=0.142
#253  t=7.38     dt=0.115 max_dmdt=0.14
#254  t=7.5      dt=0.115 max_dmdt=0.138
#255  t=7.61     dt=0.115 max_dmdt=0.136
#256  t=7.73     dt=0.115 max_dmdt=0.133
#257  t=7.84     dt=0.115 max_dmdt=0.131
#258  t=7.96     dt=0.115 max_dmdt=0.129
#259  t=8.07     dt=0.115 max_dmdt=0.126
#260  t=8.19     dt=0.115 max_dmdt=0.124
#261  t=8.3      dt=0.115 max_dmdt=0.121
#262  t=8.42     dt=0.115 max_dmdt=0.12
#263  t=8.53     dt=0.115 max_dmdt=0.118
#264  t=8.65     dt=0.115 max_dmdt=0.117
#265  t=8.76     dt=0.115 max_dmdt=0.116
#266  t=8.88     dt=0.115 max_dmdt=0.114
#267  t=8.99     dt=0.115 max_dmdt=0.113
#268  t=9.11     dt=0.115 max_dmdt=0.111
#269  t=9.22     dt=0.115 max_dmdt=0.109
#270  t=9.34     dt=0.115 max_dmdt=0.108
#271  t=9.45     dt=0.115 max_dmdt=0.106
#272  t=9.57     dt=0.115 max_dmdt=0.104
#273  t=9.68     dt=0.115 max_dmdt=0.102
#274  t=9.8      dt=0.115 max_dmdt=0.101
#275  t=9.91     dt=0.115 max_dmdt=0.0988
#276  t=10       dt=0.115 max_dmdt=0.0969
#277  t=10.1     dt=0.115 max_dmdt=0.095
#278  t=10.3     dt=0.115 max_dmdt=0.0931
#279  t=10.4     dt=0.115 max_dmdt=0.0912
#280  t=10.5     dt=0.115 max_dmdt=0.0893
#281  t=10.6     dt=0.115 max_dmdt=0.0874
#282  t=10.7     dt=0.115 max_dmdt=0.0855
#283  t=10.9     dt=0.179 max_dmdt=0.083
#284  t=11.1     dt=0.179 max_dmdt=0.0801
#285  t=11.3     dt=0.179 max_dmdt=0.0771
#286  t=11.4     dt=0.179 max_dmdt=0.0742
#287  t=11.6     dt=0.179 max_dmdt=0.0714
#288  t=11.8     dt=0.179 max_dmdt=0.0685
#289  t=12       dt=0.179 max_dmdt=0.0658
#290  t=12.2     dt=0.179 max_dmdt=0.0631
#291  t=12.3     dt=0.179 max_dmdt=0.0605
#292  t=12.5     dt=0.179 max_dmdt=0.0579
#293  t=12.7     dt=0.179 max_dmdt=0.0554
#294  t=12.9     dt=0.179 max_dmdt=0.053
#295  t=13       dt=0.179 max_dmdt=0.0506
#296  t=13.2     dt=0.179 max_dmdt=0.0484
#297  t=13.4     dt=0.179 max_dmdt=0.0462
#298  t=13.6     dt=0.179 max_dmdt=0.0441
#299  t=13.8     dt=0.179 max_dmdt=0.042
#300  t=13.9     dt=0.179 max_dmdt=0.0401
#301  t=14.1     dt=0.179 max_dmdt=0.0382
#302  t=14.3     dt=0.179 max_dmdt=0.0364
#303  t=14.5     dt=0.179 max_dmdt=0.0347
#304  t=14.7     dt=0.179 max_dmdt=0.033
#305  t=14.8     dt=0.179 max_dmdt=0.0314
#306  t=15       dt=0.179 max_dmdt=0.0299
#307  t=15.2     dt=0.179 max_dmdt=0.0285
#308  t=15.4     dt=0.179 max_dmdt=0.0272
#309  t=15.6     dt=0.179 max_dmdt=0.026
#310  t=15.7     dt=0.179 max_dmdt=0.0248
#311  t=15.9     dt=0.179 max_dmdt=0.0237
#312  t=16.1     dt=0.179 max_dmdt=0.0226
#313  t=16.3     dt=0.179 max_dmdt=0.0215
#314  t=16.5     dt=0.179 max_dmdt=0.0205
#315  t=16.6     dt=0.179 max_dmdt=0.0195
#316  t=16.8     dt=0.179 max_dmdt=0.0186
#317  t=17       dt=0.179 max_dmdt=0.0177
#318  t=17.2     dt=0.179 max_dmdt=0.0168
#319  t=17.3     dt=0.179 max_dmdt=0.016
#320  t=17.5     dt=0.179 max_dmdt=0.0152
#321  t=17.7     dt=0.179 max_dmdt=0.0145
#322  t=18       dt=0.282 max_dmdt=0.0136
#323  t=18.3     dt=0.282 max_dmdt=0.0125
#324  t=18.6     dt=0.282 max_dmdt=0.0116
#325  t=18.8     dt=0.282 max_dmdt=0.0107
#326  t=19.1     dt=0.282 max_dmdt=0.00983
[13]:
plt.plot(sim.mesh.coordinates[:, 0], sim.spin.reshape(-1, 3)[:, 0], 'o-')
plt.plot(sim.mesh.coordinates[:, 0], sim.spin.reshape(-1, 3)[:, 2], 'o-')
plt.show()
_images/user_guide_ipynb_steepest_descent_atomistic_24_0.png

2D skyrmion

A more complex example is a 2D skyrmion in a disk. We will use the minimiser to find the equilibrium state:

[14]:
nx, ny, nz = 100, 100, 1
dx, dy, dz = a, a, az

mesh = fidimag.common.CuboidMesh(nx=nx, ny=ny, nz=nz, dx=dx, dy=dy, dz=dz,
                                periodicity=(False, False, False),
                                unit_length=1e-9)
xs = mesh.coordinates[:, 0]
ys = mesh.coordinates[:, 1]
centre_x = (xs.max() + xs.min()) * 0.5 + xs.min()
LLG

We start finding the solution with the LLG driver:

[15]:
sim = fidimag.atomistic.Sim(mesh, name='two_dim', driver='llg')

# Define the magnetisation
def material(r):
    x, y = r[0] - centre_x, r[1] - centre_x

    if x ** 2 + y ** 2 < (np.max(xs) - centre_x) ** 2:
        return mus
    else:
        return 0

sim.set_mu_s(material)
# sim.set_mu_s(mus)

# Add the magnetic interactions
sim.add(fidimag.atomistic.Exchange(J))
sim.add(fidimag.atomistic.Anisotropy(Ku, axis=(0, 0, 1)))
sim.add(fidimag.atomistic.DMI(D, dmi_type='interfacial'))
sim.add(fidimag.atomistic.Zeeman((0, 0, B)))

def m_initial(r):
    x, y = r[0] - centre_x, r[1] - centre_x
    if x ** 2 + y ** 2 < 1 ** 2:
        return (0, 0, -1)
    else:
        return (0, 0, 1)

sim.set_m(m_initial)
# sim.set_m((0, 0, 1))

The initial configuration with a dot at the centre of the sample:

[16]:
plt.figure(figsize=(5, 5))
plt.scatter(xs, ys, c=sim.spin.reshape(-1, 3)[:, 2], s=20, marker='s')
plt.show()
_images/user_guide_ipynb_steepest_descent_atomistic_32_0.png
[17]:
%%capture
sim.driver.do_precession = False
sim.driver.relax()

After relaxation we see a skyrmion and the spin tilting at the boundary, characteristic of the DMI

[18]:
plt.figure(figsize=(6, 6))
plt.scatter(xs, ys, c=sim.spin.reshape(-1, 3)[:, 2], vmin=-1, vmax=1)

plt.quiver(xs, ys, sim.spin.reshape(-1, 3)[:, 0], sim.spin.reshape(-1, 3)[:, 1])
plt.show()
_images/user_guide_ipynb_steepest_descent_atomistic_35_0.png
Steepest Descent

We can get the same result using the minimiser:

[19]:
sim = fidimag.atomistic.Sim(mesh, name='two_dim_SD', driver='steepest_descent')

# Define the magnetisation
def material(r):
    x, y = r[0] - centre_x, r[1] - centre_x

    if x ** 2 + y ** 2 < (np.max(xs) - centre_x) ** 2:
        return mus
    else:
        return 0

sim.set_mu_s(material)
# sim.set_mu_s(mus)

# Add the magnetic interactions
sim.add(fidimag.atomistic.Exchange(J))
sim.add(fidimag.atomistic.Anisotropy(Ku, axis=(0, 0, 1)))
sim.add(fidimag.atomistic.DMI(D, dmi_type='interfacial'))
sim.add(fidimag.atomistic.Zeeman((0, 0, B)))

def m_initial(r):
    x, y = r[0] - centre_x, r[1] - centre_x
    if x ** 2 + y ** 2 < 1:
        return (0, 0, -1)
    else:
        return (0, 0, 1)

sim.set_m(m_initial)
# sim.set_m((0, 0, 1))
[20]:
plt.figure(figsize=(2, 2))
plt.scatter(xs, ys, c=sim.spin.reshape(-1, 3)[:, 2])
plt.show()
_images/user_guide_ipynb_steepest_descent_atomistic_39_0.png
[21]:
sim.driver.tmax = 1e-1
sim.driver.minimise(max_steps=6000, stopping_dm=1e-5, initial_t_step=1e-4)
#0    max_tau=0.0001   max_dm=0.00254
#1000 max_tau=0.0001   max_dm=0.000413
#2000 max_tau=0.0001   max_dm=0.000109
#3000 max_tau=0.0001   max_dm=6.32e-05
#4000 max_tau=0.0001   max_dm=4.88e-05
#5000 max_tau=0.0001   max_dm=4.15e-05
Warning: minimise did not converge in 6000 steps - maxdm = 3.653240142795239e-05
[22]:
sim.driver.spin.shape
[22]:
(30000,)
[23]:
plt.figure(figsize=(6, 6))
plt.scatter(xs, ys, c=sim.spin.reshape(-1, 3)[:, 2], vmin=-1, vmax=1)

plt.quiver(xs, ys, sim.spin.reshape(-1, 3)[:, 0], sim.spin.reshape(-1, 3)[:, 1])
plt.show()
_images/user_guide_ipynb_steepest_descent_atomistic_42_0.png
[ ]:

Magnetism and Numerical Methods

Core equations

Fidimag can simulate systems using either a discrete spin formalism or a continuum approximation of the material, i.e. micromagnetism. Spins are described at a semi-classical level.

  • Atomistic

    We describe the material by a lattice of magnetic moments \(\vec{\mu}_i=\mu_{s}\vec{S}_{i}\), with \(\vec{S}\) as the spin direction (unit vector). The ordering of the atoms or molecules is given by the crystal structure of the magnetic solid. Currently, it is possible to specify a 2D/3D square lattice or a 2D hexagonal lattice. The magnetic moment is defined as \(\mu_{s}=g \mu_{B} S\), where g is the Landé g-factor, \(\mu_{B}\) is the Bohr magneton and \(S\) is the average spin (angular momentum) magnitude.

    Interactions between magnetic moments are specified using the Heisenberg formalism.

  • Micromagnetics

    In the continuum limit, we discretise the material as a mesh whose nodes are arranged in a cubic lattice and we use finite differences to evaluate the interactions. Instead of discrete spins, now we have a coordinate dependent magnetisation field whose magnitude is the magnetic moment per unit volume \(\vec{M}(\vec{r})=\mu_{s}\vec{m}/V\) (\(\vec{m}\) as a unit vector). Accordingly, every mesh node has assigned a magnetisation vector, which is the magnetisation field evaluated at that point. Because we are considering systems at zero temperature, it is more common to use the saturation magnetisation \(M_{s}\) to describe the magnetisation field magnitude, i.e. \(\vec{M}=M_{s}\vec{m}\), where \(M_{s}\) has units of A/m.

    The interactions under this approximation can be computed by taking the continuum limit of the interactions from the Heisenberg Hamiltonian.

Interactions

At the atomic level, the magnetic moment originates from the total angular momentum of electrons in the atoms of the magnetic material. In ferromagnets, most of the angular momentum comes from the spin, thus we normally just refer to this quantity. There are multiple interactions between electrons that we can describe using a semi-classical approximation, where the spin is treated as a pseudo vector per every lattice site of the material. In this approximation, magnetic interactions can be described using Heisenberg’s formalism for the exchange interaction. The total Hamiltonian for a magnetic system is the sum of all these magnetic interactions:

\[\mathcal{H} = \mathcal{H}_{\text{ex}} + \mathcal{H}_{\text{an}} + \mathcal{H}_{\text{d}} + \mathcal{H}_{\text{DMI}} + \mathcal{H}_{\text{Zeeman}}\]

where we have exchange, anisotropy, dipolar interactions, Dzyaloshinskii-Moriya interactions and Zeeman interaction.

Exchange interaction

The classical Heisenberg Hamiltonian with the nearest-neighbor exchange interaction reads

\[\mathcal{H}_{ex} = -J \sum_{<i,j>}\vec{S}_i \cdot \vec{S}_j\]

where the summation is performed only once for every pair of spins. The effective field is

\[\vec{H}_{i,ex} = \frac{J}{\mu_s} \sum_{<i,j>} \vec{S}_j\]

In the continuum limit the exchange energy can be written as

\[E_{ex} = \int_{V} A (\nabla \vec{m})^2 \mathrm{d}V\]

with \(V\) as the volume of the system and \(A\) the anisotropy constant in \(\text{J m}^{-1}\). Correspondingly, the effective field is

\[\vec{H} = \frac{2 A}{\mu_0 M_s} \nabla^2 \vec{m}\]

The effective field in the continuum approximation can be computed as

\[J_x = 2A \frac{\Delta y \Delta z}{\Delta x}\]

Note that we need the \(\mu_0\) factor to convert units from T to A/m.

Anisotropy

The Hamiltonian for uniaxial anisotropy with easy axis along the unitary \(\hat{u}\) direction is expressed as,

\[\mathcal{H}_{\text{an}} = - \mathcal{K}_{u} \sum_i \left(\vec{S}_{i}\cdot\hat{u}\right)^2\]

with \(\mathcal{K}_{u}\) as the anisotropy constant in eV. The corresponding field is

\[\vec{H}_{i,\text{an}} = \frac{2 \mathcal{K}_{u}}{\mu_s} \left(\vec{S}_{i}\cdot\hat{u}\right)\hat{u}\]

The Hamiltonian for the cubic anisotropy is given by

\[\mathcal{H}_{\text{an}}^c = \mathcal{K}_{c} \sum_i (S_x^4+S_y^4+S_z^4)\]

which is equivalent to the popular form

\[\mathcal{H}_{\text{an}}^c = -2 \mathcal{K}_{c} \sum_i (S_x^2 S_y^2 + S_y^2 S_z^2 + S_z^2 S_x^2)\]

The effective fields thus can be computed as

\[\vec{H}_{i,\text{an}}^c = -\frac{4 \mathcal{K}_{c}}{\mu_s} \left ( S_x^3 \hat{x} + S_y^3 \hat{y} + S_z^3 \hat{z} \right)\]

In micromagnetics, the uniaxial anisotropy energy of the system is defined as

\[E_{anis} = \int_{V} K_{u} [ 1 - (\vec{m} \cdot \hat{u})^2 ]\, dV\]

with \(K_{u}\) as the anisotropy constant in \(\text{J m}^{-3}\). The effective field reads

\[\vec{H}=\frac{2 K_{u}}{\mu_0 M_s} \left(\vec{m} \cdot \hat{u}\right) \hat{u}\]
Dipolar interaction

The Hamiltonian for dipolar interactions is defined as

\[\mathcal{H}_{d}=-\frac{\mu_0 \mu_{s}^{2}}{4\pi} \sum_{i<j} \frac{3 (\vec{S}_i\cdot \hat{r}_{ij})(\vec{S}_j\cdot \hat{r}_{ij}) - \vec{S}_i \cdot \vec{S}_j}{\vec{r}_{ij}^3}\]

with \(\vec{r}_{ij}\) the spatial vector pointing from the \(i\)-th to the \(j\)-th lattice site. The effective field is

\[\vec{H}_{i,d} =\frac{\mu_0 \mu_{s}}{4\pi}\sum_{i \neq j}\frac{3 \hat{r}_{ij} (\vec{S}_j\cdot \hat{r}_{ij}) - \vec{S}_j}{\vec{r}_{ij}^3}\]
Dzyaloshinskii-Moriya interaction (DMI)

DMI is an antisymmetric, anisotropic exchange coupling between spins (magnetic moments),

\[\mathcal{H}_{\text{DMI}}= \sum_{<i,j>} \vec{D}_{ij}\cdot [\vec{S}_i \times \vec{S}_j]\]

Noting that \(\vec{a}\cdot(\vec{b}\times\vec{c})=(\vec{a}\times\vec{b})\cdot\vec{c}\), the effective field can be computed as

\[\vec{H}_i = - \frac{1}{\mu_s} \frac{\partial \mathcal{H}}{\partial \vec{S}_i} = \frac{1}{\mu_s} \sum_{<i,j>} \vec{D}_{ij}\times\vec{S}_j\]

For bulk materials \(\vec{D}_{ij} = D \vec{r}_{ij}\) and for interfacial DMI one has \(\vec{D}_{ij} = D \vec{r}_{ij} \times \vec{e}_z\), in both cases the vector \(\vec{D}_{ij}\) such that \(\vec{D}_{ij}=-\vec{D}_{ji}\).


In the continuum limit the bulk DMI energy is written as

\[E_{\text{DMI}} = \int_V D_a \vec{m} \cdot (\nabla \times \vec{m}) \, \mathrm{d}V\]

where \(V\) is the volume of the sample and \(D_a = -D/a^2\). The corresponding effective field is

\[\vec{H}=-\frac{2 D_a}{\mu_0 M_s} (\nabla \times \vec{m})\]

For the interfacial case, the effective field becomes,

\[\vec{H}=\frac{2 D}{M_s a^2} (\hat{x} \times \frac{\partial \vec{m}}{\partial y} - \hat{y} \times \frac{\partial \vec{m}}{\partial x} )\]

Compared with the effective field [PRB 88 184422]

\[\vec{H}=\frac{2 D_a}{\mu_0 M_s} ((\nabla \cdot \vec{m}) \hat{z} - \nabla m_z)\]

where \(D_a = D/a^2\). Notice that there is no negative sign for the interfacial case.

In the micromagnetic code, it is also implemented the DMI for materials with \(D_{2d}\) symmetry. The energy of this interaction reads

\[E_{\text{DMI}} = \int_V D_a \vec{m} \cdot \left( \frac{\partial \vec{m}}{\partial x} \times \hat{x} - \frac{\partial \vec{m}}{\partial y} \times \hat{y} \right) \, \mathrm{d}V\]

where \(D_a\) is the DMI constant.

Zeeman energy

The Zeeman energy is,

\[\mathcal{H}_{\text{Zeeman}}= - \sum_{i} \mu_s \vec{H}_{ext}\cdot \vec{S}_i\]

Landau-Lifshitz-Gilbert (LLG) equation

  • Atomistic

For the discrete theory, the dynamics of the magnetic moments is governed by the LLG equation,

\[\frac{\partial \vec{S}_i}{\partial t} = -\frac{\gamma}{(1+\alpha^2)} \vec{S}_i \times (\vec{H}_i + \alpha \vec{S}_i \times \vec{H}_i) ]\]

where \(\vec{\mu}_s = |\vec{\mu}_i|\), \(0\leq\alpha\leq 1\) is the Gilbert damping constant, \(\gamma\) is the Gilbert gyromagnetic ratio (which sets the time scale) and the effective field \(\vec{H}_i\) is defined using the Hamiltonian \(\mathcal{H}\) as

\[\vec{H}_i = - \frac{1}{\mu_s} \frac{\partial \mathcal{H}}{\partial \vec{S}_i}.\]

The gyromagnetic ratio of a free electron is \(\gamma = 1.76\times10^{11}\,\text{rad Hz T}^{-1}\).

  • Micromagnetics

In the micromagnetic limit, the equation has a similar structure

\[\frac{\partial \vec{m}}{\partial t} = -\frac{\gamma}{(1+\alpha^2)} \vec{m} \times (\vec{H} + \alpha \vec{m} \times \vec{H}) ]\]

where \(0\leq\alpha\leq 1\) is the Gilbert damping constant and \(\gamma\) is the Gilbert gyromagnetic ratio (which sets the time scale). The effective field \(\vec{H}\) for this case is defined as

\[\vec{H} = - \frac{1}{\mu_{0}M_{s}} \frac{\partial \mathcal{H}}{\partial \vec{m}}.\]

The Gilbert gyromagnetic ratio of a free electron is \(\gamma = 2.21\times10^{5}\,\text{Hz T}^{-1}\).

Extended equations

Stochastic LLG equation

The implemented equation including the thermal fluctuation effects is

\[\frac{\partial \vec{m}}{\partial t} = - \gamma \vec{m} \times (\vec{H}+\vec{\xi}) + \alpha \vec{m} \times \frac{\partial \vec{m}}{\partial t}\]

where \(\vec{\xi}\) is the thermal fluctuation field and is assumed to have the following properties,

\[\left< \vec{\xi} \right> = 0, \;\;\; \left< \vec{\xi}_i^u,\vec{\xi}_j^v \right> = 2 D \delta_{ij} \delta_{uv}\]

and

\[D = \frac{\alpha k_B T}{\gamma \mu_s}\]

Spin transfer torque (Zhang-Li model)

The extended equation with current is,

\[\frac{\partial \vec{m}}{\partial t} = - \gamma \vec{m} \times \vec{H} + \alpha \vec{m} \times \frac{\partial \vec{m}}{\partial t} + u_0 (\vec{j}_s \cdot \nabla) \vec{m} - \beta u_0 [\vec{m}\times (\vec{j}_s \cdot \nabla)\vec{m}]\]

Where

\[u_0=\frac{p g \mu_B}{2 |e| M_s}=\frac{p g \mu_B a^3}{2 |e| \mu_s}\]

and \(\mu_B=|e|\hbar/(2m)\) is the Bohr magneton. Notice that \(\partial_x \vec{m} \cdot \vec{m}=0\) so \(u_0 (\vec{j}_s \cdot \nabla) \vec{m}= - u_0 \vec{m}\times[\vec{m}\times (\vec{j}_s \cdot \nabla)\vec{m}]\). Besides, we can change the equation to atomistic one by introducing \(\vec{s}=-\vec{S}\) where \(\vec{S}\) is the local spin such that

\[\vec{M}=-\frac{g \mu_B}{a^3}\vec{S} =\frac{g \mu_B}{a^3}\vec{s}\]

so \(u_0=p a^3/(2|e|s)\), furthermore,

\[\frac{\partial \vec{s}}{\partial t} = - \gamma \vec{s} \times \vec{H} + \frac{\alpha}{s} \vec{s} \times \frac{\partial \vec{s}}{\partial t} + \frac{p a^3}{2|e|s} (\vec{j}_s \cdot \nabla) \vec{s} - \frac{p a^3 \beta}{2|e|s^2} [\vec{s}\times (\vec{j}_s \cdot \nabla)\vec{s}]\]

However, we perfer the normalised equaiton here, after changing it to LL form, we obtain,

\[(1+\alpha^2)\frac{\partial \vec{m}}{\partial t} = - \gamma \vec{m} \times \vec{H} - \alpha \gamma \vec{m} \times (\vec{m} \times \vec{H}) + (1+\alpha\beta) u_0 (\vec{j}_s \cdot \nabla) \vec{m} - (\beta-\alpha) u_0 [\vec{m}\times (\vec{j}_s \cdot \nabla)\vec{m}]\]

although in principle \(\partial_x \vec{m}\) is always perpendicular to \(\vec{m}\), it’s better to take an extra step to remove its longitudinal component, therefore, the real equation written in codes is,

\[(1+\alpha^2)\frac{\partial \vec{m}}{\partial t} = - \gamma \vec{m} \times \vec{H}_{\perp} + \alpha \gamma \vec{H}_{\perp} + (1+\alpha \beta) u_0 \vec{\tau}_{\perp} - (\beta-\alpha) u_0 (\vec{m}\times \vec{\tau}_{\perp})\]

where \(\vec{\tau}=(\vec{j}_s \cdot \nabla)\vec{m}\) is the effective torque generated by current.

Nonlocal spin transfer torque (full version of Zhang-li model)

The LLG equation with STT is given by,

\[\frac{\partial \vec{m}}{\partial t} = - \gamma \vec{m} \times \vec{H} + \alpha \vec{m} \times \frac{\partial \vec{m}}{\partial t} + \vec{T}\]

where \(\vec{T}\) is the spin transfer torque. In the local form the STT is given by,

\[\vec{T}_{loc} = u_0 (\vec{j}_s \cdot \nabla) \vec{m} - \beta u_0 [\vec{m}\times (\vec{j}_s \cdot \nabla)\vec{m}]\]

And in general case, the spin transfer torque could be computed by,

\[\vec{T}=-\frac{\vec{m} \times \delta \vec{m}}{\tau_{sd}}\]

where \(\tau_{sd}\) is the s-d exchange time and \(\delta \vec{m}\) is the nonequilibrium spin density governed by

\[\frac{\partial \delta \vec{m}}{\partial t} = D \nabla^2 \delta \vec{m} + \frac{\vec{m} \times \delta \vec{m}}{\tau_{sd}} - \frac{\delta \vec{m}}{\tau_{sf}} +u_0 (\vec{j}_s \cdot \nabla) \vec{m}\]

By changing the LLG equation to LL form, we obtain,

\[(1+\alpha^2)\frac{\partial \vec{m}}{\partial t} = - \gamma \vec{m} \times \vec{H} - \alpha \gamma \vec{m} \times (\vec{m} \times \vec{H}) + \vec{T} + \alpha \vec{m} \times \vec{T}\]

i.e.,

\[(1+\alpha^2)\frac{\partial \vec{m}}{\partial t} = - \gamma \vec{m} \times \vec{H} - \alpha \gamma \vec{H}_{\perp} - \frac{\vec{m} \times \delta \vec{m}}{\tau_{sd}} + \alpha \frac{\delta \vec{m}}{\tau_{sd}}\]

Spin transfer torque (current-perpendicular-to-plane, CPP)

In this case (current-perpendicular-to-plane, CPP), there are two types of torques can be added to the orginal LLG equation. One is the so called Slonczewski torque \(\vec{\tau}_s=-a_J \vec{m} \times (\vec{m} \times \vec{p})\), and the other is a fieldlike torque \(\vec{\tau}_f=- b_J(\vec{m} \times \vec{p})\) [PRL 102 037206 (2009)]. So the full LLG equation is

\[\frac{\partial \vec{m}}{\partial t} = - \gamma \vec{m} \times \vec{H} + \alpha \vec{m} \times \frac{\partial \vec{m}}{\partial t} -a_J \vec{m} \times (\vec{m} \times \vec{p}) - b_J (\vec{m} \times \vec{p})\]

where \(\vec{p}\) is the unit vector of the spin polarization. The parameter \(b_J = \beta a_J\) and

\[a_J = \frac{\hbar \gamma J P}{2 |e| d M_s}\]

As we can see, this equation is exactly the same as the one used in Zhang-Li case if we take \(\vec{p} = (\vec{j}_s \cdot \nabla)\vec{m}\). So the implemented equation in the code is,

\[(1+\alpha^2)\frac{\partial \vec{m}}{\partial t} = - \gamma \vec{m} \times \vec{H}_{\perp} + \alpha \gamma \vec{H}_{\perp} + (1+\alpha \beta) a_J \vec{p}_{\perp} - (\beta-\alpha) a_J (\vec{m}\times \vec{p}_{\perp})\]

where \(\vec{p}_\perp=\vec{p}-(\vec{m}\cdot\vec{p})\vec{m}\).

Monte Carlo Simulation

In the atomistic part of Fidimag, Monte Carlo based on Metropolis algorithm is integrated. The supported interactions include the exchange interaction, the bulk DMI, the external field and cubic anisotropy. The total Hamiltonian of the system is therefore given by

\[\mathcal{H} = \mathcal{H}_{ex} + \mathcal{H}_{dmi} + \mathcal{H}_{ext} + \mathcal{H}_{c}\]

where \(\mathcal{H}_{ex}\) is the nearest-neighbor exchange interaction,

\[\mathcal{H}_{ex} = -J \sum_{<i,j>}\vec{m}_i \cdot \vec{m}_j\]

Note that the summation is taken only once for each pair and \(\vec{m}_i\) is the unit vector of spin \(\vec{S}\) at site \(i\).

The Hamiltonian of bulk DMI can be expressed as,

\[\mathcal{H}_{dmi}= \sum_{<i,j>} \vec{D}_{ij}\cdot [\vec{m}_i \times \vec{m}_j]\]

where \(\vec{D}_{ij} = D \vec{e}_{ij}\) with \(\vec{e}_{ij}\) is the unit vector between \(\vec{S}_{i}\) and \(\vec{S}_{j}\).

The Hamiltonian of external field is

\[\mathcal{H}_{dmi}= - \sum_{i} \mu_s \vec{H}\cdot \vec{m}_i\]

where \(\mu_s = g \mu_B S\).

The cubic anisotropy implemented in Fidimag is,

\[\mathcal{H}_{c}= - \sum_{i} (K_c/2) (m_{i,x}^4 + m_{i,y}^4 + m_{i,z}^4)\]

which is equivalent to the form

\[\mathcal{H}_{c}= \sum_{i} K_c (m_{i,x}^2 m_{i,y}^2 + m_{i,y}^2 m_{i,z}^2 + m_{i,z}^2 m_{i,x}^2)\]

Nudged Elastic Band Method (NEBM)

The NEBM is an algorithm to find minimum energy transitions between equilibrium states. This method was developed by Henkelman and Jónsson [1] to solve molecular problems in Chemistry. Later, Dittrich et al. [2] applied the NEBM to magnetic systems based on the micromagnetic theory. Recently, Bessarab et al. [3] have proposed an optimised version of the NEBM with improved control over the behaviour of the algorithm. Their review of the method allows to apply the technique to systems described by either a micromagnetic or atomistic model.

The algorithm is based on, firstly, generating \(N\) copies of a magnetic system that we describe by \(P\) spins or magnetic moments arranged in a lattice or mesh. Every copy of the system, is called an image \(\mathbf{Y}_{i}\), \(i\in \{0,\ldots,P-1\}\) and we specify an image using the spins directions in a given coordinate system. For example, in Cartesian coordinates we have

\[\mathbf{Y}_{i} = \left( s_{x,0}^{(i)}, s_{y,0}^{(i)}, s_{z,0}^{(i)}, s_{x,1}^{(i)}, s_{y,1}^{(i)},\ldots, s_{y,P-1}^{(i)}, s_{z,P-1}^{(i)} \right)\]

for a system described by a discrete spin model. Within the micromagnetic model we use \(\mathbf{m}\) rather than \(\mathbf{s}\), but both are unit directions.

This sequence of images defines a band, where every image is in a (ideally) different magnetic configuration. The energy of the system depends on the magnetic configuration (e.g. a skyrmion, vortex, uniform state,etc.), thus the energy is parametrised by the number of degrees of freedom, which is \(n\times P\), where \(n\) is the number of coordinates to describe a spin (e.g. \(n=3\) for Cartesian coordinates and \(n=2\) in Spherical coordinates). Accordingly, every image will have a specific energy, i.e. \(E=E(\mathbf{Y})\), which determines the position of an image in an energy landscape. The first and last images in a band are chosen as equilibrium states of the magnetic system and they are kept fixed during the NEBM evolution.

Secondly, to initiate the NEBM evolution, it is necessary to specify an initial guess for the images, which means generating different magnetic configurations between the extrema of the band. It is customary to use an interpolation of the spins directions to achieve this.

And thirdly, the band is relaxed to find a path in energy space that costs less energy. This path is characterised by passing through a saddle point, which is a maximum in energy along certain directions in phase space, and this point determines an energy barrier between the two equilibrium states. The energy barrier is the energy necessary to drive one equilibrium state towards the other. A first order saddle point is the one that is a maximum along a single direction in phase space and will usually in the energy path that costs less energy. It is possible that there are more than one energy paths.

It is also necessary to consider that:

  • To distinguish different images in the energy landscape we need to define a distance

  • To keep the images equally spaced to avoid clustering around saddle points or equilibrium states, we use a spring force between images.

  • Spins or magnetic moments can be described in any coordinate system. The most commonly used are spherical and Cartesian coordinates. For the later we have to specify the constraint to fix the spin length.

For a thorough explanation of the method see references [3,4].

NEBM relaxation

_images/nebm.png
Cartesian

When using Cartesian coordinates, every image of the band \(\mathbf{Y}_{i}\) is iterated with the following dynamical equation with a fictitious time \(\tau\)

\[\frac{\partial \mathbf{Y}_i}{\partial \tau} = -\gamma \mathbf{Y}_{i} \times \mathbf{Y}_{i} \times \mathbf{G}_{i} + c \sqrt{ \left( \frac{\partial \mathbf{Y}_{i}}{\partial \tau} \right)^{2} } \left( 1 - \mathbf{Y}_{i}^{2} \right) \mathbf{Y}_{i}\]

In this equation, \(\gamma\) is in units of \(\text{Hz T}^{-1}\) and it determines the time scale, which is irrelevant here so we set \(\gamma=1\). The second term to the right is necessary to keep the spins/magnetisation length equal to one, using an appropriate factor \(c\) that we set to 6. The \(\mathbf{G}\) is the total force on an image, which in the atomistic theory is defined as

\[\mathbf{G}_{i} = - \boldsymbol{\nabla}_{\boldsymbol{\mu}} E(\mathbf{Y}_{i})|_{\perp} + \mathbf{F}(\mathbf{Y}_{i})|_{\parallel}\]

and in the micromagnetic theory as

\[\mathbf{G}_{i} = - \boldsymbol{\nabla}_{\mathbf{M}} E(\mathbf{Y}_{i})|_{\perp} + \mathbf{F}(\mathbf{Y}_{i})|_{\parallel}\]

We use the magnetic effective field definition to evaluate the gradients, i.e. \(\boldsymbol{\nabla}_{\boldsymbol{\mu}}E=\partial E / (\mu_{s}\partial\mathbf{s})=-\mathbf{H}_{\text{eff}}\) or \(\boldsymbol{\nabla}_{\mathbf{M}}E=\partial E / (M_{s}\partial\mathbf{m})=-\mathbf{H}_{\text{eff}}\). The perpendicular component is with respect to the tangents \(\mathbf{t}\) to the energy band, thus for a vector \(\mathbf{A}\)

\[\mathbf{A}|_{\perp} = \mathbf{A} - (\mathbf{A}\cdot\mathbf{t})\mathbf{t}\]

The tangents are defined according to the energies of the neighbouring images [3]. The second term to the right hand side of the equation for \(\mathbf{G}\) is the spring force that tries to keep images at equal distance and is defined using the distance between neighbouring images

\[\mathbf{F}(\mathbf{Y}_{i})|_{\parallel}=k\left(|\mathbf{Y}_{i+1}-\mathbf{Y}_{i}|- |\mathbf{Y}_{i}-\mathbf{Y}_{i-1}|\right)\mathbf{t}_{i}\]

which is parallel to the band, i.e. in the direction of the tangent.

According to Bessarab et al. [3], the tangents and the total force \(\mathbf{G}\) must be projected into the spin/magnetisation tangent space.

Climbing Image NEBM

The climbing image technique is a modification of the NEBM where the forces of the image with largest energy in the band, are redefined so this image can climb up in energy along the band to get a better estimate of the saddle point energy [1,3]. The image with largest energy is chosen after relaxing the band with the usual NEBM algorithm. The total force on this climbing image is

\[\mathbf{G}^{\text{CI}}_{i} = - \boldsymbol{\nabla}_{\boldsymbol{\mu}} E(\mathbf{Y}_{i})|_{\perp} + \boldsymbol{\nabla}_{\boldsymbol{\mu}} E(\mathbf{Y}_{i})|_{\parallel}\]

where the spring force was removed. The climbing image is still allowed to climb down in energy in a direction perpendicular to the band, thus it is possible that the energy barrier magnitude decreases after applying this technique.

Vectors

Following the definition of an image in Cartesian coordinates, we mentioned that the number of degrees of freedom is \(n\times P\), where \(n\) is the number of coordinates to describe a spin. Accordingly, many of the vectors in the NEBM algorithm such as the tangents, total forces, etc. have the same number of components, which agree with the spin components of an image.

For instance, the total force (or tangents, spring forces, etc.) has three components in Cartesian coordinates, corresponding to every spin direction:

\[\mathbf{G}_{i} = \left( G_{x,0}^{(i)}, G_{y,0}^{(i)}, G_{z,0}^{(i)}, G_{x,1}^{(i)}, G_{y,1}^{(i)},\ldots, G_{y,P-1}^{(i)}, G_{z,P-1}^{(i)} \right)\]

Projections

The projection of a vector into the spin/magnetisation tangent space simply means projecting its components with the corresponding spin/magnetisation field components. For example, for a vector \(\mathbf{A}\) associated to the \(i\) image of the band (we will omit the \((i)\) superscripts in the spin directions \(\mathbf{s}\) and the \(\mathbf{A}\) vector components)

\[\mathbf{A} = \left( \mathbf{A}_{0}, \ldots \mathbf{A}_{P-1}\right) = \left( A_{x,0}, A_{y,0}, A_{z,0}, A_{x,1}, A_{y,1},\ldots, A_{y,P-1}, A_{z,P-1} \right)\]

the projection \(\mathcal{P}\) is defined as

\[\mathcal{P}\mathbf{A} = \left( \mathcal{P}_{\mathbf{s}_{0}}\mathbf{A}_{0}, \mathcal{P}_{\mathbf{s}_{1}}\mathbf{A}_{1}, \ldots \mathcal{P}_{\mathbf{s}_{1}}\mathbf{A}_{P-1}, \right)\]

where

\[\mathcal{P}_{\mathbf{s}_{j}}\mathbf{A}_{j} = \mathbf{A}_{j} - \left( \mathbf{A}_{j} \cdot \mathbf{s}_{j} \right) \mathbf{s}_{j}\]

with \(j\in\{0,\ldots,P-1 \}\), hence

\[\mathbf{A} = \left( \mathcal{P}A_{x,0}, \mathcal{P}A_{y,0}, \ldots, \mathcal{P}A_{y,P-1}, \mathcal{P}A_{z,P-1} \right)\]

Distances

There are different ways of defining the distance in phase space between two images, \(d_{j,k}=|\mathbf{Y}_{j} - \mathbf{Y}_{k}|\).

Geodesic

The optimised version of the NEBM [3] proposes a Geodesic distance based on Vicenty’s formulae:

\[d_{j,k} = \sqrt{ \left( \delta_{0}^{(j,k)} \right)^{2} + \left( \delta_{1}^{(j,k)} \right)^{2} + \ldots \left( \delta_{P-1}^{(j,k)} \right)^{2} }\]

where

\[\delta_{i}^{(j,k)} = \arctan2 \left( \left| \mathbf{m}_{i}^{(j)}\times \mathbf{m}_{i}^{(k)} \right|, \mathbf{m}_{i}^{(j)}\cdot \mathbf{m}_{i}^{(k)} \right)\]

This definition seems to work better with the NEBM since the spin directions are defined in a unit sphere.

Euclidean

The first versions of the method simply used an Euclidean distance based on the difference between corresponding spins. In Cartesian coordinates it reads

\[d_{j,k} = \frac{1}{3 P} \left\{ \sum_{j=0}^{P-1} \sum_{\alpha\in\{x,y,z\}} \left[ \left( s_{\alpha}^{(j)} - s_{\alpha}^{(k)} \right)^{2} \right] \right\}^{1/2}\]

where we have scaled the distance by the number of degrees of freedom of the system (or an image). In spherical coordinates the definition is similar, only that we use the difference of the azimuthal and polar angles and the scale is \(2P\).

Algorithm

The algorithm can be summarised as:

  1. Define a magnetic system and find two equilibrium states for which we want to find a minimum energy transition.

  2. Set up a band of images and an initial sequence between the extrema. We can use linear interpolations on the spherical angles that define the spin directions [4] or Rodrigues formulae [3].

  3. Evolve the system using the NEBM dynamical equation, which depends on the chosen coordinate system. This equation involves:

    1. Compute the effective field for every image (they are in different magnetic configurations) and the total energy of every image

    2. Compute the tangents according to the energies of the images and project them into the spin/magnetisation tangent space

    3. Compute the total force for every image in the band using the tangents and distances between neighbouring images. This allows to calculate the gradient (which uses the effective field) and the spring forces on the images

    4. Project the total force into the spin/magnetisation tangent space

    5. Use the dynamical equation according to the coordinate system

Early versions of the NEBM did not project the vectors into the tangent space in steps I and II. This leads to an uncontrolled/poor behaviour of the band evolution since the vectors that are supposed to be perpendicular to the band still have a component along the band and interfere with the images movement in phase space.

Fidimag Code

We have implemented three classes in Fidimag for the NEBM:

  1. NEBM_Spherical: Using spherical coordinates for the spin directions and Euclidean distances with no projections into spin space. The azimuthal and polar angles need to be redefined when performing differences or computing Euclidean distances, specially because the polar angle gets undefined when it is close to the north or south. It is not completely clear what is the best approach to redefine the angles and when to do this, thus this class currently does not work properly.

  2. NEBM_Cartesian: Using Cartesian coordinates for the spin directions and Euclidean distances with no projections into spin space. This method works well for a variety of simple system. However, when the degree of complexity increases, such as systems where vortexes or skyrmions can be stabilised, the spring force interferes with the convergence of the band into a minimum energy path. For this case it is necessary to find an optimal value of the spring constant, which is difficult since the value depends on the system size and interactions involved.

  3. NEBM_Geodesic: Using Cartesian coordinates for the spin directions and Geodesic distances, with vectors projected in tangent space. This is the optimised version of the NEBM [3] and appears to work well with every system we have tried so far. Cartesian coordinates have the advantage that they are well defined close to the poles of the spin directions.

The following diagram shows how the code is structured:

_images/nebm_classes.png

There is a fidimag.common.nebm_tools module with common functions for the NEBM classes:

fidimag.common.nebm_tools
|
--> cartesian2spherical
    spherical2cartesian
    compute_norm
    interpolation_Rodrigues_rotation
    linear_interpolation_spherical

Arrays

In fidimag we mainly use Numpy to define the NEBM vectors. When calling one of the NEBM classes, we have to pass a sim object with the specification of the magnetic system which has associated a mesh with n_spins. According to the coordinate system, we set the dof variable. For instance dof = 3 for Cartesian coordinates. Consequently, we define the number of degrees of freedom per image n_dofs_image = dof * n_spins, thus if the NEBM class was specified with n_images, the total number of degrees of freedom for the band is n_band = n_dofs_image * n_images.

As explained in our discussion about the NEBM, we set up band, gradientE, tangents and spring_force arrays whose length is n_band. The order is the same than how we defined the images, thus the Numpy array, when using Cartesian coordinates to describe the spins, looks like

band = [ s(0)_{x,0}  s(0)_{y,0}  ... s(0)_{z,n_dofs_image-1}
         s(1)_{x,0}  s(1)_{y,0}  ... s(1)_{z,n_dofs_image-1}
         ...
         s(n_images-1)_{x,0}  ... s(n_images-1)_{z,n_dofs_image-1}
       ]

and similarly for the other vectors since they follow the same order of the spins. This band array is passed to the Cython codes to compute the NEBM forces. Notice that we can easily redefine this array into a (n_images, n_dofs_image) shaped Numpy array using

band = band.reshape(-1, n_dofs_image)

so every row is a different image. We can even take the inner images (no extrema) and use the same piece of code since n_dofs_image does not change.

Cython Codes

Most of the calculations are made using C code through Cython. The files for these libraries are located in fidimag/common/neb_method/. Every library has a .c file, a .h header file and a .pyx Cython file (it can differ in name from the C files) which is compiled using Fidimag’s setup.py file.

For example, there is a base module with common functions for every NEBM class called nebm_lib.c

nebm_lib.c
|
--> compute_effective_force_C
    compute_norm
    compute_spring_force_C
    compute_tangents_C
    cross_product
    dot_product
    normalise
    normalise_images_C

Its corresponding header file ``nebm_lib.h contains the prototypes of these functions. The Cython file that link some of these functions to the Python code is called nebm_clib.pyx and can be called from the fidimag.extensions.nebm_clib library:

fidimag.extensions.nebm_clib
|
--> compute_effective_force
    compute_tangents

The other .pyx or .c files use some of the nebm_lib.h functions. They are separated according to the coordinate system used in the NEBM calculations. The following diagrams show the Cython functions for these libraries and the C files used to define them:

nebm_cartesian_lib.c
nebm_cartesian_lib.h
nebm_cartesian_clib.pyx
fidimag.extensions.nebm_cartesian_clib
|
--> compute_dYdt
    compute_effective_force
    compute_spring_force
    compute_tangents
    normalise_images
    project_images


nebm_geodesic_lib.c
nebm_geodesic_lib.h
nebm_geodesic_clib.pyx
fidimag.extensions.nebm_geodesic_clib
|
--> compute_spring_force
    geodesic_distance


nebm_spherical_lib.c
nebm_spherical_lib.h
nebm_spherical_clib.pyx
fidimag.extensions.nebm_spherical_clib
|
--> compute_spring_force
    normalise_images

Every library has its own compute_spring_force, which is taken from the nebm_lib.c file, since the spring force depends on the coordinate-system-dependent distance definition. For the Cartesian and spherical coordinates, the distance functions (Euclidean distances) are not exposed in the Cython file, as in the code for Geodesic distances.

Geodesic distances code

Based on the aforementioned NEBM algorithm, the class initialise the NEBM calling the following methods in this order:

1. generate_initial_band   # Using linear interpolations or Rodrigues rotation formulae
|
--> nebm_tools.cartesian2spherical --> nebm_tools.linear_interpolation_spherical
    # or
    nebm_tools.interpolation_Rodrigues_rotation

2. initialise_energies     # Fill the energies array
3. initialise_integrator   # Start CVODE
4. create_tablewriter      # To pass data into .ndt files per every iteration of the integrator

The linear interpolation function requires that the input array is in spherical coordinates.

To relax the band, we use CVODE, as specified in step 3., using the cvode.CvodeSolver (or cvode.CvodeSolver_OpenMP) integrator. The integrator requires a Sundials_RHS function that is called on every iteration, which is the right hand side of the \(\partial \mathbf{Y} / \partial \tau\) dynamical equation. Correspondingly, this function calculates the NEBM forces as

Sundials_RHS
|
--> nebm_step
    |
    --> compute_effective_field_and_energy  # Gradient = - Eff field
                                            # Which we compute for every image
                                            # using the sim class
        compute_tangents
        |
        --> nebm_clib.compute_tangents      #
            nebm_cartesian.project_images   # Project tangents
            nebm_cartesian.normalise_images #
        compute_spring_force                # Using Geodesic distances
        nebm_clib.compute_effective_force
        nebm_cartesian.project_images(G)    # Project effective (total) force

    nebm_cartesian.compute_dYdt             # Add the correction factor to fix
                                            # the spins length to 1

Many methods come from the Cartesian Cython library nebm_cartesian since the Geodesic class uses Cartesian coordinates to describe the spins. If a climbing image was specified as an argument for the class, we compute its modified force in the compute_effective_force method.

The function that iterates the integrator is the relax method. On every iteration, we compute the difference with the previous step using a scaled Euclidean distance. The definitions of this process are specified in the compute_maximum_dYdt method from the nebm_base class. According to the magnitude stopping criteria specified in the stopping_dYdt argument of relax, the iterations of the integrator will stop if the difference with the previous step is smaller than stopping_dYdt.

Cartesian and spherical coordinates code

These classes follow the same process than the Geodesic distances code. The main difference is that in the nebm_step process, the projections are not performed and the distances are computed using the scaled Euclidean distance.

Spherical

For spherical coordinates, the vectors are smaller, with n_dofs_image = 2 * n_spins, where

band = [ theta(0)_{0}  phi(0)_{0} theta(0)_{1} ... phi(0)_{n_dofs_image-1}
         theta(1)_{0}  phi(1)_{0} theta(1)_{1} ... phi(1)_{n_dofs_image-1}
         ...
         theta(n_images-1)_{0} ... phi(n_images-1)_{n_dofs_image-1}
       ]

The Sundials_RHS function does not include the correction factor since spherical coordinates have implicit the constraint of fixed length for the magnetisation. When computing distances or differences, it is necessary to redefine the angles, but it is not completely clear the optimal way of doing this.

1

Henkelman, G. & Jónsson, H. Improved tangent estimate in the nudged elastic band method for finding minimum energy paths and saddle points. The J. Chem. Phys. 113, 9978–9985 (2000)

2

Dittrich, R. et al. A path method for finding energy barriers and minimum energy paths in complex micromagnetic systems. J. Magn. Magn. Mater. 250, 12–19 (2002).

3

Bessarab, P. F., Uzdin, V. M. & Jónsson, H. Method for finding mechanism and activation energy of magnetic transitions, applied to skyrmion and antivortex annihilation. Comput. Phys. Commun. 196, 1–37 (2015)

4

Cortés-Ortuño, D. et al. Thermal stability and topological protection of skyrmions in nanotracks. Preprint at arXiv:1611.07079.