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