第一性原理計算二維 三維電子磁化率方法

2021-10-10 12:56:42 字數 1832 閱讀 2192

1. 用第一性原理完成標準的結構優化,靜態自洽計算

2.  可以先計算出沿著高對稱線的能帶。

3. 在布里淵區均勻打點

這裡有乙個技巧是直接使用到格式分數座標,然後沿著倒格矢等分就行。這樣便於後面的磁化率計算,python指令碼如下:

import numpy as np

import matplotlib.pyplot as plt

g1 = np.array([0 ,1]) # reciprocal lattice 1

g2 = np.array([1, 0]) # reciprocal lattice 2

n1 = 100 # reciprocal lattice 1 上的格點數

n2 = 100 # reciprocal lattice 2 上的格點數

n = n1*n2 # 總的格點數

e1 = g1/n1

e2 = g2/n2

kpos = np.zeros((n1,n2,2))

for i in range(n1):

for j in range(n2):

kpos[i][j][:] = i*e1 + j*e2

kpos = kpos.reshape(n,2)

output = open('kpoints.txt','w')

for i in range(n):

#plt.scatter(kpos[i][0],kpos[i][1])

output.write("%f %f %f %f\n" %(kpos[i][0],kpos[i][1],0.0,1.0))

#plt.show()

output.closed()

4. 需要用乙個指令碼將資料取出來,畫二維能帶,這裡用vaspkit 三維能帶功能。

5. 最後是乙個c++程式,計算磁化率,二維體系o(n^4),三維體系o(n^6)的時間複雜度,所以用c++

starttime = clock(); //計時開始

cout<

/*for(int i=0;i

}*/for(int i=0;i}}

}ofstream out("datachi.txt");

for(int i=0;i

out<

}endtime = clock();//計時結束

cout << "the run time is: " <

}

一維,二維,三維陣列,vector 初始化

1.用memset初始化陣列 1 按照位元組賦值 2 標頭檔案在中 注 由於memset函式是按照位元組賦值的,所以對int型陣列用該函式時,只能是0或 1,否則會出錯,這裡,不管陣列是多少維的,語法均為 int dp 84 84 84 2 memset dp,0,sizeof dp 只能賦值0或 ...

有關python中一維,二維,三維陣列的理解

假設某比賽分a,b,c三個組。每組有參賽者5名,分別來自15個不同的國家。對於a組來說,一維陣列相當於建立乙個姓名列表 name 參賽者a1 參賽者a2 參賽者a5 列表裡有5個元素,代表五個參賽者。接著上面的,對於a組來說,二維陣列相當於建立乙個 姓名 國籍 陣列 輸出的 5,2 表示,5行2列。...

C 中動態定義一維陣列,二維陣列,三維陣列

動態定義一維陣列 二維陣列 三維陣列 include includeusing namespace std int main int hight row col register int i j k srand unsigned time null cout 動態定義一維陣列 int p1 p1 n...