From 77a2c7de0dd6563a30467fa2e73f02ec9f4c3deb Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Fri, 08 Mar 2019 19:37:59 +0000 Subject: [PATCH] Added constant volume plugin (partially) --- src/main.c | 17 ++- src/plugins.c | 16 ++- src/plugins/Makefile.am | 5 src/plugins/Makefile | 33 ++++-- src/plugins/Makefile.in | 33 ++++-- src/general.h | 2 src/plugins/constant_volume.c | 72 ++++++++++++++ src/vertexmove.c | 86 +++++++---------- 8 files changed, 181 insertions(+), 83 deletions(-) diff --git a/src/general.h b/src/general.h index 4e834ed..4c09b71 100644 --- a/src/general.h +++ b/src/general.h @@ -313,6 +313,7 @@ ts_double (*vm_energy_before_execute)(void *vesicle, ts_vertex *vtx); ts_double (*vm_energy_after_prepare)(void *vesicle, ts_vertex *vtx); ts_double (*vm_energy_after_execute)(void *vesicle, ts_vertex *vtx); + ts_double (*vm_before_montecarlo_constraint)(void *vesicle, ts_vertex *vtx, ts_vertex *old_vtx); ts_double (*vm_new_state_accepted)(void *vesicle, ts_vertex *vtx); ts_double (*vm_new_state_rejected)(void *vesicle, ts_vertex *vtx); void (*cleanup)(void); @@ -344,6 +345,7 @@ ts_plugin_chain *vm_hard_constraint; ts_plugin_chain *vm_energy_before_prepare; ts_plugin_chain *vm_energy_after_execute; + ts_plugin_chain *vm_before_montecarlo_constraint; ts_plugin_chain *cleanup; } ts_plugin_chains; diff --git a/src/main.c b/src/main.c index 6d19213..8344734 100644 --- a/src/main.c +++ b/src/main.c @@ -30,16 +30,19 @@ ts_char *plugin1 = (ts_char *)calloc(255,sizeof(ts_char)); ts_char *plugin2 = (ts_char *)calloc(255,sizeof(ts_char)); ts_char *plugin3 = (ts_char *)calloc(255,sizeof(ts_char)); + ts_char *plugin4 = (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"); strcpy(plugin3,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/pressure.so"); - ts_char **plugins=(ts_char **)calloc(4,sizeof(ts_char *)); - *plugins=plugin0; + strcpy(plugin4,"/home/samo/programiranje/trisurf-ng/src/plugins/.libs/constant_volume.so"); + ts_char **plugins=(ts_char **)calloc(5,sizeof(ts_char *)); + plugins[0]=plugin0; plugins[1]=plugin1; plugins[2]=plugin2; plugins[3]=plugin3; - ts_plugin_list *plist=init_plugin_list(plugins,4); + plugins[4]=plugin4; + ts_plugin_list *plist=init_plugin_list(plugins,5); //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; @@ -146,10 +149,10 @@ vesicle->plist=plist; /* Entry point for plugin after_vesicle_init() function */ - ptr=plist->chain->after_vesicle_init; - while(ptr!=NULL){ - ptr->plugin->function->after_vesicle_init(vesicle); - ptr=ptr->next; + vesicle->plist->pointer=vesicle->plist->chain->after_vesicle_init; + while(vesicle->plist->pointer!=NULL){ + vesicle=vesicle->plist->pointer->plugin->function->after_vesicle_init(vesicle); + vesicle->plist->pointer=vesicle->plist->pointer->next; } run_simulation(vesicle, tape->mcsweeps, tape->inititer, tape->iterations, start_iteration); diff --git a/src/plugins.c b/src/plugins.c index e94241f..0af3d4f 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -95,17 +95,17 @@ ts_plugin *init_plugin(ts_char *filename){ ts_plugin *plugin = (ts_plugin *)calloc(1, sizeof(ts_plugin)); - plugin->filename=(ts_char *)calloc(strlen(filename),sizeof(ts_char)); + plugin->filename=(ts_char *)calloc(strlen(filename)+1,sizeof(ts_char)); strcpy(plugin->filename,filename); plugin->libhandle = dlopen(plugin->filename, RTLD_NOW); if(!plugin->libhandle){ - ts_fprintf(stderr,"Error loading plugin: %s\n", filename); + ts_fprintf(stderr,"Error loading plugin: %s\n", plugin->filename); fatal("Exiting",235); } ts_plugin_details* (*get_plugin_details)(void) = dlsym(plugin->libhandle, "init"); if(get_plugin_details==NULL){ - ts_fprintf(stderr,"Plugin %s invalid. No init() function.\n", filename); - fatal("Exiting", 235); + ts_fprintf(stderr,"Plugin %s invalid. No init() function.\n", plugin->filename); + fatal("Exiting", 236); } plugin->details = get_plugin_details(); plugin->function = (ts_plugin_function *)calloc(1,sizeof(ts_plugin_function)); @@ -118,6 +118,7 @@ plugin->function->vm_energy_before_execute = dlsym(plugin->libhandle, "vm_energy_before_execute"); plugin->function->vm_energy_after_prepare = dlsym(plugin->libhandle, "vm_energy_after_prepare"); plugin->function->vm_energy_after_execute = dlsym(plugin->libhandle, "vm_energy_after_execute"); + plugin->function->vm_before_montecarlo_constraint = dlsym(plugin->libhandle, "vm_before_montecarlo_constraint"); plugin->function->vm_new_state_rejected = dlsym(plugin->libhandle, "vm_new_state_rejected"); plugin->function->vm_new_state_accepted = dlsym(plugin->libhandle, "vm_new_state_accepted"); @@ -155,6 +156,9 @@ if(plist->plugin[i]->function->at_start!=NULL){ plist->chain->at_start=plugin_to_chain(plist->chain->at_start, plist->plugin[i]); } + if(plist->plugin[i]->function->after_vesicle_init!=NULL){ + plist->chain->after_vesicle_init=plugin_to_chain(plist->chain->after_vesicle_init, plist->plugin[i]); + } if(plist->plugin[i]->function->vm_hard_constraint!=NULL){ plist->chain->vm_hard_constraint=plugin_to_chain(plist->chain->vm_hard_constraint, plist->plugin[i]); } @@ -164,7 +168,9 @@ if(plist->plugin[i]->function->vm_energy_after_execute!=NULL){ plist->chain->vm_energy_after_execute=plugin_to_chain(plist->chain->vm_energy_after_execute, plist->plugin[i]); } - + if(plist->plugin[i]->function->vm_before_montecarlo_constraint!=NULL){ + plist->chain->vm_before_montecarlo_constraint=plugin_to_chain(plist->chain->vm_before_montecarlo_constraint, plist->plugin[i]); + } } plist->n=number_of_plugins; return plist; diff --git a/src/plugins/Makefile b/src/plugins/Makefile index 08bbd37..b5ec0e2 100644 --- a/src/plugins/Makefile +++ b/src/plugins/Makefile @@ -127,13 +127,20 @@ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) -demoplugin_la_LIBADD = -am_demoplugin_la_OBJECTS = demo_plugin.lo -demoplugin_la_OBJECTS = $(am_demoplugin_la_OBJECTS) +constant_volume_la_LIBADD = +am_constant_volume_la_OBJECTS = constant_volume.lo +constant_volume_la_OBJECTS = $(am_constant_volume_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent am__v_lt_1 = +constant_volume_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(constant_volume_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +demoplugin_la_LIBADD = +am_demoplugin_la_OBJECTS = demo_plugin.lo +demoplugin_la_OBJECTS = $(am_demoplugin_la_OBJECTS) demoplugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(demoplugin_la_LDFLAGS) $(LDFLAGS) -o $@ @@ -198,12 +205,12 @@ am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \ - $(plane_confinement_la_SOURCES) $(pressure_la_SOURCES) \ - $(vmdefaulthardconstraints_la_SOURCES) -DIST_SOURCES = $(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \ - $(plane_confinement_la_SOURCES) $(pressure_la_SOURCES) \ - $(vmdefaulthardconstraints_la_SOURCES) +SOURCES = $(constant_volume_la_SOURCES) $(demoplugin_la_SOURCES) \ + $(nucleus_la_SOURCES) $(plane_confinement_la_SOURCES) \ + $(pressure_la_SOURCES) $(vmdefaulthardconstraints_la_SOURCES) +DIST_SOURCES = $(constant_volume_la_SOURCES) $(demoplugin_la_SOURCES) \ + $(nucleus_la_SOURCES) $(plane_confinement_la_SOURCES) \ + $(pressure_la_SOURCES) $(vmdefaulthardconstraints_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -352,7 +359,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 +lib_LTLIBRARIES = demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la pressure.la constant_volume.la demoplugin_la_SOURCES = demo_plugin.c demoplugin_la_LDFLAGS = -module -avoid-version -export-dynamic vmdefaulthardconstraints_la_SOURCES = default_hard_constraints.c @@ -363,6 +370,8 @@ plane_confinement_la_LDFLAGS = -module -avoid-version -export-dynamic pressure_la_SOURCES = pressure.c pressure_la_LDFLAGS = -module -avoid-version -export-dynamic +constant_volume_la_SOURCES = constant_volume.c +constant_volume_la_LDFLAGS = -module -avoid-version -export-dynamic all: all-am .SUFFIXES: @@ -432,6 +441,9 @@ rm -f $${locs}; \ } +constant_volume.la: $(constant_volume_la_OBJECTS) $(constant_volume_la_DEPENDENCIES) $(EXTRA_constant_volume_la_DEPENDENCIES) + $(AM_V_CCLD)$(constant_volume_la_LINK) -rpath $(libdir) $(constant_volume_la_OBJECTS) $(constant_volume_la_LIBADD) $(LIBS) + 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) @@ -453,6 +465,7 @@ distclean-compile: -rm -f *.tab.c +include ./$(DEPDIR)/constant_volume.Plo include ./$(DEPDIR)/default_hard_constraints.Plo include ./$(DEPDIR)/demo_plugin.Plo include ./$(DEPDIR)/nucleus.Plo diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am index b28b8ff..1db5618 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 +lib_LTLIBRARIES= demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la pressure.la constant_volume.la demoplugin_la_SOURCES= demo_plugin.c demoplugin_la_LDFLAGS = -module -avoid-version -export-dynamic @@ -15,3 +15,6 @@ pressure_la_SOURCES = pressure.c pressure_la_LDFLAGS = -module -avoid-version -export-dynamic +constant_volume_la_SOURCES = constant_volume.c +constant_volume_la_LDFLAGS = -module -avoid-version -export-dynamic + diff --git a/src/plugins/Makefile.in b/src/plugins/Makefile.in index 8239434..d6859fc 100644 --- a/src/plugins/Makefile.in +++ b/src/plugins/Makefile.in @@ -127,13 +127,20 @@ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) -demoplugin_la_LIBADD = -am_demoplugin_la_OBJECTS = demo_plugin.lo -demoplugin_la_OBJECTS = $(am_demoplugin_la_OBJECTS) +constant_volume_la_LIBADD = +am_constant_volume_la_OBJECTS = constant_volume.lo +constant_volume_la_OBJECTS = $(am_constant_volume_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = +constant_volume_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(constant_volume_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +demoplugin_la_LIBADD = +am_demoplugin_la_OBJECTS = demo_plugin.lo +demoplugin_la_OBJECTS = $(am_demoplugin_la_OBJECTS) demoplugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(demoplugin_la_LDFLAGS) $(LDFLAGS) -o $@ @@ -198,12 +205,12 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \ - $(plane_confinement_la_SOURCES) $(pressure_la_SOURCES) \ - $(vmdefaulthardconstraints_la_SOURCES) -DIST_SOURCES = $(demoplugin_la_SOURCES) $(nucleus_la_SOURCES) \ - $(plane_confinement_la_SOURCES) $(pressure_la_SOURCES) \ - $(vmdefaulthardconstraints_la_SOURCES) +SOURCES = $(constant_volume_la_SOURCES) $(demoplugin_la_SOURCES) \ + $(nucleus_la_SOURCES) $(plane_confinement_la_SOURCES) \ + $(pressure_la_SOURCES) $(vmdefaulthardconstraints_la_SOURCES) +DIST_SOURCES = $(constant_volume_la_SOURCES) $(demoplugin_la_SOURCES) \ + $(nucleus_la_SOURCES) $(plane_confinement_la_SOURCES) \ + $(pressure_la_SOURCES) $(vmdefaulthardconstraints_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -352,7 +359,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 +lib_LTLIBRARIES = demoplugin.la vmdefaulthardconstraints.la nucleus.la plane_confinement.la pressure.la constant_volume.la demoplugin_la_SOURCES = demo_plugin.c demoplugin_la_LDFLAGS = -module -avoid-version -export-dynamic vmdefaulthardconstraints_la_SOURCES = default_hard_constraints.c @@ -363,6 +370,8 @@ plane_confinement_la_LDFLAGS = -module -avoid-version -export-dynamic pressure_la_SOURCES = pressure.c pressure_la_LDFLAGS = -module -avoid-version -export-dynamic +constant_volume_la_SOURCES = constant_volume.c +constant_volume_la_LDFLAGS = -module -avoid-version -export-dynamic all: all-am .SUFFIXES: @@ -432,6 +441,9 @@ rm -f $${locs}; \ } +constant_volume.la: $(constant_volume_la_OBJECTS) $(constant_volume_la_DEPENDENCIES) $(EXTRA_constant_volume_la_DEPENDENCIES) + $(AM_V_CCLD)$(constant_volume_la_LINK) -rpath $(libdir) $(constant_volume_la_OBJECTS) $(constant_volume_la_LIBADD) $(LIBS) + 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) @@ -453,6 +465,7 @@ distclean-compile: -rm -f *.tab.c +@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)/nucleus.Plo@am__quote@ diff --git a/src/plugins/constant_volume.c b/src/plugins/constant_volume.c new file mode 100644 index 0000000..f86eaee --- /dev/null +++ b/src/plugins/constant_volume.c @@ -0,0 +1,72 @@ +#include <stdlib.h> +#include<math.h> + +#include "general.h" +#include "vertex.h" +#include "cell.h" +#include "vesicle.h" +#include "frame.h" +char plugin_name[] = "Constant volume"; +char plugin_description[]= "Plugin that enables constant volume of the vesicle."; +char plugin_author[] = "SAMO PENIC"; + + +typedef struct { + ts_double dvol; + ts_double V0; + ts_double epsvol; +} plugin_data; + + +ts_plugin_details *init (){ + ts_plugin_details *details=(ts_plugin_details *)calloc(1,sizeof(ts_plugin_details)); + details->name = plugin_name; + details->data = (plugin_data *)calloc(1,sizeof(plugin_data)); //storing data + return details; +} + + +ts_vesicle *after_vesicle_init(ts_vesicle *vesicle){ + plugin_data *data=(plugin_data *)vesicle->plist->pointer->plugin->details->data; + ts_fprintf(stdout,"constant volume initialized\n"); + + centermass(vesicle); + cell_occupation(vesicle); + vesicle_volume(vesicle); //needed for constant volume at this moment + + data->V0=vesicle->volume; + data->epsvol=4.0*sqrt(2.0*M_PI)/pow(3.0,3.0/4.0)*data->V0/pow(vesicle->tlist->n,3.0/2.0); + return vesicle; +} + + +void vm_energy_before_prepare(ts_vesicle *vesicle, ts_vertex *vtx){ + if(vesicle->tape->constvolswitch>0){ + plugin_data *data=(plugin_data *)vesicle->plist->pointer->plugin->details->data; + data->dvol=0; + ts_uint i; + for(i=0;i<vtx->tristar_no;i++) data->dvol-=vtx->tristar[i]->volume; + } +} + +ts_double vm_before_montecarlo_constraint(ts_vesicle *vesicle, ts_vertex *vtx, ts_vertex *old_vtx){ + if(vesicle->tape->constvolswitch >0){ + plugin_data *data=(plugin_data *)vesicle->plist->pointer->plugin->details->data; + ts_uint i; + for(i=0;i<vtx->tristar_no;i++) data->dvol+=vtx->tristar[i]->volume; + if(fabs(vesicle->volume+data->dvol-data->V0)>data->epsvol) return TS_FAIL; + } + return TS_SUCCESS; +// if(vesicle->tape->constvolswitch==2){ +// /*check whether the dvol is gt than epsvol */ +// if(fabs(vesicle->volume+data->dvol-data->V0)>data->epsvol) return TS_FAIL; +//This part doesn't work as expected yet. Delta_energy_cv shoould be accounted for in the total energy change. + +/* }else if(vesicle->tape->constvolswitch == 1){ + retval=constvolume(vesicle, vtx, -dvol, &delta_energy_cv, &constvol_vtx_moved,&constvol_vtx_backup); + if(retval==TS_FAIL){ // if we couldn't move the vertex to assure constant volume + return TS_FAIL; + } */ + return TS_SUCCESS; + +} diff --git a/src/vertexmove.c b/src/vertexmove.c index 0c08aff..d33207f 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, delta_energy_cv,oenergy,dvol=0.0, darea=0.0, dstretchenergy=0.0; + ts_double delta_energy, 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; @@ -37,14 +37,14 @@ /* Entry point for plugin vm_hard_constraint() function */ - ts_plugin_chain *ptr=vesicle->plist->chain->vm_hard_constraint; - while(ptr!=NULL){ - retval = ptr->plugin->function->vm_hard_constraint(vesicle,vtx, &backupvtx[0]); + vesicle->plist->pointer=vesicle->plist->chain->vm_hard_constraint; + while(vesicle->plist->pointer!=NULL){ + retval = vesicle->plist->pointer->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; + vesicle->plist->pointer=vesicle->plist->pointer->next; } /* End of vm_hard_constraint() */ @@ -59,10 +59,6 @@ while(vesicle->plist->pointer!=NULL){ vesicle->plist->pointer->plugin->function->vm_energy_before_prepare(vesicle, vtx); vesicle->plist->pointer=vesicle->plist->pointer->next; - } -/* Calculate energy for vtx and neighbours */ - if(vesicle->pswitch == 1 || vesicle->tape->constvolswitch>0){ - for(i=0;i<vtx->tristar_no;i++) dvol-=vtx->tristar[i]->volume; } if(vesicle->tape->constareaswitch==2){ @@ -91,10 +87,16 @@ delta_energy+=vtx->neigh[i]->xk*(vtx->neigh[i]->energy-oenergy); } - if(vesicle->pswitch == 1 || vesicle->tape->constvolswitch >0){ - for(i=0;i<vtx->tristar_no;i++) dvol+=vtx->tristar[i]->volume; - if(vesicle->pswitch==1) delta_energy-=vesicle->pressure*dvol; - }; + +/* Entry point for plugin vm_energy_after_execute() */ + + vesicle->plist->pointer=vesicle->plist->chain->vm_energy_after_execute; + while(vesicle->plist->pointer!=NULL){ + delta_energy+=vesicle->plist->pointer->plugin->function->vm_energy_after_execute(vesicle, vtx); + vesicle->plist->pointer=vesicle->plist->pointer->next; + } + + if(vesicle->tape->constareaswitch==2){ /* check whether the darea is gt epsarea */ @@ -113,42 +115,6 @@ } - if(vesicle->tape->constvolswitch==2){ - /*check whether the dvol is gt than epsvol */ - //fprintf(stderr,"DVOL=%1.16e\n",dvol); - if(fabs(vesicle->volume+dvol-V0)>epsvol){ - //restore old state. - 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)); - } - for(i=0;i<vtx->tristar_no;i++) triangle_normal_vector(vtx->tristar[i]); - //fprintf(stderr,"fajlam!\n"); - return TS_FAIL; - } - - } else -// vesicle_volume(vesicle); -// fprintf(stderr,"Volume before=%1.16e\n", vesicle->volume); - if(vesicle->tape->constvolswitch == 1){ - retval=constvolume(vesicle, vtx, -dvol, &delta_energy_cv, &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)); - } - for(i=0;i<vtx->tristar_no;i++) triangle_normal_vector(vtx->tristar[i]); - // fprintf(stderr,"fajlam!\n"); - return TS_FAIL; - } -// vesicle_volume(vesicle); -// fprintf(stderr,"Volume after=%1.16e\n", vesicle->volume); -// fprintf(stderr,"Volume after-dvol=%1.16e\n", vesicle->volume-dvol); -// fprintf(stderr,"Denergy before=%e\n",delta_energy); - - delta_energy+=delta_energy_cv; -// fprintf(stderr,"Denergy after=%e\n",delta_energy); - } /* 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); @@ -185,9 +151,29 @@ } } + +/* Entry point for plugin vm_before_montecarlo_constraint() function */ + vesicle->plist->pointer=vesicle->plist->chain->vm_before_montecarlo_constraint; + while(vesicle->plist->pointer!=NULL){ + retval = vesicle->plist->pointer->plugin->function->vm_before_montecarlo_constraint(vesicle,vtx, &backupvtx[0]); + if(retval==TS_FAIL){ + 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)); + } + for(i=0;i<vtx->tristar_no;i++) triangle_normal_vector(vtx->tristar[i]); + return TS_FAIL; + } + vesicle->plist->pointer=vesicle->plist->pointer->next; + } +/* End of vm_before_montecarlo_constraint() */ + + + + + // fprintf(stderr, "DE=%f\n",delta_energy); //MONTE CARLOOOOOOOO -// if(vtx->c!=0.0) printf("DE=%f\n",delta_energy); if(delta_energy>=0){ #ifdef TS_DOUBLE_DOUBLE if(exp(-delta_energy)< drand48()) -- Gitblit v1.9.3