- real_load = 0.0;
- } else {
- load_to_send = nb.get_debt();
- nb.set_debt(0.0);
- real_load -= load_to_send;
- }
- } else {
- load_to_send = nb.get_to_send();
- nb.set_to_send(0.0);
- real_load -= load_to_send;
+ } else { // !bookkeeping
+ load_to_send = compute_load_to_send(nb.get_to_send());
+ if (load_to_send > 0.0)
+ nb.set_to_send(nb.get_to_send() - load_to_send);
+ }
+ real_load -= load_to_send;
+ while (load_to_send > 0.0) {
+ double amount;
+ if (opt::max_transfer_amount)
+ amount = std::min(load_to_send, opt::max_transfer_amount);
+ else
+ amount = load_to_send;
+ message* msg = new message(message::DATA, amount);
+ add_data_send_mesg(msg->get_size());
+ comm.data_send(nb.get_data_mbox(), msg);
+ load_to_send -= amount;