初期磁化を磁壁構造にするを改造して、Zhang-Liスピントルクを導入してみます。

inputファイルの記述

  1. # -*- coding: utf-8 -*- # 日本語のコメントに必要
  2. from mumax2 import * # mumax2のインポート
  3.  
  4. # Zhang-Liスピントルク
  5.  
  6. # セル数の設定
  7. # 2のべき乗がベストです。
  8. Nx = 512
  9. Ny = 8
  10. Nz = 1
  11. setgridsize(Nx, Ny, Nz)
  12.  
  13. # 試料サイズ(メートル)
  14. sizeX = 1536e-9
  15. sizeY = 24e-9
  16. sizeZ = 3e-9
  17. setcellsize(sizeX/Nx, sizeY/Ny, sizeZ/Nz)
  18.  
  19. # モジュールの読み込み
  20. load('micromagnetism')
  21. load('solver/rk12') # adaptive Euler-Heun solver
  22. load('zhang-li') # zhang-liスピントルク
  23.  
  24. # solverの設定
  25. setv('dt', 1e-15) # inital time step
  26. setv('m_maxerror', 1./3000) # maximum error per step
  27.  
  28. # 物質定数の設定
  29. setv('Msat', 800e3) # 飽和磁化 Msat
  30. setv('Aex', 1.3e-11) # 交換定数 Aex
  31.  
  32. # 初期磁化を磁壁構造に設定
  33. mv = makearray(3, Nx, Ny, Nz)
  34. for m in range(Nx):
  35. for n in range(Ny):
  36. for o in range(Nz):
  37. xx = float(m)/float(Nx)
  38. mv[0][m][n][o] = 1.0 # 左側の領域のx成分を1にする
  39. mv[1][m][n][o] = 0.0
  40. mv[2][m][n][o] = 0.0
  41. if (xx > 0.5) :
  42. mv[0][m][n][o] = -1.0 # 右側の領域のx成分を-1にする
  43. mv[1][m][n][o] = 0.0
  44. mv[2][m][n][o] = 0.0
  45. setarray('m', mv)
  46.  
  47. saveas("m", "png", [], "initial.png") # png形式で磁化配列mを保存
  48. saveas("m", "omf", ["Text"], "initial.omf") # omf形式で磁化配列mを保存
  49.  
  50. setv('alpha', 1) # 安定状態を求めるために高いダンピング定数αを設定
  51.  
  52. # 安定状態までシミュレーションを走らせる
  53. run_until_smaller('maxtorque', 1e-3 * gets('gamma') * gets('msat'))
  54.  
  55. saveas("m", "png", [], "relax.png") # png形式で磁化配列mを保存
  56. saveas("m", "omf", ["Text"], "relax.omf") # omf形式で磁化配列mを保存
  57.  
  58. setv('alpha', 0.01) # 本来のダンピング定数に設定
  59. setv('xi',0.05) # 非断熱(β)項
  60. setv('polarisation',0.7) # スピン偏極率
  61.  
  62. # 電流の設定
  63. j = makearray(3, Nx, Ny, Nz)
  64. for m in range(Nx):
  65. for n in range(Ny):
  66. for o in range(Nz):
  67. j[0][m][n][o] = 1.0 # +x方向に一様な電流
  68. j[1][m][n][o] = 0.0
  69. j[2][m][n][o] = 0.0
  70. setv('j', [1e12, 0, 0]) # 電流密度:1e12 A/m^2
  71. setmask('j', j)
  72.  
  73. # 時刻を0にリセットする
  74. setv('t', 0)
  75. setv('dt', 0.2e-12)
  76.  
  77. # 出力の設定
  78. # 20 psごとに保存する
  79. autosave("m", "png", [], 20e-12) # png形式で磁化配列mを保存
  80.  
  81. run(1e-8) # シミュレーション開始
  82. sync() # 終了
ソースコードのダウンロード: spinTorque.py

プログラム概要

まずダンピング定数を1にして、磁化の安定状態を求めます。安定状態が求まったらいったんファイル出力します(ralax.png, relax.omf)。次にダンピングを本来の値(0.01)にして、電流を設定し、時間を0にリセットします。20psごとにpngファイルを出力する設定にし、1e-8秒間シミュレーションを走らせて終わります。

コードの解説

62~71行目: 電流を設定します。この場合、すべてのセルに、(1,0,0)方向の電流が流れます。
79行目: autosave関数は一定時間ごとにファイルを出力する関数です。このプログラムでは20e-12秒ごとに磁化配列mをpng形式で出力します。
81行目: run関数は指定された時間だけシミュレーションを走らせるための関数です。このプログラムでは1e-8秒間シミュレーションを走らせます。

実行結果

initial.png
relax.png



autosaveで出力された画像をつなげて動画にしたのが下のファイルです。
movie.mpg(H.264形式)
movie.wmv(wmv形式)

磁壁がスピントルクにより移動することがわかります。










タグ:

+ タグ編集
  • タグ:
最終更新:2012年09月28日 13:34