| | |
| | | ts_vesicle *restore_state(ts_uint *iteration){ |
| | | ts_uint i,j,k; |
| | | FILE *fh=fopen("dump.bin","rb"); |
| | | |
| | | struct stat sb; |
| | | if (stat("dump.bin", &sb) == -1) { |
| | | //dump file does not exist. |
| | | return NULL; |
| | | } |
| | | |
| | | //check if it is regular file |
| | | if((sb.st_mode & S_IFMT) != S_IFREG) { |
| | | //dump file is not a regular file. |
| | | ts_fprintf(stderr,"Dump file is not a regular file!\n"); |
| | | return NULL; |
| | | } |
| | | |
| | | ts_uint retval; |
| | | ts_uint idx; |
| | | |
| | |
| | | |
| | | |
| | | ts_bool parse_args(int argc, char **argv){ |
| | | int c, retval; |
| | | DIR *dir; |
| | | path[0]=0; |
| | | int c, retval; |
| | | struct stat sb; |
| | | sprintf(command_line_args.path, "./"); //clear string; |
| | | sprintf(command_line_args.output_fullfilename,"./output.pvd"); |
| | | sprintf(command_line_args.dump_fullfilename,"./dump.bin"); |
| | | sprintf(command_line_args.tape_fullfilename,"./tape"); |
| | | FILE *file; |
| | | |
| | | while (1) |
| | | { |
| | | static struct option long_options[] = |
| | | { |
| | | {"force-from-tape", no_argument, &force_from_tape, 1}, |
| | | {"force-from-tape", no_argument, &(command_line_args.force_from_tape), 1}, |
| | | {"reset-iteration-count", no_argument, &(command_line_args.reset_iteration_count), 1}, |
| | | {"tape", no_argument, 0, 't'}, |
| | | {"output-file", required_argument, 0, 'o'}, |
| | | {"directory", required_argument, 0, 'd'}, |
| | | {"dump-file", required_argument,0, 'f'}, |
| | | {"dump-filename", required_argument,0, 'f'}, |
| | | {0, 0, 0, 0} |
| | | }; |
| | | /* getopt_long stores the option index here. */ |
| | | int option_index = 0; |
| | | |
| | | c = getopt_long (argc, argv, "d:fot", |
| | | c = getopt_long (argc, argv, "d:f:o:t:", |
| | | long_options, &option_index); |
| | | |
| | | /* Detect the end of the options. */ |
| | |
| | | |
| | | case 't': |
| | | //check if tape exists. If not, fail immediately. |
| | | puts ("option -t\n"); |
| | | if (stat(optarg, &sb) == -1) { |
| | | ts_fprintf(stderr,"Tape '%s' does not exist!\n",optarg); |
| | | fatal("Please select correct tape",1); |
| | | } else { |
| | | strcpy(command_line_args.tape_fullfilename,optarg); |
| | | } |
| | | break; |
| | | |
| | | case 'o': |
| | | //set filename of master output file |
| | | printf ("option -o with value `%s'\n", optarg); |
| | | break; |
| | | if ((file = fopen(optarg, "w")) == NULL) { |
| | | fprintf(stderr,"Could not create output file!\n"); |
| | | fatal("Please specify correct output file",1); |
| | | |
| | | } else { |
| | | fclose(file); |
| | | } |
| | | strcpy(command_line_args.output_fullfilename, optarg); |
| | | break; |
| | | |
| | | case 'd': |
| | | //check if directory exists. If not create one. If creation is |
| | | //successful, set directory for output files. |
| | | //printf ("option -d with value `%s'\n", optarg); |
| | | dir = opendir(optarg); |
| | | if (dir) |
| | | { |
| | | /* Directory exists. */ |
| | | closedir(dir); |
| | | } |
| | | else if (ENOENT == errno) |
| | | { |
| | | /* Directory does not exist. */ |
| | | if (stat(optarg, &sb) == -1) { |
| | | //directory does not exist |
| | | retval=mkdir(optarg, 0700); |
| | | if(retval){ |
| | | fatal("Could not create requested directory. Check if you have permissions",1); |
| | | fatal("Could not create requested directory. Check if you have permissions",1); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | /* opendir() failed for some other reason. */ |
| | | fatal("Could not check if directory exists. Reason unknown",1); |
| | | //check if is a proper directory |
| | | else if((sb.st_mode & S_IFMT) != S_IFDIR) { |
| | | //it is not a directory. fatal error. |
| | | ts_fprintf(stderr,"%s is not a directory!\n",optarg); |
| | | fatal("Cannot continue",1); |
| | | } |
| | | ts_fprintf(stdout,"\n*** Using output directory: %s\n\n", optarg); |
| | | // sprintf(path,"%s", optarg); |
| | | strcpy(path, optarg); |
| | | // ts_fprintf(stdout,"ok!\n"); |
| | | |
| | | strcpy(command_line_args.path, optarg); |
| | | break; |
| | | |
| | | case 'f': |
| | | //check if dump file specified exists. Defaults to dump.bin |
| | | if ((file = fopen(optarg, "w")) == NULL) { |
| | | fprintf(stderr,"Could not create dump file!\n"); |
| | | fatal("Please specify correct dump file",1); |
| | | |
| | | } else { |
| | | fclose(file); |
| | | } |
| | | strcpy(command_line_args.dump_fullfilename, optarg); |
| | | break; |
| | | |
| | | case '?': |
| | |
| | | /* Here comes header of the file */ |
| | | |
| | | //find number of extra vtxs and bonds of polymeres |
| | | ts_uint monono=0, polyno=0, poly_idx=0; |
| | | ts_bool poly=0; |
| | | ts_uint monono=0, polyno=0, poly_idx=0, filno=0, fonono=0; |
| | | ts_bool poly=0, fil=0; |
| | | if(vesicle->poly_list!=NULL){ |
| | | if(vesicle->poly_list->poly[0]!=NULL){ |
| | | polyno=vesicle->poly_list->n; |
| | |
| | | poly=1; |
| | | } |
| | | } |
| | | |
| | | if(vesicle->filament_list!=NULL){ |
| | | if(vesicle->filament_list->poly[0]!=NULL){ |
| | | filno=vesicle->filament_list->n; |
| | | fonono=vesicle->filament_list->poly[0]->vlist->n; |
| | | fil=1; |
| | | } |
| | | } |
| | | |
| | | fprintf(fh, "<?xml version=\"1.0\"?>\n<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" byte_order=\"LittleEndian\" compressor=\"vtkZLibDataCompressor\">\n <UnstructuredGrid>\n"); |
| | | fprintf(fh, "<Piece NumberOfPoints=\"%u\" NumberOfCells=\"%u\">\n",vlist->n+monono*polyno, blist->n+monono*polyno); |
| | | 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++){ |
| | | fprintf(fh,"%u ",vtx[i]->idx); |
| | |
| | | poly_idx=vlist->n; |
| | | for(i=0;i<vesicle->poly_list->n;i++){ |
| | | for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++,poly_idx++){ |
| | | fprintf(fh,"%u ", poly_idx); |
| | | } |
| | | } |
| | | } |
| | | //filaments |
| | | if(fil){ |
| | | poly_idx=vlist->n+monono*polyno; |
| | | for(i=0;i<vesicle->filament_list->n;i++){ |
| | | for(j=0;j<vesicle->filament_list->poly[i]->vlist->n;j++,poly_idx++){ |
| | | // fprintf(stderr,"was here\n"); |
| | | fprintf(fh,"%u ", poly_idx); |
| | | } |
| | | } |
| | |
| | | for(i=0;i<vesicle->poly_list->n;i++){ |
| | | for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++){ |
| | | fprintf(fh,"%e %e %e\n", vesicle->poly_list->poly[i]->vlist->vtx[j]->x,vesicle->poly_list->poly[i]->vlist->vtx[j]->y, vesicle->poly_list->poly[i]->vlist->vtx[j]->z ); |
| | | } |
| | | } |
| | | } |
| | | //filaments |
| | | if(fil){ |
| | | for(i=0;i<vesicle->filament_list->n;i++){ |
| | | for(j=0;j<vesicle->filament_list->poly[i]->vlist->n;j++){ |
| | | fprintf(fh,"%e %e %e\n", vesicle->filament_list->poly[i]->vlist->vtx[j]->x,vesicle->filament_list->poly[i]->vlist->vtx[j]->y, vesicle->filament_list->poly[i]->vlist->vtx[j]->z ); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | //filaments |
| | | if(fil){ |
| | | poly_idx=vlist->n+monono*polyno; |
| | | for(i=0;i<vesicle->filament_list->n;i++){ |
| | | for(j=0;j<vesicle->filament_list->poly[i]->blist->n;j++){ |
| | | fprintf(fh,"%u %u\n", vesicle->filament_list->poly[i]->blist->bond[j]->vtx1->idx+vlist->n+monono*polyno+i*fonono,vesicle->filament_list->poly[i]->blist->bond[j]->vtx2->idx+vlist->n+monono*polyno+i*fonono); |
| | | // fprintf(stderr,"was here\n"); |
| | | |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | fprintf(fh,"</DataArray>\n<DataArray type=\"Int64\" Name=\"offsets\" format=\"ascii\">"); |
| | | for (i=2;i<(blist->n+monono*polyno)*2+1;i+=2){ |
| | | for (i=2;i<(blist->n+monono*polyno+(fonono-1)*filno)*2+1;i+=2){ |
| | | fprintf(fh,"%u ",i); |
| | | } |
| | | fprintf(fh,"\n"); |
| | | fprintf(fh,"</DataArray>\n<DataArray type=\"UInt8\" Name=\"types\" format=\"ascii\">\n"); |
| | | for (i=0;i<blist->n+monono*polyno;i++){ |
| | | for (i=0;i<blist->n+monono*polyno+fonono*filno;i++){ |
| | | fprintf(fh,"3 "); |
| | | } |
| | | |
| | |
| | | CFG_SIMPLE_INT("nshell", &tape->nshell), |
| | | CFG_SIMPLE_INT("npoly", &tape->npoly), |
| | | CFG_SIMPLE_INT("nmono", &tape->nmono), |
| | | CFG_SIMPLE_FLOAT("dmax", &tape->dmax), |
| | | CFG_SIMPLE_INT("nfil",&tape->nfil), |
| | | CFG_SIMPLE_INT("nfono",&tape->nfono), |
| | | CFG_SIMPLE_INT("R_nucleus",&tape->R_nucleus), |
| | | CFG_SIMPLE_FLOAT("dmax", &tape->dmax), |
| | | CFG_SIMPLE_FLOAT("xk0",&tape->xk0), |
| | | CFG_SIMPLE_INT("pswitch",&tape->pswitch), |
| | | CFG_SIMPLE_FLOAT("pressure",&tape->pressure), |