OOMMFOOMMF Tutorial Series: Homework

Session 2 Homework Solution

One solution is shown below. Note that it contains no Oxs_Demag (dipole-dipole) component. With these parameter values the demagnetization field overpowers the magnetocrystalline anisotropy and destroys the skyrmion. However, if you want a simulation with Oxs_Demag, you can reduce Ms from 1100 kA/m to 200 kA/m. This variant behaves similarly to the original, both in terms of the remanent state and also the response to an applied current (i.e., the Session 3 homework problem).
# MIF 2.2
#
# This file was based in part on the skirmion.mif example file included with
# the Oxs_DMExchange6Ngbr extension class by  S. Rohart and A. Thiaville
# (Laboratoire de Physique des Solides, Université Paris-Sud, Orsay, FRANCE).
# Please quote S. ROHART and A. Thiaville Phys. Rev. B 2013 when using the
# Oxs_DMExchange6Ngbr class.

Parameter D 3.5
set DD [expr {$D/1000.}]

Parameter film_thickness 0.6e-9

Parameter xcell 2.0e-9
Parameter ycell 2.0e-9
Parameter zcell $film_thickness

set Ms 1.1e6

set init_skyrmion_r 50e-9
set init_skyrmion_x $init_skyrmion_r 
set init_skyrmion_y $init_skyrmion_r 
set init_skyrmion_rsq_inner [expr {0.1*$init_skyrmion_r*$init_skyrmion_r}]
set init_skyrmion_rsq_outer [expr {0.2*$init_skyrmion_r*$init_skyrmion_r}]

set xmax [expr {10*$init_skyrmion_r}]
set ymax [expr {4*$init_skyrmion_r}]

set divot_r [expr {4*$xcell}]
Specify Oxs_MultiAtlas:atlas [subst {
   atlas { Oxs_BoxAtlas:divot {
      xrange { [expr {$init_skyrmion_r-$divot_r}] [expr {$init_skyrmion_r+$divot_r}] }
      yrange { [expr {$init_skyrmion_r-$divot_r}] [expr {$init_skyrmion_r+$divot_r}] }
      zrange { 0 $film_thickness }
   }}
   atlas { Oxs_BoxAtlas:world { 
      xrange { 0 $xmax }
      yrange { 0 $ymax }
      zrange { 0 $film_thickness }
  } }
}]

Specify Oxs_RectangularMesh:mesh [subst {
  cellsize { $xcell $ycell $zcell }
  atlas :atlas
}]

Specify Oxs_UniformExchange:HeisenbergEx {
  A 1.6e-11
}

#uniform DMI is used here
Specify Oxs_DMExchange6Ngbr:DMEx [subst {
  default_D $DD
  atlas :atlas
  D { 
    world world $DD
  }
}]

set K1 0.51e6
set K1_divot [expr {1.03*$K1}]
Specify Oxs_UniaxialAnisotropy:Anisotropy [subst {
   axis {0 0 1}
   K1 { Oxs_AtlasScalarField {
      atlas :atlas
      default_value $K1
      values {
         divot $K1_divot
      }
   }}
}]

proc Skyrmion { x y z } {
   global init_skyrmion_x init_skyrmion_y
   global init_skyrmion_rsq_inner init_skyrmion_rsq_outer
   set xoff [expr {$init_skyrmion_x-$x}]
   set yoff [expr {$init_skyrmion_y-$y}]
   set rsq [expr {$xoff*$xoff+$yoff*$yoff}]
   if {$rsq<$init_skyrmion_rsq_inner} { return [list 0. 0.  1.] }
   if {$rsq>$init_skyrmion_rsq_outer} { return [list 0. 0. -1.] }
   return [list $xoff $yoff 0]
}

Specify Oxs_CGEvolve {}
Specify Oxs_MinDriver [subst {
  evolver Oxs_CGEvolve
  stopping_mxHxm 1e-5
  mesh :mesh
  Ms $Ms
  m0 { Oxs_ScriptVectorField { 
     script Skyrmion
     atlas :atlas
     script_args rawpt
  } }
}]

See the problem statement or back to OOMMF Tutorial


The National Institute of Standards and Technology (NIST) is an agency of the U.S. Commerce Department.

Privacy policy / security notice / accessibility statement / Disclaimer / Freedom of Information Act (FOIA) /
No Fear Act Policy / NIST Information Quality Standards / Environmental Policy Statement

Date created: June 3, 2020 | Last updated: June 3, 2020    Contact: Webmaster