From 58230a2591414fb38b9ec8d3a76439b290cb0a6f Mon Sep 17 00:00:00 2001
From: mihaf <miha.fosnaric@gmail.com>
Date: Tue, 18 Mar 2014 13:09:23 +0000
Subject: [PATCH] Adding ending energy to filaments. In progress. Continue in single_filament_vertex_move

---
 src/io.c |  140 +++++++++++++++++++++++++++++++++++-----------
 1 files changed, 106 insertions(+), 34 deletions(-)

diff --git a/src/io.c b/src/io.c
index d1a2e3e..9e23560 100644
--- a/src/io.c
+++ b/src/io.c
@@ -142,6 +142,20 @@
 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;
 
@@ -326,24 +340,30 @@
 
 
 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. */
@@ -364,46 +384,56 @@
 
          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 '?':
@@ -634,8 +664,8 @@
 	/* 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;
@@ -643,8 +673,17 @@
 		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);
@@ -654,6 +693,16 @@
 		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);
 			}
 		}
@@ -668,6 +717,14 @@
 		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 );
 			}
 		}
 	}
@@ -690,14 +747,26 @@
 
 	}
 	
+	//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 ");
     }
 
@@ -767,7 +836,10 @@
         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),

--
Gitblit v1.9.3