59 Size receive_max_size,
64 typedef typename Container::data_type data_type;
72 typedef boost::transform_iterator<select2nd<size_type,mpi::request>,
73 typename std::list<std::pair<size_type,mpi::request> >::iterator>
76 while (receive.waits.size() != 0) {
80 std::pair<mpi::status,request_iterator> pair_status = mpi::wait_any (iter_r_waits, last_r_waits);
82 boost::optional<int> i_msg_size_opt = pair_status.first.template count<data_type>();
83 check_macro (i_msg_size_opt,
"receive wait failed");
84 int iproc = pair_status.first.source();
85 check_macro (iproc >= 0,
"receive: source iproc = "<<iproc<<
" < 0 !");
88 typename std::list<std::pair<size_type,mpi::request> >::iterator i_pair_ptr = pair_status.second.base();
89 size_type i_receive = (*i_pair_ptr).first;
90 size_type i_start = i_receive*receive_max_size;
91 for (
size_type j = i_start; j < i_start + i_msg_size; j++) {
94 receive.waits.erase (i_pair_ptr);
99 Size send_nproc = send.waits.size();
100 std::vector<mpi::status> send_status (send_nproc);
101 if (send.waits.size() != 0) {
104 mpi::wait_all (iter_s_waits, last_s_waits, send_status.begin());
111 receive.waits.clear();
112 receive.data.clear();
113 return x.n_new_entry();
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")