Calculettes pour l'hydraulique
sectionCirc.class.php
Aller à la documentation de ce fichier.
1 <?php
2 /**
3  * @file inc_hyd/sectionCirc.class.php
4  * Gestion des calculs au niveau des Sections
5  */
6 
7 /* Copyright 2012 Dorch <dorch@dorch.fr>
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 
25 // Chargement de la classe abstraite acSection et ses classes associées
26 include_spip('hyd_inc/section.class');
27 
28 /**
29  * Calculs de la section circulaire
30  */
31 class cSnCirc extends acSection {
32  public $rD; /// Diamètre du cercle
33  private $rAlpha; /// Angle de la surface libre par rapport au fond
34  protected $nbDessinPoints=50;
35 
36  function __construct(&$oLog,&$oP,$rD) {
37  $this->rD=(real) $rD;
38  if($oP->rYB > $rD) {$oP->rYB = $rD;} // On place la berge au sommet du cercle
39  parent::__construct($oLog,$oP);
40  }
41 
42  /**
43  * Calcul de l'angle Alpha de la surface libre par rapport au fond.
44  * @return Alpha
45  */
46  protected function Calc_Alpha() {
47  if($this->rY > $this->oP->rYB) {
48  $rY = $this->oP->rYB;
49  }
50  else {
51  $rY = $this->rY;
52  }
53  if($rY <= 0) {
54  return 0;
55  }
56  elseif($rY > $this->rD) {
57  return pi();
58  }
59  else {
60  $alpha = acos(1.-$rY/($this->rD/2.));
61  if($alpha > pi()) {
62  return pi();
63  }
64  else {
65  return $alpha;
66  }
67  }
68  }
69 
70  /**
71  * Calcul de dérivée de l'angle Alpha de la surface libre par rapport au fond.
72  * @return dAlpha
73  */
74  protected function Calc_dAlpha() {
75  if($this->rY <= 0 or $this->rY >= $this->rD or $this->rY > $this->oP->rYB) {
76  return 0;
77  }
78  else {
79  return 2. / $this->rD / sqrt(1. - pow(1. - 2. * $this->rY / $this->rD,2));
80  }
81  }
82 
83  /**
84  * Calcul de la largeur au miroir.
85  * @return B
86  */
87  protected function Calc_B() {
88  if($this->rY > $this->oP->rYB) {
89  return parent::Calc_B();
90  }
91  else {
92  return $this->rD * sin($this->Calc('Alpha'));
93  }
94  }
95 
96  /**
97  * Calcul du périmètre mouillé.
98  * @param $rY Uniquement présent car la méthode parent a cet argument
99  * @return B
100  */
101  protected function Calc_P($rY=0) {
102  if($this->rY > $this->oP->rYB and !$this->bSnFermee) {
103  // On n'ajoute pas le périmètre dans le cas d'une fente de Preissmann
104  return $this->CalcGeo('P') + parent::Calc_P($this->rY-$this->oP->rYB);
105  }
106  else {
107  return $this->rD * $this->Calc('Alpha');
108  }
109  }
110 
111  /**
112  * Calcul de la surface mouillée.
113  * @param $rY Uniquement présent car la méthode parent a cet argument
114  * @return S
115  */
116  protected function Calc_S($rY=0) {
117  if($this->rY > $this->oP->rYB) {
118  return $this->CalcGeo('S') + parent::Calc_S($this->rY-$this->oP->rYB);
119  }
120  else {
121  return pow($this->rD,2) / 4 * ($this->Calc('Alpha') - sin($this->Calc('Alpha')) * cos($this->Calc('Alpha')));
122  }
123  }
124 
125  /**
126  * Calcul de dérivée de la surface hydraulique par rapport au tirant d'eau.
127  * @return dS
128  */
129  protected function Calc_dS() {
130  if($this->rY > $this->oP->rYB) {
131  return parent::Calc_dS();
132  }
133  else {
134  return pow($this->rD,2) / 4 * $this->Calc('dAlpha') * (1 - cos(2 * $this->Calc('Alpha')));
135  }
136  }
137 
138  /**
139  * Calcul de dérivée du périmètre hydraulique par rapport au tirant d'eau.
140  * @return dP
141  */
142  protected function Calc_dP() {
143  if($this->rY > $this->oP->rYB && !$this->bSnFermee) {
144  return parent::Calc_dP();
145  }
146  else {
147  return $this->rD * $this->Calc('dAlpha');
148  }
149  }
150 
151  /**
152  * Calcul de dérivée de la largeur au miroir par rapport au tirant d'eau.
153  * @return dB
154  */
155  protected function Calc_dB() {
156  if($this->rY > $this->oP->rYB) {
157  return parent::Calc_dB();
158  }
159  else {
160  return $this->rD * $this->Calc('dAlpha') * cos($this->Calc('Alpha'));
161  }
162  }
163 
164  /**
165  * Calcul de la distance du centre de gravité de la section à la surface libre
166  * multiplié par la surface hydraulique
167  * @param $rY Uniquement présent car la méthode parent a cet argument
168  * @return S x Yg
169  */
170  protected function Calc_SYg($rY=0) {
171  $SYg = sin($this->Calc('Alpha'))-pow(sin($this->Calc('Alpha')),3) / 3 - $this->Calc('Alpha') * cos($this->Calc('Alpha'));
172  $SYg = pow($this->rD,3) / 8 * $SYg;
173  return $SYg;
174  }
175 
176  /**
177  * Calcul de la dérivée de la distance du centre de gravité de la section à la surface libre
178  * multiplié par la surface hydraulique
179  * @param $rY Uniquement présent car la méthode parent a cet argument
180  * @return S x Yg
181  */
182  protected function Calc_dSYg($rY=0) {
183  $cos = cos($this->Calc('Alpha'));
184  $sin = sin($this->Calc('Alpha'));
185  $SYg = $this->Calc('dAlpha') * $cos;
186  $SYg += - $this->Calc('dAlpha') * $cos * pow($sin,2);
187  $SYg += - $this->Calc('dAlpha') * $cos + $this->Calc('Alpha') * $this->Calc('dAlpha') * $sin;
188  $SYg = 3 *pow($this->rD,3) / 8 * $SYg;
189  return $SYg;
190  }
191 
192 }
193 ?>
$rY
Pour loguer les messages de debug de cette classe et ses filles.
CalcGeo($sDonnee)
Calcul des données uniquement dépendantes de la géométrie de la section.
$rAlpha
Diamètre du cercle.
Calc_dB()
Calcul de dérivée de la largeur au miroir par rapport au tirant d&#39;eau.
Calc_dSYg($rY=0)
Calcul de la dérivée de la distance du centre de gravité de la section à la surface libre multiplié p...
Calc_P($rY=0)
Calcul du périmètre mouillé.
Calc_SYg($rY=0)
Calcul de la distance du centre de gravité de la section à la surface libre multiplié par la surface ...
Calculs de la section circulaire.
Calc_dS()
Calcul de dérivée de la surface hydraulique par rapport au tirant d&#39;eau.
Calc_B()
Calcul de la largeur au miroir.
Gestion commune pour les différents types de section.
Calc_S($rY=0)
Calcul de la surface mouillée.
Calc_Alpha()
Calcul de l&#39;angle Alpha de la surface libre par rapport au fond.
$oLog
Paramètres du système canal (classe oParam)
Calc_dAlpha()
Calcul de dérivée de l&#39;angle Alpha de la surface libre par rapport au fond.
Calc_dP()
Calcul de dérivée du périmètre hydraulique par rapport au tirant d&#39;eau.
Calc($sDonnee, $rY=false)
Calcul des données à la section.
$nbDessinPoints
Angle de la surface libre par rapport au fond.
__construct(&$oLog, &$oP, $rD)
$oP
Tirant d&#39;eau normal.