Calculettes pour l'hydraulique
form_regime_uniforme.class.php
Aller à la documentation de ce fichier.
1 <?php
2 include_spip('hyd_inc/form_section.abstract.class');
3 
5 
6  /// Définition du nombre de colonnes du formulaire
7  protected $nb_col = 5;
8 
9  /// Définition de la variable à calculer par défaut
10  protected $sVarCal = 'rQ';
11 
12  /*
13  * Initialisation du tableau de description du formulaire
14  */
15  function __construct() {
16  $this->saisies['c_hyd'] = array(
17  'caract_hydraulique',
18  array(
19  'rQ' =>array('debit', 1.2, 'op'),
20  'rY' =>array('tirant_eau', 0.8, 'op')
21  ),
22  'cal'
23  );
24  $this->saisies['param_calcul'] = array(
25  'param_calcul',
26  array(
27  'rPrec' => array('precision',0.001,'fop')
28  ),
29  'fix'
30  );
31  parent::__construct();
32  // On passe toutes les variables de section en cal
33  foreach($this->saisies as $cle=>&$fs) {
34  if(substr($cle,0,1)=="F") {
35  $fs[2] = 'cal';
36  }
37  }
38  $this->saisies['c_bief'][2] = 'cal';
39  }
40 
41  /*
42  * Variables supplémentaires passées au formulaire
43  */
44  public function charger() {
45  $valeurs = parent::charger();
46  $valeurs['choix_section'] = 'FT';
47  return $valeurs;
48  }
49 
50  /**
51  * Calcul du débit en régime uniforme.
52  * @return Débit en régime uniforme
53  */
54  public function Calc_Qn() {
55  $this->oSn->Reset(true);
56  if($this->oP->rIf <= 0) {
57  $Qn = false;
58  $this->oLog->Add(_T('hydraulic:h_normale_pente_neg_nul'),true);
59  } else {
60  $Qn = $this->oP->rKs*pow($this->oSn->Calc('R',$this->oSn->rY),2/3)*$this->oSn->Calc('S',$this->oSn->rY)*sqrt($this->oP->rIf);
61  spip_log('Calc_Qn('.$this->VarCal.')='.$Qn,'hydraulic',_LOG_DEBUG);
62  }
63  return $Qn;
64  }
65 
66  protected function calculer() {
67  $this->creer_section_param();
68 
69  // On transforme les champs du tableau des données du formulaire en variables
70  extract($this->data, EXTR_OVERWRITE|EXTR_REFS);
71 
72  if(isset($ValVar) && $ValVar != ''){
73  // Pointage de la variable qui varie sur le bon attribut
74  if($ValVar == 'rY' or in_array($ValVar, $this->get_champs_section($choix_section))){
75  $this->oSn->{$ValVar} = &$i;
76  }
77  else{
78  $this->oP->{$ValVar} = &$i;
79  }
80  }
81 
82  if(!in_array($ValCal,array('rY','rQ'))) {
83  // Le calcul se fera par dichotomie
84  include_spip('hyd_inc/dichotomie.class');
85  $oDicho = new cDichotomie($this->oLog,$this,'Calc_Qn');
86  // Pointage de la variable à calculer sur le bon attribut
87  spip_log($ValCal,'hydraulic',_LOG_DEBUG);
88  if(in_array($ValCal, $this->get_champs_section($choix_section))){
89  $this->VarCal = &$this->oSn->{$ValCal};
90  }
91  else{
92  $this->VarCal = &$this->oP->{$ValCal};
93  }
94  }
95 
96  $tRes = array(); // Tableau des résultats (ordonnées)
97  $tAbs = array(); // Tableau des abscisses
98  for($i = $min; $i < $max; $i+= $pas){
99  spip_log("min=$min max=$max i=$i",'hydraulic',_LOG_DEBUG);
100  $tAbs[] = $i;
101  switch($ValCal) {
102  case 'rY':
103  $this->oSn->Reset();
104  $tRes[] = $this->oSn->Calc('Yn');
105  break;
106  case 'rQ':
107  $tRes[] = $this->Calc_Qn();
108  break;
109  default :
110  if(end($tRes)!==false) {
111  // Solution initiale = dernière solution trouvée
112  $rInit = end($tRes);
113  } else {
114  // Solution initiale = Valeur saisie pour la variable à calculer
115  $rInit = $$ValCal;
116  }
117  list($tRes[],$flag) = $oDicho->calculer($rQ,$rPrec,$rInit);
118  }
119  }
120  return array('abs'=>$tAbs,'res'=>$tRes);
121  }
122 }
123 ?>
$sVarCal
Définition de la variable à calculer par défaut.
Dichotomie.
Calc_Qn()
Calcul du débit en régime uniforme.
$nb_col
Définition du nombre de colonnes du formulaire.
get_champs_section($choix_section)