当前位置:网站首页>On the calculation of non interaction polarizability
On the calculation of non interaction polarizability
2020-11-09 11:37:00 【open_22rhv8iu】
First , We need to sample evenly in the Brillouin zone , Generate a series of uniform points , Because of the uniform sealing , Given k and q after ,k+q It can be expressed by the existing points . It should be noted that , We need to deal with out of scope k+q Do the translation of the point ( Take the mold with the number )
after , Then we can calculate the polarizability . It's equivalent to using discrete coordinates here .
For two-dimensional systems, the time complexity is O(N^4), C++ 1 Seconds can count 10^7 Time ,200*200 De lattice point ,C++ Probably need 160 The second time , The actual time is 303.249s
square lattice matlib Code
nx = 100;
ny = 100;
kx = linspace(0,2*pi,nx);
ky = linspace(0,2*pi,ny);
[KX,KY] = meshgrid(kx,ky);
E = -(cos(KX) + cos(KY));
%mesh(KX,KY,E);
mu = 0;
T = 0.001;
delta = 0.01*0; % Small void part
chi = zeros(nx,ny);
Ef=0;
%[C,h] = contour(KX,KY,E,[Ef,0,0]);
for i = 1:nx
for j = 1:ny
for k=1:nx
for l=1:ny
index_kq_x = mod(i+k,nx)+1;
index_kq_y = mod(j+l,ny)+1;
Ek = E(k,l);
Ekq = E(index_kq_x,index_kq_y);
chi(i,j) = chi(i,j) + (Fermi_funtion(Ek,mu,T)-Fermi_funtion(Ekq,mu,T))/(Ek-Ekq+1i*delta);
end
end
end
end
mesh(KX,KY,-real(chi))
It's very slow
C++ Code
#include <iostream>
#include <cmath>
#include <vector>
#include <fstream>
#include <iomanip>
#include <complex>
#include <ctime>
using namespace std;
#define PI 3.1415926
vector<double> linspace(double min, double max, int n){
vector<double> result;
// vector iterator
int 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 = 200, ny = 200;
double mu = 0;
double T = 0.026;
double delta = 0.01;
vector<double> kx = linspace(0,2*PI,nx);
vector<double> ky = linspace(0,2*PI,ny);
vector<vector<double>> E(nx,vector<double>(ny,0));
vector<vector<complex<double>>> chi(nx,vector<complex<double>>(ny));
vector<vector<double>> real_chi(nx,vector<double>(ny,0));
clock_t startTime,endTime;
startTime = clock(); // Timing begins
cout<<"start run"<<endl;
for(int i=0;i<nx;i++){
for(int j=0;j<ny;j++){
E[i][j] = -(cos(kx[i])+cos(ky[i]));
}
}
for(int i=0;i<nx;i++){
for(int j=0;j<ny;j++){
for(int k=0;k<nx;k++){
for(int l=0;l<nx;l++){
int index_kq_x = (i+k)%nx;
int index_kq_y = (j+l)%ny;
double Ek = E[k][l];
double Ekq = E[index_kq_x][index_kq_y];
double f1 = fermi_function(Ek,0,T);
double f2 = fermi_function(Ekq,0,T);
if(k!=index_kq_x&&l!=index_kq_y){
chi[i][j] += (f1-f2)/(Ek-Ekq+1i*delta);
}
}
}
}
}
ofstream out("Datachi.txt");
for(int i=0;i<nx;i++){
for(int j=0;j<ny;j++){
out<<fixed<<setprecision(4)<<chi[i][j].real()<<" ";
}
out<<endl;
}
endTime = clock();// End of the timing
cout << "The run time is: " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
}
Python Drawing script
import numpy as np
import matplotlib.pyplot as plt
from math import pi
file = open("Datachi.txt", "r")
row = file.readlines()
list_text = []
for line in row:
line = list(line.strip().split(' '))
s = []
for i in line:
s.append(float(i))
list_text.append(s)
#print(list_text)
nx = 10
ny = 10
chi = np.array(list_text)
kx = np.linspace(0,2*pi,nx)
ky = np.linspace(0,2*pi,ny)
KX, KY = np.meshgrid(kx, ky)
#plt.contourf(KX,KY,chi)
#plt.show()
fig = plt.figure(figsize=plt.figaspect(0.5))
ax = fig.add_subplot(1, 2, 1, projection='3d')
surf = ax.plot_surface(KX, KY, chi, rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)
fig.colorbar(surf, shrink=0.5, aspect=10)
plt.show()
版权声明
本文为[open_22rhv8iu]所创,转载请带上原文链接,感谢
边栏推荐
- AI fresh student's annual salary has increased to 400000, you can still make a career change now!
- SEO见风使舵,是对还是错?
- 使用流读文件写文件处理大文件
- 块级元素和行内元素
- Principle analysis and performance tuning of elasticsearch
- Implement crud operation
- Understanding data structures starts with this article~
- Android rights
- AI应届生年薪涨到40万了,你现在转行还来得及!
- Source code analysis of ThinkPHP framework execution process
猜你喜欢
AI fresh student's annual salary has increased to 400000, you can still make a career change now!
SQL statement to achieve the number of daffodils
接口测试如何在post请求中传递文件
共创爆款休闲游戏 “2020 Ohayoo游戏开发者沙龙”北京站报名开启
ThinkPHP框架执行流程源码解析
Recommended tools for Mac
Learning notes of nodejs
微信圈子
nodejs学习笔记(慕课网nodejs从零开发web Server博客项目)
百亿级数据分表后怎么分页查询?
随机推荐
开源ERP招聘了
外贸自建网站域名的选择— Namesilo 域名购买
Visual Studio (MAC) installation process notes
Front end code style practice prettier + eslint + git hook + lint staged
From coding, network transmission, architecture design, Tencent cloud high quality, high availability real-time audio and video technology practice
The choice of domain name of foreign trade self built website
Log analysis tool - goaccess
彩虹排序 | 荷兰旗问题
What details does C + + improve on the basis of C
手写数字图片识别-卷积神经网络
共创爆款休闲游戏 “2020 Ohayoo游戏开发者沙龙”北京站报名开启
jsliang 求职系列 - 08 - 手写 Promise
5年程序员面试,常见面试问题解析
AI应届生年薪涨到40万了,你现在转行还来得及!
Mac 必备优质工具推荐
百亿级数据分表后怎么分页查询?
Using rem, the font size changes when the screen zooms
From the practice, this paper discusses the problems caused by the inconsistent design of ruby syntax.
Impact of libssl on CentOS login
真正拖垮你的,是沉没成本