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/main.c                             |    7 +
 src/plugins/Makefile.am                |    9 ++
 src/plugins/Makefile                   |   33 +++++++
 src/plugins/default_hard_constraints.c |   16 ---
 src/plugins/nucleus.c                  |   33 ++++++++
 src/plugins/plane_confinement.c        |   26 ++++++
 src/plugins/Makefile.in                |   33 +++++++
 src/general.h                          |    1 
 src/vertexmove.c                       |   50 ++++--------
 9 files changed, 150 insertions(+), 58 deletions(-)

diff --git a/src/general.h b/src/general.h
index db3182e..16025f2 100644
--- a/src/general.h
+++ b/src/general.h
@@ -340,6 +340,7 @@
 typedef struct {
 	ts_plugin_chain *at_start;
 	ts_plugin_chain *after_vesicle_init;
+	ts_plugin_chain *vm_hard_constraint;
 	ts_plugin_chain *cleanup;
 } ts_plugin_chains;
 
diff --git a/src/main.c b/src/main.c
index d820471..3cfc2af 100644
--- a/src/main.c
+++ b/src/main.c
@@ -28,12 +28,15 @@
 int main(int argv, char *argc[]){
 	ts_char *plugin0 = (ts_char *)calloc(255,sizeof(ts_char));
 	ts_char *plugin1 = (ts_char *)calloc(255,sizeof(ts_char));
+	ts_char *plugin2 = (ts_char *)calloc(255,sizeof(ts_char));
 	strcpy(plugin0,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/demoplugin.so");
 	strcpy(plugin1,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/vmdefaulthardconstraints.so");
-	ts_char **plugins=(ts_char **)calloc(2,sizeof(ts_char *));
+	strcpy(plugin2,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/plane_confinement.so");
+	ts_char **plugins=(ts_char **)calloc(3,sizeof(ts_char *));
 	*plugins=plugin0;
 	plugins[1]=plugin1;
-	ts_plugin_list *plist=init_plugin_list(plugins,2);
+	plugins[2]=plugin2;
+	ts_plugin_list *plist=init_plugin_list(plugins,3);
 	//printf("%s", plist->chain->at_start->next->plugin->filename);
 	//ts_fprintf(stdout, "TRISURF in PRVI PLUGIN %s\n", plist->plugin[0]->details->name);
 	ts_vesicle *vesicle;
diff --git a/src/plugins/Makefile b/src/plugins/Makefile
index b53b505..3ff2734 100644
--- a/src/plugins/Makefile
+++ b/src/plugins/Makefile
@@ -137,6 +137,19 @@
 demoplugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(demoplugin_la_LDFLAGS) $(LDFLAGS) -o $@
+nucleus_la_LIBADD =
+am_nucleus_la_OBJECTS = nucleus.lo
+nucleus_la_OBJECTS = $(am_nucleus_la_OBJECTS)
+nucleus_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(nucleus_la_LDFLAGS) $(LDFLAGS) -o $@
+plane_confinement_la_LIBADD =
+am_plane_confinement_la_OBJECTS = plane_confinement.lo
+plane_confinement_la_OBJECTS = $(am_plane_confinement_la_OBJECTS)
+plane_confinement_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(plane_confinement_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
 vmdefaulthardconstraints_la_LIBADD =
 am_vmdefaulthardconstraints_la_OBJECTS = default_hard_constraints.lo
 vmdefaulthardconstraints_la_OBJECTS =  \
@@ -179,9 +192,11 @@
 am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(demoplugin_la_SOURCES) \
+SOURCES = $(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \
+	$(plane_confinement_la_SOURCES) \
 	$(vmdefaulthardconstraints_la_SOURCES)
-DIST_SOURCES = $(demoplugin_la_SOURCES) \
+DIST_SOURCES = $(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \
+	$(plane_confinement_la_SOURCES) \
 	$(vmdefaulthardconstraints_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -331,11 +346,15 @@
 top_builddir = ../..
 top_srcdir = ../..
 AM_CFLAGS = -Wall -Werror -DTS_VERSION=\"$(GITVERSION)\" -fgnu89-inline -Wno-error=date-time -I..
-lib_LTLIBRARIES = demoplugin.la vmdefaulthardconstraints.la
+lib_LTLIBRARIES = demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la
 demoplugin_la_SOURCES = demo_plugin.c
 demoplugin_la_LDFLAGS = -module -avoid-version -export-dynamic
 vmdefaulthardconstraints_la_SOURCES = default_hard_constraints.c
 vmdefaulthardconstraints_la_LDFLAGS = -module -avoid-version -export-dynamic
+nucleus_la_SOURCES = nucleus.c 
+nucleus_la_LDFLAGS = -module -avoid-version -export-dynamic
+plane_confinement_la_SOURCES = plane_confinement.c 
+plane_confinement_la_LDFLAGS = -module -avoid-version -export-dynamic
 all: all-am
 
 .SUFFIXES:
@@ -408,6 +427,12 @@
 demoplugin.la: $(demoplugin_la_OBJECTS) $(demoplugin_la_DEPENDENCIES) $(EXTRA_demoplugin_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(demoplugin_la_LINK) -rpath $(libdir) $(demoplugin_la_OBJECTS) $(demoplugin_la_LIBADD) $(LIBS)
 
+nucleus.la: $(nucleus_la_OBJECTS) $(nucleus_la_DEPENDENCIES) $(EXTRA_nucleus_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(nucleus_la_LINK) -rpath $(libdir) $(nucleus_la_OBJECTS) $(nucleus_la_LIBADD) $(LIBS)
+
+plane_confinement.la: $(plane_confinement_la_OBJECTS) $(plane_confinement_la_DEPENDENCIES) $(EXTRA_plane_confinement_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(plane_confinement_la_LINK) -rpath $(libdir) $(plane_confinement_la_OBJECTS) $(plane_confinement_la_LIBADD) $(LIBS)
+
 vmdefaulthardconstraints.la: $(vmdefaulthardconstraints_la_OBJECTS) $(vmdefaulthardconstraints_la_DEPENDENCIES) $(EXTRA_vmdefaulthardconstraints_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(vmdefaulthardconstraints_la_LINK) -rpath $(libdir) $(vmdefaulthardconstraints_la_OBJECTS) $(vmdefaulthardconstraints_la_LIBADD) $(LIBS)
 
@@ -419,6 +444,8 @@
 
 include ./$(DEPDIR)/default_hard_constraints.Plo
 include ./$(DEPDIR)/demo_plugin.Plo
+include ./$(DEPDIR)/nucleus.Plo
+include ./$(DEPDIR)/plane_confinement.Plo
 
 .c.o:
 	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
index dc68014..c65261c 100644
--- a/src/plugins/Makefile.am
+++ b/src/plugins/Makefile.am
@@ -1,7 +1,14 @@
 AM_CFLAGS = -Wall -Werror -DTS_VERSION=\"$(GITVERSION)\" -fgnu89-inline -Wno-error=date-time -I..
-lib_LTLIBRARIES= demoplugin.la vmdefaulthardconstraints.la
+lib_LTLIBRARIES= demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la
 demoplugin_la_SOURCES= demo_plugin.c
 demoplugin_la_LDFLAGS = -module -avoid-version -export-dynamic
 
 vmdefaulthardconstraints_la_SOURCES = default_hard_constraints.c
 vmdefaulthardconstraints_la_LDFLAGS = -module -avoid-version -export-dynamic
+
+nucleus_la_SOURCES = nucleus.c 
+nucleus_la_LDFLAGS = -module -avoid-version -export-dynamic
+
+plane_confinement_la_SOURCES = plane_confinement.c 
+plane_confinement_la_LDFLAGS = -module -avoid-version -export-dynamic
+
diff --git a/src/plugins/Makefile.in b/src/plugins/Makefile.in
index 7d51ce3..bf7b06d 100644
--- a/src/plugins/Makefile.in
+++ b/src/plugins/Makefile.in
@@ -137,6 +137,19 @@
 demoplugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(demoplugin_la_LDFLAGS) $(LDFLAGS) -o $@
+nucleus_la_LIBADD =
+am_nucleus_la_OBJECTS = nucleus.lo
+nucleus_la_OBJECTS = $(am_nucleus_la_OBJECTS)
+nucleus_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(nucleus_la_LDFLAGS) $(LDFLAGS) -o $@
+plane_confinement_la_LIBADD =
+am_plane_confinement_la_OBJECTS = plane_confinement.lo
+plane_confinement_la_OBJECTS = $(am_plane_confinement_la_OBJECTS)
+plane_confinement_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(plane_confinement_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
 vmdefaulthardconstraints_la_LIBADD =
 am_vmdefaulthardconstraints_la_OBJECTS = default_hard_constraints.lo
 vmdefaulthardconstraints_la_OBJECTS =  \
@@ -179,9 +192,11 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(demoplugin_la_SOURCES) \
+SOURCES = $(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \
+	$(plane_confinement_la_SOURCES) \
 	$(vmdefaulthardconstraints_la_SOURCES)
-DIST_SOURCES = $(demoplugin_la_SOURCES) \
+DIST_SOURCES = $(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \
+	$(plane_confinement_la_SOURCES) \
 	$(vmdefaulthardconstraints_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -331,11 +346,15 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AM_CFLAGS = -Wall -Werror -DTS_VERSION=\"$(GITVERSION)\" -fgnu89-inline -Wno-error=date-time -I..
-lib_LTLIBRARIES = demoplugin.la vmdefaulthardconstraints.la
+lib_LTLIBRARIES = demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la
 demoplugin_la_SOURCES = demo_plugin.c
 demoplugin_la_LDFLAGS = -module -avoid-version -export-dynamic
 vmdefaulthardconstraints_la_SOURCES = default_hard_constraints.c
 vmdefaulthardconstraints_la_LDFLAGS = -module -avoid-version -export-dynamic
+nucleus_la_SOURCES = nucleus.c 
+nucleus_la_LDFLAGS = -module -avoid-version -export-dynamic
+plane_confinement_la_SOURCES = plane_confinement.c 
+plane_confinement_la_LDFLAGS = -module -avoid-version -export-dynamic
 all: all-am
 
 .SUFFIXES:
@@ -408,6 +427,12 @@
 demoplugin.la: $(demoplugin_la_OBJECTS) $(demoplugin_la_DEPENDENCIES) $(EXTRA_demoplugin_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(demoplugin_la_LINK) -rpath $(libdir) $(demoplugin_la_OBJECTS) $(demoplugin_la_LIBADD) $(LIBS)
 
+nucleus.la: $(nucleus_la_OBJECTS) $(nucleus_la_DEPENDENCIES) $(EXTRA_nucleus_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(nucleus_la_LINK) -rpath $(libdir) $(nucleus_la_OBJECTS) $(nucleus_la_LIBADD) $(LIBS)
+
+plane_confinement.la: $(plane_confinement_la_OBJECTS) $(plane_confinement_la_DEPENDENCIES) $(EXTRA_plane_confinement_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(plane_confinement_la_LINK) -rpath $(libdir) $(plane_confinement_la_OBJECTS) $(plane_confinement_la_LIBADD) $(LIBS)
+
 vmdefaulthardconstraints.la: $(vmdefaulthardconstraints_la_OBJECTS) $(vmdefaulthardconstraints_la_DEPENDENCIES) $(EXTRA_vmdefaulthardconstraints_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(vmdefaulthardconstraints_la_LINK) -rpath $(libdir) $(vmdefaulthardconstraints_la_OBJECTS) $(vmdefaulthardconstraints_la_LIBADD) $(LIBS)
 
@@ -419,6 +444,8 @@
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/default_hard_constraints.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/demo_plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nucleus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plane_confinement.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/src/plugins/default_hard_constraints.c b/src/plugins/default_hard_constraints.c
index ba5b64b..235454d 100644
--- a/src/plugins/default_hard_constraints.c
+++ b/src/plugins/default_hard_constraints.c
@@ -4,23 +4,13 @@
 #include "vertex.h"
 #include "cell.h"
 char plugin_name[] = "Default hard constraints for vertex move";
-char plugin_description[]= "Checks proximity with neighbors and with foreign vertices";
+char plugin_description[]= "Checks proximity with neighbors, vertices in neighboring cells and with foreign vertices that may be in vicinity";
 char plugin_author[] = "SAMO PENIC";
 
 ts_plugin_details *init (){
-//	ts_fprintf(stdout,"Hello. Plugin %s is initiating. This will load the details section of the plugin\n", plugin_name);
-
 	ts_plugin_details *details=(ts_plugin_details *)calloc(1,sizeof(ts_plugin_details));
 	details->name = plugin_name;
 	return details;	
-}
-
-void at_start(int argc, char **argv){
-}
-
-void *after_vesicle_init(ts_vesicle *vesicle){
-	ts_fprintf(stdout,"Plugin \"%s\" is loaded.\n", plugin_name);
-	return vesicle;
 }
 
 ts_bool vm_hard_constraint(ts_vesicle *vesicle, ts_vertex *vtx, ts_vertex *ovtx){
@@ -28,7 +18,6 @@
 	ts_uint cellidx;
 	ts_double dist;
 	ts_bool retval;
-
 //distance with neighbours check
     for(i=0;i<vtx->neigh_no;i++){
         dist=vtx_distance_sq(vtx,vtx->neigh[i]);
@@ -55,6 +44,3 @@
 	return TS_SUCCESS;
 }
 
-void cleanup(){
-	ts_fprintf(stdout,"Goodbye from plugin %s. This functions clears what would be created in init...\n",plugin_name);
-}
diff --git a/src/plugins/nucleus.c b/src/plugins/nucleus.c
new file mode 100644
index 0000000..3a50d42
--- /dev/null
+++ b/src/plugins/nucleus.c
@@ -0,0 +1,33 @@
+#include "plugins.h"
+#include <stdlib.h>
+#include "general.h"
+#include "vertex.h"
+#include "cell.h"
+char plugin_name[] = "Nucleus";
+char plugin_description[]= "This plugin adds nucleus to the center of the vesicle. For now only vertexmove constraint is implemented.";
+char plugin_author[] = "SAMO PENIC";
+
+ts_plugin_details *init (){
+	ts_plugin_details *details=(ts_plugin_details *)calloc(1,sizeof(ts_plugin_details));
+	details->name = plugin_name;
+	return details;	
+}
+
+ts_bool vm_hard_constraint(ts_vesicle *vesicle, ts_vertex *vtx, ts_vertex *ovtx){
+// 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){
+		return TS_FAIL;
+	}
+} else if(vesicle->R_nucleusX>0.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){
+		return TS_FAIL;
+	}
+
+}
+
+	return TS_SUCCESS;
+}
+
diff --git a/src/plugins/plane_confinement.c b/src/plugins/plane_confinement.c
new file mode 100644
index 0000000..6cf052c
--- /dev/null
+++ b/src/plugins/plane_confinement.c
@@ -0,0 +1,26 @@
+#include <stdlib.h>
+#include "general.h"
+#include "vertex.h"
+#include "cell.h"
+char plugin_name[] = "Plane confimenent";
+char plugin_description[]= "Confines vesicle between two planes d/2 above z=0 and d/2 below z=0. The plates squeeze vesicle with some predefined force.";
+char plugin_author[] = "SAMO PENIC";
+
+ts_plugin_details *init (){
+	ts_plugin_details *details=(ts_plugin_details *)calloc(1,sizeof(ts_plugin_details));
+	details->name = plugin_name;
+	return details;	
+}
+
+ts_bool vm_hard_constraint(ts_vesicle *vesicle, ts_vertex *vtx, ts_vertex *ovtx){
+
+// 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){
+		return TS_FAIL;
+		}
+	}
+
+	return TS_SUCCESS;
+}
+
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