X-Git-Url: https://www.hackdaworld.org/gitweb/?a=blobdiff_plain;f=moldyn.c;h=f6c3c81d4bbf95b5787474dbd03e18bea90e183e;hb=cb177e7c208a85b45d77b09fcada23b62d0248b5;hp=0d5027c57df699447bcdf61a2c2b516235c2fa0d;hpb=91e4a00285261865ffce4b9553d153b562c80ee6;p=physik%2Fposic.git diff --git a/moldyn.c b/moldyn.c index 0d5027c..f6c3c81 100644 --- a/moldyn.c +++ b/moldyn.c @@ -339,22 +339,24 @@ int create_lattice(t_moldyn *moldyn,u8 type,double lc,int element,double mass, } moldyn->atom=ptr; atom=&(moldyn->atom[count]); - - v3_zero(&origin); + + /* no atoms on the boundaries (only reason: it looks better!) */ + origin.x=0.5*lc; + origin.y=0.5*lc; + origin.z=0.5*lc; switch(type) { case CUBIC: set_nn_dist(moldyn,lc); - origin.x=0.5*lc; - origin.y=0.5*lc; - origin.z=0.5*lc; ret=cubic_init(a,b,c,lc,atom,&origin); break; case FCC: + v3_scale(&origin,&origin,0.5); set_nn_dist(moldyn,0.5*sqrt(2.0)*lc); - ret=fcc_init(a,b,c,lc,atom,NULL); + ret=fcc_init(a,b,c,lc,atom,&origin); break; case DIAMOND: + v3_scale(&origin,&origin,0.25); set_nn_dist(moldyn,0.25*sqrt(3.0)*lc); ret=diamond_init(a,b,c,lc,atom,&origin); break; @@ -429,65 +431,55 @@ int cubic_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin) { int fcc_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin) { int count; - int i,j; + int i,j,k,l; t_3dvec o,r,n; t_3dvec basis[3]; - double help[3]; - double x,y,z; - - x=a*lc; - y=b*lc; - z=c*lc; - if(origin) v3_copy(&o,origin); - else v3_zero(&o); + count=0; + if(origin) + v3_copy(&o,origin); + else + v3_zero(&o); /* construct the basis */ - for(i=0;i<3;i++) { - for(j=0;j<3;j++) { - if(i!=j) help[j]=0.5*lc; - else help[j]=.0; - } - v3_set(&basis[i],help); - } + memset(basis,0,3*sizeof(t_3dvec)); + basis[0].x=0.5*lc; + basis[0].y=0.5*lc; + basis[1].x=0.5*lc; + basis[1].z=0.5*lc; + basis[2].y=0.5*lc; + basis[2].z=0.5*lc; - v3_zero(&r); - count=0; - /* fill up the room */ r.x=o.x; - while(r.xf),&(ai->f),&force); virial_calc(ai,&force,&distance); +if(force.x*distance.x<=0) printf("virial xx: %.15f -> %f %f %f\n",force.x*distance.x,distance.x,distance.y,distance.z); virial_calc(aj,&force,&distance); /* f and d signe switched */ }