Trisurf Monte Carlo simulator
Samo Penic
2014-03-05 719c9febac2eaff9483fda487b57684afbb59bb2
src/bondflip.c
@@ -15,10 +15,10 @@
ts_bool single_bondflip_timestep(ts_vesicle *vesicle, ts_bond *bond, ts_double *rn){
/*c  Vertex and triangle (lm and lp) indexing for bond flip:
c      +----- k-------+              +----- k ------+
c      |lm1 / | \ lp1 |              |lm1 /   \ lp1 |
c      |lm1 / ^ \ lp1 |              |lm1 /   \ lp1 |
c      |  /   |   \   |              |  /       \   |
c      |/     |     \ |     FLIP     |/    lm     \ |
c     km  lm  | lp   kp    --->      km ---------- kp
c     km  lm  | lp   kp    --->      km ---------> kp
c      |\     |     / |              |\    lp     / |  
c      |  \   |   /   |              |  \       /   |
c      |lm2 \ | / lp2 |              |lm2 \   / lp2 |
@@ -113,7 +113,7 @@
#endif
        {
            //not accepted, reverting changes
       //     fprintf(stderr,"Failed to move, due to MC\n");
            fprintf(stderr,"Failed to move, due to MC\n");
//            ts_flip_bond(km,kp,it,k, bond);
            ts_flip_bond(bond);
@@ -142,7 +142,7 @@
            return TS_FAIL;
        }
    }
        //    fprintf(stderr,"Success\n");
            fprintf(stderr,"Success\n");
/* IF BONDFLIP ACCEPTED, THEN RETURN SUCCESS! */
@@ -153,49 +153,8 @@
ts_bool ts_flip_bond(ts_bond *bond){
fprintf(stderr,"Called!\n");
    ts_triangle *lm=NULL,*lp=NULL, *lp1=NULL, *lm2=NULL;
    ts_uint i; //lmidx, lpidx;
/*This is no longer necessary! if(k==NULL || it==NULL || km==NULL || kp==NULL){
    fatal("ts_flip_bond: You called me with invalid pointers to vertices",999);
}*/
// 1. step. We find lm and lp from k->tristar !
/*    for(i=0;i<it->tristar_no;i++){
        for(j=0;j<k->tristar_no;j++){
            if((it->tristar[i] == k->tristar[j])){ //ce gre za skupen trikotnik
                if((it->tristar[i]->vertex[0] == km || it->tristar[i]->vertex[1]
== km || it->tristar[i]->vertex[2]== km )){
                lm=it->tristar[i];
         //       lmidx=i;
                }
                else
                {
                lp=it->tristar[i];
         //       lpidx=i;
                }
    ts_uint i,j; //lmidx, lpidx;
            }
        }
    }
if(lm==NULL || lp==NULL) fatal("ts_flip_bond: Cannot find triangles lm and lp!",999);
//we look for important triangles lp1 and lm2.
 for(i=0;i<k->tristar_no;i++){
        for(j=0;j<kp->tristar_no;j++){
                if((k->tristar[i] == kp->tristar[j]) && k->tristar[i]!=lp){ //ce gre za skupen trikotnik
                    lp1=k->tristar[i];
            }
        }
}
 for(i=0;i<it->tristar_no;i++){
        for(j=0;j<km->tristar_no;j++){
            if((it->tristar[i] == km->tristar[j]) && it->tristar[i]!=lm){ //ce gre za skupen trikotnik
                    lm2=it->tristar[i];
            }
        }
    }
*/
//Upper block no longer neccessary.
ts_vertex *it=bond->vtx1;
ts_vertex *k=bond->vtx2;
ts_vertex *km=bond->adjvtx[0];
@@ -219,6 +178,22 @@
*/
//find bonds between k and kp (adj[1] vtx)
//find bonds between it and km (adj[0] vtx)
for(i=0;i<3;i++){
if(lm->neigh[i]==lp) break;
   for(j=0;j<3;j++){
      if(lm->neigh[i]->vertex[j]==it) lm2=lm->neigh[i];
   }
}
for(i=0;i<3;i++){
if(lp->neigh[i]==lm) break;
   for(j=0;j<3;j++){
      if(lp->neigh[i]->vertex[j]==k) lp1=lp->neigh[i];
   }
}
/*
for(i=0;i<it->tristar_no;i++){
   if((it->tristar[i]->vertex[0]==km || it->tristar[i]->vertex[1]==km || it->tristar[i]->vertex[2]==km) && (it->tristar[i]->vertex[0]==it || it->tristar[i]->vertex[1]==it || it->tristar[i]->vertex[2]==it)){
      lm2=it->tristar[i];
@@ -227,7 +202,11 @@
      lp1=it->tristar[i];
   }
}
*/
if(lm2==NULL ) fatal("ts_flip_bond: Cannot find triangles lm2!",999);
if(lp1==NULL ) fatal("ts_flip_bond: Cannot find triangles lp1!",999);
if(lm2==NULL || lp1==NULL) fatal("ts_flip_bond: Cannot find triangles lm2 and lp1!",999);
/*
//DEBUG TESTING
fprintf(stderr,"1. step: lm, lm2, lp1 and lp found!\n");
@@ -347,9 +326,9 @@
  energy_vertex(it);
//Extra steps for new bond data structure
bond->adjvtx[0]=k;
bond->adjvtx[1]=it;
// END modifications to data structure!