2 #include "rheolef/diststream.h"
3 #include "rheolef/rheostream.h"
8 odiststream
dout (cout);
9 odiststream
dclog (clog);
10 odiststream
derr (cerr);
13 dis_scatch (idiststream& ips,
const communicator& comm, std::string ch)
16 size_type io_proc = idiststream::io_proc();
17 size_type my_proc = comm.rank();
19 if (my_proc == io_proc) {
20 status =
scatch(ips.is(),ch);
22 #ifdef _RHEOLEF_HAVE_MPI
23 mpi::broadcast (comm, status, io_proc);
24 #endif // _RHEOLEF_HAVE_MPI
28 idiststream::io_proc() {
29 #ifndef _RHEOLEF_HAVE_MPI
31 #else // _RHEOLEF_HAVE_MPI
32 boost::optional<int> opt_io_proc = environment::io_rank();
33 check_macro (opt_io_proc,
"no process can perform i/o");
34 int io_proc = opt_io_proc.get();
35 if (io_proc == mpi::any_source) {
40 #endif // _RHEOLEF_HAVE_MPI
43 odiststream::io_proc()
45 return idiststream::io_proc();
51 const communicator& comm)
54 if (_use_alloc && _ptr_is != 0) {
59 if (
size_type(comm.rank()) == idiststream::io_proc()) {
60 _ptr_is =
new_macro (irheostream(filename, suffix));
70 if (_use_alloc && _ptr_is != 0) {
71 if (
size_type(_comm.rank()) == idiststream::io_proc()) {
72 irheostream* ptr_irs = (irheostream*)(_ptr_is);
77 idiststream::~idiststream ()
80 if (_use_alloc && _ptr_is != 0) {
87 idiststream::good()
const
90 if (
size_type(comm().rank()) != idiststream::io_proc()) {
92 }
else if (_ptr_is == 0) {
95 status = (*_ptr_is).good();
97 #ifdef _RHEOLEF_HAVE_MPI
98 mpi::broadcast(comm(), status, 0);
99 #endif // _RHEOLEF_HAVE_MPI
104 std::string filename,
107 const communicator& comm)
110 if (_use_alloc && _ptr_os != 0) {
115 if (
size_type(comm.rank()) == odiststream::io_proc()) {
124 odiststream::close ()
126 if (_use_alloc && _ptr_os != 0) {
127 if (
size_type(_comm.rank()) == odiststream::io_proc()) {
133 odiststream::~odiststream ()
136 if (_use_alloc && _ptr_os != 0) {
143 odiststream::good()
const
146 if (
size_type(comm().rank()) != idiststream::io_proc()) {
148 }
else if (_ptr_os == 0) {
151 status = (*_ptr_os).good();
153 #ifdef _RHEOLEF_HAVE_MPI
154 mpi::broadcast(comm(), status, 0);
155 #endif // _RHEOLEF_HAVE_MPI
159 dis_system (
const std::string& command,
const communicator& comm)
162 size_type io_proc = odiststream::io_proc();
163 size_type my_proc = comm.rank();
165 if (my_proc == io_proc) {
166 status = std::system (command.c_str());
168 #ifdef _RHEOLEF_HAVE_MPI
169 mpi::broadcast (mpi::communicator(), status, io_proc);
170 #endif // _RHEOLEF_HAVE_MPI
177 size_type io_proc = odiststream::io_proc();
178 size_type my_proc = comm.rank();
180 if (my_proc == io_proc) {
183 #ifdef _RHEOLEF_HAVE_MPI
184 mpi::broadcast (mpi::communicator(), status, io_proc);
185 #endif // _RHEOLEF_HAVE_MPI