7 static double MAXMIN_PRECISION = 0.001;
8 extern double sg_maxmin_precision;
10 static XBT_INLINE int double_equals(double value1, double value2)
12 return (fabs(value1 - value2) < MAXMIN_PRECISION);
15 static XBT_INLINE void double_update(double *variable, double value)
18 if (*variable < MAXMIN_PRECISION)
24 #include <boost/smart_ptr.hpp>
25 #include <boost/pool/object_pool.hpp>
26 #include <boost/bind.hpp>
30 static XBT_INLINE int double_positive(double value)
32 return (value > MAXMIN_PRECISION);
38 class ConstraintLight;
41 /*struct ElementPtrOps
43 bool operator()( const ElementPtr & a, const ElementPtr & b )
44 { return true; } //a > b; }
48 typedef struct Solver Solver;
49 typedef struct Element Element;
50 typedef struct Constraint Constraint;
51 typedef struct ConstraintLight ConstraintLight;
52 typedef struct Variable Variable;
55 typedef Element *ElementPtr;
56 typedef Variable *VariablePtr;
57 typedef Constraint *ConstraintPtr;
58 typedef ConstraintLight *ConstraintLightPtr;
59 typedef Solver *SolverPtr;
61 typedef ElementPtr lmm_element_t;
62 typedef VariablePtr lmm_variable_t;
63 typedef ConstraintPtr lmm_constraint_t;
64 typedef ConstraintLightPtr lmm_constraint_light_t;
65 typedef SolverPtr lmm_system_t;
67 extern double (*func_f_def) (lmm_variable_t, double);
68 extern double (*func_fp_def) (lmm_variable_t, double);
69 extern double (*func_fpi_def) (lmm_variable_t, double);
75 extern void _simgrid_log_category__surf_lagrange__constructor__(void);
76 extern void _simgrid_log_category__surf_maxmin__constructor__(void);
77 extern void _simgrid_log_category__surf_lagrange_dichotomy__constructor__(void);
79 extern void lmm_set_default_protocol_function(double (*func_f)(lmm_variable_t var, double x),
80 double (*func_fp) (lmm_variable_t var, double x),
81 double (*func_fpi) (lmm_variable_t var, double x));
82 extern double func_reno_f(lmm_variable_t var, double x);
83 extern double func_reno_fp(lmm_variable_t var, double x);
84 extern double func_reno_fpi(lmm_variable_t var, double x);
85 extern double func_reno2_f(lmm_variable_t var, double x);
86 extern double func_reno2_fp(lmm_variable_t var, double x);
87 extern double func_reno2_fpi(lmm_variable_t var, double x);
88 extern double func_vegas_f(lmm_variable_t var, double x);
89 extern double func_vegas_fp(lmm_variable_t var, double x);
90 extern double func_vegas_fpi(lmm_variable_t var, double x);
93 //extern int double_equals(double value1, double value2);
94 //extern void double_update(double *variable, double value);
96 extern lmm_variable_t lmm_get_var_from_cnst(lmm_system_t sys, lmm_constraint_t cnst, lmm_element_t * elem);
97 extern lmm_constraint_t lmm_get_cnst_from_var(lmm_system_t sys, lmm_variable_t var, int num);
98 extern double lmm_get_cnst_weight_from_var(lmm_system_t sys, lmm_variable_t var, int num);
99 extern int lmm_get_number_of_cnst_from_var(lmm_system_t sys, lmm_variable_t var);
101 extern lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id,
104 int number_of_constraints);
105 extern void *lmm_variable_id(lmm_variable_t var);
106 extern double lmm_variable_getvalue(lmm_variable_t var);
107 extern double lmm_get_variable_weight(lmm_variable_t var);
108 extern void lmm_variable_free(lmm_system_t sys, lmm_variable_t var);
110 extern lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id,
112 extern void *lmm_constraint_id(lmm_constraint_t cnst);
113 extern void lmm_constraint_shared(lmm_constraint_t cnst);
114 extern int lmm_constraint_is_shared(lmm_constraint_t cnst);
115 extern int lmm_constraint_used(lmm_system_t sys, lmm_constraint_t cnst);
116 extern void lmm_constraint_free(lmm_system_t sys, lmm_constraint_t cnst);
118 extern lmm_system_t lmm_system_new(int selective_update);
119 extern int lmm_system_modified(lmm_system_t solver);
120 extern void lmm_expand(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var, double value);
121 extern void lmm_expand_add(lmm_system_t sys, lmm_constraint_t cnst,
122 lmm_variable_t var, double value);
123 extern void lmm_update_variable_bound(lmm_system_t sys, lmm_variable_t var,
125 extern void lmm_update_variable_weight(lmm_system_t sys,
128 extern void lmm_update_constraint_bound(lmm_system_t sys,
129 lmm_constraint_t cnst,
131 extern void lmm_solve(lmm_system_t solver);
132 extern void lagrange_solve(lmm_system_t solver);
133 extern void bottleneck_solve(lmm_system_t solver);
134 extern void lmm_system_free(lmm_system_t solver);
136 extern void c_function(lmm_system_t); /* ANSI C prototypes */
137 extern lmm_system_t cplusplus_callback_function(lmm_system_t);
138 extern void lmm_print(lmm_system_t sys);
143 extern int fix_constraint_is_active(lmm_system_t sys, lmm_constraint_t cnst);
153 #endif /* SURF_SOLVER_H_ */