Trisurf Monte Carlo simulator
mihaf
2014-03-21 402e8f59c31856000c303e2527f80917422760df
src/timestep.c
@@ -9,20 +9,21 @@
#include "frame.h"
#include "io.h"
ts_bool run_simulation(ts_vesicle *vesicle, ts_uint mcsweeps, ts_uint inititer, ts_uint iterations){
ts_bool run_simulation(ts_vesicle *vesicle, ts_uint mcsweeps, ts_uint inititer, ts_uint iterations, ts_uint start_iteration){
   ts_uint i, j;
   centermass(vesicle);
   cell_occupation(vesicle);
   ts_fprintf(stdout, "Starting simulation (first %d x %d MC sweeps will not be recorded on disk)\n", inititer, mcsweeps);
   for(i=0;i<inititer+iterations;i++){
   if(start_iteration<inititer) ts_fprintf(stdout, "Starting simulation (first %d x %d MC sweeps will not be recorded on disk)\n", inititer, mcsweeps);
   for(i=start_iteration;i<inititer+iterations;i++){
      for(j=0;j<mcsweeps;j++){
         single_timestep(vesicle);
      }
      centermass(vesicle);
      cell_occupation(vesicle);
      ts_fprintf(stdout,"Done %d out of %d iterations (x %d MC sweeps).\n",i+1,inititer+iterations,mcsweeps);
      if(i>inititer){
            dump_state(vesicle,i);
      if(i>=inititer){
         write_vertex_xml_file(vesicle,i-inititer);
      }
   }
@@ -55,15 +56,25 @@
    }
   for(i=0;i<vesicle->poly_list->n;i++){
   for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++){
      rnvec[0]=drand48();
      rnvec[1]=drand48();
      rnvec[2]=drand48();
      retval=single_poly_vertex_move(vesicle,vesicle->poly_list->poly[i],vesicle->poly_list->poly[i]->vlist->vtx[j],rnvec);
      for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++){
         rnvec[0]=drand48();
         rnvec[1]=drand48();
         rnvec[2]=drand48();
         retval=single_poly_vertex_move(vesicle,vesicle->poly_list->poly[i],vesicle->poly_list->poly[i]->vlist->vtx[j],rnvec);
      }
   }
   for(i=0;i<vesicle->filament_list->n;i++){
      for(j=0;j<vesicle->filament_list->poly[i]->vlist->n;j++){
         rnvec[0]=drand48();
         rnvec[1]=drand48();
         rnvec[2]=drand48();
         retval=single_filament_vertex_move(vesicle,vesicle->filament_list->poly[i],vesicle->filament_list->poly[i]->vlist->vtx[j],rnvec);
      }
   }
 
//   printf("Bondflip success rate in one sweep: %d/%d=%e\n", cnt,3*vesicle->blist->n,(double)cnt/(double)vesicle->blist->n/3.0);
   if(retval);
    return TS_SUCCESS;