From a34a490c36d0e93f9b8e4dbf410d13a784a17631 Mon Sep 17 00:00:00 2001 From: Martin Lang Date: Tue, 11 May 2021 09:33:34 +0200 Subject: [PATCH] Test all three classes. --- Makefile | 9 +- examples/INPUT_isolated_sk_DMI_D2d_x.mif | 105 ++++++++++++++++ examples/INPUT_isolated_sk_DMI_D2d_y.mif | 105 ++++++++++++++++ ...2d.mif => INPUT_isolated_sk_DMI_D2d_z.mif} | 2 +- examples/INPUT_sk_lattice_DMI_D2d_PBCs_x.mif | 115 ++++++++++++++++++ examples/INPUT_sk_lattice_DMI_D2d_PBCs_y.mif | 115 ++++++++++++++++++ ...if => INPUT_sk_lattice_DMI_D2d_PBCs_z.mif} | 2 +- 7 files changed, 447 insertions(+), 6 deletions(-) create mode 100644 examples/INPUT_isolated_sk_DMI_D2d_x.mif create mode 100644 examples/INPUT_isolated_sk_DMI_D2d_y.mif rename examples/{isolated_sk_DMI_D2d.mif => INPUT_isolated_sk_DMI_D2d_z.mif} (98%) create mode 100644 examples/INPUT_sk_lattice_DMI_D2d_PBCs_x.mif create mode 100644 examples/INPUT_sk_lattice_DMI_D2d_PBCs_y.mif rename examples/{sk_lattice_DMI_D2d_PBCs.mif => INPUT_sk_lattice_DMI_D2d_PBCs_z.mif} (98%) diff --git a/Makefile b/Makefile index 0d4bc83..9920241 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,10 @@ test-all: ls -lh examples - tclsh $(OOMMFTCL) boxsi +fg examples/isolated_sk_DMI_D2d.mif -exitondone 1 - ls -lh examples - tclsh $(OOMMFTCL) boxsi +fg examples/sk_lattice_DMI_D2d_PBCs.mif -exitondone 1 - ls -lh examples + for FILE in `find examples -name "INPUT_*"`; do \ + tclsh $(OOMMFTCL) boxsi +fg $$FILE -exitondone 1; \ + ls -lh examples; \ + done + travis-build: docker build --no-cache -t dockertestimage . diff --git a/examples/INPUT_isolated_sk_DMI_D2d_x.mif b/examples/INPUT_isolated_sk_DMI_D2d_x.mif new file mode 100644 index 0000000..dbe2d5d --- /dev/null +++ b/examples/INPUT_isolated_sk_DMI_D2d_x.mif @@ -0,0 +1,105 @@ +# MIF 2.1 --------------------------------------------------------------------- + +# Generate an isolated skyrmion with interfacial (C_nv) DMI +# +# 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 the parameters should work similarly for +# the D2d symmetry. Spins only change the sense of rotation +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 XL [expr {2e-9}] +set YL [expr {15e-9}] +set ZL [expr {$YL}] + +set xcell [expr {2e-9}] +set ycell [expr {$YL / 20}] +set zcell [expr {$ZL / 20}] + +# ----------------------------------------------------------------------------- + +# BoxAtlas +Specify Oxs_BoxAtlas:atlas [subst { + xrange {0 $XL} + yrange {0 $YL} + zrange {0 $ZL} + name atlas +}] + +# RectangularMesh +Specify Oxs_RectangularMesh:mesh [subst { + cellsize {$xcell $ycell $zcell} + atlas Oxs_BoxAtlas:atlas +}] + +# 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_x [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 { dot } + norm 1.0 + script_args { relpt } + }} + + basename isolated_sk_D2d_x + 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 dot { x y z } { + set ynorm [expr {(2 * $y - 1)}] + set znorm [expr {(2 * $z - 1)}] + set radius [expr {sqrt($ynorm * $ynorm + $znorm * $znorm)}] + if {$radius < 0.2} { return [list -1 0 0] } + return [list 1 0 0] +} diff --git a/examples/INPUT_isolated_sk_DMI_D2d_y.mif b/examples/INPUT_isolated_sk_DMI_D2d_y.mif new file mode 100644 index 0000000..5770a58 --- /dev/null +++ b/examples/INPUT_isolated_sk_DMI_D2d_y.mif @@ -0,0 +1,105 @@ +# MIF 2.1 --------------------------------------------------------------------- + +# Generate an isolated skyrmion with interfacial (C_nv) DMI +# +# 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 the parameters should work similarly for +# the D2d symmetry. Spins only change the sense of rotation +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 XL [expr {15e-9}] +set YL [expr {2e-9}] +set ZL [expr {$XL}] + +set xcell [expr {$XL / 20}] +set ycell [expr {2e-9}] +set zcell [expr {$ZL / 20}] + +# ----------------------------------------------------------------------------- + +# BoxAtlas +Specify Oxs_BoxAtlas:atlas [subst { + xrange {0 $XL} + yrange {0 $YL} + zrange {0 $ZL} + name atlas +}] + +# RectangularMesh +Specify Oxs_RectangularMesh:mesh [subst { + cellsize {$xcell $ycell $zcell} + atlas Oxs_BoxAtlas:atlas +}] + +# 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 { dot } + norm 1.0 + script_args { relpt } + }} + + basename isolated_sk_D2d_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 dot { x y z } { + set xnorm [expr {(2 * $x - 1)}] + set znorm [expr {(2 * $z - 1)}] + set radius [expr {sqrt($xnorm * $xnorm + $znorm * $znorm)}] + if {$radius < 0.2} { return [list 0 -1 0] } + return [list 0 1 0] +} diff --git a/examples/isolated_sk_DMI_D2d.mif b/examples/INPUT_isolated_sk_DMI_D2d_z.mif similarity index 98% rename from examples/isolated_sk_DMI_D2d.mif rename to examples/INPUT_isolated_sk_DMI_D2d_z.mif index 554fc81..564455c 100644 --- a/examples/isolated_sk_DMI_D2d.mif +++ b/examples/INPUT_isolated_sk_DMI_D2d_z.mif @@ -83,7 +83,7 @@ Specify Oxs_MinDriver [subst { script_args { relpt } }} - basename isolated_sk_D2d + basename isolated_sk_D2d_z scalar_field_output_format {text %\#.15g} vector_field_output_format {text %\#.15g} }] diff --git a/examples/INPUT_sk_lattice_DMI_D2d_PBCs_x.mif b/examples/INPUT_sk_lattice_DMI_D2d_PBCs_x.mif new file mode 100644 index 0000000..fda6f1b --- /dev/null +++ b/examples/INPUT_sk_lattice_DMI_D2d_PBCs_x.mif @@ -0,0 +1,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 XL [expr {2e-9}] +set YL [expr {15e-9}] +set ZL [expr {$YL / sqrt(3)}] + +set xcell [expr {2e-9}] +set ycell [expr {$YL / 64}] +set zcell [expr {$ZL / 32}] + +# ----------------------------------------------------------------------------- + +# 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_x [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_x + 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 ynorm [expr {(2 * $y - 1)}] + set znorm [expr {(2 * $z - 1)}] + + foreach ysk [list -1.0 1.0 -1.0 1.0 0.0] zsk [list -1.0 -1.0 1.0 1.0 0.0] { + + set yrel [expr {$ynorm - $ysk}] + set zrel [expr {$znorm - $zsk}] + set radius [expr {sqrt($yrel * $yrel + $zrel * $zrel)}] + + if {$radius < 0.3} { return [list 0 0 -1] } + + } + + return [list 0 0 1] +} diff --git a/examples/INPUT_sk_lattice_DMI_D2d_PBCs_y.mif b/examples/INPUT_sk_lattice_DMI_D2d_PBCs_y.mif new file mode 100644 index 0000000..4e8b416 --- /dev/null +++ b/examples/INPUT_sk_lattice_DMI_D2d_PBCs_y.mif @@ -0,0 +1,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] +} diff --git a/examples/sk_lattice_DMI_D2d_PBCs.mif b/examples/INPUT_sk_lattice_DMI_D2d_PBCs_z.mif similarity index 98% rename from examples/sk_lattice_DMI_D2d_PBCs.mif rename to examples/INPUT_sk_lattice_DMI_D2d_PBCs_z.mif index ebd7f65..a94f82c 100644 --- a/examples/sk_lattice_DMI_D2d_PBCs.mif +++ b/examples/INPUT_sk_lattice_DMI_D2d_PBCs_z.mif @@ -84,7 +84,7 @@ Specify Oxs_MinDriver [subst { script_args { relpt } }} - basename skL_D2d_PBCs + basename skL_D2d_PBCs_z scalar_field_output_format {text %\#.15g} vector_field_output_format {text %\#.15g} }]