X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dad25b85f3881965a36aa1488d08ca8c526f0497..a12ac1e0085ed93316094a277ef495b69f33ff03:/src/surf/maxmin.c?ds=sidebyside diff --git a/src/surf/maxmin.c b/src/surf/maxmin.c index 98ce3a2134..8419d5c1b7 100644 --- a/src/surf/maxmin.c +++ b/src/surf/maxmin.c @@ -176,10 +176,9 @@ lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id, var->value = 0.0; var->df = 0.0; - var->func_f = func_f_def; - var->func_fp = func_fp_def; + var->func_f = func_f_def; + var->func_fp = func_fp_def; var->func_fpi = func_fpi_def; - var->func_fpip = func_fpip_def; if(weight) xbt_swag_insert_at_head(var,&(sys->variable_set)); else xbt_swag_insert_at_tail(var,&(sys->variable_set)); @@ -387,15 +386,18 @@ void lmm_print(lmm_system_t sys) } DEBUG1("%s",trace_buf); trace_buf[0]='\000'; - xbt_assert3(!double_positive(sum-cnst->bound), "Incorrect value (%f is not smaller than %f): %g", - sum,cnst->bound,sum-cnst->bound); + if(double_positive(sum-cnst->bound)) + WARN3("Incorrect value (%f is not smaller than %f): %g", + sum,cnst->bound,sum-cnst->bound); } /* Printing Result */ xbt_swag_foreach(var, var_list) { if(var->bound>0) { DEBUG4("'%p'(%f) : %f (<=%f)",var,var->weight,var->value, var->bound); - xbt_assert0(!double_positive(var->value-var->bound), "Incorrect value"); + if(double_positive(var->value-var->bound)) + WARN2("Incorrect value (%f is not smaller than %f", + var->value, var->bound); } else DEBUG3("'%p'(%f) : %f",var,var->weight,var->value); @@ -624,123 +626,3 @@ lmm_constraint_t lmm_get_next_active_constraint(lmm_system_t sys, lmm_constraint } - -/** \brief Attribute the value bound to var->bound. - * - * \param func_f default function f associated with the chosen protocol flavor - * \param func_fp partial differential of f (f prime, f') - * \param func_fpi inverse of the partial differential of f (f prime inverse, (f')^{-1}) - * \param func_fpip partial differential of the inverse of the partial differential of f (f prime inverse prime, ((f')^{-1})') - * - * Set default functions to the ones passed as parameters. This is a polimorfism in C pure, enjoy the roots of programming. - * - */ -void lmm_set_default_protocol_functions(double (* func_f) (lmm_variable_t var, double x), - double (* func_fp) (lmm_variable_t var, double x), - double (* func_fpi) (lmm_variable_t var, double x), - double (* func_fpip) (lmm_variable_t var, double x)) - -{ - func_f_def = func_f; - func_fp_def = func_fp; - func_fpi_def = func_fpi; - func_fpip_def = func_fpip; -} - - -/* - * NOTE for Reno: all functions consider the network - * coeficient (alpha) equal to 1. - */ - -/* - * For Vegas f: $\alpha_f d_f \log\left(x_f\right)$ - */ -double func_vegas_f(lmm_variable_t var, double x){ - return var->df * log(x); -} - -/* - * For Vegas fp: $\frac{\alpha D_f}{x}$ - */ -double func_vegas_fp(lmm_variable_t var, double x){ - //avoid a disaster value - c'est du bricolage mais ca marche -/* if(x == 0) x = 10e-8; */ - return var->df/x; -} - -/* - * For Vegas fpi: $\frac{\alpha D_f}{x}$ - */ -double func_vegas_fpi(lmm_variable_t var, double x){ - //avoid a disaster value - c'est du bricolage mais ca marche -/* if(x == 0) x = 10e-8; */ - return var->df/x; -} - -/* - * For Vegas fpip: $-\frac{\alpha D_f}{x^2}$ - */ -double func_vegas_fpip(lmm_variable_t var, double x){ - //avoid a disaster value - c'est du bricolage mais ca marche -/* if(x == 0) x = 10e-8; */ - return -( var->df/(x*x) ) ; -} - - -/* - * For Reno f: $\frac{\sqrt{\frac{3}{2}}}{D_f} \arctan\left(\sqrt{\frac{3}{2}}x_f D_f\right)$ - */ -double func_reno_f(lmm_variable_t var, double x){ - xbt_assert0( var->df, "Please report this bug."); - // \sqrt{3/2} = 0.8164965808 - return (0.8164965808 / var->df) * atan( (0.8164965808 / var->df)*x ); -} - -/* - * For Reno fp: $\frac{3}{3 {D_f}^2 x^2 + 2}$ - */ -double func_reno_fp(lmm_variable_t var, double x){ - return 3 / (3*var->df*var->df*x*x + 2); -} - -/* - * For Reno fpi: $\sqrt{\frac{1}{{D_f}^2 x} - \frac{2}{3{D_f}^2}}$ - */ -double func_reno_fpi(lmm_variable_t var, double x){ - double res_fpi; - xbt_assert0( var->df, "Please report this bug."); - - //avoid a disaster value - c'est du bricolage mais ca marche pas .... -/* if(x == 0) x = 10e-16; */ - - res_fpi = 1/(var->df*var->df*x) - 2/(3*var->df*var->df); - - //avoid a disaster value of res_fpi - if(res_fpi < 0.0) return 0.0; - else return sqrt(res_fpi); -} - -/* - * For Reno fpip: $-\frac{1}{2 {D_f}^2 x^2\sqrt{\frac{1}{{D_f}^2 x} - \frac{2}{3{D_f}^2}}}$ - */ -double func_reno_fpip(lmm_variable_t var, double x){ - double res_fpip; - double critical_test; - - xbt_assert0(var->df,"Please report this bug."); - - //avoid division by zero - c'est du bricolage mais ca marche -/* if(x == 0) x = 10e-16; */ - - res_fpip = 1/(var->df*var->df*x) - 2/(3*var->df*var->df); - - //avoid square root of negative number - if(res_fpip < 0.0) return 0.0; - - //avoid division by zero - critical_test = (2*var->df*var->df*x*x*sqrt(res_fpip)); - -/* if(critical_test == 0.0) return 0.0; */ -/* else */ return -(1/critical_test); -}