From 2c4278db6ead5c27e30a3000097ed898c968534e Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Sat, 09 Mar 2019 19:45:22 +0000
Subject: [PATCH] Added direct force plugin and fixes in stretching energy

---
 src/main.c                       |    7 +
 src/plugins/Makefile.am          |    6 +
 src/plugins/Makefile             |   31 +++++++--
 src/plugins/Makefile.in          |   31 +++++++--
 src/vertexmove.c                 |   31 ---------
 src/plugins/direct_force_on_c0.c |   22 +++++++
 src/plugins/stretching_energy.c  |    9 +-
 7 files changed, 83 insertions(+), 54 deletions(-)

diff --git a/src/main.c b/src/main.c
index dfe7130..ecf9678 100644
--- a/src/main.c
+++ b/src/main.c
@@ -33,6 +33,7 @@
 	ts_char *plugin4 = (ts_char *)calloc(255,sizeof(ts_char));
 	ts_char *plugin5 = (ts_char *)calloc(255,sizeof(ts_char));
 	ts_char *plugin6 = (ts_char *)calloc(255,sizeof(ts_char));
+	ts_char *plugin7 = (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");
 	strcpy(plugin2,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/plane_confinement.so");
@@ -40,7 +41,8 @@
 	strcpy(plugin4,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/constant_volume.so");
 	strcpy(plugin5,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/constant_area.so");
 	strcpy(plugin6,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/stretching_energy.so");
-	ts_char **plugins=(ts_char **)calloc(7,sizeof(ts_char *));
+	strcpy(plugin7,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/direct_force_on_c0.so");
+	ts_char **plugins=(ts_char **)calloc(8,sizeof(ts_char *));
 	plugins[0]=plugin0;
 	plugins[1]=plugin1;
 	plugins[2]=plugin2;
@@ -48,7 +50,8 @@
 	plugins[4]=plugin4;
 	plugins[5]=plugin5;
 	plugins[6]=plugin6;
-	ts_plugin_list *plist=init_plugin_list(plugins,7);
+	plugins[7]=plugin7;
+	ts_plugin_list *plist=init_plugin_list(plugins,8);
 	//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 28ebbd4..c1d5e65 100644
--- a/src/plugins/Makefile
+++ b/src/plugins/Makefile
@@ -151,6 +151,13 @@
 demoplugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(demoplugin_la_LDFLAGS) $(LDFLAGS) -o $@
+direct_force_on_c0_la_LIBADD =
+am_direct_force_on_c0_la_OBJECTS = direct_force_on_c0.lo
+direct_force_on_c0_la_OBJECTS = $(am_direct_force_on_c0_la_OBJECTS)
+direct_force_on_c0_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(direct_force_on_c0_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
 nucleus_la_LIBADD =
 am_nucleus_la_OBJECTS = nucleus.lo
 nucleus_la_OBJECTS = $(am_nucleus_la_OBJECTS)
@@ -171,7 +178,7 @@
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(pressure_la_LDFLAGS) $(LDFLAGS) -o $@
 stretching_energy_la_LIBADD =
-am_stretching_energy_la_OBJECTS = constant_area.lo
+am_stretching_energy_la_OBJECTS = stretching_energy.lo
 stretching_energy_la_OBJECTS = $(am_stretching_energy_la_OBJECTS)
 stretching_energy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
@@ -220,14 +227,15 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(constant_area_la_SOURCES) $(constant_volume_la_SOURCES) \
-	$(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \
-	$(plane_confinement_la_SOURCES) $(pressure_la_SOURCES) \
-	$(stretching_energy_la_SOURCES) \
+	$(demoplugin_la_SOURCES) $(direct_force_on_c0_la_SOURCES) \
+	$(nucleus_la_SOURCES) $(plane_confinement_la_SOURCES) \
+	$(pressure_la_SOURCES) $(stretching_energy_la_SOURCES) \
 	$(vmdefaulthardconstraints_la_SOURCES)
 DIST_SOURCES = $(constant_area_la_SOURCES) \
 	$(constant_volume_la_SOURCES) $(demoplugin_la_SOURCES) \
-	$(nucleus_la_SOURCES) $(plane_confinement_la_SOURCES) \
-	$(pressure_la_SOURCES) $(stretching_energy_la_SOURCES) \
+	$(direct_force_on_c0_la_SOURCES) $(nucleus_la_SOURCES) \
+	$(plane_confinement_la_SOURCES) $(pressure_la_SOURCES) \
+	$(stretching_energy_la_SOURCES) \
 	$(vmdefaulthardconstraints_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -377,7 +385,7 @@
 top_builddir = ../..
 top_srcdir = ../..
 AM_CFLAGS = -Wall -Werror -DTS_VERSION=\"$(GITVERSION)\" -fgnu89-inline -Wno-error=date-time -I..
-lib_LTLIBRARIES = demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la pressure.la constant_volume.la constant_area.la stretching_energy.la
+lib_LTLIBRARIES = demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la pressure.la constant_volume.la constant_area.la stretching_energy.la direct_force_on_c0.la
 demoplugin_la_SOURCES = demo_plugin.c
 demoplugin_la_LDFLAGS = -module -avoid-version -export-dynamic
 vmdefaulthardconstraints_la_SOURCES = default_hard_constraints.c
@@ -392,8 +400,10 @@
 constant_volume_la_LDFLAGS = -module -avoid-version -export-dynamic
 constant_area_la_SOURCES = constant_area.c 
 constant_area_la_LDFLAGS = -module -avoid-version -export-dynamic
-stretching_energy_la_SOURCES = constant_area.c 
+stretching_energy_la_SOURCES = stretching_energy.c 
 stretching_energy_la_LDFLAGS = -module -avoid-version -export-dynamic
+direct_force_on_c0_la_SOURCES = direct_force_on_c0.c 
+direct_force_on_c0_la_LDFLAGS = -module -avoid-version -export-dynamic
 all: all-am
 
 .SUFFIXES:
@@ -472,6 +482,9 @@
 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)
 
+direct_force_on_c0.la: $(direct_force_on_c0_la_OBJECTS) $(direct_force_on_c0_la_DEPENDENCIES) $(EXTRA_direct_force_on_c0_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(direct_force_on_c0_la_LINK) -rpath $(libdir) $(direct_force_on_c0_la_OBJECTS) $(direct_force_on_c0_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)
 
@@ -497,9 +510,11 @@
 include ./$(DEPDIR)/constant_volume.Plo
 include ./$(DEPDIR)/default_hard_constraints.Plo
 include ./$(DEPDIR)/demo_plugin.Plo
+include ./$(DEPDIR)/direct_force_on_c0.Plo
 include ./$(DEPDIR)/nucleus.Plo
 include ./$(DEPDIR)/plane_confinement.Plo
 include ./$(DEPDIR)/pressure.Plo
+include ./$(DEPDIR)/stretching_energy.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 dacef43..59af951 100644
--- a/src/plugins/Makefile.am
+++ b/src/plugins/Makefile.am
@@ -1,5 +1,5 @@
 AM_CFLAGS = -Wall -Werror -DTS_VERSION=\"$(GITVERSION)\" -fgnu89-inline -Wno-error=date-time -I..
-lib_LTLIBRARIES= demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la pressure.la constant_volume.la constant_area.la stretching_energy.la
+lib_LTLIBRARIES= demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la pressure.la constant_volume.la constant_area.la stretching_energy.la direct_force_on_c0.la
 demoplugin_la_SOURCES= demo_plugin.c
 demoplugin_la_LDFLAGS = -module -avoid-version -export-dynamic
 
@@ -21,7 +21,9 @@
 constant_area_la_SOURCES = constant_area.c 
 constant_area_la_LDFLAGS = -module -avoid-version -export-dynamic
 
-stretching_energy_la_SOURCES = constant_area.c 
+stretching_energy_la_SOURCES = stretching_energy.c 
 stretching_energy_la_LDFLAGS = -module -avoid-version -export-dynamic
 
+direct_force_on_c0_la_SOURCES = direct_force_on_c0.c 
+direct_force_on_c0_la_LDFLAGS = -module -avoid-version -export-dynamic
 
diff --git a/src/plugins/Makefile.in b/src/plugins/Makefile.in
index d7fca36..cc92f88 100644
--- a/src/plugins/Makefile.in
+++ b/src/plugins/Makefile.in
@@ -151,6 +151,13 @@
 demoplugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(demoplugin_la_LDFLAGS) $(LDFLAGS) -o $@
+direct_force_on_c0_la_LIBADD =
+am_direct_force_on_c0_la_OBJECTS = direct_force_on_c0.lo
+direct_force_on_c0_la_OBJECTS = $(am_direct_force_on_c0_la_OBJECTS)
+direct_force_on_c0_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(direct_force_on_c0_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
 nucleus_la_LIBADD =
 am_nucleus_la_OBJECTS = nucleus.lo
 nucleus_la_OBJECTS = $(am_nucleus_la_OBJECTS)
@@ -171,7 +178,7 @@
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(pressure_la_LDFLAGS) $(LDFLAGS) -o $@
 stretching_energy_la_LIBADD =
-am_stretching_energy_la_OBJECTS = constant_area.lo
+am_stretching_energy_la_OBJECTS = stretching_energy.lo
 stretching_energy_la_OBJECTS = $(am_stretching_energy_la_OBJECTS)
 stretching_energy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
@@ -220,14 +227,15 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(constant_area_la_SOURCES) $(constant_volume_la_SOURCES) \
-	$(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \
-	$(plane_confinement_la_SOURCES) $(pressure_la_SOURCES) \
-	$(stretching_energy_la_SOURCES) \
+	$(demoplugin_la_SOURCES) $(direct_force_on_c0_la_SOURCES) \
+	$(nucleus_la_SOURCES) $(plane_confinement_la_SOURCES) \
+	$(pressure_la_SOURCES) $(stretching_energy_la_SOURCES) \
 	$(vmdefaulthardconstraints_la_SOURCES)
 DIST_SOURCES = $(constant_area_la_SOURCES) \
 	$(constant_volume_la_SOURCES) $(demoplugin_la_SOURCES) \
-	$(nucleus_la_SOURCES) $(plane_confinement_la_SOURCES) \
-	$(pressure_la_SOURCES) $(stretching_energy_la_SOURCES) \
+	$(direct_force_on_c0_la_SOURCES) $(nucleus_la_SOURCES) \
+	$(plane_confinement_la_SOURCES) $(pressure_la_SOURCES) \
+	$(stretching_energy_la_SOURCES) \
 	$(vmdefaulthardconstraints_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -377,7 +385,7 @@
 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 nucleus.la plane_confinement.la pressure.la constant_volume.la constant_area.la stretching_energy.la
+lib_LTLIBRARIES = demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la pressure.la constant_volume.la constant_area.la stretching_energy.la direct_force_on_c0.la
 demoplugin_la_SOURCES = demo_plugin.c
 demoplugin_la_LDFLAGS = -module -avoid-version -export-dynamic
 vmdefaulthardconstraints_la_SOURCES = default_hard_constraints.c
@@ -392,8 +400,10 @@
 constant_volume_la_LDFLAGS = -module -avoid-version -export-dynamic
 constant_area_la_SOURCES = constant_area.c 
 constant_area_la_LDFLAGS = -module -avoid-version -export-dynamic
-stretching_energy_la_SOURCES = constant_area.c 
+stretching_energy_la_SOURCES = stretching_energy.c 
 stretching_energy_la_LDFLAGS = -module -avoid-version -export-dynamic
+direct_force_on_c0_la_SOURCES = direct_force_on_c0.c 
+direct_force_on_c0_la_LDFLAGS = -module -avoid-version -export-dynamic
 all: all-am
 
 .SUFFIXES:
@@ -472,6 +482,9 @@
 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)
 
+direct_force_on_c0.la: $(direct_force_on_c0_la_OBJECTS) $(direct_force_on_c0_la_DEPENDENCIES) $(EXTRA_direct_force_on_c0_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(direct_force_on_c0_la_LINK) -rpath $(libdir) $(direct_force_on_c0_la_OBJECTS) $(direct_force_on_c0_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)
 
@@ -497,9 +510,11 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constant_volume.Plo@am__quote@
 @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)/direct_force_on_c0.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@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pressure.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stretching_energy.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/direct_force_on_c0.c b/src/plugins/direct_force_on_c0.c
new file mode 100644
index 0000000..94a1a7c
--- /dev/null
+++ b/src/plugins/direct_force_on_c0.c
@@ -0,0 +1,22 @@
+#include <stdlib.h>
+#include<math.h>
+
+#include "general.h"
+#include "energy.h"
+char plugin_name[] = "Direct force on curved proteins";
+char plugin_description[]= "Plugin for applying direct normal force on curved proteins (c0>0)";
+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_double vm_energy_after_execute(ts_vesicle *vesicle, ts_vertex *vtx, ts_vertex *backup_vertices){
+	return direct_force_energy(vesicle,vtx,&backup_vertices[0]);
+}
+
+
diff --git a/src/plugins/stretching_energy.c b/src/plugins/stretching_energy.c
index fd44c52..2c537f4 100644
--- a/src/plugins/stretching_energy.c
+++ b/src/plugins/stretching_energy.c
@@ -2,10 +2,8 @@
 #include<math.h>
 
 #include "general.h"
-#include "vertex.h"
-#include "cell.h"
-#include "vesicle.h"
-#include "frame.h"
+#include "energy.h"
+
 char plugin_name[] = "Stretching energy";
 char plugin_description[]= "Plugin adds stretching energy to Monte Carlo steps";
 char plugin_author[] = "SAMO PENIC";
@@ -58,8 +56,9 @@
 			stretchenergy(vesicle, vtx->tristar[i]);
 			data->dstretchenergy+=vtx->tristar[i]->energy;
 			}
+		return data->dstretchenergy;
 	}
-	return data->dstretchenergy;
+	return 0.0;
 }
 
 
diff --git a/src/vertexmove.c b/src/vertexmove.c
index 2b08dc8..362b895 100644
--- a/src/vertexmove.c
+++ b/src/vertexmove.c
@@ -20,7 +20,7 @@
     ts_uint i;
     ts_bool retval; 
     ts_uint cellidx; 
-    ts_double delta_energy, oenergy,dstretchenergy=0.0;
+    ts_double delta_energy, oenergy;
     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;
@@ -62,12 +62,6 @@
 	}
 /* End of vm_energy_before_prepare() */
 
-	//stretching energy 1 of 3
-	if(vesicle->tape->stretchswitch==1){
-		for(i=0;i<vtx->tristar_no;i++) dstretchenergy-=vtx->tristar[i]->energy;
-	}
-    delta_energy=0;
-
 //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;
@@ -80,7 +74,6 @@
         delta_energy+=vtx->neigh[i]->xk*(vtx->neigh[i]->energy-oenergy);
     }
 
-
 /* Entry point for plugin vm_energy_after_execute() */
 
 	vesicle->plist->pointer=vesicle->plist->chain->vm_energy_after_execute;
@@ -88,21 +81,9 @@
 		delta_energy+=vesicle->plist->pointer->plugin->function->vm_energy_after_execute(vesicle, vtx, backupvtx);
 		vesicle->plist->pointer=vesicle->plist->pointer->next;
 	}
+/* End of vm_energy_after_execute() */
 
 
-/* Vertices with spontaneous curvature may have spontaneous force perpendicular to the surface of the vesicle. additional delta energy is calculated in this function */
-	delta_energy+=direct_force_energy(vesicle,vtx,backupvtx);
-
-	//stretching energy 2 of 3
-	if(vesicle->tape->stretchswitch==1){
-		for(i=0;i<vtx->tristar_no;i++){ 
-			stretchenergy(vesicle, vtx->tristar[i]);
-			dstretchenergy+=vtx->tristar[i]->energy;
-			}
-	}
-
-	delta_energy+=dstretchenergy;	
-		
 /* No poly-bond energy for now!
 	if(vtx->grafted_poly!=NULL){
 		delta_energy+=
@@ -153,14 +134,6 @@
 	
 	//update the normals of triangles that share bead i.
 	for(i=0;i<vtx->tristar_no;i++) triangle_normal_vector(vtx->tristar[i]);
-
-	//stretching energy 3 of 3
-	if(vesicle->tape->stretchswitch==1){
-		for(i=0;i<vtx->tristar_no;i++){ 
-			stretchenergy(vesicle,vtx->tristar[i]);
-			}
-	}
-
 
 
 /* Entry point for plugin vm_before_montecarlo_constraint() function */

--
Gitblit v1.9.3