xref: /phasta/phSolver/common/phIO.cc (revision 36adee64d202337416fe7f5b13771ac240a82116)
1064bab1dSCameron Smith #include <stdio.h>
2064bab1dSCameron Smith #include <stdlib.h>
3*36adee64SCameron Smith #include <cstring>
4064bab1dSCameron Smith #include <string>
5*36adee64SCameron Smith #include <sstream>
6d1293ce9SCameron Smith #include "phIO.h"
7d1293ce9SCameron Smith #include "phComm.h"
8064bab1dSCameron Smith #include "phio_base.h"
9064bab1dSCameron Smith #include "phio_sync.h"
10064bab1dSCameron Smith #include "phio_posix.h"
11f262839cSCameron Smith 
1282f286aaSCameron Smith void phio_readheader(
13064bab1dSCameron Smith     phio_fp f,
14d1293ce9SCameron Smith     const  char keyphrase[],
15d1293ce9SCameron Smith     void* valueArray,
16d1293ce9SCameron Smith     int*  nItems,
17d1293ce9SCameron Smith     const char  datatype[],
18d1293ce9SCameron Smith     const char  iotype[] ) {
19064bab1dSCameron Smith   f->ops->readheader(f->file, keyphrase, valueArray,
20064bab1dSCameron Smith       nItems, datatype, iotype);
21d1293ce9SCameron Smith }
22fa18c524SCameron Smith void phio_writeheader(
2357517afcSCameron Smith     phio_fp f,
24fa18c524SCameron Smith     const char keyphrase[],
25fa18c524SCameron Smith     const void* valueArray,
26fa18c524SCameron Smith     const int* nItems,
27fa18c524SCameron Smith     const int* ndataItems,
28fa18c524SCameron Smith     const char datatype[],
29fa18c524SCameron Smith     const char iotype[] ) {
309ec3dd51SCameron Smith   f->ops->writeheader(f->file, keyphrase, valueArray,
319ec3dd51SCameron Smith       nItems, ndataItems, datatype, iotype);
32fa18c524SCameron Smith }
33f262839cSCameron Smith void phio_readdatablock(
34064bab1dSCameron Smith     phio_fp f,
35f262839cSCameron Smith     const  char keyphrase[],
36f262839cSCameron Smith     void* valueArray,
37f262839cSCameron Smith     int*  nItems,
38f262839cSCameron Smith     const char  datatype[],
39f262839cSCameron Smith     const char  iotype[] ) {
40064bab1dSCameron Smith   f->ops->readdatablock(f->file, keyphrase, valueArray,
41064bab1dSCameron Smith       nItems, datatype, iotype);
42f262839cSCameron Smith }
4366a3fa2cSCameron Smith void phio_writedatablock(
449ec3dd51SCameron Smith     phio_fp f,
4566a3fa2cSCameron Smith     const char keyphrase[],
4666a3fa2cSCameron Smith     const void* valueArray,
4766a3fa2cSCameron Smith     const int* nItems,
4866a3fa2cSCameron Smith     const char datatype[],
4966a3fa2cSCameron Smith     const char iotype[]) {
509ec3dd51SCameron Smith   f->ops->writedatablock(f->file, keyphrase, valueArray,
519ec3dd51SCameron Smith       nItems, datatype, iotype);
5266a3fa2cSCameron Smith }
5392bfab9aSCameron Smith void phio_openfile_read(
5482f286aaSCameron Smith     const char filename[],
5592bfab9aSCameron Smith     int* numFiles,
56064bab1dSCameron Smith     phio_fp* fileDescriptor) {
57064bab1dSCameron Smith   std::string fn(filename);
58064bab1dSCameron Smith   std::string syncSuffix("-dat");
59064bab1dSCameron Smith   std::string posixSuffix(".dat");
60064bab1dSCameron Smith   if( fn.find(syncSuffix) != std::string::npos )
61*36adee64SCameron Smith     sync_openfile_read(fn.c_str(), numFiles, fileDescriptor);
62064bab1dSCameron Smith   else if( fn.find(posixSuffix) != std::string::npos )
63*36adee64SCameron Smith     posix_openfile_read(fn.c_str(), fileDescriptor);
64064bab1dSCameron Smith   else {
65064bab1dSCameron Smith     fprintf(stderr,
66064bab1dSCameron Smith         "type of file %s is unknown... exiting\n", filename);
67064bab1dSCameron Smith     exit(1);
6892bfab9aSCameron Smith   }
69064bab1dSCameron Smith }
7092bfab9aSCameron Smith void phio_openfile_write(
7192bfab9aSCameron Smith     const char filename[],
7282f286aaSCameron Smith     int* numFiles,
73ade0e30fSCameron Smith     int* numFields,
74ade0e30fSCameron Smith     int* numPPF,
7557517afcSCameron Smith     phio_fp* fileDescriptor) {
7657517afcSCameron Smith   std::string fn(filename);
7757517afcSCameron Smith   std::string syncSuffix("-dat");
7857517afcSCameron Smith   std::string posixSuffix(".dat");
7957517afcSCameron Smith   if( fn.find(syncSuffix) != std::string::npos )
8057517afcSCameron Smith     sync_openfile_write(filename, numFiles, numFields, numPPF, fileDescriptor);
8157517afcSCameron Smith   else if( fn.find(posixSuffix) != std::string::npos )
8257517afcSCameron Smith     posix_openfile_write(filename, fileDescriptor);
8357517afcSCameron Smith   else {
8457517afcSCameron Smith     fprintf(stderr,
8557517afcSCameron Smith         "type of file %s is unknown... exiting\n", filename);
8657517afcSCameron Smith     exit(1);
8757517afcSCameron Smith   }
8882f286aaSCameron Smith }
89064bab1dSCameron Smith void phio_closefile_read(phio_fp f) {
90064bab1dSCameron Smith   f->ops->closefile_read(f);
91a7c8a483SCameron Smith }
9257517afcSCameron Smith void phio_closefile_write(phio_fp f) {
9357517afcSCameron Smith   f->ops->closefile_write(f);
94a7c8a483SCameron Smith }
95*36adee64SCameron Smith void phio_appendStep(char* dest, int v) {
96*36adee64SCameron Smith   std::stringstream ss;
97*36adee64SCameron Smith   ss << dest << v << '.';
98*36adee64SCameron Smith   std::string s = ss.str();
99*36adee64SCameron Smith   strcpy(dest, s.c_str());
100*36adee64SCameron Smith }
101