From 1ad6d1ed6bda8a11f0922c33445c6fb52c0ffa96 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Thu, 12 Jul 2012 15:40:42 +0000
Subject: [PATCH] Gained 10% of time....

---
 src/spherical_trisurf.c |    2 +-
 src/vertexmove.c        |   54 +++++++++++++++++++++++++++++++++++++++++++-----------
 2 files changed, 44 insertions(+), 12 deletions(-)

diff --git a/src/spherical_trisurf.c b/src/spherical_trisurf.c
index 82e500a..e3e1986 100644
--- a/src/spherical_trisurf.c
+++ b/src/spherical_trisurf.c
@@ -44,7 +44,7 @@
 
 
 
-for(i=0;i<10;i++){
+for(i=0;i<1;i++){
 	cell_occupation(vesicle);
 	for(j=0;j<1000;j++){
 		single_timestep(vesicle);
diff --git a/src/vertexmove.c b/src/vertexmove.c
index c62aeda..54b4491 100644
--- a/src/vertexmove.c
+++ b/src/vertexmove.c
@@ -11,6 +11,7 @@
 //#include "io.h"
 #include<stdio.h>
 #include "vertexmove.h"
+#include <string.h>
 
 ts_bool single_verticle_timestep(ts_vesicle *vesicle,ts_vertex *vtx,ts_double
 *rn){
@@ -18,10 +19,13 @@
     ts_double dist;
     ts_bool retval; 
     ts_uint cellidx; 
-    ts_double xold,yold,zold;
+    //ts_double xold,yold,zold;
     ts_double delta_energy,oenergy;
     ts_vertex *ovtx;
     ts_vertex *tvtx=(ts_vertex *)calloc(1,sizeof(ts_vertex));
+
+	//This will hold all the information of vtx and its neighbours
+	ts_vertex **backupvtx=(ts_vertex **)calloc(vtx->neigh_no+1,sizeof(ts_vertex *));
 
     //randomly we move the temporary vertex
 	tvtx->x=vtx->x+vesicle->stepsize*(2.0*rn[0]-1.0);
@@ -45,11 +49,22 @@
 //	fprintf(stderr,"Fail 2\n");
         return TS_FAIL;
     } 
-    
+   
+ 
     //if all the tests are successful, then we update the vertex position
-    xold=vtx->x;
-    yold=vtx->y;
-    zold=vtx->z;
+	backupvtx[0]=(ts_vertex *)malloc(sizeof(ts_vertex));	
+	backupvtx[0]=(ts_vertex *)memcpy((void *)backupvtx[0],(void *)vtx,sizeof(ts_vertex));
+
+	for(i=0;i<vtx->neigh_no;i++){
+	backupvtx[i+1]=(ts_vertex *)malloc(sizeof(ts_vertex));	
+	backupvtx[i+1]=memcpy((void *)backupvtx[i+1],(void *)vtx->neigh[i],sizeof(ts_vertex));
+	}
+//	fprintf(stderr,"CREATED\n");
+	
+
+  //  xold=vtx->x;
+  //  yold=vtx->y;
+  //  zold=vtx->z;
     ovtx=malloc(sizeof(ts_vertex));
     vtx_copy(ovtx,vtx);
     vtx->x=tvtx->x;
@@ -82,19 +97,30 @@
 #endif
     {
     //not accepted, reverting changes
-    vtx->x=xold;
-    vtx->y=yold;
-    vtx->z=zold;
+  //  vtx->x=xold;
+  //  vtx->y=yold;
+  //  vtx->z=zold;
+
+	vtx=memcpy((void *)vtx,(void *)backupvtx[0],sizeof(ts_vertex));
+	free(backupvtx[0]);
+	for(i=0;i<vtx->neigh_no;i++){
+	vtx->neigh[i]=memcpy((void *)vtx->neigh[i],(void *)backupvtx[i+1],sizeof(ts_vertex));
+	free(backupvtx[i+1]);
+	}
+	free(backupvtx);
+//	fprintf(stderr,"Reverted\n");
+	
     //update the normals of triangles that share bead i.
     for(i=0;i<vtx->tristar_no;i++) triangle_normal_vector(vtx->tristar[i]);
     //energy and curvature
-    energy_vertex(vtx);
+   // energy_vertex(vtx);
     //the same is done for neighbouring vertices
-	for(i=0;i<vtx->neigh_no;i++) energy_vertex(vtx->neigh[i]);
-	free(ovtx->bond_length);
+//	for(i=0;i<vtx->neigh_no;i++) energy_vertex(vtx->neigh[i]);
+//	free(ovtx->bond_length);
     free(ovtx->bond_length_dual);
     free(ovtx);
     vtx_free(tvtx);
+
     return TS_FAIL; 
     }
 }
@@ -106,6 +132,12 @@
     free(ovtx->bond_length_dual);
     free(ovtx);
     vtx_free(tvtx);
+	free(backupvtx[0]);
+	for(i=0;i<vtx->neigh_no;i++){
+	free(backupvtx[i+1]);
+	}
+	free(backupvtx);
+//	fprintf(stderr,"Accepted\n");
     return TS_SUCCESS;
 }
 

--
Gitblit v1.9.3