一番単純なプログラム(正方形)の初期磁化をランダムにしてみます。

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. setv('Msat', 800e3) # 飽和磁化 Msat
  30. setv('Aex', 1.3e-11) # 交換定数 Aex
  31. setv('alpha', 1) # ダンピング定数 α
  32.  
  33. # 初期磁化をランダムに設定
  34. mv = makearray(3, Nx, Ny, Nz)
  35. for m in range(Nx):
  36. for n in range(Ny):
  37. for o in range(Nz):
  38. mv[0][m][n][o] = random.uniform(-1, 1)
  39. mv[1][m][n][o] = random.uniform(-1, 1)
  40. mv[2][m][n][o] = random.uniform(-1, 1)
  41. setarray('m', mv)
  42.  
  43. saveas("m", "png", [], "initial.png") # png形式で磁化配列mを保存
  44. saveas("m", "omf", ["Text"], "initial.omf") # omf形式で磁化配列mを保存
  45.  
  46. # 安定状態までシミュレーションを走らせる
  47. run_until_smaller('maxtorque', 1e-3 * gets('gamma') * gets('msat'))
  48.  
  49. saveas("m", "png", [], "finish.png") # png形式で磁化配列mを保存
  50. saveas("m", "omf", ["Text"], "finish.omf") # omf形式で磁化配列mを保存
  51.  
  52. # 終了
  53. sync()
ソースコードのダウンロード: square+random.py

一番単純なプログラム(正方形)と異なる部分は、3行目と33~41行目です。
3行目ではpythonのrandomモジュールをインポートしています。
33~41行目では、実際にランダムな初期磁化を設定しています。
34行目: 3×Nx×Ny×Nzの大きさを持つリストmvを作成します。この時点ではまだmvに数値は設定されていません。
35~40行目: forループを回して各セルにランダムな数値を設定します。なお、
for m in range(Nx):
はpythonでのforループの書き方で、C言語では
for(int i =0; i < Nx; i++){
}
と同じになります。forループ以下、36~40行目にインデント(字下げ)が設定されていますが、Pythonの文法上必要なものなので、変更することはできません。
38行目で位置(m,n,o)のセルのx成分に値を設定します。random.uniform(-1,1)は-1から1の間のランダムな値を返す関数です。39行目でy成分、40行目でz成分を設定します。forループを回すことですべてのセルにランダムな値を設定します。
41行目: リストmvを磁化配列mにセットします。

実行結果

initial.png
finish.png







today: -
yesterday: -
total: -
Since 2013/08/14

タグ:

+ タグ編集
  • タグ:
最終更新:2013年08月14日 23:24