1d1293ce9SCameron Smith #include "phIO.h" 2d1293ce9SCameron Smith #include "phComm.h" 3f262839cSCameron Smith #include <stdio.h> 482f286aaSCameron Smith #include <string.h> 5ade0e30fSCameron Smith #include <assert.h> 6d1293ce9SCameron Smith #include <phastaIO.h> 7d1293ce9SCameron Smith #include <sstream> 8d1293ce9SCameron Smith #include <string> 9d1293ce9SCameron Smith 10f262839cSCameron Smith namespace { 11f262839cSCameron Smith std::string appendSync(const char* phrase) { 12f262839cSCameron Smith std::stringstream ss; 13f262839cSCameron Smith ss << phrase << "@" << phcomm_rank()+1 << "?"; 14f262839cSCameron Smith std::string s = ss.str(); 15f262839cSCameron Smith return s; 16f262839cSCameron Smith } 1782f286aaSCameron Smith std::string appendColor(const char* phrase, int numFiles) { 1882f286aaSCameron Smith const int color = computeColor(phcomm_rank(), phcomm_size(), numFiles); 1982f286aaSCameron Smith std::stringstream ss; 2082f286aaSCameron Smith ss << phrase << color+1; 2182f286aaSCameron Smith std::string s = ss.str(); 2282f286aaSCameron Smith return s; 2382f286aaSCameron Smith } 24f262839cSCameron Smith } 25f262839cSCameron Smith 2682f286aaSCameron Smith void phio_readheader( 2782f286aaSCameron Smith int* fileDescriptor, 28d1293ce9SCameron Smith const char keyphrase[], 29d1293ce9SCameron Smith void* valueArray, 30d1293ce9SCameron Smith int* nItems, 31d1293ce9SCameron Smith const char datatype[], 32d1293ce9SCameron Smith const char iotype[] ) { 33f262839cSCameron Smith std::string syncPhrase = appendSync(keyphrase); 34f262839cSCameron Smith readheader(fileDescriptor, syncPhrase.c_str(), 35d1293ce9SCameron Smith valueArray, nItems, datatype, iotype); 36d1293ce9SCameron Smith } 37d1293ce9SCameron Smith 38f262839cSCameron Smith void phio_readdatablock( 39f262839cSCameron Smith int* fileDescriptor, 40f262839cSCameron Smith const char keyphrase[], 41f262839cSCameron Smith void* valueArray, 42f262839cSCameron Smith int* nItems, 43f262839cSCameron Smith const char datatype[], 44f262839cSCameron Smith const char iotype[] ) { 45f262839cSCameron Smith std::string syncPhrase = appendSync(keyphrase); 46f262839cSCameron Smith readdatablock(fileDescriptor, syncPhrase.c_str(), 47f262839cSCameron Smith valueArray, nItems, datatype, iotype); 48f262839cSCameron Smith } 49f262839cSCameron Smith 50*92bfab9aSCameron Smith void phio_openfile_read( 5182f286aaSCameron Smith const char filename[], 52*92bfab9aSCameron Smith int* numFiles, 53*92bfab9aSCameron Smith int* fileDescriptor) { 54*92bfab9aSCameron Smith std::string syncName = appendColor(filename, *numFiles); 55*92bfab9aSCameron Smith int nfields=0; 56*92bfab9aSCameron Smith int nppf=0; 57*92bfab9aSCameron Smith queryphmpiio(syncName.c_str(), &nfields, &nppf); 58*92bfab9aSCameron Smith const char* mode = "read"; 59*92bfab9aSCameron Smith initphmpiio(&nfields, &nppf, numFiles, fileDescriptor, mode); 60*92bfab9aSCameron Smith openfile(syncName.c_str(), mode, fileDescriptor); 61*92bfab9aSCameron Smith } 62*92bfab9aSCameron Smith 63*92bfab9aSCameron Smith void phio_openfile_write( 64*92bfab9aSCameron Smith const char filename[], 6582f286aaSCameron Smith int* numFiles, 66ade0e30fSCameron Smith int* numFields, 67ade0e30fSCameron Smith int* numPPF, 6882f286aaSCameron Smith int* fileDescriptor) { 6982f286aaSCameron Smith std::string syncName = appendColor(filename, *numFiles); 70ade0e30fSCameron Smith //TODO - define a good upper bound 71*92bfab9aSCameron Smith assert(*numFields > 0 && *numFields < 1024); 72*92bfab9aSCameron Smith assert(*numPPF > 0 && *numPPF < 1024); 73*92bfab9aSCameron Smith const char* mode = "write"; 74*92bfab9aSCameron Smith initphmpiio(numFields, numPPF, numFiles, fileDescriptor, mode); 7582f286aaSCameron Smith openfile(syncName.c_str(), mode, fileDescriptor); 7682f286aaSCameron Smith } 77f262839cSCameron Smith 7882f286aaSCameron Smith void phio_restartname(int* step, char* filename) { 7982f286aaSCameron Smith std::stringstream ss; 8082f286aaSCameron Smith ss << "restart-dat." << *step << '.'; 8182f286aaSCameron Smith std::string s = ss.str(); 8282f286aaSCameron Smith strcpy(filename, s.c_str()); 8382f286aaSCameron Smith } 84