Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git] / src / surf / fair_bottleneck.cpp
index 0b8a77a..7694c4c 100644 (file)
@@ -1,10 +1,9 @@
-/* Copyright (c) 2007-2011. The SimGrid Team.
+/* Copyright (c) 2007-2011, 2013-2014. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-
 #include "xbt/sysdep.h"
 #include "xbt/log.h"
 #include "maxmin_private.hpp"
@@ -40,7 +39,7 @@ void bottleneck_solve(lmm_system_t sys)
   var_list = &(sys->variable_set);
   XBT_DEBUG("Variable set : %d", xbt_swag_size(var_list));
   xbt_swag_foreach(_var, var_list) {
-       var = (lmm_variable_t)_var;
+  var = (lmm_variable_t)_var;
     int nb = 0;
     var->value = 0.0;
     XBT_DEBUG("Handling variable %p", var);
@@ -66,12 +65,12 @@ void bottleneck_solve(lmm_system_t sys)
   cnst_list = &(sys->active_constraint_set);
   XBT_DEBUG("Active constraints : %d", xbt_swag_size(cnst_list));
   xbt_swag_foreach(_cnst, cnst_list) {
-       cnst = (lmm_constraint_t)_cnst;
+  cnst = (lmm_constraint_t)_cnst;
     xbt_swag_insert(cnst, &(sys->saturated_constraint_set));
   }
   cnst_list = &(sys->saturated_constraint_set);
   xbt_swag_foreach(_cnst, cnst_list) {
-       cnst = (lmm_constraint_t)_cnst;
+  cnst = (lmm_constraint_t)_cnst;
     cnst->remaining = cnst->bound;
     cnst->usage = 0.0;
   }
@@ -92,18 +91,17 @@ void bottleneck_solve(lmm_system_t sys)
       cnst = (lmm_constraint_t)_cnst;
       int nb = 0;
       XBT_DEBUG("Processing cnst %p ", cnst);
-      elem_list = &(cnst->element_set);
+      elem_list = &(cnst->enabled_element_set);
       cnst->usage = 0.0;
       xbt_swag_foreach(_elem, elem_list) {
-       elem = (lmm_element_t)_elem;
-        if (elem->variable->weight <= 0)
-          break;
+      elem = (lmm_element_t)_elem;
+        xbt_assert(elem->variable->weight > 0);
         if ((elem->value > 0)
             && xbt_swag_belongs(elem->variable, var_list))
           nb++;
       }
       XBT_DEBUG("\tThere are %d variables", nb);
-      if (nb > 0 && !cnst->shared)
+      if (nb > 0 && !cnst->sharing_policy)
         nb = 1;
       if (!nb) {
         cnst->remaining = 0.0;
@@ -137,17 +135,16 @@ void bottleneck_solve(lmm_system_t sys)
     xbt_swag_foreach_safe(_cnst, _cnst_next, cnst_list) {
       cnst = (lmm_constraint_t)_cnst;
       XBT_DEBUG("Updating cnst %p ", cnst);
-      elem_list = &(cnst->element_set);
+      elem_list = &(cnst->enabled_element_set);
       xbt_swag_foreach(_elem, elem_list) {
         elem = (lmm_element_t)_elem;
-        if (elem->variable->weight <= 0)
-          break;
-        if (cnst->shared) {
+        xbt_assert(elem->variable->weight > 0);
+        if (cnst->sharing_policy) {
           XBT_DEBUG("\tUpdate constraint %p (%g) with variable %p by %g",
                  cnst, cnst->remaining, elem->variable,
                  elem->variable->mu);
           double_update(&(cnst->remaining),
-                        elem->value * elem->variable->mu);
+                        elem->value * elem->variable->mu, sg_maxmin_precision);
         } else {
           XBT_DEBUG
               ("\tNon-Shared variable. Update constraint usage of %p (%g) with variable %p by %g",
@@ -155,11 +152,11 @@ void bottleneck_solve(lmm_system_t sys)
           cnst->usage = MIN(cnst->usage, elem->value * elem->variable->mu);
         }
       }
-      if (!cnst->shared) {
+      if (!cnst->sharing_policy) {
         XBT_DEBUG("\tUpdate constraint %p (%g) by %g",
                cnst, cnst->remaining, cnst->usage);
 
-        double_update(&(cnst->remaining), cnst->usage);
+        double_update(&(cnst->remaining), cnst->usage, sg_maxmin_precision);
       }
 
       XBT_DEBUG("\tRemaining for %p : %g", cnst, cnst->remaining);