X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/6327e2032096180078429253034afecb48208abd..162ec6e7763efa260523f5cf03f635159803947d:/process.cpp?ds=inline diff --git a/process.cpp b/process.cpp index 01b5e0f..b5531b0 100644 --- a/process.cpp +++ b/process.cpp @@ -295,19 +295,22 @@ void process::convergence_check() double load_diff = std::fabs(real_load - average); bool converged = load_diff <= load_diff_threshold; - if (convergence >= 0.0) { - if (!converged) { - XBT_VERB("current load has diverged: %g (%.4g%%)", - real_load, 100.0 * load_diff / average); - convergence = -1.0; - convergence_counter++; - } - } else { - if (converged) { + if (converged) { + if (convergence < 0) { XBT_VERB("current load has converged: %g (%.4g%%)", real_load, 100.0 * load_diff / average); convergence = MSG_get_clock(); - convergence_counter--; + local_convergence_counter = opt::exit_on_convergence; + } + if (local_convergence_counter > 0 && --local_convergence_counter == 0) + --convergence_counter; + } else { + if (convergence >= 0.0) { + XBT_VERB("current load has diverged: %g (%.4g%%)", + real_load, 100.0 * load_diff / average); + convergence = -1.0; + if (local_convergence_counter == 0) + ++convergence_counter; } } } @@ -418,7 +421,11 @@ void process::data_send(neighbor& nb) else excess_load = real_load; - double balance = nb.get_debt() - nb.get_credit(); + double balance; + if (nb.get_credit() > 0.0) + balance = nb.get_debt() - nb.get_credit(); + else + balance = nb.get_debt(); load_to_send = std::min(excess_load, std::max(0.0, balance));