這是c++加eigen3實現的計算能帶程式,在不優化的情況下,速度沒有matlab快,甚至沒有python+numpy快,但是後面會有比較多的for迴圈,以及通過優化後,速度會大大提公升。另外需要搭配乙個python的畫圖程式。
測試需要加上編譯器-o3優化:
g++ -std=c++11 -o3 .\hatree-fork.cpp -o main
#include #include #include #include #include #include #include "../eigen3/eigen/dense"
#define eigen_use_mkl_all
#define eigen_vectorize_sse4_2
const double pi = acos(-1);
const double t = -1; // 最近鄰hopping
const int n = 64; // y方向寬度
// linspace函式
std::vectorlinspace(const double min, const double max, const int n)
result.insert(result.begin() + iterator, max);
return result;
}eigen::matrixxcd hamiltonian0(const double k)
return h;
}void test_band(std::vector& ks){
/*輸出檔案格式如下: 每一行第一列為k值,後面為對應的能量
*/std::ofstream out("ek.txt");
int kn = ks.size();
out//if (eigensolver.info() != eigen::success) abort();
out << k << " ";
for(int i = 0;i<2*n;i++){
out 《畫圖程式
import matplotlib.pyplot as plt
import numpy as np
f = open("ek.txt","r")
data =
n = int(f.readline())
for i in range(n):
line = f.readline()
data = np.matrix(data)
k = data[:,0]
ek = data[:,1:]
n, m = ek.shape
for i in range(m):
plt.plot(k,ek[:,i])
plt.show()
f.close()
鋸齒石墨烯能帶matlab計算程式
這個程式是初步優化後的matlab版本,主要思路是先生成體系的格點座標,再運用座標生成體系的哈密頓量,然後進行對角化計算能帶,能帶的計算使用一維體系超原胞的處理方法。可以進一步優化 主程式nx 3 ny 100 體系寬度 y方向的長度 x,y zigzag graphene nx,ny plot x...
C C 經典程式訓練3 模擬計算器
時間限制 1000毫秒記憶體限制 8192 kib 提交統計討論 問題描述 簡單計算器模擬 輸入兩個整數和乙個運算子,輸出運算結果。輸入第一行輸入兩個整數,用空格分開 第二行輸入乙個運算子 所有運算均為整數運算,保證除數不包含0。產量輸出對兩個數運算後的結果。樣本輸入 樣本輸出 注意 1 patho...
服務計算3 開發 Linux 命令列實用程式
本次作業參考潘老師的部落格 github傳送門 命令列實用程式開發基礎 本次作業主要是編寫乙個命令列程式,處理標準輸入或者文字檔案。程式的要求主要參考 對於命令列程式,首先要做的就是解析命令列傳入的引數,例如執行程式 selpag s 1 e 1 input.txt對於這個命令,我們這個程式應該要至...