IO.h (1154B)
1 #ifndef IO_H_C0WPQOQZ 2 #define IO_H_C0WPQOQZ 3 4 #include <fstream> 5 #include <mpi.h> 6 #include <vector> 7 8 void initialize(std::vector<double> &v) 9 { 10 int rank, size; 11 MPI_Comm_rank(MPI_COMM_WORLD, &rank); 12 MPI_Comm_size(MPI_COMM_WORLD, &size); 13 const int N = static_cast<int>(v.size()) - 2; 14 const double dx = 1.0 / (size * N); 15 const double x0 = rank * N * dx; 16 for (int i = 0; i < N; ++i) { 17 const double x = x0 + (i + 0.5) * dx; 18 if (x > 0.4 && x < 0.6) { 19 v[i + 1] = 1.0; 20 } else { 21 v[i + 1] = 0.0; 22 } 23 } 24 } 25 26 void dump(const std::vector<double> &v) 27 { 28 int rank, size; 29 MPI_Comm_rank(MPI_COMM_WORLD, &rank); 30 MPI_Comm_size(MPI_COMM_WORLD, &size); 31 const int N = static_cast<int>(v.size()) - 2; 32 std::vector<double> u(size * N); 33 MPI_Gather( 34 &v[1], N, MPI_DOUBLE, u.data(), N, MPI_DOUBLE, 0, MPI_COMM_WORLD); 35 if (0 == rank) { 36 std::ofstream out("u.dat", std::ios::app); 37 out << std::scientific; 38 for (size_t i = 0; i < u.size(); ++i) { 39 out << ' ' << u[i]; 40 } 41 out << '\n'; 42 } 43 } 44 45 #endif /* IO_H_C0WPQOQZ */