2 include_spip(
'hyd_inc/form_section.abstract.class');
13 $this->saisies[
'cond_lim'] = array(
16 'rQ' =>array(
'debit_amont',2,
'op'),
17 'rYaval' =>array(
'h_aval_imposee',0.4,
'pn'),
18 'rYamont'=>array(
'h_amont_imposee',0.15,
'pn')
23 $this->saisies[
'param_calc'] = array(
26 'rDx' =>array(
'pas_discret',5,
'op'),
27 'rPrec' =>array(
'precision_calc',0.001,
'op'),
28 'Methode' => array(
'choix_resolution',
'form_courbe_remous_methode',
's')
33 $this->saisies[
'val_a_cal'] = array(
36 'val_a_cal' => array(
'choix_donnee_calc',
'form_calcul_section_valacal',
's')
40 parent::__construct(
true);
42 foreach($this->saisies as &$saisie) {
49 $valeurs = parent::charger(
true);
50 $valeurs = array_merge($valeurs,
52 'choix_section' =>
'FT',
53 'val_a_cal' =>
'none',
54 'choix_champs_select' => array_merge(
55 array(
'none' =>
'aucune'),
56 $this->champs_select_calc
60 if(self::DBG_CHARGER) spip_log($valeurs,
'hydraulic',_LOG_DEBUG);
69 extract($this->data, EXTR_OVERWRITE|EXTR_REFS);
71 include_spip(
'hyd_inc/courbe_remous');
76 $this->oLog->Add(_T(
'hydraulic:largeur_berge').
' = '.
format_nombre($this->oSn->rLargeurBerge,$this->oP->iPrec).
' m');
77 $this->oLog->Add(_T(
'hydraulic:h_critique').
' = '.
format_nombre($this->oSn->CalcGeo(
'Yc'),$this->oP->iPrec).
' m');
78 $this->oLog->Add(_T(
'hydraulic:h_normale').
' = '.
format_nombre($this->oSn->CalcGeo(
'Yn'),$this->oP->iPrec).
' m');
84 if($this->oSn->rHautCritique <= $rYaval) {
85 $this->oLog->Add(_T(
'hydraulic:calcul_fluvial'));
86 $oCRF =
new cCourbeRemous($this->oLog, $this->oP, $this->oSn, $rDx);
87 $aC[
'Flu'] = $oCRF->calcul($rYaval, $rLong, $Methode);
90 $this->oLog->Add(_T(
'hydraulic:pas_calcul_depuis_aval'),
true);
94 if($this->oSn->rHautCritique >= $rYamont) {
95 $this->oLog->Add(_T(
'hydraulic:calcul_torrentiel'));
96 $oCRT =
new cCourbeRemous($this->oLog, $this->oP, $this->oSn, -$rDx);
97 $aC[
'Tor'] = $oCRT->calcul($rYamont, $rLong, $Methode);
100 $this->oLog->Add(_T(
'hydraulic:pas_calcul_depuis_amont'),
true);
102 spip_log($aC,
'hydraulic',_LOG_DEBUG);
105 $bDetectRessaut =
true;
106 if($bDetectRessaut && isset($aC[
'Flu']) && isset($aC[
'Tor'])) {
107 if(count($aC[
'Flu']) > count($aC[
'Tor']) || (count($aC[
'Flu']) == count($aC[
'Tor']) && $this->oSn->Calc(
'Imp', end($aC[
'Flu'])) > $this->oSn->Calc(
'Imp', end($aC[
'Tor'])))) {
112 $sSens = _T(
'hydraulic:amont');
118 $sSens = _T(
'hydraulic:aval');
120 $trX = array_reverse(array_keys($aC[$sCN]));
122 foreach($trX as $rX) {
124 $Yco = $this->oSn->Calc(
'Yco', $aC[$sCN][$rX]);
125 $rLongRst = 5 * abs($aC[$sCN][$rX] - $Yco);
126 $xRst = $rX + round($iSens * $rLongRst / $rDx) * $rDx;
127 $xRst = sprintf(
'%1.'.round($this->oP->iPrec).
'f',$xRst);
129 if(isset($aC[$sCC][$xRst])) {
131 $Ydec = $aC[$sCC][$xRst] + $rLongRst * $this->oP->rIf * $iSens;
132 spip_log(
"\nrX=$rX xRst=$xRst Yco=$Yco Ydec=$Ydec",
'hydraulic',_LOG_DEBUG);
133 if(($Yco - $Ydec) > 0) {
134 $this->oLog->Add(_T(
'hydraulic:ressaut_hydrau', array(
'Xmin'=>min($rX,$xRst),
'Xmax'=>max($rX,$xRst))));
135 spip_log(
"rX=$rX xRst=$xRst",
'hydraulic',_LOG_DEBUG);
137 foreach(array_keys($aC[$sCN]) as $rXCC) {
138 if($iSens * ($rXCC - $rX) < 0) {
139 unset($aC[$sCC][$rXCC]);
140 } elseif($rXCC == $rX) {
141 $aC[$sCC][$rXCC] = $aC[$sCN][$rXCC];
146 foreach($trX as $rXCN) {
147 if($iSens * ($rXCN - $xRst) > 0) {
148 unset($aC[$sCN][$rXCN]);
149 } elseif($rXCN == $xRst) {
150 $aC[$sCN][$rXCN] = $aC[$sCC][$rXCN];
161 $this->oLog->Add(_T(
'hydraulic:ressaut_dehors', array(
'Sens' => $sSens,
'X' => end($trX))));
168 if(isset($aC[
'Flu'])) $trX = array_merge($trX, array_keys($aC[
'Flu']));
169 if(isset($aC[
'Tor'])) $trX = array_merge($trX, array_keys($aC[
'Tor']));
170 $trX = array_unique($trX, SORT_NUMERIC);
171 sort($trX, SORT_NUMERIC);
174 $this->data[
'ValCal'] = $val_a_cal;
176 if($val_a_cal !=
'none') {
177 foreach($trX as $rX) {
179 if(isset($aC[
'Flu'][$rX]) && !isset($aC[
'Tor'][$rX])) {
180 $rY = $aC[
'Flu'][$rX];
182 if(isset($aC[
'Tor'][$rX])) {
183 if(!isset($aC[
'Flu'][$rX]) || (isset($aC[
'Flu'][$rX]) && $aC[
'Flu'][$rX]==$aC[
'Tor'][$rX])) {
184 $rY = $aC[
'Tor'][$rX];
188 if(!in_array($val_a_cal,array(
'Yn',
'Yc',
'Hsc'))){
189 $tRes[$rX] = $this->oSn->Calc($val_a_cal, $rY);
192 $tRes[$rX] = $this->oSn->CalcGeo($val_a_cal, $rY);
214 if($this->data[
'ValCal'] !=
'none') {
215 $sCodeLangValCal = $this->champs_select_calc[$this->data[
'ValCal']];
216 $sLibValCal = _T(
"hydraulic:$sCodeLangValCal");
222 if(in_array($this->data[
'ValCal'], array(
'Hs',
'Hsc',
'Yf',
'Yt',
'Yco')))
225 $choix_graph =
'courbe';
227 elseif(in_array($this->data[
'ValCal'], array(
'B',
'P',
'S',
'R',
'V',
'Fr',
'J',
'I-J',
'Imp',
'Tau0')))
230 $choix_graph =
'graph';
235 $choix_graph =
'none';
239 $trX = $this->result[
'trX'];
247 include_spip(
'hyd_inc/graph.class');
248 $oGraph =
new cGraph(
'', _T(
'hydraulic:abscisse'));
251 if(isset($this->result[
'Flu'])) {
252 $LgnEau = $this->result[
'Flu'];
254 spip_log($LgnEau,
'hydraulic',_LOG_DEBUG);
255 if(isset($this->result[
'Tor'])) {
256 $LgnEau = array_merge($this->result[
'Tor'], $LgnEau);
258 spip_log($LgnEau,
'hydraulic',_LOG_DEBUG);
259 if(!empty($LgnEau)) {
263 array_values($LgnEau),
265 'lineWidth:0, fill:true, showLabel:false' 282 'lineWidth:1, fill:true' 285 if(isset($this->result[
'Flu'])) {
287 'ligne_eau_fluviale',
288 array_keys($this->result[
'Flu']),
289 array_values($this->result[
'Flu']),
291 'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}' 295 if(isset($this->result[
'Tor'])) {
297 'ligne_eau_torrentielle',
298 array_keys($this->result[
'Tor']),
299 array_values($this->result[
'Tor']),
301 'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}' 305 if(is_numeric($this->oSn->rHautCritique)) {
309 $this->oSn->rHautCritique,
315 if(is_numeric($this->oSn->rHautNormale)) {
319 $this->oSn->rHautNormale,
326 if($choix_graph ==
'courbe') {
329 array_keys($this->result[
'tRes']),
330 array_values($this->result[
'tRes']),
332 'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}' 337 $oGraph->Decal(max(0,-$this->data[
'rIf']*$this->data[
'rLong']), $this->data[
'rIf'], $this->data[
'rLong']);
340 $echo .= $oGraph->GetGraph(
'courbe_remous',400,600);
343 if($choix_graph ==
'graph') {
345 _T(
'hydraulic:abscisse'),
347 array_keys($this->result[
'tRes']),
348 array_values($this->result[
'tRes'])
354 $echo .= $this->oLog->Result();
360 $echo.=
'<table class="spip"> 362 <tr class="row_first"> 363 <th scope="col" colspan="1" rowspan="2">'._T(
'hydraulic:abscisse').
'</th> 364 <th scope="col" colspan="2" rowspan="1">'._T(
'hydraulic:ligne_eau_fluviale').
'</th> 365 <th scope="col" colspan="2" rowspan="1">'._T(
'hydraulic:ligne_eau_torrentielle').
'</th> 367 <tr class="row_first"> 368 <th scope="col">'._T(
'hydraulic:tirant_eau').
'</th> 369 <th scope="col">'.$sLibValCal.
'</th> 370 <th scope="col">'._T(
'hydraulic:tirant_eau').
'</th> 371 <th scope="col">'.$sLibValCal.
'</th> 376 foreach($trX as $rX) {
378 $echo.=
'<tr class="align_right ';
379 $echo.=($i%2==0)?
'row_even':
'row_odd';
380 $echo.=
'"><td>'.format_nombre($rX,$this->oP->iPrec).
'</td>';
381 if(isset($this->result[
'tRes'][$rX])) {
382 $sValCal =
format_nombre($this->result[
'tRes'][$rX],$this->oP->iPrec);
386 if(isset($this->result[
'Flu'][$rX])) {
388 $echo .=
'<td>'.format_nombre($this->result[
'Flu'][$rX],$this->oP->iPrec).
'</td>';
389 $echo .=
"<td>$sValCal</td>";
392 $echo .=
'<td></td><td></td>';
394 if(isset($this->result[
'Tor'][$rX])) {
395 $echo .=
'<td>'.format_nombre($this->result[
'Tor'][$rX],$this->oP->iPrec).
'</td>';
396 $echo .=
"<td>$sValCal</td>";
399 $echo .=
'<td></td><td></td>';
411 $lib = parent::get_champs_libelles();
412 foreach($this->champs_select_calc as $cle=>$champ) {
413 $lib[$cle] = _T(
'hydraulic:'.$champ);
Calcul d'une courbe de remous.
Classe pour l'affichage des graphiques.
format_nombre($nombre, $dec)