fpmas 1.6
output.h
Go to the documentation of this file.
1#ifndef FPMAS_OUTPUT_H
2#define FPMAS_OUTPUT_H
3
4#include <fstream>
5#include <sstream>
10
92namespace fpmas { namespace io {
93 using api::io::Watcher;
94
100 struct Void {};
101
102
114 template<typename T>
115 struct Local {
119 typedef T Type;
123 typedef Void Params;
124
128 class Single {
129 private:
130 Watcher<T> watcher;
131 public:
139 int,
140 const Watcher<T>& watcher,
141 const Params&)
142 : watcher(watcher) {}
150 return watcher();
151 }
152 };
156 class All {
157 private:
158 Watcher<T> watcher;
159 public:
167 const Watcher<T>& watcher,
168 const Params&)
169 : watcher(watcher) {}
170
177 return watcher();
178 }
179
180 };
181 };
182
194 template<typename T, typename BinaryOp = std::plus<T>, template<typename> class Mpi = communication::TypedMpi>
195 struct Reduce {
199 typedef T Type;
203 typedef Void Params;
204
210 class Single {
211 private:
212 Mpi<T> mpi;
213 int root;
214 Watcher<T> watcher;
215 BinaryOp binary_op;
216
217 public:
227 int root,
228 const Watcher<T>& watcher,
229 const Params&)
230 : mpi(comm), root(root), watcher(watcher) {}
231
242 return fpmas::communication::reduce(mpi, root, watcher(), binary_op);
243 }
244 };
245
251 class All {
252 private:
253 Mpi<T> mpi;
254 Watcher<T> watcher;
255 BinaryOp binary_op;
256
257 public:
266 const Watcher<T>& watcher,
267 const Params&)
268 : mpi(comm), watcher(watcher) {}
269
279 return fpmas::communication::all_reduce(mpi, watcher(), binary_op);
280 }
281 };
282 };
283
284
289 public:
290 std::ostream& get() override {
291 return std::cout;
292 }
293 };
294
301 private:
302 std::ostringstream out;
303 public:
310 std::ostringstream& get() override {
311 return out;
312 }
313
319 std::string str() const {
320 return out.str();
321 }
322 };
323
367 private:
371 std::ofstream file;
372 std::string filename;
373 std::ios::openmode mode;
374
375 public:
382
394 std::string filename,
395 std::ios::openmode mode = std::ios::out
396 );
397
413 std::string file_format,
414 int rank,
415 std::ios::openmode mode = std::ios::out
416 );
417
434 std::string file_format,
436 std::ios::openmode mode = std::ios::out
437 );
455 std::string file_format,
456 int rank,
458 std::ios::openmode mode = std::ios::out
459 );
460
474 std::ofstream& get() override;
475 };
476
494 private:
495 std::string fileformat;
496 int rank;
497 api::runtime::Runtime& runtime;
498 FileOutput current_output;
499 std::ios::openmode mode;
500
501 public:
516 std::string fileformat,
518 api::runtime::Runtime& runtime,
519 std::ios::openmode mode = std::ios::out
520 ) :
521 fileformat(fileformat), rank(comm.getRank()), runtime(runtime),
522 mode(mode) {
523 }
524
531 std::ofstream& get() override {
532 current_output = FileOutput(
533 fileformat, rank,
535 mode);
536
537 return current_output.get();
538 }
539 };
540
544 class OutputTask : public scheduler::TaskBase<api::scheduler::Task> {
545 private:
546 api::io::Output& output;
547 public:
554 : output(output) {}
555
559 void run() override {
560 output.dump();
561 }
562 };
563
572 private:
573 OutputTask output_task {*this};
574 scheduler::Job _job {{output_task}};
575 protected:
581
582 public:
591 }
592
593 public:
597 const api::scheduler::Job& job() override {
598 return _job;
599 }
600 };
601}}
602#endif
Definition: communication.h:251
Definition: output.h:16
virtual void dump()=0
Definition: runtime.h:18
virtual Date currentDate() const =0
Definition: scheduler.h:135
Definition: output.h:288
std::ostream & get() override
Definition: output.h:290
Definition: output.h:493
DynamicFileOutput(std::string fileformat, api::communication::MpiCommunicator &comm, api::runtime::Runtime &runtime, std::ios::openmode mode=std::ios::out)
Definition: output.h:515
std::ofstream & get() override
Definition: output.h:531
Definition: output.h:366
FileOutput()
Definition: output.h:381
std::ofstream & get() override
Definition: output.cpp:33
Definition: output.h:156
T operator()()
Definition: output.h:176
All(api::communication::MpiCommunicator &, const Watcher< T > &watcher, const Params &)
Definition: output.h:165
Definition: output.h:128
T operator()()
Definition: output.h:149
Single(api::communication::MpiCommunicator &, int, const Watcher< T > &watcher, const Params &)
Definition: output.h:137
Definition: output.h:571
OutputBase(api::io::OutputStream &output_stream)
Definition: output.h:589
const api::scheduler::Job & job() override
Definition: output.h:597
api::io::OutputStream & output_stream
Definition: output.h:580
Definition: output.h:544
void run() override
Definition: output.h:559
OutputTask(api::io::Output &output)
Definition: output.h:553
Definition: output.h:251
All(api::communication::MpiCommunicator &comm, const Watcher< T > &watcher, const Params &)
Definition: output.h:264
T operator()()
Definition: output.h:278
Definition: output.h:210
T operator()()
Definition: output.h:241
Single(api::communication::MpiCommunicator &comm, int root, const Watcher< T > &watcher, const Params &)
Definition: output.h:225
Definition: output.h:300
std::ostringstream & get() override
Definition: output.h:310
std::string str() const
Definition: output.h:319
Definition: scheduler.h:169
Definition: scheduler.h:33
std::function< T()> Watcher
Definition: output.h:103
TimeStep time_step(Date date)
Definition: scheduler.cpp:4
unsigned long TimeStep
Definition: scheduler.h:29
T all_reduce(api::communication::TypedMpi< T > &mpi, const T &data, BinaryOp binary_op=BinaryOp())
Definition: communication.h:634
T reduce(api::communication::TypedMpi< T > &mpi, int root, const T &data, BinaryOp binary_op=BinaryOp())
Definition: communication.h:609
Definition: fpmas.cpp:3
Definition: output.h:67
Definition: communication.h:585
Definition: output.h:115
Void Params
Definition: output.h:123
T Type
Definition: output.h:119
Definition: output.h:195
T Type
Definition: output.h:199
Void Params
Definition: output.h:203
Definition: output.h:100