+ var->weight=0.0;
+ var->staged_weight=0.0;
+ var->value = 0.0;
+ lmm_check_concurrency(sys);
+}
+
+/* /brief Find variables that can be enabled and enable them.
+ *
+ * Assuming that the variable has already been removed from non-zero weights
+ * Can we find a staged variable to add?
+ * If yes, check that none of the constraints that this variable is involved in is at the limit of its concurrency
+ * And then add it to enabled variables
+ */
+void lmm_on_disabled_var(lmm_system_t sys, lmm_constraint_t cnstr){
+
+ lmm_element_t elem;
+ if(cnstr->concurrency_limit<0)
+ return;
+
+ int concurrency=cnstr->concurrency_current;
+ xbt_swag_foreach(elem, &(cnstr->disabled_element_set)) {
+
+ if (elem->variable->staged_weight>0 )
+ {
+ //Found a staged variable
+ //TODOLATER: Add random timing function to model reservation protocol fuzziness? Then how to make sure that staged variables will eventually be called?
+ if(lmm_can_enable_var(elem->variable)){
+ lmm_enable_var(sys,elem->variable);
+ concurrency++;
+ }
+ }
+
+ xbt_assert(concurrency<=cnstr->concurrency_limit,"Concurrency overflow!");
+ if(concurrency==cnstr->concurrency_limit)
+ break;
+ }
+
+ lmm_check_concurrency(sys);
+
+}
+
+/* \brief update the weight of a variable, and enable/disable it.
+ * @return Returns whether a change was made
+ */
+void lmm_update_variable_weight(lmm_system_t sys, lmm_variable_t var,
+ double weight)
+{
+ int minslack;
+
+ xbt_assert(weight>=0,"Variable weight should not be negative!");
+
+ if (weight == var->weight)
+ return;
+
+ int enabling_var= (weight>0 && var->weight<=0);
+ int disabling_var= (weight<=0 && var->weight>0);
+
+ XBT_IN("(sys=%p, var=%p, weight=%f)", sys, var, weight);
+
+ sys->modified = 1;
+
+ //Are we enabling this variable?
+ if (enabling_var){
+ var->staged_weight = weight;
+ minslack=lmm_cnstrs_min_concurrency_slack(var);
+ if(minslack==0){
+ XBT_DEBUG("Staging var (instead of enabling) because min concurrency slack %i, with weight %f", minslack, weight);
+ return;
+ }
+ XBT_DEBUG("Enabling var with min concurrency slack %i", minslack);
+ lmm_enable_var(sys,var);
+ } else if (disabling_var){
+ //Are we disabling this variable?
+ lmm_disable_var(sys,var);
+ } else {
+ var->weight=weight;
+ }
+
+ lmm_check_concurrency(sys);
+