xref: /phasta/phSolver/common/phIO.cc (revision 82f286aa43efd7ca3a16d90c6eed1b687942af32)
1d1293ce9SCameron Smith #include "phIO.h"
2d1293ce9SCameron Smith #include "phComm.h"
3f262839cSCameron Smith #include <stdio.h>
4*82f286aaSCameron Smith #include <string.h>
5d1293ce9SCameron Smith #include <phastaIO.h>
6d1293ce9SCameron Smith #include <sstream>
7d1293ce9SCameron Smith #include <string>
8d1293ce9SCameron Smith 
9f262839cSCameron Smith namespace {
10f262839cSCameron Smith   std::string appendSync(const char* phrase) {
11f262839cSCameron Smith     std::stringstream ss;
12f262839cSCameron Smith     ss << phrase << "@" << phcomm_rank()+1 << "?";
13f262839cSCameron Smith     std::string s = ss.str();
14f262839cSCameron Smith     return s;
15f262839cSCameron Smith   }
16*82f286aaSCameron Smith   std::string appendColor(const char* phrase, int numFiles) {
17*82f286aaSCameron Smith     const int color = computeColor(phcomm_rank(), phcomm_size(), numFiles);
18*82f286aaSCameron Smith     std::stringstream ss;
19*82f286aaSCameron Smith     ss << phrase << color+1;
20*82f286aaSCameron Smith     std::string s = ss.str();
21*82f286aaSCameron Smith     return s;
22*82f286aaSCameron Smith   }
23f262839cSCameron Smith }
24f262839cSCameron Smith 
25*82f286aaSCameron Smith void phio_readheader(
26*82f286aaSCameron Smith     int* fileDescriptor,
27d1293ce9SCameron Smith     const  char keyphrase[],
28d1293ce9SCameron Smith     void* valueArray,
29d1293ce9SCameron Smith     int*  nItems,
30d1293ce9SCameron Smith     const char  datatype[],
31d1293ce9SCameron Smith     const char  iotype[] ) {
32f262839cSCameron Smith   std::string syncPhrase = appendSync(keyphrase);
33f262839cSCameron Smith   readheader(fileDescriptor, syncPhrase.c_str(),
34d1293ce9SCameron Smith       valueArray, nItems, datatype, iotype);
35d1293ce9SCameron Smith }
36d1293ce9SCameron Smith 
37f262839cSCameron Smith void phio_readdatablock(
38f262839cSCameron Smith     int*  fileDescriptor,
39f262839cSCameron Smith     const char keyphrase[],
40f262839cSCameron Smith     void* valueArray,
41f262839cSCameron Smith     int*  nItems,
42f262839cSCameron Smith     const char  datatype[],
43f262839cSCameron Smith     const char  iotype[] ) {
44f262839cSCameron Smith   std::string syncPhrase = appendSync(keyphrase);
45f262839cSCameron Smith   readdatablock(fileDescriptor, syncPhrase.c_str(),
46f262839cSCameron Smith       valueArray, nItems, datatype, iotype);
47f262839cSCameron Smith }
48f262839cSCameron Smith 
49*82f286aaSCameron Smith void phio_openfile(
50*82f286aaSCameron Smith     const char filename[],
51*82f286aaSCameron Smith     const char mode[],
52*82f286aaSCameron Smith     int* numFiles,
53*82f286aaSCameron Smith     int* fileDescriptor) {
54*82f286aaSCameron Smith   std::string syncName = appendColor(filename, *numFiles);
55*82f286aaSCameron Smith   fprintf(stderr, "filename %s syncName %s\n", filename, syncName.c_str());
56*82f286aaSCameron Smith   int nfields, nppf;
57*82f286aaSCameron Smith   queryphmpiio(syncName.c_str(), &nfields, &nppf);
58*82f286aaSCameron Smith   fprintf(stderr, "nfields %d nppf %d\n", nfields, nppf);
59*82f286aaSCameron Smith   initphmpiio(&nfields, &nppf, numFiles, fileDescriptor, mode);
60*82f286aaSCameron Smith   openfile(syncName.c_str(), mode, fileDescriptor);
61*82f286aaSCameron Smith }
62f262839cSCameron Smith 
63*82f286aaSCameron Smith void phio_restartname(int* step, char* filename) {
64*82f286aaSCameron Smith   std::stringstream ss;
65*82f286aaSCameron Smith   ss << "restart-dat." << *step << '.';
66*82f286aaSCameron Smith   std::string s = ss.str();
67*82f286aaSCameron Smith   strcpy(filename, s.c_str());
68*82f286aaSCameron Smith }
69