oommf軟體的使用以及微磁學的計算?

Landau–Lifshitz–Gilbert equation

每一項所具體代表的意義是什麼?它是如何推導出來的?

如何學習oommf的使用方法以及使用時需要注意的問題?


感覺這個問題過了這麼久,樓主應該沒什麼問題了.....

但是畢設相關,正好我做的oommf微磁學模擬,那我就來寫一篇簡明版的oommf教程,而且有感於這個軟體基本上沒有什麼教程。不過用起來還是很容易的

軟體的安裝這裡就不說了,可以參考 --&>微磁學模擬軟體OOMMF及其安裝(附教程) - 模擬模擬 - 小木蟲 - 學術 科研 互動社區

oommf通過導入問題描述文件(mif)進行求解,下面我先以一份完整的mif文件(2.1)來解釋一下這裡面定義的一些內容

# MIF 2.1
# Description: Co nanorod1-K 001 Hy

# 定義π 4*atan(1.0) 或acos(-1.0)
set pi [expr {4*atan(1.0)}]

# 定義μ0 = 4π×10?7 V·s/(A·m)
set mu0 [expr {4*$pi*1e-7}]

# 每一個oommf的mif文件定義一種磁學構造
# 通過定義Oxs_ext對象描述微磁學問題
# &<1&> 容器
#微磁學模擬的幾何空間是通過容器(Atlases)定義的.這個容器可以是一個連續的空間或者幾個不連續的區域.
#以下定義了一個長方體5nm*5nm*200nm
Specify Oxs_BoxAtlas:atlas {
xrange {0 5e-9}
yrange {0 5e-9}
zrange {0 200e-9}
}

# &<2&>網格
#網格是微磁學模擬離散化的一種形式,
#如下建立方體網格2.5nm*2.5nm*2.5nm,每個格子的長寬高和坐標軸平行,並且遍布整個容器,網格邊長需小於交換長度
Specify Oxs_RectangularMesh:mesh {
cellsize {25e-10 25e-10 25e-10}
atlas :atlas
}

# &<3&> 能量
#為了使所有的能量都被包含到微磁學模擬中加以計算,我們需要把所有的能量項都用specify定義,能量項的數目不受限制
# Oxs_UniformExchange 定義標準的6個最近鄰的交換作用,並計算交換能.容器空間中的交換係數相同
Specify Oxs_UniformExchange [subst {
A 31e-12
}]

# Oxs_UniaxialAnisotropy 定義單軸磁晶各項異性能,
Specify Oxs_UniaxialAnisotropy {
K1 1000e3
axis { Oxs_UniformVectorField {
norm 1
vector {0 0 1}
} }
}

# Oxs_UZeeman 均勻磁場的磁場能
# 一個複合列表,每個子列表由7個元素組成:前3個表示該範圍的開始欄位的x,y和z分量,接下來的3個表示x,y和z分量,結束欄位的範圍,
# x,y,z 對應納米線的長寬高
# 最後一個元素指定磁場變化的(線性)步長。
# 三個序列,從0到正的最大,從正的最大到負的最大,從負的最大到正的最大。這是測磁滯回線的通常加磁場的方法
# multiplier 是係數,乘以0.001變T(特斯拉),再除以$mu0,就是A/m了

Specify Oxs_UZeeman [subst {
multiplier [expr {0.001/$mu0}]
Hrange {
{ 0 0 0 0 20000 50 200 }
{ 0 20000 50 0 -20000 -50 400 }
{ 0 -20000 -500 0 20000 50 400 }
}
}]

# Oxs_Demag 標準的退磁能項
Specify Oxs_Demag {}

# &<4&>演化器
# alpha即α,阻尼係數
# 演化器主要功能是更新步(step)與步(step)之間的磁化狀態.以步進的方式推動微磁學模擬向前演化
# 有兩種演化器,1.利用LLG動力學過程實現的時域演化; 2.通過直接最小化技術鎖定能量平面的最小值

Specify Oxs_RungeKuttaEvolve:evolve {
alpha 0.5
}

# &<5&>驅動
# 驅動則是再整體上協調演化器,讓演化器完成特定的任務和階段
# Oxs_TimeDriver,控制時間演化器
# basename即計算保存時的文件名
Specify Oxs_TimeDriver [subst {
basename Conanorod1Hy
evolver :evolve
stopping_dm_dt 1
mesh :mesh
Ms 12e5
m0 {0.5 0.5 1}

}]

關於mif文件中的一些定義可以參考官方文檔或者南京大學謝凱旋博士的畢業論文 納米磁結構中的磁化分布與渦旋運動的微磁學模擬--《南京大學》2013年博士論文

啟動之後軟體的主界面如下,這裡很多都是勾選複選框展開界面或調出某一功能的界面

主界面的Programs表示程序功能,右邊的Threads表示當前已打開的線程?程序?差不多這個意思

應用程序mmArchive提供自動化的矢量欄位和數據表存儲服務。(就是把計算結果保存到本地,默認保存在和導入的mif文件同個目錄下,記得勾上,盡量使每個mif文件放在分開的文件夾下)

應用程序mmDisp提供了數據的可視化功能

Oxsii是問題的求解器,在這裡導入mif文件後求解。其他幾個的說明參考官方文檔吧,我翻譯起來太蹩腳了

勾選上圖中的mmArchive&<1&>和Oxsii&<2&>後就可以看到這兩個界面了

在Oxsii中,導入定義好的mif文件,選擇輸出DataTable(DataTable中包含B,M等各種所有的求解結果),通過mmArchive保存,勾選Stage every 1 表示輸出的是每一個階段,之後點Run程序就開始計算了

計算時間和mif文件中的一些參數有關,計算完之後可以看到多了一個 .odt文件,裡面是各個階段的值,可以通過截取必要的數據進行繪圖。此外,一般還需要輸出Oxs_TimeDriver::Spin(自旋磁矩構型),選擇上圖中的Oxs_TimeDriver::Spin,其他項不變,計算完成之後可以看到多了很多的 .omf文件

在mmDisp中打開某個 .omf文件就能看到磁矩的分布了(如下圖),選擇View --&>Viewpoint可以調整視角;選擇Options--&>configure...,裡面是一些參數,通常可能需要修改Zoom的值;看著感覺合適了之後,選擇File --&> write config 保存為XXX.config文件(如果需要的話)

這些 .omf文件一般拿來用一個工具OOMMFTools(Index of /daigohji/projects/OOMMFTools)生成視頻,在這個工具要導入合適的 .config文件,比如剛剛保存的那個,這個工具還有截取 .odt 文件中的數據,轉換MATLAB數據文件的功能。個人覺得,這個轉換視頻的很慢,而且經常效果不好,可以在計算的時候把mmDisp也打開,這樣就能看到磁化過程中磁矩的變化,調整合適的參數後就可以錄屏了。

以上,如有不對的地方請指正


LLG方程的各項定義可以參加維基百科:微磁學

這個方程的右邊有兩項,第一項是磁矩在外磁場下的拉莫進動,這是人們熟知的。第二項描述了進動阻尼,這一項會導致磁矩最終收斂於外場方向。這一項是根據實驗觀察結果的唯像描述,而並不是「推導」出來的。

oommf的腳本是用Tcl/Tk寫的,在安裝目錄/app/oxs/examples下有很多範例腳本,可供參考。如果想精通,最好還是看作者寫的使用指南: OOMMF Documentation


推薦閱讀:

光有波粒二相性,波到底是什麼?是物質嗎?還是一種運動形式?
物理法則是一種外星智能嗎?
量子力學與相對論催生出了核能和計算機還有激光器,如果弦論得到檢驗且發展完備。他又會催生出怎樣的發明呢?
如何區分偽隨機和真隨機?
量子場論在其適用範圍內哪些問題或者實驗上失效或者說不能解釋?

TAG:量子物理 | 材料科學 | 計算電磁學 |