maskを適用して試料形状を任意に設定します。今回のシミュレーションでは、以下のようなマスクファイルを用いました。

mask.png
このマスクファイルはWindowsに付属のペイントで作成しました。保存形式はpngが良いです(bmpはmumax2で使えませんでした)。マスクファイルとinputファイルは同じ場所に保存しておいてください。

inputファイルの記述

  1. # -*- coding: utf-8 -*- # 日本語のコメントに必要
  2. from mumax2 import * # mumax2のインポート
  3. import random # randomのインポート
  4.  
  5. # 試料の形状をマスクで指定
  6.  
  7. # セル数の設定
  8. # 2のべき乗がベストです。
  9. Nx = 128
  10. Ny = 128
  11. Nz = 1
  12. setgridsize(Nx, Ny, Nz)
  13.  
  14. # 試料サイズ(メートル)
  15. sizeX = 500e-9
  16. sizeY = 500e-9
  17. sizeZ = 50e-9
  18. setcellsize(sizeX/Nx, sizeY/Ny, sizeZ/Nz)
  19.  
  20. # モジュールの読み込み
  21. load('micromagnetism')
  22. load('solver/rk12') # adaptive Euler-Heun solver
  23.  
  24. # solverの設定
  25. setv('dt', 1e-15) # inital time step
  26. setv('m_maxerror', 1./3000) # maximum error per step
  27.  
  28. # 物質定数の設定
  29. Ms = 800e3
  30. setv('Msat', Ms) # 飽和磁化 Msat
  31. setv('Aex', 1.3e-11) # 交換定数 Aex
  32. setv('alpha', 1) # ダンピング定数 α
  33.  
  34. # マスクファイルの読み込み
  35. setmask_file('Msat', 'mask.png')
  36.  
  37. # 初期磁化をランダムに設定
  38. mv = makearray(3, Nx, Ny, Nz)
  39. for m in range(Nx):
  40. for n in range(Ny):
  41. for o in range(Nz):
  42. mv[0][m][n][o] = random.uniform(-1, 1)
  43. mv[1][m][n][o] = random.uniform(-1, 1)
  44. mv[2][m][n][o] = random.uniform(-1, 1)
  45. setarray('m', mv)
  46.  
  47. saveas("m", "png", [], "initial.png") # png形式で磁化配列mを保存
  48. saveas("m", "omf", ["Text"], "initial.omf") # omf形式で磁化配列mを保存
  49.  
  50. # 安定状態までシミュレーションを走らせる
  51. run_until_smaller('maxtorque', 1e-3 * gets('gamma') * Ms)
  52.  
  53. saveas("m", "png", [], "finish.png") # png形式で磁化配列mを保存
  54. saveas("m", "omf", ["Text"], "finish.omf") # omf形式で磁化配列mを保存
  55.  
  56. # 終了
  57. sync()
ソースコードのダウンロード: mask.py

35行目のsetmask_file関数でマスクファイルを読み込みます。
37~45行目で初期磁化をランダムに設定しています(初期磁化をランダムにする参照)。
51行目は、形状を円盤にするを参照してください。

実行結果

initial.png
finish.png











タグ:

+ タグ編集
  • タグ:
最終更新:2012年09月27日 15:24