inputファイルの記述
# -*- coding: utf-8 -*- # 日本語のコメントに必要
from mumax2 import * # mumax2のインポート
import random # randomのインポート
# 正方形
# セル数の設定
# 2のべき乗がベストです。
Nx = 128
Ny = 128
Nz = 1
setgridsize(Nx, Ny, Nz)
# 試料サイズ(メートル)
sizeX = 500e-9
sizeY = 500e-9
sizeZ = 50e-9
setcellsize(sizeX/Nx, sizeY/Ny, sizeZ/Nz)
# モジュールの読み込み
load('micromagnetism')
load('solver/rk12') # adaptive Euler-Heun solver
# solverの設定
setv('dt', 1e-15) # inital time step
setv('m_maxerror', 1./3000) # maximum error per step
# 物質定数の設定
setv('Msat', 800e3) # 飽和磁化 Msat
setv('Aex', 1.3e-11) # 交換定数 Aex
setv('alpha', 1) # ダンピング定数 α
# 初期磁化をランダムに設定
mv = makearray(3, Nx, Ny, Nz)
for m in range(Nx):
for n in range(Ny):
for o in range(Nz):
mv[0][m][n][o] = random.uniform(-1, 1)
mv[1][m][n][o] = random.uniform(-1, 1)
mv[2][m][n][o] = random.uniform(-1, 1)
setarray('m', mv)
saveas("m", "png", [], "initial.png") # png形式で磁化配列mを保存
saveas("m", "omf", ["Text"], "initial.omf") # omf形式で磁化配列mを保存
# 安定状態までシミュレーションを走らせる
run_until_smaller('maxtorque', 1e-3 * gets('gamma') * gets('msat'))
saveas("m", "png", [], "finish.png") # png形式で磁化配列mを保存
saveas("m", "omf", ["Text"], "finish.omf") # omf形式で磁化配列mを保存
# 終了
sync()
一番単純なプログラム(正方形)と異なる部分は、3行目と33~41行目です。
3行目ではpythonのrandomモジュールをインポートしています。
33~41行目では、実際にランダムな初期磁化を設定しています。
34行目: 3×Nx×Ny×Nzの大きさを持つリストmvを作成します。この時点ではまだmvに数値は設定されていません。
35~40行目: forループを回して各セルにランダムな数値を設定します。なお、
は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