neighbourk fix
[physik/posic.git] / moldyn.c
index d52fcd3..815fc87 100644 (file)
--- a/moldyn.c
+++ b/moldyn.c
@@ -231,13 +231,15 @@ int create_lattice(t_moldyn *moldyn,u8 type,double lc,int element,double mass,
        printf("[moldyn] created lattice with %d atoms\n",count);
 
        while(count) {
-               moldyn->atom[count-1].element=element;
-               moldyn->atom[count-1].mass=mass;
-               moldyn->atom[count-1].attr=attr;
-               moldyn->atom[count-1].bnum=bnum;
                count-=1;
+               moldyn->atom[count].element=element;
+               moldyn->atom[count].mass=mass;
+               moldyn->atom[count].attr=attr;
+               moldyn->atom[count].bnum=bnum;
+               check_per_bound(moldyn,&(moldyn->atom[count].r));
        }
 
+
        return ret;
 }
 
@@ -495,7 +497,6 @@ int link_cell_neighbour_index(t_moldyn *moldyn,int i,int j,int k,t_list *cell) {
        count2=27;
        a=nx*ny;
 
-
        cell[0]=lc->subcell[i+j*nx+k*a];
        for(ci=-1;ci<=1;ci++) {
                bx=0;
@@ -529,7 +530,7 @@ int link_cell_neighbour_index(t_moldyn *moldyn,int i,int j,int k,t_list *cell) {
                }
        }
 
-       lc->dnlc=count2;
+       lc->dnlc=count1;
        lc->countn=27;
 
        return count2;
@@ -618,7 +619,6 @@ int moldyn_integrate(t_moldyn *moldyn) {
        /* sqaure of some variables */
        moldyn->tau_square=moldyn->tau*moldyn->tau;
        moldyn->cutoff_square=moldyn->cutoff*moldyn->cutoff;
-
        /* calculate initial forces */
        potential_force_calc(moldyn);
 
@@ -761,8 +761,8 @@ int potential_force_calc(t_moldyn *moldyn) {
        int i,j,k,count;
        t_atom *atom,*btom,*ktom;
        t_linkcell *lc;
-       t_list neighbour[27];
-       t_list *this,*thisk,*neighbourk;
+       t_list neighbour[27],neighbourk[27];
+       t_list *this,*thisk;
        u8 bc,bck;
        int countn,dnlc;
 
@@ -774,7 +774,7 @@ int potential_force_calc(t_moldyn *moldyn) {
        moldyn->energy=0.0;
 
        for(i=0;i<count;i++) {
-       
+
                /* reset force */
                v3_zero(&(atom[i].f));
 
@@ -971,6 +971,20 @@ int lennard_jones(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) {
  * tersoff potential & force for 2 sorts of atoms
  */
 
+/* create mixed terms from parameters and set them */
+int tersoff_mult_complete_params(t_tersoff_mult_params *p) {
+
+       printf("[moldyn] tersoff parameter completion\n");
+       p->Smixed=sqrt(p->S[0]*p->S[1]);
+       p->Rmixed=sqrt(p->R[0]*p->R[1]);
+       p->Amixed=sqrt(p->A[0]*p->A[1]);
+       p->Bmixed=sqrt(p->B[0]*p->B[1]);
+       p->lambda_m=0.5*(p->lambda[0]+p->lambda[1]);
+       p->mu_m=0.5*(p->mu[0]+p->mu[1]);
+
+       return 0;
+}
+
 /* tersoff 1 body part */
 int tersoff_mult_1bp(t_moldyn *moldyn,t_atom *ai) {