/[escript]/trunk/tools/libescriptreader/src/escript2silo.cpp
ViewVC logotype

Diff of /trunk/tools/libescriptreader/src/escript2silo.cpp

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

revision 2193 by caltinay, Tue Dec 23 04:13:15 2008 UTC revision 2194 by caltinay, Tue Jan 6 01:23:37 2009 UTC
# Line 25  Line 25 
25  using namespace std;  using namespace std;
26  using namespace EscriptReader;  using namespace EscriptReader;
27    
28    string insertTimestep(const string& fString, int timeStep)
29    {
30        string s(fString);
31        size_t pos;
32        if ((pos = s.find("%")) != s.npos) {
33            size_t endpos = pos+1;
34            while (endpos<s.length() && s[endpos] != 'd')
35                endpos++;
36            string fmtStr = s.substr(pos, endpos-pos+1);
37            char ts[255];
38            snprintf(ts, 255, fmtStr.c_str(), timeStep);
39            s.replace(pos, endpos-pos+1, ts);
40        }
41        return s;
42    }
43    
44  int main(int argc, char** argv)  int main(int argc, char** argv)
45  {  {
46      // turn off for debugging purposes      // turn off for debugging purposes
47      bool writeMultiMesh = true;      bool writeMultiMesh = true;
48    
49      // whether time-varying datasets should use the same mesh (from T=0)      // whether time-varying datasets should use the same mesh (from T=0)
50        // TODO: Add a command line option for this
51      bool writeMeshOnce = true;      bool writeMeshOnce = true;
52    
53      if (argc < 2) {      if (argc < 2) {
# Line 38  int main(int argc, char** argv) Line 55  int main(int argc, char** argv)
55          return -1;          return -1;
56      }      }
57    
58      ifstream in(argv[1]);      string esdFile(argv[1]);
59    
60        ifstream in(esdFile.c_str());
61      if (!in.is_open()) {      if (!in.is_open()) {
62          cerr << "Could not open " << argv[1] << "." << endl;          cerr << "Could not open " << esdFile << "." << endl;
63          return -1;          return -1;
64      }      }
65    
# Line 49  int main(int argc, char** argv) Line 68  int main(int argc, char** argv)
68      in.getline(line, 256);      in.getline(line, 256);
69      int major, minor;      int major, minor;
70      if (sscanf(line, "#escript datafile V%d.%d", &major, &minor) != 2) {      if (sscanf(line, "#escript datafile V%d.%d", &major, &minor) != 2) {
71          cerr << argv[1] << " is not a valid escript datafile." << endl;          cerr << esdFile << " is not a valid escript datafile." << endl;
72          in.close();          in.close();
73          return -1;          return -1;
74      }      }
# Line 78  int main(int argc, char** argv) Line 97  int main(int argc, char** argv)
97              varFiles.push_back(sVal);              varFiles.push_back(sVal);
98              varNames.push_back(colon+1);              varNames.push_back(colon+1);
99          } else {          } else {
100              cerr << argv[1] << " is not a valid escript datafile." << endl;              cerr << esdFile << " is not a valid escript datafile." << endl;
101              in.close();              in.close();
102              return -1;              return -1;
103          }          }
# Line 87  int main(int argc, char** argv) Line 106  int main(int argc, char** argv)
106      in.close();      in.close();
107            
108      if (nParts < 1 || meshFile == "" || nTimesteps < 1) {      if (nParts < 1 || meshFile == "" || nTimesteps < 1) {
109          cerr << argv[1] << " is not a valid escript datafile." << endl;          cerr << esdFile << " is not a valid escript datafile." << endl;
110          return -1;          return -1;
111      }      }
112    
113      cout << "Converting " << argv[1] << "..." << endl;      cout << "Converting " << esdFile << "..." << endl;
     if (nParts > 1)  
         meshFile.append(".nc.%04d");  
     else  
         meshFile.append(".nc");  
114    
115      MeshBlocks meshFromTzero;      MeshBlocks meshFromTzero;
116    
# Line 106  int main(int argc, char** argv) Line 121  int main(int argc, char** argv)
121    
122          // look for "%d" in filename and replace by timestep if found          // look for "%d" in filename and replace by timestep if found
123          for (it=varFiles.begin(); it!=varFiles.end(); it++) {          for (it=varFiles.begin(); it!=varFiles.end(); it++) {
124              string v(*it);              string v = insertTimestep(*it, timeStep);
             size_t pos;  
             if ((pos = v.find("%")) != v.npos) {  
                 size_t endpos = pos+1;  
                 while (endpos<v.length() && v[endpos] != 'd')  
                     endpos++;  
                 string fmtStr = v.substr(pos, endpos-pos+1);  
                 char ts[255];  
                 snprintf(ts, 255, fmtStr.c_str(), timeStep);  
                 v.replace(pos, endpos-pos+1, ts);  
             }  
125              if (nParts > 1)              if (nParts > 1)
126                  v.append(".nc.%04d");                  v.append(".nc.%04d");
127              else              else
# Line 134  int main(int argc, char** argv) Line 139  int main(int argc, char** argv)
139                  delete ds;                  delete ds;
140                  break;                  break;
141              }              }
142          } else if (!ds->load(meshFile, varFilesTS, varNames, nParts)) {          } else {
143              delete ds;              string meshTS = insertTimestep(meshFile, timeStep);
144              break;              if (nParts > 1)
145                    meshTS.append(".nc.%04d");
146                else
147                    meshTS.append(".nc");
148    
149                if (!ds->load(meshTS, varFilesTS, varNames, nParts)) {
150                    delete ds;
151                    break;
152                }
153          }          }
154    
155          string baseName(argv[1]);          string baseName(esdFile);
156          size_t dot = baseName.rfind('.');          size_t dot = baseName.rfind('.');
157          if (dot != baseName.npos)          if (dot != baseName.npos)
158              baseName.erase(dot, baseName.length()-dot);              baseName.erase(dot, baseName.length()-dot);

Legend:
Removed from v.2193  
changed lines
  Added in v.2194

  ViewVC Help
Powered by ViewVC 1.1.26