- var=elem->variable;
- if(var->weight <=0) break;
- if(var->value == 0.0) {
- int i;
- var->value = cnst->remaining / nb * var->weight /
- elem->value;
-
- /* Update usage */
-
- for (i = 0; i < var->cnsts_number; i++) {
- lmm_element_t elm = &var->cnsts[i];
- cnst = elm->constraint;
- double_update(&(cnst->remaining), elm->value * var->value);
- double_update(&(cnst->usage), elm->value / var->weight);
- // make_elem_inactive(elm);
- }
- }
- }
+ if (elem->variable->weight <= 0)
+ break;
+ if (cnst->shared) {
+ 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);
+ } else {
+ XBT_DEBUG
+ ("\tNon-Shared variable. Update constraint usage of %p (%g) with variable %p by %g",
+ cnst, cnst->usage, elem->variable, elem->variable->mu);
+ cnst->usage = MIN(cnst->usage, elem->value * elem->variable->mu);
+ }
+ }
+ if (!cnst->shared) {
+ XBT_DEBUG("\tUpdate constraint %p (%g) by %g",
+ cnst, cnst->remaining, cnst->usage);
+
+ double_update(&(cnst->remaining), cnst->usage);
+ }
+
+ XBT_DEBUG("\tRemaining for %p : %g", cnst, cnst->remaining);
+ if (cnst->remaining == 0.0) {
+ XBT_DEBUG("\tGet rid of constraint %p", cnst);
+
+ xbt_swag_remove(cnst, cnst_list);
+ xbt_swag_foreach(elem, elem_list) {
+ if (elem->variable->weight <= 0)
+ break;
+ if (elem->value > 0) {
+ XBT_DEBUG("\t\tGet rid of variable %p", elem->variable);
+ xbt_swag_remove(elem->variable, var_list);
+ }
+ }
+ }