From 978e52dad1ade8ab82871846e52449a064c201ac Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@fe.uni-lj.si>
Date: Thu, 11 Sep 2014 15:57:16 +0000
Subject: [PATCH] continuation of trisurf scripts

---
 src/vertexmove.c |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/src/vertexmove.c b/src/vertexmove.c
index cecb73e..28a8880 100644
--- a/src/vertexmove.c
+++ b/src/vertexmove.c
@@ -92,7 +92,7 @@
 	memcpy((void *)&backupvtx[i+1],(void *)vtx->neigh[i],sizeof(ts_vertex));
 	}
 
-	if(vesicle->pswitch == 1 || vesicle->tape->constvolswitch==1){
+	if(vesicle->pswitch == 1 || vesicle->tape->constvolswitch>0){
 		for(i=0;i<vtx->tristar_no;i++) dvol-=vtx->tristar[i]->volume;
 	};
 
@@ -113,11 +113,27 @@
         delta_energy+=vtx->neigh[i]->xk*(vtx->neigh[i]->energy-oenergy);
     }
 
-	if(vesicle->pswitch == 1 || vesicle->tape->constvolswitch == 1){
+	if(vesicle->pswitch == 1 || vesicle->tape->constvolswitch >0){
 		for(i=0;i<vtx->tristar_no;i++) dvol+=vtx->tristar[i]->volume;
         if(vesicle->pswitch==1) delta_energy-=vesicle->pressure*dvol;
 	};
 
+
+	if(vesicle->tape->constvolswitch==2){
+		/*check whether the dvol is gt than epsvol */
+			//fprintf(stderr,"DVOL=%1.16e\n",dvol);
+		if(fabs(vesicle->volume+dvol-V0)>epsvol){
+			//restore old state.
+ 			vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex));
+	        	for(i=0;i<vtx->neigh_no;i++){
+		        	vtx->neigh[i]=memcpy((void *)vtx->neigh[i],(void *)&backupvtx[i+1],sizeof(ts_vertex));
+	        	}
+            		for(i=0;i<vtx->tristar_no;i++) triangle_normal_vector(vtx->tristar[i]); 
+            		//fprintf(stderr,"fajlam!\n");
+            		return TS_FAIL;
+		}
+
+	} else
 //    vesicle_volume(vesicle);
 //    fprintf(stderr,"Volume before=%1.16e\n", vesicle->volume);
    if(vesicle->tape->constvolswitch == 1){
@@ -150,7 +166,7 @@
     //MONTE CARLOOOOOOOO
     if(delta_energy>=0){
 #ifdef TS_DOUBLE_DOUBLE
-        if(exp(-delta_energy)< drand48() )
+        if(exp(-delta_energy)< drand48())
 #endif
 #ifdef TS_DOUBLE_FLOAT
         if(expf(-delta_energy)< (ts_float)drand48())
@@ -189,6 +205,9 @@
 		
 	}
 
+    if(vesicle->tape->constvolswitch == 2){
+	vesicle->volume+=dvol;
+    } else
     if(vesicle->tape->constvolswitch == 1){
         constvolumeaccept(vesicle,constvol_vtx_moved,constvol_vtx_backup);
     }

--
Gitblit v1.9.3