我目前正在尝试实施一份研究论文,要求我在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][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]);
}
}
}
}
}