From 43c0420ae7c32fbcd3d784803bdbcf56b25b69e4 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@fe.uni-lj.si>
Date: Mon, 28 Apr 2014 13:30:32 +0000
Subject: [PATCH] Almost over.

---
 src/vertexmove.c |   30 ++++++++++++++++++++++++++----
 1 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/vertexmove.c b/src/vertexmove.c
index 9139ae2..44ef63e 100644
--- a/src/vertexmove.c
+++ b/src/vertexmove.c
@@ -9,9 +9,11 @@
 #include "timestep.h"
 #include "cell.h"
 //#include "io.h"
+#include "io.h"
 #include<stdio.h>
 #include "vertexmove.h"
 #include <string.h>
+#include "constvol.h"
 
 ts_bool single_verticle_timestep(ts_vesicle *vesicle,ts_vertex *vtx,ts_double *rn){
     ts_uint i;
@@ -21,7 +23,7 @@
     ts_double delta_energy,oenergy,dvol=0.0;
     ts_double costheta,sintheta,phi,r;
 	//This will hold all the information of vtx and its neighbours
-	ts_vertex backupvtx[20];
+	ts_vertex backupvtx[20], *constvol_vtx_moved, *constvol_vtx_backup;
 	memcpy((void *)&backupvtx[0],(void *)vtx,sizeof(ts_vertex));
 
 	//Some stupid tests for debugging cell occupation!
@@ -95,6 +97,18 @@
 	};
 
     delta_energy=0;
+
+    if(vesicle->tape->constvolswitch == 1){
+        retval=constvolume(vesicle, vtx, dvol, &delta_energy, constvol_vtx_moved,constvol_vtx_backup);
+        if(retval==TS_FAIL){ // if we couldn't move the vertex to assure constant volume
+            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));
+	        }
+            return TS_FAIL;
+        }
+    }
+
     //update the normals of triangles that share bead i.
     for(i=0;i<vtx->tristar_no;i++) triangle_normal_vector(vtx->tristar[i]);
 	oenergy=vtx->energy;
@@ -109,8 +123,9 @@
 
 	if(vesicle->pswitch == 1){
 		for(i=0;i<vtx->tristar_no;i++) dvol+=vtx->tristar[i]->volume;
-		delta_energy-=vesicle->pressure*dvol;
+        delta_energy-=vesicle->pressure*dvol;
 	};
+
 
 /* No poly-bond energy for now!
 	if(vtx->grafted_poly!=NULL){
@@ -141,10 +156,14 @@
     //update the normals of triangles that share bead i.
    for(i=0;i<vtx->tristar_no;i++) triangle_normal_vector(vtx->tristar[i]);
 
+    if(vesicle->tape->constvolswitch == 1){
+        ts_bool constvolumerestore(constvol_vtx_backup);
+    }
+
     return TS_FAIL; 
     }
 }
-		
+	//accepted	
 //	oldcellidx=vertex_self_avoidance(vesicle, &backupvtx[0]);
 	if(vtx->cell!=vesicle->clist->cell[cellidx]){
 		retval=cell_add_vertex(vesicle->clist->cell[cellidx],vtx);
@@ -152,6 +171,10 @@
 		if(retval==TS_SUCCESS) cell_remove_vertex(backupvtx[0].cell,vtx);
 		
 	}
+
+    if(vesicle->tape->constvolswitch == 1){
+        ts_bool constvolumeaccept(constvol_vtx_backup);
+    }
 //	if(oldcellidx);
     //END MONTE CARLOOOOOOO
     return TS_SUCCESS;
@@ -310,7 +333,6 @@
 	cellidx=vertex_self_avoidance(vesicle, vtx);
 	//check occupation number
 	retval=cell_occupation_number_and_internal_proximity(vesicle->clist,cellidx,vtx);
-	
 	if(retval==TS_FAIL){
 		vtx=memcpy((void *)vtx,(void *)&backupvtx,sizeof(ts_vertex));
         return TS_FAIL;

--
Gitblit v1.9.3