Trisurf Monte Carlo simulator
mihaf
2014-03-24 ea1cce4c80ddb68c0b46a6873ef3b64cc4a958a1
src/timestep.c
@@ -9,13 +9,14 @@
#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;
    char filename[255];
   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);
      }
@@ -23,8 +24,10 @@
      cell_occupation(vesicle);
      ts_fprintf(stdout,"Done %d out of %d iterations (x %d MC sweeps).\n",i+1,inititer+iterations,mcsweeps);
            dump_state(vesicle,i);
      if(i>inititer){
      if(i>=inititer){
         write_vertex_xml_file(vesicle,i-inititer);
      //   sprintf(filename,"timestep-%05d.pov",i-inititer);
         write_pov_file(vesicle,filename);
      }
   }
   return TS_SUCCESS;
@@ -56,15 +59,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;