1#ifndef DUNE_FEM_SIONLIBSTREAMS_HH
2#define DUNE_FEM_SIONLIBSTREAMS_HH
9#include <dune/common/parallel/communication.hh>
10#include <dune/common/parallel/mpicommunication.hh>
46 typedef MPIHelper :: MPICommunicator MPICommunicatorType;
66 blockSize_( parameter.getValue< int >(
"fem.io.sionlib.blocksize", -1 ) )
74 :
SIONlibOutStream( filename, rank, MPIHelper :: getCommunicator(), parameter )
88 data_ =
new std::stringstream();
95#if HAVE_SIONLIB && HAVE_MPI
99 std::string data (
data_->str() );
103 sion_int64 chunkSize = data.size();
106 const char* fileMode =
"wb";
121 sion_paropen_mpi( (
char *)
filename_.c_str(),
133 DUNE_THROW( IOError,
"opening sion_paropen_mpi for writing failed!" <<
filename_ );
138 const char* buffer = data.c_str();
140 assert(
sizeof(
char) == 1 );
141 sion_fwrite( buffer, 1, chunkSize, sid);
144 sion_parclose_mpi( sid );
147 std::cerr <<
"WARNING: SIONlib or MPI not available" << std::endl;
178 typedef MPIHelper :: MPICommunicator MPICommunicatorType;
192 const int rank = MPIManager :: rank(),
193 MPICommunicatorType mpiComm = MPIHelper :: getCommunicator() )
205 std::istream&
readFile(
const std::string& filename,
207 MPICommunicatorType mpiComm )
209 data_ =
new std::stringstream();
213 sion_int64 chunkSize = 0;
215 const char* fileMode =
"rb";
231 const int mpiSize = MPIManager :: size () ;
236 sid = sion_paropen_mpi( (
char *) filename.c_str(),
249 DUNE_THROW( IOError,
"opening sion_paropen_mpi for reading failed!" << filename );
256 sid = sion_open_rank( (
char *) filename.c_str(),
265 DUNE_THROW( IOError,
"opening sion_ropen for reading failed!" << filename );
271 chunkSize = sion_bytes_avail_in_block( sid );
275 data.resize( chunkSize );
278 char* buffer = (
char *) data.c_str();
279 assert(
sizeof(
char) == 1 );
281 sion_fread( buffer, 1, chunkSize, sid );
284 data_ =
new std::stringstream();
286 data_->write( buffer, chunkSize );
292 sion_parclose_mpi( sid );
Definition: bindguard.hh:11
static double min(const Double &v, const double p)
Definition: double.hh:386
static ParameterContainer & container()
Definition: io/parameter.hh:193
output stream writing into a single file with the SIONlib (http://www2.fz-juelich....
Definition: sionlibstreams.hh:41
std::stringstream * data_
standard file stream
Definition: sionlibstreams.hh:152
const int blockSize_
Definition: sionlibstreams.hh:159
SIONlibOutStream(const std::string &filename, const int rank, MPICommunicatorType mpiComm, ParameterReader parameter=Parameter::container())
constructor
Definition: sionlibstreams.hh:59
MPICommunicatorType mpiComm_
Definition: sionlibstreams.hh:155
const int rank_
Definition: sionlibstreams.hh:157
std::ostream & dataStream()
Definition: sionlibstreams.hh:85
~SIONlibOutStream()
destructor writing internal data buffer to the file via SIONlib
Definition: sionlibstreams.hh:78
SIONlibOutStream(const std::string &filename, const int rank, ParameterReader parameter=Parameter::container())
Definition: sionlibstreams.hh:73
SIONlibOutStream(const std::string &filename, ParameterReader parameter=Parameter::container())
Definition: sionlibstreams.hh:69
const int numFiles_
Definition: sionlibstreams.hh:158
const std::string filename_
Definition: sionlibstreams.hh:154
void writeFile()
Definition: sionlibstreams.hh:93
input stream reading from a file in binary form
Definition: sionlibstreams.hh:174
std::stringstream * data_
standard file stream
Definition: sionlibstreams.hh:305
~SIONlibInStream()
destructor deleting interal data buffer
Definition: sionlibstreams.hh:199
SIONlibInStream(const std::string &filename, const int rank=MPIManager ::rank(), MPICommunicatorType mpiComm=MPIHelper ::getCommunicator())
constructor
Definition: sionlibstreams.hh:191
std::istream & readFile(const std::string &filename, int rank, MPICommunicatorType mpiComm)
Definition: sionlibstreams.hh:205
MPIHelper::MPICommunicator MPICommunicatorType
type of MPI communicator
Definition: sionlibstreams.hh:315
static SIONlibInStream * create(const std::string &filename, const int rank=MPIManager::rank(), const MPICommunicatorType &mpiComm=MPIHelper ::getCommunicator())
return pointer to stream object created by new.
Definition: sionlibstreams.hh:323
output stream writing into a given std::ostream
Definition: standardstreams.hh:61
input stream reading from a given std::istream
Definition: standardstreams.hh:196
Factory class for Fem Streams to deal with different constructor parameters.
Definition: streams.hh:359
Definition: mpimanager.hh:337
static int rank()
Definition: mpimanager.hh:401