fcc晶格的动力学montecarlo模拟
我目前正试图实现一篇研究论文,这篇论文要求我在C中制作一个fcc晶格。有两个原子a和B以及一个空位,通过这个空位迁移应该发生。在能源计算中,应包括第一近邻和第二近邻。我在为fcc晶格的邻居编码时遇到了麻烦。那么,有人能告诉我如何给邻居编码吗。我提到的代码,我已经写到现在fcc晶格的动力学montecarlo模拟,c,montecarlo,C,Montecarlo,我目前正试图实现一篇研究论文,这篇论文要求我在C中制作一个fcc晶格。有两个原子a和B以及一个空位,通过这个空位迁移应该发生。在能源计算中,应包括第一近邻和第二近邻。我在为fcc晶格的邻居编码时遇到了麻烦。那么,有人能告诉我如何给邻居编码吗。我提到的代码,我已经写到现在 #define N 8 #define mcs 1000 #define SEED 5674599 #define Seed 526897 int main() { FILE *fp; int L[N][N][
#define N 8
#define mcs 1000
#define SEED 5674599
#define Seed 526897
int main()
{
FILE *fp;
int L[N][N][N],i,j,k,x,y,z,a,b,c,mc;
double t=0;
srand(SEED);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if((float)rand()/RAND_MAX >= 0.5)
{
L[i][j][k]= 1; //Atom A
}
else
{
L[i][j][k]= -1; //Atom B
}
}
}
}
for(i=0;i<N;i++)//applying periodic boundary conditions
{
L[i][j][0]=L[i][j][N-1];
L[i][0][k]=L[i][N-1][k];
i=(i+N)%N;
for(j=0;j<N;j++)
{
L[0][j][k]=L[N-1][j][k];
L[i][j][0]=L[i][j][N-1];
j=(j+N)%N;
for(k=0;k<N;k++)
{
L[0][j][k]=L[N-1][j][k];
L[i][j][0]=L[i][j][N-1];
k=(k+N)%N;
L[0][0][0]=L[N-1][N-1][N-1];
}
}
}
srand(Seed);
x=rand()%N;
y=rand()%N;
z=rand()%N;
L[x][y][z]=0; //vacant site
//printf("L[%d][%d][%d]=%d",x,y,z,L[x][y][z]);
fp=fopen("kmc.dat","w");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
L[i][j][k]=L[i][j][k];
fprintf(fp,"%d %d %d %d\n",i,j,k,L[i][j][k]);
}
fprintf(fp,"\n");
}
fprintf(fp,"\n");
}
fclose(fp);
srand(time(NULL));
for(mc=0;mc<=1;mc++)
{
for(i=0;i<N;i++)
{
a=rand()%N;
for(j=0;j<N;j++)
{
b=rand()%N;
for(k=0;k<N;k++)
{
c=rand()%N;
//printf("\nL[%d][%d][%d]=%d",a,b,c,L[a][b][c]);
}
}
}
}
}
#定义N 8
#定义mcs 1000
#定义种子5674599
#定义种子526897
int main()
{
文件*fp;
intl[N][N][N],i,j,k,x,y,z,a,b,c,mc;
双t=0;
srand(种子);
对于(i=0;我需要先了解FCC晶格!!我想化学和编码知识是一种罕见的组合。请告诉我们您想如何实现这个邻居,再告诉我们一点它的属性。我们可以跟进您使用的一些链接。请在问题中用“应用周期边界条件”来描述这些内容考虑到一个样本立方体积,我会强迫相对的两边有相同的a原子和B原子分布,这也是你的意思吗?如果是这样的话,你的代码似乎不正确,除了像I=(I+N)%N;
这样的行没有用,这些指数已经限制在[0,N]范围内了。如果你能更好地阐明你试图建模的结构,这也会很有用,因为乍一看,它似乎更像是一个原始的立方系统,而不是一个简单的系统。