# -*- coding: utf-8 -*- # 日本語のコメントに必要
from mumax2 import * # mumax2のインポート
from math import * # mathのインポート
# 線上にのみ発生する磁場
# セル数の設定
# 2のべき乗がベストです。
Nx = 601
Ny = 10
Nz = 2
setgridsize(Nx, Ny, Nz)
#セルサイズ
cellX = 5e-9
cellY = 5e-9
cellZ = 5e-9
setcellsize(cellX, cellY, cellZ)
# モジュールの読み込み
load('micromagnetism')
load('solver/rk12') # adaptive Euler-Heun solver
# solverの設定
setv('dt', 1e-12)
setv('m_maxerror', 1./3000) # maximum error per step
# 物質定数の設定
setv('Msat', 8.6e5) # 飽和磁化 Msat
setv('Aex', 1.3e-11) # 交換定数 Aex
# 初期磁化の設定
m=[ [[[1]]], [[[0]]], [[[0]]] ]
setarray('m', m)
saveas("m", "png", [], "initial.png") # png形式で磁化配列mを保存
saveas("m", "omf", ["Text"], "initial.omf") # omf形式で磁化配列mを保存
# 安定状態を求めるために高いダンピング定数αを設定
setv('alpha', 1)
# 安定状態までシミュレーションを走らせる
run_until_smaller('maxtorque', 1e-3 * gets('gamma') * gets('msat'))
saveas("m", "png", [], "relax.png") # png形式で磁化配列mを保存
saveas("m", "omf", ["Text"], "relax.omf") # omf形式で磁化配列mを保存
# 本来のダンピング定数に設定
setv('alpha', 0.01)
# 時刻を0にリセットする
setv('t', 0)
setv('dt', 0.2e-12)
# 局所磁場の設定
# y方向、z方向のセル数が1、x方向のセル数がNxのarrayを用意します。
# x=100のy成分のみ1を設定します。
# このarrayは実行時に試料サイズに引き延ばされます。
# 最終的にマスクはx=100の位置に1×Nx×Nzの大きさとなります。
mask1 = makearray(3, Nx, 1, 1) # 3 x Nx x 1 x 1 array
mask1[1][100][0][0] = 1 # mask1[{x,y,z}成分][x座標][y座標][z座標]
# ↑セル(100,0,0)のy成分に1を設定します。他は0となります。
setmask('B_ext', mask1)
# 振動磁場の設定
By = 0.5 # 振動磁場の振幅(T)
runTime = 25e-9 # シミュレーションを走らせる時間
freq = 18e9 # 周波数(Hz)
T = 1/freq # 周期(sec)
timeStep = T / 30 # 磁場を計算する時間間隔(1周期につき30回計算)
# N:磁場を計算する回数(誤動作を防ぐため、10回多く計算します)↓
N = int(runTime / timeStep) + 10
for i in range(N): # N回計算する
t = i*timeStep # 時刻
# 時刻tでの磁場を設定↓
setpointwise('B_ext', t, [0, By*sin(2*pi*freq*t), 0])
# 出力の設定
# 20 psごとに保存する
autosave("m", "omf", ["Text"], 20e-12) # omf形式で磁化配列mを保存
autosave("m", "png", [], 20e-12) # png形式で磁化配列mを保存
autosave("B_ext", "omf", ["Text"], 20e-12) # omf形式で外部磁場B_extを保存
autosave("B_ext", "png", [], 20e-12) # png形式で外部磁場B_extを保存
# テキストファイルに時刻t、平均磁化m、平均磁場B_extを保存↓
autotabulate(["t", "<m>", "<B_ext>"], "data.txt", 20e-12)
run(runTime) # シミュレーション開始
sync() # 終了