-/* 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"
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);
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;
}
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;
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",
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);