-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathINPUT_sk_lattice_DMI_D2d_PBCs_y.mif
115 lines (91 loc) · 2.51 KB
/
INPUT_sk_lattice_DMI_D2d_PBCs_y.mif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# MIF 2.1 ---------------------------------------------------------------------
# Generate a skyrmion lattice in a "unit cell" with Periodic Boundaries
#
# Authors: D. Cortes, M. Beg, H.Fangohr (2018)
set PI [expr {4 * atan(1.)}]
set MU0 [expr {4 * $PI * 1e-7}]
# -----------------------------------------------------------------------------
# PdFe on Ir(111) [PRL, 114(17):1-5, 2015]
# This is an interfacial system but parameters should work similarly for D2d
# symmetry. Spins only change the sense of rotation for the skyrmion
set Ms [expr {1.1e6}]
set A [expr {2e-12}]
set D [expr {3.9e-3}]
set KU [expr {2.5e6}]
set BZ [expr {1.0}]
set ZL [expr {15e-9}]
set XL [expr {$ZL / sqrt(3)}]
set YL [expr {2e-9}]
set zcell [expr {$ZL / 64}]
set xcell [expr {$XL / 32}]
set ycell [expr {2e-9}]
# -----------------------------------------------------------------------------
# BoxAtlas
Specify Oxs_BoxAtlas:atlas [subst {
xrange {0 $XL}
yrange {0 $YL}
zrange {0 $ZL}
name atlas
}]
# RectangularMesh
Specify Oxs_PeriodicRectangularMesh:mesh [subst {
cellsize {$xcell $ycell $zcell}
atlas Oxs_BoxAtlas:atlas
periodic "xy"
}]
# UniformExchange
Specify Oxs_UniformExchange [subst {
A $A
}]
# Uniaxial Anisotropy
Specify Oxs_UniaxialAnisotropy:Anisotropy [subst {
axis { 0 0 1 }
K1 $KU
}]
# D_2d DMI
Specify Oxs_DMI_D2d_y [subst {
default_D $D
atlas :atlas
D {
atlas atlas $D
}
}]
Specify Oxs_FixedZeeman:Bfield [subst {
comment {Field values in Tesla; scale to A/m}
multiplier [expr {1 / $MU0}]
field {0.0 0.0 $BZ}
}]
# CGEvolver
Specify Oxs_CGEvolve {}
# MinDriver
Specify Oxs_MinDriver [subst {
evolver Oxs_CGEvolve
stopping_mxHxm 0.01
mesh :mesh
Ms $Ms
m0 { Oxs_ScriptVectorField {
atlas :atlas
script { skX }
norm 1.0
script_args { relpt }
}}
basename skL_D2d_PBCs_y
scalar_field_output_format {text %\#.15g}
vector_field_output_format {text %\#.15g}
}]
Destination table mmArchive
Destination mags mmArchive
Schedule DataTable table Stage 1
Schedule Oxs_MinDriver::Magnetization mags Stage 1
# =============================================================================
proc skX { x y z } {
set xnorm [expr {(2 * $x - 1)}]
set znorm [expr {(2 * $z - 1)}]
foreach zsk [list -1.0 1.0 -1.0 1.0 0.0] xsk [list -1.0 -1.0 1.0 1.0 0.0] {
set zrel [expr {$znorm - $zsk}]
set xrel [expr {$xnorm - $xsk}]
set radius [expr {sqrt($zrel * $zrel + $xrel * $xrel)}]
if {$radius < 0.3} { return [list 0 0 -1] }
}
return [list 0 0 1]
}