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 { 11*fa18c524SCameron Smith void appendRank(std::stringstream& ss, const char* phrase) { 12*fa18c524SCameron Smith ss << phrase << "@" << phcomm_rank()+1; 13*fa18c524SCameron Smith } 14f262839cSCameron Smith std::string appendSync(const char* phrase) { 15f262839cSCameron Smith std::stringstream ss; 16*fa18c524SCameron Smith appendRank(ss,phrase); 17*fa18c524SCameron Smith ss << "?"; 18*fa18c524SCameron Smith return ss.str(); 19*fa18c524SCameron Smith } 20*fa18c524SCameron Smith std::string appendSyncWrite(const char* phrase) { 21*fa18c524SCameron Smith std::stringstream ss; 22*fa18c524SCameron Smith appendRank(ss,phrase); 23*fa18c524SCameron Smith return ss.str(); 24f262839cSCameron Smith } 2582f286aaSCameron Smith std::string appendColor(const char* phrase, int numFiles) { 2682f286aaSCameron Smith const int color = computeColor(phcomm_rank(), phcomm_size(), numFiles); 2782f286aaSCameron Smith std::stringstream ss; 2882f286aaSCameron Smith ss << phrase << color+1; 29*fa18c524SCameron Smith return ss.str(); 3082f286aaSCameron Smith } 31f262839cSCameron Smith } 32f262839cSCameron Smith 3382f286aaSCameron Smith void phio_readheader( 3482f286aaSCameron Smith int* fileDescriptor, 35d1293ce9SCameron Smith const char keyphrase[], 36d1293ce9SCameron Smith void* valueArray, 37d1293ce9SCameron Smith int* nItems, 38d1293ce9SCameron Smith const char datatype[], 39d1293ce9SCameron Smith const char iotype[] ) { 40f262839cSCameron Smith std::string syncPhrase = appendSync(keyphrase); 41f262839cSCameron Smith readheader(fileDescriptor, syncPhrase.c_str(), 42d1293ce9SCameron Smith valueArray, nItems, datatype, iotype); 43d1293ce9SCameron Smith } 44d1293ce9SCameron Smith 45*fa18c524SCameron Smith void phio_writeheader( 46*fa18c524SCameron Smith const int* fileDescriptor, 47*fa18c524SCameron Smith const char keyphrase[], 48*fa18c524SCameron Smith const void* valueArray, 49*fa18c524SCameron Smith const int* nItems, 50*fa18c524SCameron Smith const int* ndataItems, 51*fa18c524SCameron Smith const char datatype[], 52*fa18c524SCameron Smith const char iotype[] ) { 53*fa18c524SCameron Smith std::string syncPhrase = appendSyncWrite(keyphrase); 54*fa18c524SCameron Smith writeheader(fileDescriptor, syncPhrase.c_str(), 55*fa18c524SCameron Smith valueArray, nItems, ndataItems, datatype, iotype); 56*fa18c524SCameron Smith } 57*fa18c524SCameron Smith 58*fa18c524SCameron Smith 59f262839cSCameron Smith void phio_readdatablock( 60f262839cSCameron Smith int* fileDescriptor, 61f262839cSCameron Smith const char keyphrase[], 62f262839cSCameron Smith void* valueArray, 63f262839cSCameron Smith int* nItems, 64f262839cSCameron Smith const char datatype[], 65f262839cSCameron Smith const char iotype[] ) { 66f262839cSCameron Smith std::string syncPhrase = appendSync(keyphrase); 67f262839cSCameron Smith readdatablock(fileDescriptor, syncPhrase.c_str(), 68f262839cSCameron Smith valueArray, nItems, datatype, iotype); 69f262839cSCameron Smith } 70f262839cSCameron Smith 7192bfab9aSCameron Smith void phio_openfile_read( 7282f286aaSCameron Smith const char filename[], 7392bfab9aSCameron Smith int* numFiles, 7492bfab9aSCameron Smith int* fileDescriptor) { 7592bfab9aSCameron Smith std::string syncName = appendColor(filename, *numFiles); 7692bfab9aSCameron Smith int nfields=0; 7792bfab9aSCameron Smith int nppf=0; 7892bfab9aSCameron Smith queryphmpiio(syncName.c_str(), &nfields, &nppf); 7992bfab9aSCameron Smith const char* mode = "read"; 8092bfab9aSCameron Smith initphmpiio(&nfields, &nppf, numFiles, fileDescriptor, mode); 8192bfab9aSCameron Smith openfile(syncName.c_str(), mode, fileDescriptor); 8292bfab9aSCameron Smith } 8392bfab9aSCameron Smith 8492bfab9aSCameron Smith void phio_openfile_write( 8592bfab9aSCameron Smith const char filename[], 8682f286aaSCameron Smith int* numFiles, 87ade0e30fSCameron Smith int* numFields, 88ade0e30fSCameron Smith int* numPPF, 8982f286aaSCameron Smith int* fileDescriptor) { 9082f286aaSCameron Smith std::string syncName = appendColor(filename, *numFiles); 91ade0e30fSCameron Smith //TODO - define a good upper bound 9292bfab9aSCameron Smith assert(*numFields > 0 && *numFields < 1024); 9392bfab9aSCameron Smith assert(*numPPF > 0 && *numPPF < 1024); 9492bfab9aSCameron Smith const char* mode = "write"; 9592bfab9aSCameron Smith initphmpiio(numFields, numPPF, numFiles, fileDescriptor, mode); 9682f286aaSCameron Smith openfile(syncName.c_str(), mode, fileDescriptor); 9782f286aaSCameron Smith } 98f262839cSCameron Smith 9982f286aaSCameron Smith void phio_restartname(int* step, char* filename) { 10082f286aaSCameron Smith std::stringstream ss; 10182f286aaSCameron Smith ss << "restart-dat." << *step << '.'; 10282f286aaSCameron Smith std::string s = ss.str(); 10382f286aaSCameron Smith strcpy(filename, s.c_str()); 10482f286aaSCameron Smith } 105a7c8a483SCameron Smith 106a7c8a483SCameron Smith void phio_closefile_read(int* fileDescriptor) { 107a7c8a483SCameron Smith const char* mode = "read"; 108a7c8a483SCameron Smith closefile(fileDescriptor, mode); 109a7c8a483SCameron Smith finalizephmpiio(fileDescriptor); 110a7c8a483SCameron Smith } 111a7c8a483SCameron Smith 112a7c8a483SCameron Smith void phio_closefile_write(int* fileDescriptor) { 113a7c8a483SCameron Smith const char* mode = "write"; 114a7c8a483SCameron Smith closefile(fileDescriptor, mode); 115a7c8a483SCameron Smith finalizephmpiio(fileDescriptor); 116a7c8a483SCameron Smith } 117