静磁場を印加するを応用して、細線のヒステリシス曲線を描いてみます。

inputファイルの記述

  1. # -*- coding: utf-8 -*- # 日本語のコメントに必要
  2. from mumax2 import * # mumax2のインポート
  3.  
  4. # 細線のヒステリシス
  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.  
  23. # solverの設定
  24. setv('dt', 1e-15) # inital time step
  25. setv('m_maxerror', 1./3000) # maximum error per step
  26.  
  27. # 物質定数の設定
  28. setv('Msat', 800e3) # 飽和磁化 Msat
  29. setv('Aex', 1.3e-11) # 交換定数 Aex
  30. setv('alpha', 1) # ダンピング定数 α
  31.  
  32. # 初期磁化の設定
  33. m=[ [[[1]]], [[[0]]], [[[0]]] ]
  34. setarray('m', m)
  35.  
  36. saveas("m", "png", [], "initial.png") # png形式で磁化配列mを保存
  37. saveas("m", "omf", ["Text"], "initial.omf") # omf形式で磁化配列mを保存
  38.  
  39. B_high = 1 # +側の磁場
  40. B_lo = -1 # -側の磁場
  41. B_step = 0.1 # 刻み幅
  42. N = int((B_high - B_lo) / B_step) # 繰り返し回数
  43. B = B_high # B: 現在の磁場
  44.  
  45. for i in range(N): # B: + → -
  46. echo('B =' + str(B)) # 現在の磁場を表示
  47. setv('B_ext', [B, 0, 0]) # シミュレータに磁場を設定
  48. # 磁化の安定状態までシミュレーションを走らせる↓
  49. run_until_smaller('maxtorque', 1e-3 * gets('gamma') * gets('msat'))
  50. saveas("m","png",[],"B="+str(B)+"down.png") # png形式で磁化配列mを保存
  51. tabulate(["B_ext","<m>"], "data.txt") # 外部磁場、試料の磁化を出力
  52. echo('-------------------') # 区切り線
  53. B = B - B_step # 磁場を変化させる
  54.  
  55. for i in range(N+1): # B: - → +
  56. echo('B =' + str(B)) # 現在の磁場を表示
  57. setv('B_ext', [B, 0, 0]) # シミュレータに磁場を設定
  58. # 磁化の安定状態までシミュレーションを走らせる↓
  59. run_until_smaller('maxtorque', 1e-3 * gets('gamma') * gets('msat'))
  60. saveas("m","png",[],"B="+str(B)+"up.png") # png形式で磁化配列mを保存
  61. tabulate(["B_ext","<m>"], "data.txt") # 外部磁場、試料の磁化を出力
  62. echo('-------------------') # 区切り線
  63. B = B + B_step # 磁場を変化させる
  64.  
  65. # 終了
  66. sync()
ソースコードのダウンロード: hysteresis.py

39~43行目で与える磁場の設定を行っています。
45~53行目ではB_highからB_loまで磁場を小さくしながらシミュレーションを行っています。
55~63行目ではB_loからB_highまで磁場を大きくしながらシミュレーションを行っています。

ここで初めて使われる関数を説明します
echo関数は画面に文字列あるいは変数の値を表示する関数です。文字列を表示させる場合は''で囲みます。変数の値を表示する場合はstr関数を使って数値を文字列に変換します。+で文字列を結合することができます。
tabulate関数は、各種情報をテキスト形式で保存する関数です。
tabulate([保存したい情報],"ファイル名")
このシミュレーションでは[保存したい情報]に"B_ext"(外部磁場)、"<m>"(試料全体での磁化の平均)を指定しています。forループで何回もtabulate関数が呼び出された場合、ファイル名が同じであればそのファイルの最後尾に情報が追加されます。

実行結果

data.txt
このデータをグラフにしたものが下図です。
上グラフの生データ(Igor):hysteresis.pxp







タグ:

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