一番単純な、正方形試料の磁化の安定状態を調べるシミュレーションを実行してみます。

シミュレーションの概要

シミュレーションを実行するには、大まかに以下の3項目の設定が必要となります。
  1. 試料サイズ、セルサイズの設定
  2. 物質定数の設定
  3. 初期磁化の設定
以下ではそれぞれの項目について説明します。

1.試料サイズ、セルサイズの設定

マイクロマグシミュレーションでは下図のように試料をセルで区切って計算を行います。

上画像のPDFファイル:セルサイズ.pdf

試料の大きさをsizeX×sizeY×sizeZとします。この試料をNx×Ny×Nz個に分割してセルに分けます。ここで、Nx,Ny,Nzはパフォーマンスの都合上2の冪乗(2,4,8,16,…)が良いとされています(それ以外の数値でも問題はありません)。一つのセルのサイズはsizeX/Nx×sizeY/Ny×sizeZ/Nzとなります。

2.物質定数の設定

典型的には、飽和磁化、交換定数、ダンピング定数の設定が必要です。このシミュレーションではパーマロイ(ニッケルと鉄の合金)の値を使用します。
飽和磁化 M_s = 8.0 \times 10^5 {\rm A/m}
交換定数 A = 1.3 \times 10^{-11} {\rm J/m}
ダンピング定数 \alpha = 1
▲パーマロイの物質定数

※mumax2ではSI単位系を用いています。
※ダンピング定数が大きいほどシミュレーションが早く終わります。静的状態はダンピング定数に依存しないので、実際の値より大きな値を設定して計算が早く終わるようにしています。

3.初期磁化の設定

シミュレーションが始まる時の磁化配置を設定します。このシミュレーションではすべてのセルの磁化が(1,1,0)方向を向いているものとします。

inputファイルの記述

以下に、実際のinputファイルの内容を示します。
  1. # -*- coding: utf-8 -*- # 日本語のコメントに必要
  2. from mumax2 import * # mumax2のインポート
  3.  
  4. # 正方形
  5.  
  6. # セル数の設定
  7. # 2のべき乗がベストです。
  8. Nx = 128
  9. Ny = 128
  10. Nz = 1
  11. setgridsize(Nx, Ny, Nz)
  12.  
  13. # 試料サイズ(メートル)
  14. sizeX = 500e-9
  15. sizeY = 500e-9
  16. sizeZ = 50e-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]]], [[[1]]], [[[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. # 安定状態までシミュレーションを走らせる
  40. run_until_smaller('maxtorque', 1e-3 * gets('gamma') * gets('msat'))
  41.  
  42. saveas("m", "png", [], "finish.png") # png形式で磁化配列mを保存
  43. saveas("m", "omf", ["Text"], "finish.omf") # omf形式で磁化配列mを保存
  44.  
  45. # 終了
  46. sync()
ソースコードのダウンロード: square.py

コードの解説

1行目: コメント(各行の#以降の部分)に日本語が含まれている場合、文字コードを指定しないとエラーとなるため、この記述をしています。
2行目: Pythonにmumax2モジュールを認識させます。この部分はおまじないだと思っていただけるとよいです。
6~17行目: 試料サイズ、セルサイズの設定です。
19~21行目: mumax2にモジュールを設定します。この部分もおまじないだと思っていただけるとよいです。
23~25行目: solverの設定を行います。ほとんどの場合、この設定は変更しなくても良いと思います。
32~34行目: 初期磁化を設定します。[]はPythonでのリストの表記です。リストmに磁化の方向(1,1,0)を設定します。
36,37行目: シミュレーションを実行する前に磁化配列mを保存します。saveas関数の記述方法は以下の通りです。
saveas("m","保存形式",["オプション"],"ファイル名")
"保存形式"にpngを指定すると、普通のpng画像が出力されます。"オプション"は指定しません。
"保存形式"にomfを指定すると、OOMMFで読み込める形式のファイルが出力されます。"オプション"に"Text"を指定すると、テキスト形式で出力されます。"オプション"に"Binary 4"を指定すると、バイナリ形式で出力されます。
40行目: このコマンドでシミュレーションが実行されます。磁化のトルクの最大値が1e-3×gamma×msat以下になったらシミュレーションが終了します。
42,43行目: シミュレーション終了後の磁化配列を保存します。
46行目: inputファイルの最後にsync()を記述します。

実行結果

initial.png
finish.png


なお、画像の色と磁化の向きの対応は以下の通りとなっています。








today: -
yesterday: -
total: -
Since 2013/06/12

タグ:

+ タグ編集
  • タグ:
最終更新:2013年06月12日 10:09