fcc晶格的动力学montecarlo模拟

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][

我目前正试图实现一篇研究论文,这篇论文要求我在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]);
                    }


                }
            }

        }
}
#定义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]范围内了。如果你能更好地阐明你试图建模的结构,这也会很有用,因为乍一看,它似乎更像是一个原始的立方系统,而不是一个简单的系统。