diff --git a/exercise3/wave_1d_parallel.c b/exercise3/wave_1d_parallel.c index ef9847c..36c5b39 100644 --- a/exercise3/wave_1d_parallel.c +++ b/exercise3/wave_1d_parallel.c @@ -115,7 +115,16 @@ void boundary_condition(void) { // Communicate the border between processes. void border_exchange(void) { // BEGIN: T5 - ; + int left = (comm_size + comm_rank - 1) % comm_size; + int right = (comm_rank + 1) % comm_size; + + MPI_Sendrecv(&U(n - 1), 1, MPI_DOUBLE, right, 0, + &U(-1), 1, MPI_DOUBLE, left, 0, + MPI_COMM_WORLD, MPI_STATUS_IGNORE); + + MPI_Sendrecv(&U(0), 1, MPI_DOUBLE, left, 1, + &U(n), 1, MPI_DOUBLE, right, 1, + MPI_COMM_WORLD, MPI_STATUS_IGNORE); // END: T5 }