三角格子沿着高对称线计算磁化率

编程入门 行业动态 更新时间:2024-10-28 20:29:49

三角格子沿着高<a href=https://www.elefans.com/category/jswz/34/1763015.html style=对称线计算磁化率"/>

三角格子沿着高对称线计算磁化率

充分利用三角格子高对称点的特征,选取最有效的整数点计算,代码可以进一步优化

#include <iostream>
#include <cmath>
#include <vector>
#include <fstream>
#include <iomanip>
#include <complex>
#include <ctime>
using namespace std;#define PI 3.1415926
const int Nk = 60;
int kPath[][2] = {{0, 0}, {Nk/2, 0}, {Nk/3, Nk/3}, {0, 0}};
vector<vector<int>> q;void get_q_line() {for(int i  = 0; i < Nk / 2; i++) {q.push_back({i, 0});}for(int i = 0; i < Nk / 3; i++) {if (i % 2 == 0) {q.push_back({Nk/2 - i / 2, i});}}for(int i = Nk / 3; i > 0; i--) {q.push_back({i, i});}}vector<double> linspace(double min, double max, int n){vector<double> result;// vector iteratorint iterator = 0;for (int i = 0; i <= n-2; i++){double temp = min + i*(max-min)/(floor((double)n) - 1);result.insert(result.begin() + iterator, temp);iterator += 1;}//iterator += 1;result.insert(result.begin() + iterator, max);return result;
}double fermi_function(double E,double mu,double T){return 1/(exp((E-mu)/T)+1);
}int main()
{int nx, ny, nq;double mu = 0;double T = 0.001;double delta = 0.01;ifstream infile;infile.open("Ek.out");infile>>nx>>ny;nq = nx;int Nk = nx * ny;vector<vector<double>> E(nx,vector<double>(ny,0));vector<complex<double>> chi(nq);vector<double> real_chi(nq);get_q_line();for(int i=0;i<nx;i++){for(int j=0;j<ny;j++){infile>>E[i][j];}}clock_t startTime,endTime;startTime = clock();              //计时开始cout<<"start run"<<endl;// vector<double> mus = linspace(0, 0.1, 20);ofstream out("chi0.txt");for(int i = 0; i < q.size(); i++) {for(int j = 0; j < nx; j++) {for(int k = 0; k < ny; k++) {int index_kq_x = (q[i][0] + j) % nx;int index_kq_y = (q[i][1] + k) % ny;double Ek = E[j][k];double Ekq = E[index_kq_x][index_kq_y];double f1 = fermi_function(Ek, mu,T);double f2 = fermi_function(Ekq,mu,T);chi[i] += (f2 - f1) / (Ek - Ekq + 1i * delta);}}chi[i] /= Nk;out << fixed << setprecision(4) << chi[i].real() <<" ";}out << endl;out.close();endTime = clock();cout << "The run time is: " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
}

更多推荐

三角格子沿着高对称线计算磁化率

本文发布于:2024-03-09 01:28:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1723230.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对称   格子

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!