# -*- coding: utf-8 -*-				# 日本語のコメントに必要
from mumax2 import *				# mumax2のインポート
from mumax2_magstate import *			# 初期磁化を渦にするために必要
from mumax2_geom import *			# 形状を(楕)円にするために必要

# 円盤

# セル数の設定
# 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

# 物質定数の設定
Ms = 800e3					# 飽和磁化 Ms
setv('Msat', Ms)				# 飽和磁化を設定
setv('Aex', 1.3e-11)				# 交換定数 Aex
setv('alpha', 1)				# ダンピング定数 α

# 円盤形状の設定
disk=ellipse()				# 円盤の内部を1,外部を0に設定します。
setmask('Msat', disk)			# Msat is multiplied by the disk mask

# 初期磁化を渦にする
m = vortex(1,1) 	# カイラリティ: 反時計回り、ポーラリティ: 上向き
setarray('m', m) 

saveas("m", "png", [], "initial.png")		# png形式で磁化配列mを保存
saveas("m", "omf", ["Text"], "initial.omf")	# omf形式で磁化配列mを保存

# 安定状態までシミュレーションを走らせる
run_until_smaller('maxtorque', 1e-3 * gets('gamma') * Ms)

saveas("m", "png", [], "finish.png")		# png形式で磁化配列mを保存
saveas("m", "omf", ["Text"], "finish.omf")	# omf形式で磁化配列mを保存

# 終了
sync()
