X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/285fd7f4f1459beec616ace009d55cb3f22b3c8f..8a8bedcb59d9f71233c56cccede6a98496361e06:/teshsuite/surf/lmm_usage/lmm_usage.cpp diff --git a/teshsuite/surf/lmm_usage/lmm_usage.cpp b/teshsuite/surf/lmm_usage/lmm_usage.cpp index 0a9aaf8382..49e4073d97 100644 --- a/teshsuite/surf/lmm_usage/lmm_usage.cpp +++ b/teshsuite/surf/lmm_usage/lmm_usage.cpp @@ -1,14 +1,13 @@ /* A few tests for the maxmin library */ -/* Copyright (c) 2007-2017. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2007-2018. 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 "simgrid/msg.h" +#include "src/kernel/lmm/maxmin.hpp" #include "src/surf/surf_interface.hpp" -#include "surf/maxmin.hpp" #include "xbt/log.h" #include "xbt/module.h" #include "xbt/sysdep.h" @@ -17,7 +16,7 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test, "Messages specific for surf example"); -using namespace simgrid::surf; +namespace lmm = simgrid::kernel::lmm; #define PRINT_VAR(var) XBT_DEBUG(#var " = %g", (var)->get_value()) #define SHOW_EXPR(expr) XBT_DEBUG(#expr " = %g",expr) @@ -28,6 +27,20 @@ using namespace simgrid::surf; enum method_t { MAXMIN, LAGRANGE_RENO, LAGRANGE_VEGAS }; +static lmm::System* new_system(method_t method) +{ + /* selective update would need real actions instead of NULL as a first parameter to the variable constructor */ + switch (method) { + case MAXMIN: + return lmm::make_new_maxmin_system(false); + case LAGRANGE_VEGAS: + case LAGRANGE_RENO: + return lmm::make_new_lagrange_system(false); + default: + xbt_die("Invalid method"); + } +} + static double dichotomy(double func(double), double min, double max, double min_error) { double overall_error = 2 * min_error; @@ -35,11 +48,11 @@ static double dichotomy(double func(double), double min, double max, double min_ double min_func = func(min); double max_func = func(max); - if ((min_func > 0 && max_func > 0)) + if (min_func > 0 && max_func > 0) return min - 1.0; - if ((min_func < 0 && max_func < 0)) + if (min_func < 0 && max_func < 0) return max + 1.0; - if ((min_func > 0 && max_func < 0)) + if (min_func > 0 && max_func < 0) abort(); SHOW_EXPR(min_error); @@ -92,19 +105,19 @@ static void test1(method_t method) double b = 10.0; if (method == LAGRANGE_VEGAS) - lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_vegas_f, lmm::func_vegas_fp, lmm::func_vegas_fpi); else if (method == LAGRANGE_RENO) - lmm_set_default_protocol_function(func_reno_f, func_reno_fpi, func_reno_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_reno_f, lmm::func_reno_fp, lmm::func_reno_fpi); - lmm_system_t Sys = new s_lmm_system_t(true); - lmm_constraint_t L1 = Sys->constraint_new(nullptr, a); - lmm_constraint_t L2 = Sys->constraint_new(nullptr, b); - lmm_constraint_t L3 = Sys->constraint_new(nullptr, a); + lmm::System* Sys = new_system(method); + lmm::Constraint* L1 = Sys->constraint_new(nullptr, a); + lmm::Constraint* L2 = Sys->constraint_new(nullptr, b); + lmm::Constraint* L3 = Sys->constraint_new(nullptr, a); - lmm_variable_t R_1_2_3 = Sys->variable_new(nullptr, 1.0, -1.0, 3); - lmm_variable_t R_1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); - lmm_variable_t R_2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); - lmm_variable_t R_3 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* R_1_2_3 = Sys->variable_new(nullptr, 1.0, -1.0, 3); + lmm::Variable* R_1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* R_2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* R_3 = Sys->variable_new(nullptr, 1.0, -1.0, 1); Sys->update_variable_weight(R_1_2_3, 1.0); Sys->update_variable_weight(R_1, 1.0); @@ -120,7 +133,7 @@ static void test1(method_t method) Sys->expand(L3, R_3, 1.0); if (method == MAXMIN) { - lmm_solve(Sys); + Sys->solve(); } else { double x; if (method == LAGRANGE_VEGAS) { @@ -145,7 +158,7 @@ static void test1(method_t method) xbt_die( "Invalid method"); } - lagrange_solve(Sys); + Sys->solve(); double max_deviation = 0.0; max_deviation = std::max(max_deviation, fabs(R_1->get_value() - x)); @@ -178,16 +191,17 @@ static void test1(method_t method) static void test2(method_t method) { if (method == LAGRANGE_VEGAS) - lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_vegas_f, lmm::func_vegas_fp, lmm::func_vegas_fpi); if (method == LAGRANGE_RENO) - lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_reno_f, lmm::func_reno_fp, lmm::func_reno_fpi); + + lmm::System* Sys = new_system(method); - lmm_system_t Sys = new s_lmm_system_t(true); - lmm_constraint_t CPU1 = Sys->constraint_new(nullptr, 200.0); - lmm_constraint_t CPU2 = Sys->constraint_new(nullptr, 100.0); + lmm::Constraint* CPU1 = Sys->constraint_new(nullptr, 200.0); + lmm::Constraint* CPU2 = Sys->constraint_new(nullptr, 100.0); - lmm_variable_t T1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); - lmm_variable_t T2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* T1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* T2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); Sys->update_variable_weight(T1, 1.0); Sys->update_variable_weight(T2, 1.0); @@ -195,13 +209,7 @@ static void test2(method_t method) Sys->expand(CPU1, T1, 1.0); Sys->expand(CPU2, T2, 1.0); - if (method == MAXMIN) { - lmm_solve(Sys); - } else if (method == LAGRANGE_VEGAS || method == LAGRANGE_RENO) { - lagrange_solve(Sys); - } else { - xbt_die("Invalid method"); - } + Sys->solve(); PRINT_VAR(T1); PRINT_VAR(T2); @@ -249,19 +257,19 @@ static void test3(method_t method) A[14][15] = 1.0; if (method == LAGRANGE_VEGAS) - lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_vegas_f, lmm::func_vegas_fp, lmm::func_vegas_fpi); if (method == LAGRANGE_RENO) - lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_reno_f, lmm::func_reno_fp, lmm::func_reno_fpi); - lmm_system_t Sys = new s_lmm_system_t(true); + lmm::System* Sys = new_system(method); /* Creates the constraints */ - lmm_constraint_t* tmp_cnst = new lmm_constraint_t[15]; + lmm::Constraint** tmp_cnst = new lmm::Constraint*[15]; for (int i = 0; i < 15; i++) tmp_cnst[i] = Sys->constraint_new(nullptr, B[i]); /* Creates the variables */ - lmm_variable_t* tmp_var = new lmm_variable_t[16]; + lmm::Variable** tmp_var = new lmm::Variable*[16]; for (int j = 0; j < 16; j++) { tmp_var[j] = Sys->variable_new(nullptr, 1.0, -1.0, 15); Sys->update_variable_weight(tmp_var[j], 1.0); @@ -273,15 +281,7 @@ static void test3(method_t method) if (A[i][j]) Sys->expand(tmp_cnst[i], tmp_var[j], 1.0); - if (method == MAXMIN) { - lmm_solve(Sys); - } else if (method == LAGRANGE_VEGAS) { - lagrange_solve(Sys); - } else if (method == LAGRANGE_RENO) { - lagrange_solve(Sys); - } else { - xbt_die("Invalid method"); - } + Sys->solve(); for (int j = 0; j < 16; j++) PRINT_VAR(tmp_var[j]);