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