Calculettes pour l'hydraulique
calcul_ouvrages.php
Aller à la documentation de ce fichier.
1 <?php
2 /**
3  * @file formulaires/calcul_ouvrages.php
4  */
5 
6 /* Copyright 2012 Médéric Dulondel
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21  * MA 02110-1301, USA.
22  */
23 
24 function numLoi() {
25 
26  $numLoi = array(
27  1 => 'or_cemagref88',
28  //2 => 's_cemagref88',
29  3 => 's_denoye',
30  4 => 's_noye',
31  5 => 'v_denoye',
32  6 => 'v_noye',
33  //7 => 'cunge',
34  //8 => 'or_cemagref02',
35  //9 => 's_cemagref02'
36  );
37 
38  return $numLoi;
39 }
40 
41 function champsLib() {
42 
43  $libVar = array(
44  'L' => array('param_L', 2),
45  'W' => array('param_W', 0.5),
46  'C' => array('param_C', 0.4),
47  'LF' => array('param_LF', 2),
48  'CR' => array('param_CR', 0.4),
49  'CT' => array('param_CT', 0.5),
50  'F' => array('param_F', 0.56)
51  );
52 
53  return $libVar;
54 }
55 
57  $num_equation = array(1, 2, 3, 4, 7);
58  $numLoi = numLoi();
59  $surverse = array(
60  'H' => array('param_H', 1),
61  'CS' => array('param_C', 0.4)
62  );
63 
64  foreach($num_equation as $valeur) {
65  if(isset($numLoi[$valeur])) {
66  $surverse['loi_debit'][] = array($valeur, $numLoi[$valeur]);
67  }
68  }
69 
70  return $surverse;
71 }
72 
74  $caract_fixe = array(
75  array(
76  'caract_globale',
77  array(
78  'Q' =>array('param_Q', 2),
79  'ZM' =>array('param_ZM', 1.5),
80  'ZV' =>array('param_ZV', 1),
81  )
82  ),
83 
84  array(
85  'param_calcul',
86  array(
87  'rPrec' =>array('precision', 0.001)
88  )
89  )
90  );
91 
92  return $caract_fixe;
93 }
94 
96  $numLoi = numLoi();
97  $champsLib = champsLib();
98  $mes_saisies = array(
99  'vRect' => array(
100  'vanne_rect',
101  array( 'L', 'W', 'C'),
102  array(1, 2, 5, 6, 7),
103  true
104  ),
105 
106  'vCirc' => array(
107  'vanne_circ',
108  array( 'L', 'W', 'C'),
109  array(1, 2, 5, 6, 7),
110  true
111  ),
112 
113  'sRect' => array(
114  'seuil_rect',
115  array( 'L', 'C'),
116  array(1, 2, 3, 4, 7),
117  false
118  ),
119 
120  'sTrap' => array(
121  'seuil_trap',
122  array( 'LF', 'CR', 'CT', 'F'),
123  array(8,9),
124  false
125  ),
126 
127  'vTrap' => array(
128  'vanne_trap',
129  array( 'LF', 'CR', 'CT', 'F'),
130  array(8,9),
131  true
132  ),
133  );
134 
135  $mes_saisies_ouv = array();
136 
137  /** Structure de $mes_saisies_ouv
138  * $mes_saisies_ouv=array
139  * 0:Code de type d'ouvrage
140  * 1:array
141  * Code de caractéristique:array
142  * 0:Code de traduction de la caractéristique
143  * 1:Valeur par défaut
144  * 2:array
145  * 0,1,2:array
146  * 0:n° de loi
147  * 1:Code de traduction de la loi
148  */
149 
150  foreach($mes_saisies as $cleF=>$valeurTab){
151  $mes_saisies_ouv[$cleF][0] = $valeurTab[0];
152  foreach($valeurTab[1] as $valeur){
153  $mes_saisies_ouv[$cleF][1][$valeur]= $champsLib[$valeur];
154  }
155  $mes_saisies_ouv[$cleF][2]=array();
156  foreach($valeurTab[2] as $valeur){
157  if(isset($numLoi[$valeur])) {
158  $mes_saisies_ouv[$cleF][2][]= array($valeur, $numLoi[$valeur]);
159  }
160  }
161  $mes_saisies_ouv[$cleF][3] = $valeurTab[3];
162  }
163  return $mes_saisies_ouv;
164 
165 }
166 
167 function champs_obligatoires($bCalc = false) {
168  /**
169  * Ce tableau contient la liste de tous les champs du formulaire.
170  * La suite de cette fonction se chargera de supprimer les valeurs non obligatoires.
171  */
172  spip_log('champs_obligatoires','hydraulic.'._LOG_DEBUG);
173  $nTypeOuv = _request('OuvrageType');
174  $mes_saisies = mes_saisies_ouvrages();
175  $tChOblig = array('OuvrageType','OuvrageLoi');
176  $tChCalc = array_keys($mes_saisies[$nTypeOuv][1]); // Champs dépendants du type d'ouvrage
177  if(_request('SurverseEnabled')) {
178  // Si la surverse est sélectionnée, on ajoute les champs concernant la surverse
179  array_push($tChCalc,'H','CS');
180  $tChOblig[] = 'SurverseLoi';
181  }
182  // On ajoute les caractéristiques fixes quelque soit le type d'ouvrage
183  $mes_saisies = mes_saisies_caract_fixe();
184  $tChCalc = array_merge($tChCalc,array_keys($mes_saisies[0][1]));
185  $tChCalc = array_merge($tChCalc,array_keys($mes_saisies[1][1]));
186  $tChOblig[] = 'rPrec';
187  $tChOblig = array_merge($tChOblig,$tChCalc);
188 
189  $choix_champs = array();
190  foreach($tChCalc as $cle){
191  $choix_champs[$cle] = _request('choix_champs_'.$cle);
192  }
193 
194  foreach($choix_champs as $cle=>$valeur){
195  spip_log('Choix champ '.$cle.'=>'.$valeur,'hydraulic.'._LOG_DEBUG);
196  // Si le choix du select est de calculer une valeur...
197  if(substr($valeur, 0,3) != 'val'){
198  foreach($tChOblig as $cle1=>$valeur1){
199  if($cle == $valeur1){
200  // ... alors on peut supprimer de notre tableau le champs calculé (il n'est pas obligatoire car grisé)
201  //unset($tChOblig[$cle1]);
202  // Renumérotation des clés du tableau
203  $tChOblig = array_values($tChOblig);
204  }
205  }
206  }
207  // Si le choix du select est de faire varier une valeur alors on ajoute les 3 champs nécessaires
208  if(substr($valeur, 0, 3) == 'var'){
209  $tChOblig[] = 'val_min_'.$cle;
210  $tChOblig[] = 'val_max_'.$cle;
211  $tChOblig[] = 'pas_var_'.$cle;
212  }
213  }
214  spip_log($tChOblig,'hydraulic.'._LOG_DEBUG);
215  spip_log($tChCalc,'hydraulic.'._LOG_DEBUG);
216  if($bCalc) {
217  return $tChCalc;
218  }
219  else {
220  return $tChOblig;
221  }
222 }
223 
224 
226  // On charge les saisies et les champs qui nécessitent un accès par les fonctions
227  $choixOuv = mes_saisies_ouvrages();
228  $champsLib = champsLib();
229  $numLoi = numLoi();
230  $champs_surverse = mes_saisies_surverse();
231  $caract_fixes = mes_saisies_caract_fixe();
232  $valeurs = array(
233  'OuvrageType' => 'vRect',
234  'OuvrageLoi'=> 1,
235  'SurverseLoi' => 1,
236  'SurverseEnabled' => _request('SurverseEnabled'),
237  'mes_saisies' => $choixOuv,
238  'OuvrageCaract' => $champsLib,
239  'numLoi' => $numLoi,
240  'surverse' => $champs_surverse,
241  'caract_fixes' => $caract_fixes
242  );
243 
244  foreach($choixOuv as $cleF=>$valeurF){
245  $cpt = 0;
246  foreach($valeurF[1] as $cle=>$valeur){
247  if($cpt == 0){
248  $valeurs['choix_champs_'.$cle] = 'calcul_val_'.$cle;
249  $cpt++;
250  }
251  else{
252  $valeurs['choix_champs_'.$cle] = 'val_fixe_'.$cle;
253  }
254  $valeurs[$cle] = $valeur[1];
255  $valeurs['val_min_'.$cle] = 1;
256  $valeurs['val_max_'.$cle] = 2;
257  $valeurs['pas_var_'.$cle] = 0.1;
258  }
259  }
260 
261  foreach($champs_surverse as $cle=>$valeur){
262  if($cle !== 'loi_debit'){
263  $valeurs[$cle] = $valeur[1];
264  $valeurs['choix_champs_'.$cle] = 'val_fixe_'.$cle;
265  $valeurs['val_min_'.$cle] = 1;
266  $valeurs['val_max_'.$cle] = 2;
267  $valeurs['pas_var_'.$cle] = 0.1;
268  }
269  }
270 
271  foreach($caract_fixes as $cleF=>$valeurF){
272  foreach($valeurF[1] as $cle=>$valeur){
273  $valeurs[$cle] = $valeur[1];
274  $valeurs['choix_champs_'.$cle] = 'val_fixe_'.$cle;
275  $valeurs['val_min_'.$cle] = 1;
276  $valeurs['val_max_'.$cle] = 2;
277  $valeurs['pas_var_'.$cle] = 0.1;
278  }
279  }
280  return $valeurs;
281 }
282 
283 
285  $erreurs = array();
286  return $erreurs;
287 }
288 
289 
291  include_spip('hyd_inc/cache');
292  include_spip('hyd_inc/charge_datas');
293  $datas = charge_datas();
294 
295  // Initialisation de la classe chargée d'afficher le journal de calcul
296  include_spip('hyd_inc/log.class');
297  $oLog = new cLog();
298  include_spip('hyd_inc/ouvrage.class');
299  $Ouv = new cOuvrage($oLog,$datas);
300  $tsDatas = array('i','min','max','pas');
301  foreach($tsDatas as $sData) {
302  ${$sData} = $datas[$sData];
303  }
304  $tFlags = array();
305  $tAbs = array();
306  $tRes = array();
307  $rInit = $datas[$datas['ValCal']];
308 
309  for($i = $min; $i <= $max; $i+= $pas){
310  if(isset($datas['ValVar'])) {
311  $Ouv->Set($datas['ValVar'],$i);
312  }
313  if(end($tRes)!==false) {
314  // Solution initiale = dernière solution trouvée
315  $rInit = end($tRes);
316  }
317  $tAbs[] = $i;
318  list($tRes[],$tFlag[]) = $Ouv->Calc($datas['ValCal'],max(1,$rInit));
319  }
320 
321  $tLibFlag = array(
322  -1 => 'erreur_calcul',
323  0 => 'débit_nul',
324  1 => 'libre_den',
325  2 => 'libre_noy',
326  3 => 'charge_den',
327  4 => 'charge_noy_part',
328  5 => 'charge_noy_tot',
329  11 => 'surverse_den',
330  12 => 'surverse_noy'
331  );
332  $tsFlag = array();
333  foreach($tFlag as $Flag) {
334  $tsFlag[] = $tLibFlag[$Flag];
335  }
336  include_spip('hyd_inc/affiche_resultats');
337  unset($datas['tLib']['rPrec']);
338  $res['message_ok'] = AfficheResultats($datas, $tAbs, $tRes, $tsFlag);
339  return $res;
340 }
341 ?>
numLoi()
mes_saisies_ouvrages()
AfficheResultats($datas, $tAbs, $tRes, $tFlag=false)
Renvoie Le résultat sous la forme de tableaux et graphiques.
formulaires_calcul_ouvrages_verifier_dist()
formulaires_calcul_ouvrages_traiter_dist()
champsLib()
mes_saisies_caract_fixe()
charge_datas($bLibelles=true)
Charge les données d&#39;un formulaire avec choix des variables fixées, qui varient et à calculer...
mes_saisies_surverse()
formulaires_calcul_ouvrages_charger_dist()
champs_obligatoires($bCalc=false)
Calculs sur un ouvrage.