Calculettes pour l'hydraulique
form_section.abstract.class.php
Aller à la documentation de ce fichier.
1 <?php
2 /**
3  * @file inc_hyd/section.php
4  * Listes des champs concernant les sections paramétrées
5  */
6 
7 /* Copyright 2012, 2015 David Dorchies <dorch@dorch.fr>, Médéric Dulondel
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
22  * MA 02110-1301, USA.
23  */
24 include_spip('hyd_inc/formulaire.abstract.class');
25 
26 abstract class form_section extends formulaire {
27 
28  protected $oSn; ///< Objet section
29  protected $oP; ///< Objet paramètres de section
30 
31  /**
32  * Définition des variables calculables et de leur code de langue
33  */
34  public $champs_select_calc = array(
35  'Hs' => 'charge_spe',
36  'Hsc' => 'charge_critique',
37  'B' => 'larg_miroir',
38  'P' => 'perim_mouille',
39  'S' => 'surf_mouille',
40  'R' => 'rayon_hyd',
41  'V' => 'vit_moy',
42  'Fr' => 'froud',
43  'Yc' => 'tirant_eau_crit',
44  'Yn' => 'tirant_eau_norm',
45  'Yf' => 'tirant_eau_fluv',
46  'Yt' => 'tirant_eau_torr',
47  'Yco' => 'tirant_eau_conj',
48  'J' => 'perte_charge',
49  'I-J' => 'var_lin',
50  'Imp' => 'impulsion',
51  'Tau0' => 'force_tract'
52  );
53 
54 
55  /*
56  * Caractéristiques communes aux calculs sur les sections :
57  * - Caractéristiques des différents types de section
58  * - Caractéristiques du bief
59  * @param $bCourbe Pour ajouter la longueur du bief dans la liste des champs (calcul courbe de remous)
60  */
61  public function __construct($bCourbe=false) {
62  /* Tableau niveau 1 : Composantes pour chaque variable, la clé est le nom de
63  * la variable dans le formulaire, et la valeur contient un tableau avec le
64  * code de langue, la valeur par défaut et les tests de de vérification à
65  * effectuer sur le champ (o : obligatoire, p : positif, n : nul accepté, s : chaîne de caractère acceptée)
66  */
67  $saisies_section = array(
68  'type_section' => array(
69  'type_section',
70  array(
71  'choix_section' => array('choix_section','form_section_type','s')
72  ),
73  'fix'
74  ),
75  'FT' => array(
76  'def_section_trap',
77  array(
78  'FT_rLargeurFond' =>array('largeur_fond',2.5,'opn'),
79  'FT_rFruit' =>array('fruit', 0.56,'opn')
80  ),
81  'var'
82  ),
83 
84  'FR' => array(
85  'def_section_rect',
86  array(
87  'FR_rLargeurFond' =>array('largeur_fond',2.5,'op'),
88  ),
89  'var'
90  ),
91 
92  'FC' => array(
93  'def_section_circ',
94  array(
95  'FC_rD' =>array('diametre',2,'op')
96  ),
97  'var'
98  ),
99 
100  'FP' => array(
101  'def_section_parab',
102  array(
103  'FP_rk' =>array('coef',0.5,'op'),
104  'FP_rLargeurBerge' =>array('largeur_berge',4,'op')
105  ),
106  'var'
107  )
108  );
109 
110  $saisies_bief['c_bief'] = array(
111  'caract_bief',
112  array('rKs'=>array('coef_strickler',40,'op')),
113  'var');
114  if($bCourbe) {
115  // Pour la courbe de remous, on a besoin de la longueur du bief en plus
116  $saisies_bief['c_bief'][1]['rLong'] = array('longueur_bief',100,'op');
117  }
118  $saisies_bief['c_bief'][1]['rIf'] = array('pente_fond',0.001,'o');
119  $saisies_bief['c_bief'][1]['rYB'] = array('h_berge',1,'opn');
120  $this->saisies = array_merge($saisies_section, $saisies_bief, $this->saisies);
121  parent::__construct();
122  }
123 
124  public function get_champs_section($choix_section) {
125  $ChampsSection = array();
126  foreach($this->saisies as $fs_cle=>$fs) {
127  if(substr($fs_cle,0,2)==$choix_section) {
128  $ChampsSection = array_merge($ChampsSection,array_keys($fs[1]));
129  }
130  }
131  foreach($ChampsSection as &$Champ) {
132  $Champ = substr($Champ,3);
133  }
134  spip_log($ChampsSection,'hydraulic',_LOG_DEBUG);
135  return $ChampsSection;
136  }
137 
138 
139 
140  /** ************************************************************************
141  * Récupération des libellés des champs des variables de calcul (fvc)
142  ***************************************************************************/
143  protected function get_champs_libelles() {
144  $lib = array();
145  foreach($this->saisies as $fs) {
146  foreach($fs[1] as $cle=>$val) {
147  if($fs[2]!='fix') {
148  if(substr($cle,0,1)!='F') {
149  $lib[$cle] = _T('hydraulic:'.$val[0]);
150  } else {
151  $lib[substr($cle,3)] = _T('hydraulic:'.$val[0]);
152  }
153  }
154  }
155  }
156  return $lib;
157  }
158 
159 
160  protected function creer_section_param() {
161  include_spip('hyd_inc/section.class');
162 
163  foreach(array_keys($this->data) as $k) {
164  if(substr($k,0,1)=='F') {
165  if(substr($k,0,3)==$this->data['choix_section'].'_') {
166  // On supprime le préfixe pour les champs dépendants du type de section
167  $this->data[substr($k,3)] = $this->data[$k];
168  }
169  // On élimine les champs avec le préfixe "type de section"
170  unset($this->data[$k]);
171  }
172  }
173  // On supprime aussi le préfixe sur ValCal et ValVar
174  foreach(array('ValCal','ValVar') as $k) {
175  if(isset($this->data[$k]) && substr($this->data[$k],0,1)=='F') {
176  $this->data[$k] = substr($this->data[$k],3);
177  }
178  }
179 
180  // On transforme les champs du tableau des données du formulaire en variables
181  extract($this->data, EXTR_OVERWRITE|EXTR_REFS);
182 
183  // Instanciation des objets pour le calcul
184  $this->oP = new cParam($rKs, $rQ, $rIf, $rPrec, $rYB);
185  switch($choix_section) {
186  case 'FT':
187  include_spip('hyd_inc/sectionTrapez.class');
188  $this->oSn=new cSnTrapez($this->oLog,$this->oP,$rLargeurFond,$rFruit);
189  break;
190 
191  case 'FR':
192  include_spip('hyd_inc/sectionRectang.class');
193  $this->oSn=new cSnRectang($this->oLog,$this->oP,$rLargeurFond);
194  break;
195 
196  case 'FC':
197  include_spip('hyd_inc/sectionCirc.class');
198  $this->oSn=new cSnCirc($this->oLog,$this->oP,$rD);
199  break;
200 
201  case 'FP':
202  include_spip('hyd_inc/sectionPuiss.class');
203  $this->oSn=new cSnPuiss($this->oLog,$this->oP,$rk,$rLargeurBerge);
204  break;
205 
206  default:
207  include_spip('hyd_inc/sectionTrapez.class');
208  $this->oSn=new cSnTrapez($this->oLog,$this->oP,$rLargeurFond,$rFruit);
209  }
210  if(isset($rY)) {
211  $this->oSn->rY = $rY;
212  }
213  spip_log($this->oSn,'hydraulic',_LOG_DEBUG);
214  if(self::DBG) spip_log($this->oP,'hydraulic',_LOG_DEBUG);
215  }
216 }
217 ?>
$oP
Objet paramètres de section.
get_champs_libelles()
Récupération des libellés des champs des variables de calcul (fvc)
Calculs de la section circulaire.
get_champs_section($choix_section)
$champs_select_calc
Définition des variables calculables et de leur code de langue.
Calculs de la section trapézoïdale.
__construct($bCourbe=false)
Gestion des Paramètres du canal (hors section)
Calculs de la section rectangulaire.
Calculs de la section parabolique ou "puissance".