]> git.treefish.org Git - phys/latlib.git/commitdiff
Implemented new writeout file naming scheme using hashed range string.
authorAlexander Schmidt <alex@treefish.org>
Fri, 14 Mar 2014 15:38:50 +0000 (16:38 +0100)
committerAlexander Schmidt <alex@treefish.org>
Fri, 14 Mar 2014 15:38:50 +0000 (16:38 +0100)
o815/o815.cpp
o815/o815.h
paraq.cpp
writeout.cpp

index f078db3a0dcb16dd9d017d5409c49551af100a23..c55928192bfb2586075323d029ab04316863f6e6 100644 (file)
@@ -111,7 +111,7 @@ void o815::postParaInit() {
   long timestamp;
 
   if(comargs.idonly) {
-    cout << programid << headMaster() << endl << flush;
+    cout << programid << headMaster(true) << endl << flush;
     exit(0);
   }
 
@@ -123,7 +123,7 @@ void o815::postParaInit() {
     exit(0);
   }
   
-  out = new writeout(comargs.outdir, programid+headMaster(), rank, numprocs);
+  out = new writeout(comargs.outdir, programid+headMaster(true), rank, numprocs);
 }
 
 void o815::mainLoop() {
@@ -274,12 +274,16 @@ void o815::listArg(int *target, int tlen, char *listarg) {
     }
 }
 
-string o815::headMaster()
+string o815::headMaster(bool hashedrange)
 {
   stringstream hm;
   
-  hm << "-L" << comargs.lsize[0] << "_" << comargs.lsize[1] << "-E" << comargs.nequi << "-S" << comargs.nskip << "-N" << comargs.nmeas 
-     << paraQ->rangeString();
+  hm << "_L" << comargs.lsize[0] << "x" << comargs.lsize[1] << "_E" << comargs.nequi << "_S" << comargs.nskip << "_N" << comargs.nmeas;
+
+  if( ! hashedrange )
+    hm << paraQ->rangeString();
+  else
+    hm << "_" << hash( paraQ->rangeString() );
   
   return hm.str();
 }
@@ -338,3 +342,13 @@ void o815::readCacheArgs(const string& arg, string& cachedir, int& cachemode)
 
   cachedir = arg.substr( 0, arg.rfind(":") );
 }
+
+unsigned long o815::hash(const string& str)
+{
+  unsigned long hash = 5381;
+
+  for(string::const_iterator it=str.begin();it!=str.end();it++) 
+    hash = ((hash << 5) + hash) + *it; /* hash * 33 + character */
+
+  return hash;
+}
index 79d427dbb415dfe3c687579eb0c0d8eb93d5dcfa..d3e5a21989b03c227e763410d48686bbe8f972b9 100644 (file)
@@ -83,7 +83,7 @@ class o815 {
   vector<obs*> observables;
   sim* Sim;
   void mainLoop();
-  string headMaster();
+  string headMaster( bool hashedrange=false );
   void addPara(const string& paraid, const double& paraDefault);
   void addComOption(const char* name, int has_arg, int *flag, int val, const char* optdesc, const char* argdesc);
   vector< pair<int,char*> > parsedSpecOps;
@@ -98,6 +98,7 @@ private:
   int nextParas();
   comoption* getOptionByVal(int val);
   static void readCacheArgs(const string& arg, string& cachedir, int& cachemode);
+  unsigned long hash(const string& str);
 };
 
 #endif
index d512c9c30b911704ef291950cbc871f87d36426c..0892962dec620c09928186887c3633602c7d84d7 100644 (file)
--- a/paraq.cpp
+++ b/paraq.cpp
@@ -41,10 +41,10 @@ string paraq::rangeString()
   for( map< string, vector<double*> >::iterator paraIt = rangeMap.begin(); paraIt != rangeMap.end(); ++paraIt )
     if( paraIt->second.size() > 0 )
       for( vector<double*>::iterator rangeIt = paraIt->second.begin(); rangeIt != paraIt->second.end(); ++rangeIt)
-       rangestring << "-" << paraIt->first << (*rangeIt)[0] << "_" << (*rangeIt)[1] << "_" << (*rangeIt)[2];
+       rangestring << "_" << paraIt->first << (*rangeIt)[0] << "-" << (*rangeIt)[1] << "-" << (*rangeIt)[2];
   
   for (vector<paralink>::iterator linkit = linkedParas.begin(); linkit != linkedParas.end(); ++linkit)
-    rangestring << "-" << linkit->first << "--" << linkit->linktype << "--" << linkit->second;
+    rangestring << "_" << linkit->first << "--" << linkit->linktype << "--" << linkit->second;
 
   for( map<string,double>::iterator defIt = defaultPara.begin(); defIt != defaultPara.end(); ++defIt )
     if( rangeMap.find(defIt->first) == rangeMap.end() ) {
@@ -57,7 +57,7 @@ string paraq::rangeString()
        }
 
       if (!linkedpara)
-       rangestring << "-" << defIt->first << defIt->second;
+       rangestring << "_" << defIt->first << defIt->second;
     }
 
   return rangestring.str();
index 41dcdf57e9d4b6d5eb3087a4ba1abd1699b16ad4..a7563947f2e222b6f71409c213e78f60e632afaf 100644 (file)
@@ -28,8 +28,8 @@ void writeout::newsub(string subname) {
   of[subname] = new ofstream;
 
   if ( fulldir != "" ) {
-    if(rank>0) of[subname]->open( (fulldir + "/rank" + cRank + "-" + subname + ".tmp").c_str() );
-    else of[subname]->open( (fulldir + "/" + signature + "-" + subname + ".dat").c_str() );
+    if(rank>0) of[subname]->open( (fulldir + "/rank" + cRank + "_" + subname + ".tmp").c_str() );
+    else of[subname]->open( (fulldir + "/" + signature + "_" + subname + ".dat").c_str() );
 
     if ( !of[subname]->is_open() ) {
       logf << "WRITEOUT: Could not open output-file!" << endl << flush;
@@ -145,8 +145,8 @@ writeout::~writeout()
       }
       else {
        ofit->second->close();
-       rename((fulldir + "/rank" + cRank + "-" + ofit->first + ".tmp").c_str(),
-              (fulldir + "/rank" + cRank + "-" + ofit->first + ".part").c_str());
+       rename((fulldir + "/rank" + cRank + "_" + ofit->first + ".tmp").c_str(),
+              (fulldir + "/rank" + cRank + "_" + ofit->first + ".part").c_str());
       }
     }
     if( cRank[0] == '0' )
@@ -173,7 +173,7 @@ string writeout::getdatfile(string subname)
       myfile = string(dirp->d_name);
 
       if(myfile.length() > 3 && myfile.substr(myfile.length()-4) == "part" &&
-        subname == myfile.substr( myfile.find("-")+1, myfile.rfind(".")-myfile.find("-")-1 ) ) {
+        subname == myfile.substr( myfile.find("_")+1, myfile.rfind(".")-myfile.find("_")-1 ) ) {
        closedir(dp);
        return myfile;
       }