Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/lib/c-target/main.c
ViewVC logotype

Diff of /branches/pure-cfg/src/lib/c-target/main.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1478, Thu Sep 1 13:09:11 2011 UTC revision 1479, Fri Sep 2 14:17:54 2011 UTC
# Line 114  Line 114 
114      else if (TimingFlg)      else if (TimingFlg)
115          printf ("usr=%f\n", totalTime);          printf ("usr=%f\n", totalTime);
116    
117  /* FIXME: it would be nice to factor this code out into a common file that can      Output_Args out_args;
118   * be shared across all of the runtime systems.      out_args.NrrdOutputFlg = NrrdOutputFlg;
119   */      out_args.name = wrld->name;
120      if (NrrdOutputFlg) {      out_args.isArray = wrld->isArray;
121          int status;      out_args.numStrands = wrld->numStrands;
122          char *err;      out_args.status = wrld->status;
123        out_args.inState = wrld->inState;
124        // get correct output file name      out_args.nDims = wrld->nDims;
125          int outFileNameLen = strlen(wrld->name) + 6;      out_args.size = wrld->size;
126          char *outFileName = (char *)CheckedAlloc(outFileNameLen);      Diderot_Output(&out_args);
         snprintf (outFileName, outFileNameLen, "%s.nrrd", wrld->name);  
   
       // allocate the correct amount of space for output  
         int numStabilized = 0;  
         for (int i = 0;  i < wrld->numStrands;  i++) {  
             if (wrld->status[i] == DIDEROT_STABLE)  
                 numStabilized++;  
         }  
         void *outData = CheckedAlloc(numStabilized * Diderot_Strands[0]->outputSzb);  
   
       // copy data into outData  
         void *outPos = outData;  
         for (int i = 0;  i < wrld->numStrands;  i++) {  
             if (wrld->status[i] == DIDEROT_STABLE) {  
                 Diderot_Strands[0]->output (outPos, wrld->inState[i]);  
                 outPos += Diderot_Strands[0]->outputSzb;  
             }  
         }  
   
       // make a new nrrd  
         Nrrd *outNrrd;  
         outNrrd = nrrdNew();  
         if (outNrrd == NULL) {  
             err = biffGetDone(NRRD);  
             fprintf(stderr, "Trouble allocating nrrd struct:\n%s", err);  
             free(err);  
             free(outData);  
             exit(1);  
         }  
   
       // wrap the data (outData) with the nrrd (outNrrd)  
         if (wrld->isArray) {  
             size_t *sizes = NEWVEC(size_t, wrld->nDims);  
             for (int i = 0; i < wrld->nDims; i++) {  
                 *(sizes + i) = *(wrld->size + i);  
             }  
             status = nrrdWrap_nva(outNrrd, outData, Diderot_Strands[0]->nrrdType, wrld->nDims, sizes);  
             if (status) {  
                 err = biffGetDone(NRRD);  
                 fprintf(stderr, "Trouble wrapping nrrd struct:\n%s", err);  
                 free(err);  
                 nrrdNix(outNrrd);  
                 free(outData);  
                 free(sizes);  
                 exit(1);  
             }  
             free(sizes);  
         }  
         else {  
             size_t *sizes = NEW(size_t);  
             *(sizes) = numStabilized;  
             status = nrrdWrap_nva(outNrrd, outData, Diderot_Strands[0]->nrrdType, wrld->nDims, sizes);  
             if (status != 0) {  
                 err = biffGetDone(NRRD);  
                 fprintf(stderr, "Trouble wrapping nrrd struct:\n%s", err);  
                 free(err);  
                 nrrdNix(outNrrd);  
                 free(outData);  
                 free(sizes);  
                 exit(1);  
             }  
             free(sizes);  
         }  
   
         // save the data  
         status = nrrdSave(outFileName, outNrrd, NULL);  
         if(status) {  
             err = biffGetDone(NRRD);  
             fprintf(stderr, "Trouble saving nrrd struct:\n%s", err);  
             free(err);  
             nrrdNix(outNrrd);  
             free(outData);  
             exit(1);  
         }  
   
         // cleanup output-related stuff  
         nrrdNix(outNrrd);  
         free(outData);  
     }  
     else {  
       // here we have the final state of all of the strands in the "in" buffer  
         int outFileNameLen = strlen(wrld->name) + 5;  
         char *outFileName = (char *)CheckedAlloc(outFileNameLen);  
         snprintf (outFileName, outFileNameLen, "%s.txt", wrld->name);  
         FILE *outS = fopen(outFileName, "w");  
         if (outS == NULL) {  
             fprintf (stderr, "Cannot open output file %s\n", outFileName);  
             exit (8);  
         }  
   
         for (int i = 0;  i < wrld->numStrands;  i++) {  
             if (wrld->status[i] == DIDEROT_STABLE)  
                 Diderot_Strands[0]->print (outS, wrld->inState[i]);  
         }  
         fclose (outS);  
     }  
127    
128      Diderot_Shutdown (wrld);      Diderot_Shutdown (wrld);
129    

Legend:
Removed from v.1478  
changed lines
  Added in v.1479

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0