Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge commit '045db1657e870c721be490b411868f4181a12ced' into surf++
[simgrid.git] / src / surf / solver_c.cpp
1 #include "solver.hpp"
2 #include <boost/smart_ptr.hpp>
3 #include <boost/pool/object_pool.hpp>
4 #include <boost/bind.hpp>
5
6 double sg_maxmin_precision = 0.00001;
7 #define RENO_SCALING 1.0
8
9 void lmm_solve(lmm_system_t solver)
10 {
11   solver->solve();      
12 }
13
14 void lmm_print(lmm_system_t solver)
15 {
16   solver->print();
17 }
18
19 lmm_variable_t lmm_get_var_from_cnst(lmm_system_t sys, lmm_constraint_t cnst, lmm_element_t * elem)
20 {
21   cnst->getVar(*elem);
22 }
23
24 lmm_constraint_t lmm_get_cnst_from_var(lmm_system_t sys, lmm_variable_t var, int num)
25 {
26   var->getCnst(num);
27 }
28
29 double lmm_get_cnst_weight_from_var(lmm_system_t sys, lmm_variable_t var, int num)
30 {
31   var->getCnstWeight(num);
32 }
33
34 int lmm_get_number_of_cnst_from_var(lmm_system_t sys, lmm_variable_t var)
35 {
36   var->getNumberOfCnst();
37 }
38
39 lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id,
40                                             double weight_value,
41                                             double bound,
42                                             int number_of_constraints)
43 {
44   return sys->createVariable(id, weight_value, bound);
45 }
46
47 void *lmm_variable_id(lmm_variable_t var)
48 {
49   return var->id();
50 }
51
52 double lmm_variable_getvalue(lmm_variable_t var)
53 {
54   return var->m_value;
55 }
56
57 double lmm_get_variable_weight(lmm_variable_t var)
58 {
59   return var->m_weight;
60 }
61
62 void lmm_variable_free(lmm_system_t sys, lmm_variable_t var)
63 {
64   //TOREPAIR free
65 }
66
67 lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id,
68                                     double bound_value)   
69 {
70   return sys->createConstraint(id, bound_value);
71 }
72
73 void *lmm_constraint_id(lmm_constraint_t cnst)
74 {
75   return cnst->id();
76 }
77
78 void lmm_constraint_shared(lmm_constraint_t cnst)
79 {
80   cnst->shared();
81 }
82
83 int lmm_constraint_is_shared(lmm_constraint_t cnst)
84 {
85   return cnst->isShared();
86 }
87
88 int lmm_constraint_used(lmm_system_t sys, lmm_constraint_t cnst)
89 {
90   return (int) sys->constraintUsed(cnst);
91 }
92
93 void lmm_constraint_free(lmm_system_t sys, lmm_constraint_t cnst)
94 {
95   //TOREPAIR free
96 }
97
98 lmm_system_t lmm_system_new(int selective_update) {
99   return new Solver(selective_update);
100 }
101
102 void lmm_system_free(lmm_system_t sys) {
103   //TOREPAIR free
104 }
105
106 int lmm_system_modified(lmm_system_t solver)
107 {
108   solver->m_modified;
109 }
110 void lmm_expand(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var, double value)
111 {
112   sys->expand(cnst, var, value);
113 }
114
115 void lmm_expand_add(lmm_system_t sys, lmm_constraint_t cnst,
116                     lmm_variable_t var, double value)
117 {
118   sys->expandAdd(cnst, var, value);
119 }
120
121 void lmm_update_variable_bound(lmm_system_t sys, lmm_variable_t var,
122                                double bound)
123 {
124   sys->updateVariableBound(var, bound);
125 }
126
127 void lmm_update_variable_weight(lmm_system_t sys,
128                                             lmm_variable_t var,
129                                             double weight)
130 {
131   sys->updateVariableWeight(var, weight);
132 }
133
134 void lmm_update_constraint_bound(lmm_system_t sys,
135                                              lmm_constraint_t cnst,
136                                              double bound)
137 {
138   sys->updateConstraintBound(cnst, bound);
139 }
140
141
142 /*********
143  * FIXES *
144  *********/
145 int fix_constraint_is_active(lmm_system_t sys, lmm_constraint_t cnst)
146 {
147   int found = 0;
148   std::vector<ConstraintPtr>::iterator cnstIt;
149   lmm_constraint_t cnst_tmp;  
150   for (cnstIt=sys->m_activeConstraintSet.begin(); cnstIt!=sys->m_activeConstraintSet.end(); ++cnstIt) {
151     cnst_tmp = *cnstIt;
152     if (cnst_tmp == cnst) {
153       found = 1;
154       break;
155     }
156   }
157   return found;
158 }
159