xref: /phasta/phSolver/common/phIO.cc (revision fa18c5243221299308e719e7cfa85c9f753bb3b4)
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