+static double constant_bandwidth_constraint(double rate, double bound,
+ double size)
+{
+ return rate;
+}
+
+/**********************/
+/* SMPI callbacks */
+/**********************/
+static xbt_dynar_t parse_factor(const char *smpi_coef_string)
+{
+ char *value = NULL;
+ unsigned int iter = 0;
+ s_smpi_factor_t fact;
+ xbt_dynar_t smpi_factor, radical_elements, radical_elements2 = NULL;
+
+ smpi_factor = xbt_dynar_new(sizeof(s_smpi_factor_t), NULL);
+ radical_elements = xbt_str_split(smpi_coef_string, ";");
+ xbt_dynar_foreach(radical_elements, iter, value) {
+
+ radical_elements2 = xbt_str_split(value, ":");
+ if(xbt_dynar_length(radical_elements2) != 2)
+ xbt_die("Malformed radical for smpi factor!");
+ fact.factor = atol(xbt_dynar_get_as(radical_elements2,0,char*));
+ fact.value = atof(xbt_dynar_get_as(radical_elements2,1,char*));
+ xbt_dynar_push_as(smpi_factor,s_smpi_factor_t,fact);
+ XBT_DEBUG("smpi_factor:\t%ld : %f",fact.factor,fact.value);
+ xbt_dynar_free(&radical_elements2);
+ }
+ xbt_dynar_free(&radical_elements);
+ return smpi_factor;
+}
+
+static double smpi_bandwidth_factor(double size)
+{
+ if(!smpi_bw_factor)
+ smpi_bw_factor = parse_factor( xbt_cfg_get_string(_surf_cfg_set,"smpi/bw_factor") );
+
+ unsigned int iter = 0;
+ s_smpi_factor_t fact;
+ xbt_dynar_foreach(smpi_bw_factor, iter, fact) {
+ if(size >= fact.factor){
+ XBT_DEBUG("%lf >= %ld return %f",size,fact.factor,fact.value);
+ return fact.value;
+ }
+ }
+
+ return 1.0;
+}
+
+static double smpi_latency_factor(double size)
+{
+ if(!smpi_lat_factor)
+ smpi_lat_factor = parse_factor( xbt_cfg_get_string(_surf_cfg_set,"smpi/lat_factor") );
+
+ unsigned int iter = 0;
+ s_smpi_factor_t fact;
+ xbt_dynar_foreach(smpi_lat_factor, iter, fact) {
+ if(size >= fact.factor){
+ XBT_DEBUG("%lf >= %ld return %f",size,fact.factor,fact.value);
+ return fact.value;
+ }
+ }
+
+ return 1.0;