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 { 11fa18c524SCameron Smith void appendRank(std::stringstream& ss, const char* phrase) { 12fa18c524SCameron Smith ss << phrase << "@" << phcomm_rank()+1; 13fa18c524SCameron Smith } 14f262839cSCameron Smith std::string appendSync(const char* phrase) { 15f262839cSCameron Smith std::stringstream ss; 16fa18c524SCameron Smith appendRank(ss,phrase); 17fa18c524SCameron Smith ss << "?"; 18fa18c524SCameron Smith return ss.str(); 19fa18c524SCameron Smith } 20fa18c524SCameron Smith std::string appendSyncWrite(const char* phrase) { 21fa18c524SCameron Smith std::stringstream ss; 22fa18c524SCameron Smith appendRank(ss,phrase); 23fa18c524SCameron 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; 29fa18c524SCameron 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 45fa18c524SCameron Smith void phio_writeheader( 46fa18c524SCameron Smith const int* fileDescriptor, 47fa18c524SCameron Smith const char keyphrase[], 48fa18c524SCameron Smith const void* valueArray, 49fa18c524SCameron Smith const int* nItems, 50fa18c524SCameron Smith const int* ndataItems, 51fa18c524SCameron Smith const char datatype[], 52fa18c524SCameron Smith const char iotype[] ) { 53fa18c524SCameron Smith std::string syncPhrase = appendSyncWrite(keyphrase); 54fa18c524SCameron Smith writeheader(fileDescriptor, syncPhrase.c_str(), 55fa18c524SCameron Smith valueArray, nItems, ndataItems, datatype, iotype); 56fa18c524SCameron Smith } 57fa18c524SCameron Smith 58fa18c524SCameron 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 71*66a3fa2cSCameron Smith void phio_writedatablock( 72*66a3fa2cSCameron Smith const int* fileDescriptor, 73*66a3fa2cSCameron Smith const char keyphrase[], 74*66a3fa2cSCameron Smith const void* valueArray, 75*66a3fa2cSCameron Smith const int* nItems, 76*66a3fa2cSCameron Smith const char datatype[], 77*66a3fa2cSCameron Smith const char iotype[]) { 78*66a3fa2cSCameron Smith std::string syncPhrase = appendSyncWrite(keyphrase); 79*66a3fa2cSCameron Smith writedatablock(fileDescriptor, syncPhrase.c_str(), 80*66a3fa2cSCameron Smith valueArray, nItems, datatype, iotype); 81*66a3fa2cSCameron Smith } 82*66a3fa2cSCameron Smith 8392bfab9aSCameron Smith void phio_openfile_read( 8482f286aaSCameron Smith const char filename[], 8592bfab9aSCameron Smith int* numFiles, 8692bfab9aSCameron Smith int* fileDescriptor) { 8792bfab9aSCameron Smith std::string syncName = appendColor(filename, *numFiles); 8892bfab9aSCameron Smith int nfields=0; 8992bfab9aSCameron Smith int nppf=0; 9092bfab9aSCameron Smith queryphmpiio(syncName.c_str(), &nfields, &nppf); 9192bfab9aSCameron Smith const char* mode = "read"; 9292bfab9aSCameron Smith initphmpiio(&nfields, &nppf, numFiles, fileDescriptor, mode); 9392bfab9aSCameron Smith openfile(syncName.c_str(), mode, fileDescriptor); 9492bfab9aSCameron Smith } 9592bfab9aSCameron Smith 9692bfab9aSCameron Smith void phio_openfile_write( 9792bfab9aSCameron Smith const char filename[], 9882f286aaSCameron Smith int* numFiles, 99ade0e30fSCameron Smith int* numFields, 100ade0e30fSCameron Smith int* numPPF, 10182f286aaSCameron Smith int* fileDescriptor) { 10282f286aaSCameron Smith std::string syncName = appendColor(filename, *numFiles); 103ade0e30fSCameron Smith //TODO - define a good upper bound 10492bfab9aSCameron Smith assert(*numFields > 0 && *numFields < 1024); 10592bfab9aSCameron Smith assert(*numPPF > 0 && *numPPF < 1024); 10692bfab9aSCameron Smith const char* mode = "write"; 10792bfab9aSCameron Smith initphmpiio(numFields, numPPF, numFiles, fileDescriptor, mode); 10882f286aaSCameron Smith openfile(syncName.c_str(), mode, fileDescriptor); 10982f286aaSCameron Smith } 110f262839cSCameron Smith 11182f286aaSCameron Smith void phio_restartname(int* step, char* filename) { 11282f286aaSCameron Smith std::stringstream ss; 11382f286aaSCameron Smith ss << "restart-dat." << *step << '.'; 11482f286aaSCameron Smith std::string s = ss.str(); 11582f286aaSCameron Smith strcpy(filename, s.c_str()); 11682f286aaSCameron Smith } 117a7c8a483SCameron Smith 118a7c8a483SCameron Smith void phio_closefile_read(int* fileDescriptor) { 119a7c8a483SCameron Smith const char* mode = "read"; 120a7c8a483SCameron Smith closefile(fileDescriptor, mode); 121a7c8a483SCameron Smith finalizephmpiio(fileDescriptor); 122a7c8a483SCameron Smith } 123a7c8a483SCameron Smith 124a7c8a483SCameron Smith void phio_closefile_write(int* fileDescriptor) { 125a7c8a483SCameron Smith const char* mode = "write"; 126a7c8a483SCameron Smith closefile(fileDescriptor, mode); 127a7c8a483SCameron Smith finalizephmpiio(fileDescriptor); 128a7c8a483SCameron Smith } 129