} s_dyn_light_t, *dyn_light_t;
XBT_EXPORT_NO_IMPORT(double) sg_maxmin_precision = 0.00001;
+XBT_EXPORT_NO_IMPORT(double) sg_surf_precision = 0.00001;
static void *lmm_variable_mallocator_new_f(void);
static void lmm_variable_mallocator_free_f(void *var);
}
XBT_DEBUG("%s", trace_buf);
trace_buf[0] = '\000';
- xbt_assert(!double_positive(sum - cnst->bound),
+ xbt_assert(!double_positive(sum - cnst->bound, sg_maxmin_precision),
"Incorrect value (%f is not smaller than %f): %g",
sum, cnst->bound, sum - cnst->bound);
}
if (var->bound > 0) {
XBT_DEBUG("'%d'(%f) : %f (<=%f)", var->id_int, var->weight, var->value,
var->bound);
- xbt_assert(!double_positive(var->value - var->bound),
+ xbt_assert(!double_positive(var->value - var->bound, sg_maxmin_precision),
"Incorrect value (%f is not smaller than %f",
var->value, var->bound);
} else {
if (min_bound < 0) {
var->value = min_usage / var->weight;
+ XBT_DEBUG("Setting %p (%d) value to %f\n", var, var->id_int, var->value);
} else {
- if (min_bound == var->bound)
+ if (min_bound == var->bound) {
var->value = var->bound;
+ XBT_DEBUG("Setting %p (%d) value to %f\n", var, var->id_int, var->value);
+ }
else {
+ XBT_DEBUG("Do not consider %p (%d)\n", var, var->id_int);
xbt_swag_remove(var, var_list);
continue;
}
elem = &var->cnsts[i];
cnst = elem->constraint;
if (cnst->shared) {
- double_update(&(cnst->remaining), elem->value * var->value);
- double_update(&(cnst->usage), elem->value / var->weight);
+ double_update(&(cnst->remaining), elem->value * var->value, sg_maxmin_precision);
+ double_update(&(cnst->usage), elem->value / var->weight, sg_maxmin_precision);
if(cnst->usage<=0 || cnst->remaining<=0) {
if (cnst->cnst_light) {
int index = (cnst->cnst_light-cnst_light_tab);
elem_list = &(cnst->element_set);
xbt_swag_foreach(_elem, elem_list) {
elem = (lmm_element_t)_elem;
- if (elem->variable->weight <= 0 || elem->variable->value > 0)
- break;
+ if (elem->variable->weight <= 0) break;
+ if (elem->variable->value > 0) continue;
if (elem->value > 0)
cnst->usage = MAX(cnst->usage, elem->value / elem->variable->weight);
}
#ifdef HAVE_LATENCY_BOUND_TRACKING
XBT_INLINE int lmm_is_variable_limited_by_latency(lmm_variable_t var)
{
- return (double_equals(var->bound, var->value));
+ return (double_equals(var->bound, var->value, sg_maxmin_precision));
}
#endif