From b5cd8cc72380e9ca576ec942753391df85a2a436 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Thu, 28 Feb 2019 19:14:54 +0000
Subject: [PATCH] Many new plugins :D

---
 src/vertexmove.c |   50 ++++++++++++++++----------------------------------
 1 files changed, 16 insertions(+), 34 deletions(-)

diff --git a/src/vertexmove.c b/src/vertexmove.c
index e62967b..c512ccd 100644
--- a/src/vertexmove.c
+++ b/src/vertexmove.c
@@ -23,56 +23,38 @@
     ts_double delta_energy, delta_energy_cv,oenergy,dvol=0.0, darea=0.0, dstretchenergy=0.0;
     ts_double costheta,sintheta,phi,r;
 	//This will hold all the information of vtx and its neighbours
-	ts_vertex backupvtx[20], *constvol_vtx_moved=NULL, *constvol_vtx_backup=NULL;
-	memcpy((void *)&backupvtx[0],(void *)vtx,sizeof(ts_vertex));
+    ts_vertex backupvtx[20], *constvol_vtx_moved=NULL, *constvol_vtx_backup=NULL;
+    memcpy((void *)&backupvtx[0],(void *)vtx,sizeof(ts_vertex));
 
-//random move in a sphere with radius stepsize:
-	r=vesicle->stepsize*rn[0];
-	phi=rn[1]*2*M_PI;
-	costheta=2*rn[2]-1;
-	sintheta=sqrt(1-pow(costheta,2));
-	vtx->x=vtx->x+r*sintheta*cos(phi);
-	vtx->y=vtx->y+r*sintheta*sin(phi);
-	vtx->z=vtx->z+r*costheta;
+    //random move in a sphere with radius stepsize:
+    r=vesicle->stepsize*rn[0];
+    phi=rn[1]*2*M_PI;
+    costheta=2*rn[2]-1;
+    sintheta=sqrt(1-pow(costheta,2));
+    vtx->x=vtx->x+r*sintheta*cos(phi);
+    vtx->y=vtx->y+r*sintheta*sin(phi);
+    vtx->z=vtx->z+r*costheta;
 
-
-// TODO: Maybe faster if checks only nucleus-neighboring cells
-// Nucleus penetration check:
-//#define SQ(x) x*x
-if(vesicle->R_nucleus>0.0){
-	if ((vtx->x-vesicle->nucleus_center[0])*(vtx->x-vesicle->nucleus_center[0])+ (vtx->y-vesicle->nucleus_center[1])*(vtx->y-vesicle->nucleus_center[1]) + (vtx->z-vesicle->nucleus_center[2])*(vtx->z-vesicle->nucleus_center[2]) < vesicle->R_nucleus){
-		vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex));
-		return TS_FAIL;
-	}
-} else if(vesicle->R_nucleusX>0.0){
-//	fprintf(stderr,"DEBUG, (Rx, Ry,Rz)^2=(%f,%f,%f)\n",vesicle->R_nucleusX, vesicle->R_nucleusY, vesicle->R_nucleusZ);
-//	if (SQ(vtx->x-vesicle->nucleus_center[0])/vesicle->R_nucleusX + SQ(vtx->y-vesicle->nucleus_center[1])/vesicle->R_nucleusY + SQ(vtx->z-vesicle->nucleus_center[2])/vesicle->R_nucleusZ < 1.0){
-	if ((vtx->x-vesicle->nucleus_center[0])*(vtx->x-vesicle->nucleus_center[0])/vesicle->R_nucleusX + (vtx->y-vesicle->nucleus_center[1])*(vtx->y-vesicle->nucleus_center[1])/vesicle->R_nucleusY + (vtx->z-vesicle->nucleus_center[2])*(vtx->z-vesicle->nucleus_center[2])/vesicle->R_nucleusZ < 1.0){
-//	if (SQ(vtx->x)/vesicle->R_nucleusX + SQ(vtx->y)/vesicle->R_nucleusY + SQ(vtx->z)/vesicle->R_nucleusZ < 1.0){
-		vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex));
-		return TS_FAIL;
-	}
-
-}
-
-	// plane confinement check whether the new position of vertex will be out of bounds
+// plane confinement check whether the new position of vertex will be out of bounds
 	if(vesicle->tape->plane_confinement_switch){
 		if(vtx->z>vesicle->confinement_plane.z_max || vtx->z<vesicle->confinement_plane.z_min){
 		vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex));
 		return TS_FAIL;
 		}
 	}
-//#undef SQ
 
 /* Entry point for plugin vm_hard_constraint() function */
-	for(i=0; i<vesicle->plist->n;i++){
-		retval = vesicle->plist->plugin[i]->function->vm_hard_constraint(vesicle,vtx,&backupvtx[0]);
+	ts_plugin_chain *ptr=vesicle->plist->chain->vm_hard_constraint;
+	while(ptr!=NULL){
+		retval = ptr->plugin->function->vm_hard_constraint(vesicle,vtx, &backupvtx[0]);
 		if(retval==TS_FAIL){
 			vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex));
 			return TS_FAIL;
 		}
+		ptr=ptr->next;
 	}
 
+
  
 //if all the tests are successful, then energy for vtx and neighbours is calculated
 	for(i=0;i<vtx->neigh_no;i++){

--
Gitblit v1.9.3