Trisurf Monte Carlo simulator
Samo Penic
2016-03-01 86b69b3803b1b31c040cede6b47bf617561b3b81
src/io.c
@@ -15,6 +15,7 @@
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <snapshot.h>
/** DUMP STATE TO DISK DRIVE **/
ts_bool dump_state(ts_vesicle *vesicle, ts_uint iteration){
@@ -24,7 +25,7 @@
    FILE *fh=fopen(command_line_args.dump_fullfilename,"wb");
    /* dump vesicle */
    fwrite(vesicle, sizeof(ts_vesicle),1,fh);
    fwrite(vesicle, sizeof(ts_vesicle)-sizeof(ts_double),1,fh);
    /* dump vertex list */
    fwrite(vesicle->vlist, sizeof(ts_vertex_list),1,fh);
    /* dump bond list */
@@ -201,7 +202,7 @@
/* we restore all the data from the dump */
    /* restore vesicle */
    ts_vesicle *vesicle=(ts_vesicle *)calloc(1,sizeof(ts_vesicle));
    retval=fread(vesicle, sizeof(ts_vesicle),1,fh);
    retval=fread(vesicle, sizeof(ts_vesicle)-sizeof(ts_double),1,fh);
//   fprintf(stderr,"was here! %e\n",vesicle->dmax);
    /* restore vertex list */
@@ -454,6 +455,7 @@
           {"dump-filename", required_argument,0, 'f'},
           {"tape-options",required_argument,0,'c'},
           {"tape-template", required_argument,0,0},
            {"dump-from-vtk",required_argument,0,0},
           {0, 0, 0, 0}
         };
       /* getopt_long stores the option index here. */
@@ -479,6 +481,9 @@
            //TODO: find a better way.
            if(strcmp(long_options[option_index].name,"tape-template")==0){
                strcpy(command_line_args.tape_templatefull,optarg);
            }
            if(strcmp(long_options[option_index].name,"dump-from-vtk")==0){
                strcpy(command_line_args.dump_from_vtk,optarg);
            }
           break;
@@ -820,7 +825,9 @@
      }
   }
   fprintf(fh, "<?xml version=\"1.0\"?>\n<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" byte_order=\"LittleEndian\" compressor=\"vtkZLibDataCompressor\">\n <UnstructuredGrid>\n");
   fprintf(fh, "<?xml version=\"1.0\"?>\n<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" byte_order=\"LittleEndian\" compressor=\"vtkZLibDataCompressor\">\n");
   xml_trisurf_data(fh,vesicle);
   fprintf(fh, " <UnstructuredGrid>\n");
    fprintf(fh, "<Piece NumberOfPoints=\"%u\" NumberOfCells=\"%u\">\n",vlist->n+monono*polyno+fonono*filno, blist->n+monono*polyno+filno*(fonono-1));
    fprintf(fh,"<PointData Scalars=\"scalars\">\n<DataArray type=\"Int64\" Name=\"scalars\" format=\"ascii\">");
      for(i=0;i<vlist->n;i++){
@@ -993,6 +1000,20 @@
ts_tape *parsetape(char *filename){
   FILE *fd = fopen (filename, "r");
   long length;
   size_t size;
   fseek (fd, 0, SEEK_END);
     length = ftell (fd);
   fseek (fd, 0, SEEK_SET);
   size=fread (tapetxt, 1, length, fd);
   fclose(fd);
   if(size);
   ts_tape *tape=parsetapebuffer(tapetxt);
   return tape;
}
ts_tape *parsetapebuffer(char *buffer){
    ts_tape *tape=(ts_tape *)calloc(1,sizeof(ts_tape));
    tape->multiprocessing=calloc(255,sizeof(char));
@@ -1008,6 +1029,7 @@
        CFG_SIMPLE_FLOAT("xk0",&tape->xk0),
   CFG_SIMPLE_INT("pswitch",&tape->pswitch),
   CFG_SIMPLE_INT("constvolswitch",&tape->constvolswitch),
   CFG_SIMPLE_INT("constareaswitch",&tape->constareaswitch),
   CFG_SIMPLE_FLOAT("constvolprecision",&tape->constvolprecision),
   CFG_SIMPLE_FLOAT("pressure",&tape->pressure),
   CFG_SIMPLE_FLOAT("k_spring",&tape->kspring),
@@ -1030,7 +1052,7 @@
    cfg_t *cfg;    
    ts_uint retval;
    cfg = cfg_init(opts, 0);
    retval=cfg_parse(cfg, filename);
    retval=cfg_parse_buf(cfg, buffer);
    if(retval==CFG_FILE_ERROR){
   fatal("No tape file.",100);
   }