# MIF 2.1 # # All units are SI. # # This file must be a valid Tcl script. # # Initialize random number generators with seed=1 RandomSeed 1 # Individual Oxs_Ext objects are loaded and initialized via # Specify command blocks. The following block defines the # extents (in meters) of the volume to be modeled. The # prefix "Oxs_BoxAtlas" specifies the type of Oxs_Ext object # to create, and the suffix ":WorldAtlas" is the name # assigned to this particular instance. Each object created # by a Specify command must have a unique full name (here # "Oxs_BoxAtlas:WorldAtlas"). If the suffix is not # explicitly given, then the default ":" is automatically # assigned. References may be made to either the full name, # or the shorter suffix instance name (here ":WorldAtlas") # if the latter is unique. See the Oxs_TimeDriver block for # some reference examples. Specify Oxs_BoxAtlas:WorldAtlas { xrange {0 500e-9} yrange {0 250e-9} zrange {0 10e-9} } # The Oxs_RectangularMesh object is initialized with the # discretization cell size (in meters). Specify Oxs_RectangularMesh:mesh { cellsize {5e-9 5e-9 5e-9} atlas :WorldAtlas } # Magnetocrystalline anisotropy block. The setting for # K1 (500e3 J/m^3) implicitly creates an embedded # Oxs_UniformScalarField object. Oxs_RandomVectorField # is an explicit embedded Oxs_Ext object. Specify Oxs_UniaxialAnisotropy { K1 530e3 axis { Oxs_RandomVectorField { min_norm 1 max_norm 1 } } } # Homogeneous exchange energy, in J/m. This may be set # from the command line with an option like # -parameters "A 10e-12" # If not set from the command line, then the default value # specified here (13e-12) is used. Parameter A 13e-12 Specify Oxs_UniformExchange:NiFe [subst { A $A }] # Define a couple of constants for later use. set PI [expr {4*atan(1.)}] set MU0 [expr {4*$PI*1e-7}] # The Oxs_UZeeman class is initialized with field ranges in A/m. # The following block uses the multiplier option to allow ranges # to be specified in mT. Use the Tcl "subst" command to enable # variable and command substitution inside a Specify block. Specify Oxs_UZeeman:AppliedField [subst { multiplier [expr 0.001/$MU0] Hrange { { 0 0 0 10 0 0 2 } { 10 0 0 -10 0 0 2 } { 0 0 0 0 10 0 4 } { 1 1 1 5 5 5 0 } } }] # Enable demagnetization (self-magnetostatic) field # computation. This block takes no parameters. Specify Oxs_Demag {} # Runge-Kutta-Fehlberg ODE solver, with default parameter values. Specify Oxs_RungeKuttaEvolve {} # The following procedure is used to set the initial spin # configuration in the Oxs_TimeDriver block. The arguments # x, y, and z are coordinates relative to the min and max # range of each dimension, e.g., 0<=x<=1, where x==0 # corresponds to xmin, x==1 corresponds to xmax. proc UpDownSpin { x y z } { if { $x < 0.45 } { return "0 1 0" } elseif { $x > 0.55 } { return "0 -1 0" } else { return "0 0 1" } } Specify Oxs_TimeDriver { evolver Oxs_RungeKuttaEvolve stopping_dm_dt 0.01 mesh :mesh Ms 8e5 comment {implicit Oxs_UniformScalarField object} m0 { Oxs_ScriptVectorField { script {UpDownSpin} norm 1 atlas :WorldAtlas } } basename example comment {If you don’t specify basename, then the default is taken from the MIF filename.} } # Default outputs Destination hystgraph mmGraph:Hysteresis Destination monitor mmGraph new Destination archive mmArchive Schedule DataTable hystgraph Stage 1 Schedule DataTable monitor Step 5 Schedule DataTable archive Stage 1 Schedule Oxs_TimeDriver::Magnetization archive Stage 3 Schedule "Oxs_RungeKuttaEvolve::Total field" archive Stage 3