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 5092bfab9aSCameron Smith void phio_openfile_read( 5182f286aaSCameron Smith const char filename[], 5292bfab9aSCameron Smith int* numFiles, 5392bfab9aSCameron Smith int* fileDescriptor) { 5492bfab9aSCameron Smith std::string syncName = appendColor(filename, *numFiles); 5592bfab9aSCameron Smith int nfields=0; 5692bfab9aSCameron Smith int nppf=0; 5792bfab9aSCameron Smith queryphmpiio(syncName.c_str(), &nfields, &nppf); 5892bfab9aSCameron Smith const char* mode = "read"; 5992bfab9aSCameron Smith initphmpiio(&nfields, &nppf, numFiles, fileDescriptor, mode); 6092bfab9aSCameron Smith openfile(syncName.c_str(), mode, fileDescriptor); 6192bfab9aSCameron Smith } 6292bfab9aSCameron Smith 6392bfab9aSCameron Smith void phio_openfile_write( 6492bfab9aSCameron 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 7192bfab9aSCameron Smith assert(*numFields > 0 && *numFields < 1024); 7292bfab9aSCameron Smith assert(*numPPF > 0 && *numPPF < 1024); 7392bfab9aSCameron Smith const char* mode = "write"; 7492bfab9aSCameron 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*a7c8a483SCameron Smith 85*a7c8a483SCameron Smith void phio_closefile_read(int* fileDescriptor) { 86*a7c8a483SCameron Smith const char* mode = "read"; 87*a7c8a483SCameron Smith closefile(fileDescriptor, mode); 88*a7c8a483SCameron Smith finalizephmpiio(fileDescriptor); 89*a7c8a483SCameron Smith } 90*a7c8a483SCameron Smith 91*a7c8a483SCameron Smith void phio_closefile_write(int* fileDescriptor) { 92*a7c8a483SCameron Smith const char* mode = "write"; 93*a7c8a483SCameron Smith closefile(fileDescriptor, mode); 94*a7c8a483SCameron Smith finalizephmpiio(fileDescriptor); 95*a7c8a483SCameron Smith } 96