Changeset 56971 in spip-zone


Ignore:
Timestamp:
Jan 12, 2012, 2:50:17 PM (8 years ago)
Author:
dorch@…
Message:

Résolution des tickets (http://sic.g-eau.net/mantis/roadmap_page.php?version_id=67):

  • 0000590: [Courbe de remous] Bug d'affichage du tableau des cotes calculées (dorch) - fermé.
  • 0000577: [Courbe de remous] Adapter les graduations des échelle des graphiques (dorch) - fermé.
    • 0000594: [Courbe de remous] Création d'une classe d'affichage de graphique (dorch) - fermé.
  • 0000574: [Courbe de remous] Pas de calcul de ligne d'eau sur h aval = hn (dorch) - fermé.
  • 0000504: [Courbe de remous] Traduction du calcul de la courbe de remous (dorch) - fermé.
Location:
_plugins_/hydraulic
Files:
4 added
1 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/hydraulic/formulaires/courbe_remous.html

    r56649 r56971  
    1 <table>
    2 <tr>
    3 <td>[<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>]
     1[<div class='hyd_formulaire_erreur '><span>(#ENV*{message_erreur})</span></div>]
    42<form method="post" action="#ENV{action}">
    53   #ACTION_FORMULAIRE{#ENV{action}}
    6    <table>
     4   <table class="hyd_formulaire">
    75      <tbody>
    8          <tr><td colspan="2"><strong><:hydraulic:def_section_trap:></strong></td></tr>
     6         <tr><td colspan="2"><div class="hyd_formulaire_chapitre"><:hydraulic:def_section_trap:></div></td></tr>
    97         <tr>
    108            <td align="right">
     
    1210            </td>
    1311            <td>
    14                <input type="text" value="#ENV{rLarg}" maxlength="30" size="30" name="rLarg">
    15                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rLarg})</span>]
     12               <input type="text" value="#ENV{rLarg}" maxlength="30" name="rLarg">
     13               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rLarg})</div>]
    1614            </td>
    1715         </tr>
     
    2119            </td>
    2220            <td>
    23                <input type="text" value="#ENV{rFruit}" maxlength="30" size="30" name="rFruit">
    24                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rFruit})</span>]
     21               <input type="text" value="#ENV{rFruit}" maxlength="30" name="rFruit">
     22               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rFruit})</div>]
    2523            </td>
    2624         </tr>
    27          <tr><td colspan=2><strong><:hydraulic:caract_bief:></strong></td></tr>
     25         <tr><td colspan="2"><div class="hyd_formulaire_chapitre"><:hydraulic:caract_bief:></div></td></tr>
    2826         <tr>
    2927            <td align="right"><:hydraulic:coef_strickler:> :</td>
    3028            <td>
    31                <input type="text" value="#ENV{rKs}" maxlength="30" size="30" name="rKs">
    32                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rKs})</span>]
     29               <input type="text" value="#ENV{rKs}" maxlength="30" name="rKs">
     30               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rKs})</div>]
    3331            </td>
    3432         </tr>
    3533         <tr>
    3634            <td align="right"><:hydraulic:longueur_bief:> :</td>
    37             <td><input type="text" value="#ENV{rLong}" maxlength="30" size="30" name="rLong"></td>
    38                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rLong})</span>]
     35            <td><input type="text" value="#ENV{rLong}" maxlength="30" name="rLong"></td>
     36               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rLong})</div>]
    3937         </tr>
    4038         <tr>
    4139            <td align="right"><:hydraulic:pente_fond:> :</td>
    42             <td><input type="text" value="#ENV{rIf}" maxlength="30" size="30" name="rIf"></td>
    43                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rIf})</span>]
     40            <td><input type="text" value="#ENV{rIf}" maxlength="30" name="rIf"></td>
     41               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rIf})</div>]
    4442         </tr>
    45          <tr><td colspan=2><strong><:hydraulic:condition_limite:></strong></td></tr>
     43         <tr><td colspan="2"><div class="hyd_formulaire_chapitre"><:hydraulic:condition_limite:></div></td></tr>
    4644         <tr>
    4745            <td align="right"><:hydraulic:debit_amont:> :</td>
    48             <td><input type="text" value="#ENV{rQ}" maxlength="30" size="30" name="rQ"></td>
    49                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rQ})</span>]
     46            <td><input type="text" value="#ENV{rQ}" maxlength="30" name="rQ"></td>
     47               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rQ})</div>]
    5048         </tr>
    5149         <tr>
    5250            <td align="right"><:hydraulic:h_aval_imposee:> :</td>
    5351            <td>
    54                <input type="text" value="#ENV{rYaval}" maxlength="30" size="30" name="rYaval">
    55                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rYaval})</span>]
     52               <input type="text" value="#ENV{rYaval}" maxlength="30" name="rYaval">
     53               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rYaval})</div>]
    5654            </td>
    5755         </tr>
     
    5957            <td align="right"><:hydraulic:h_amont_imposee:> :</td>
    6058            <td>
    61                <input type="text" value="#ENV{rYamont}" maxlength="30" size="30" name="rYamont">
    62                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rYamont})</span>]
     59               <input type="text" value="#ENV{rYamont}" maxlength="30" name="rYamont">
     60               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rYamont})</div>]
    6361            </td>
    6462         </tr>
    65          <tr><td colspan=2><strong><:hydraulic:param_calcul:></strong></td></tr>
     63         <tr><td colspan="2"><div class="hyd_formulaire_chapitre"><:hydraulic:param_calcul:></div></td></tr>
    6664         <tr>
    6765            <td align="right"><:hydraulic:pas_discret:> :</td>
    68             <td><input type="text" value="#ENV{rDx}" maxlength="30" size="30" name="rDx"></td>
    69                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rDx})</span>]
     66            <td><input type="text" value="#ENV{rDx}" maxlength="30" name="rDx"></td>
     67               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rDx})</div>]
    7068         </tr>
    7169         <tr>
    7270            <td align="right"><:hydraulic:precision_calc:> :</td>
    73             <td><input type="text" value="#ENV{rPrec}" maxlength="30" size="30" name="rPrec"></td>
    74                [<span class='erreur'>(#ENV**{erreurs}|table_valeur{rPrec})</span>]
     71            <td><input type="text" value="#ENV{rPrec}" maxlength="30" name="rPrec"></td>
     72               [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rPrec})</div>]
    7573         </tr>
    7674
    7775         <tr>
    78             <td>
    79             </td>
    80             <td>
     76            <td colspan="2" class="hyd_bouton_submit">
    8177               <input type="submit" value=" <:hydraulic:calculer_remous:>">
    8278               </td>
     
    8581   </table>
    8682</form>
    87 </td>
    88 <td>
    89    <p><:hydraulic:calcul_caract:></p>
    90    <ul class="liste">
    91       <li><:hydraulic:perte_charge:></li>
    92       <li><:hydraulic:schema_numerique:></li>
    93    </ul>
    94 </td></tr></table>
    9583
    9684[<div class='hydraulic_resultat'>(#ENV*{message_ok})</div>]
  • _plugins_/hydraulic/formulaires/courbe_remous.php

    r56649 r56971  
    11<?php
     2/*
     3 * formulaire/courbe_remous.php
     4 *
     5 *
     6 *
     7 * Copyright 2012 David Dorchies <dorch@dorch.fr>
     8 *
     9 *
     10 *
     11 * This program is free software; you can redistribute it and/or modify
     12 *
     13 * it under the terms of the GNU General Public License as published by
     14 *
     15 * the Free Software Foundation; either version 2 of the License, or
     16 *
     17 * (at your option) any later version.
     18 *
     19 *
     20 *
     21 * This program is distributed in the hope that it will be useful,
     22 *
     23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     24 *
     25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     26 *
     27 * GNU General Public License for more details.
     28 *
     29 *
     30 *
     31 * You should have received a copy of the GNU General Public License
     32 *
     33 * along with this program; if not, write to the Free Software
     34 *
     35 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
     36 *
     37 * MA 02110-1301, USA.
     38 *
     39 */
     40
    241function formulaires_courbe_remous_charger_dist() {
    3    $valeurs = array(
    4       'rLarg'=>2.5,
    5       'rFruit'=>0.56,
    6       'rYaval'=>0.6,
    7       'rYamont'=>0.15,
    8       'rKs'=>50,
    9       'rQ'=>2,
    10       'rLong'=>50,
    11       'rIf'=>0.005,
    12       'rDx'=>5,
    13       'rPrec'=>0.001);
    14 
    15    return $valeurs;
     42    $valeurs = array(
     43        'rLarg'=>2.5,
     44        'rFruit'=>0.56,
     45        'rYaval'=>0.6,
     46        'rYamont'=>0.15,
     47        'rKs'=>50,
     48        'rQ'=>2,
     49        'rLong'=>50,
     50        'rIf'=>0.005,
     51        'rDx'=>5,
     52        'rPrec'=>0.001);
     53
     54    return $valeurs;
    1655}
    1756
    1857function formulaires_courbe_remous_verifier_dist(){
    19    $erreurs = array();
    20    $datas = array();
    21    // verifier que les champs obligatoires sont bien là :
    22    foreach(array('rLarg','rYaval','rYamont','rKs','rQ','rLong','rIf','rDx','rPrec') as $obligatoire) {
    23       if (!_request($obligatoire)) {
    24          $erreurs[$obligatoire] = 'Ce champ est obligatoire';}
    25       else {
    26          $datas[$obligatoire] = _request($obligatoire);
    27       }
    28    }
    29 
    30    foreach($datas as $champ=>$data)
    31       if ($data < 0) $erreurs[$champ] = 'La valeur doit être strictement positive';
    32 
    33    if (count($erreurs)) $erreurs['message_erreur'] = 'Votre saisie contient des erreurs !';
    34    return $erreurs;
     58    $erreurs = array();
     59    $datas = array();
     60    // verifier que les champs obligatoires sont bien là :
     61    foreach(array('rLarg','rYaval','rYamont','rKs','rQ','rLong','rIf','rDx','rPrec') as $obligatoire) {
     62        if (!_request($obligatoire)) {
     63            $erreurs[$obligatoire] = _T('hydraulic:champ_obligatoire');}
     64        else {
     65            $datas[$obligatoire] = _request($obligatoire);
     66        }
     67    }
     68
     69    foreach($datas as $champ=>$data) {
     70        if ($data < 0) $erreurs[$champ] = _T('hydraulic:valeur_positive');
     71    }
     72
     73    if (count($erreurs)) {
     74        $erreurs['message_erreur'] = _T('hydraulic:saisie_erreur');
     75    }
     76    return $erreurs;
    3577}
    3678
    3779function formulaires_courbe_remous_traiter_dist(){
    38    global $spip_lang;
     80    global $spip_lang;
    3981/*
    4082$fdbg = fopen('debug.log','w');
    4183*/
    42    include_spip('hyd_inc/section.class');
    43 
    44    include_spip('hyd_inc/cache');
    45 
    46    include_spip('hyd_inc/log.class');
    47    include_spip('hyd_inc/calcul');
    48    $datas = array();
    49    $echo = '';
    50    // On récupère les données
    51    foreach(array('rLarg','rFruit','rYaval','rYamont','rKs','rQ','rLong','rIf','rDx','rPrec') as $champ)
    52       if (_request($champ)) $datas[$champ] = _request($champ);
    53 
    54    // On ajoute la langue en cours pour différencier le fichier de cache par langue
    55    $datas['sLang'] = $spip_lang;
    56 
    57    // Nom du fichier en cache pour calcul déjà fait
    58    $CacheFileName=md5(serialize($datas));
    59 
    60    // Initialisation de la classe chargée d'afficher le journal de calcul
    61    $oLog = new cLog();
    62 
    63    //Transformation des variables contenues dans $datas
    64    foreach($datas as $champ=>$data) {
    65       ${$champ}=$data;
    66    }
    67 
    68    // Initialisation du format d'affichage des réels
    69    $iPrec=(int)-log10($rPrec);
    70 
    71    // Contrôle du nombre de pas d'espace maximum
    72    $iPasMax = 1000;
    73    if($rLong / $rDx > $iPasMax) {
    74       $rDx = $rLong / $iPasMax;
    75       $oLog->Add(_T('hydraulic:pas_nombre').' > '.$iPasMax.' => '._T('hydraulic:pas_ajustement').$rDx.' m');
    76    }
    77 
    78    // Enregistrement des paramètres dans les classes qui vont bien
    79    $oParam= new cParam($rYaval,$rKs,$rQ,$rLong,$rIf,$rDx,$rPrec);
    80    $oSection=new cSnTrapeze($oParam,$rLarg,$rFruit);
    81 
    82    if(is_file(HYD_CACHE_DIRECTORY.$CacheFileName)) {
    83       list($tr,$sLog) = ReadCacheFile($CacheFileName);
    84    }
    85    else {
    86       $oLog->Add(_T('hydraulic:h_critique').' = '.format_nombre($oSection->rHautCritique,$iPrec).' m');
    87       $oLog->Add(_T('hydraulic:h_normale').' = '.format_nombre($oSection->rHautNormale,$iPrec).' m');
    88 
    89       // Calcul depuis l'aval
    90       if($oSection->rHautCritique <= $rYaval) {
    91          $oLog->Add(_T('hydraulic:calcul_fluvial'));
    92          list($tr['X1'],$tr['Y1']) = calcul_courbe_remous($oParam,$oSection,$oLog,$iPrec);
    93       }
    94       else {
    95          $oLog->Add(_T('hydraulic:pas_calcul_depuis_aval'));
    96       }
    97 
    98       // Calcul depuis l'amont
    99       if($oSection->rHautCritique >= $rYamont) {
    100          $oLog->Add(_T('hydraulic:calcul_torrentiel'));
    101          $oParam->rYCL = $rYamont; // Condition limite amont
    102          $oParam->rDx = -$oParam->rDx; // un pas négatif force le calcul à partir de l'amont
    103          list($tr['X2'],$tr['Y2']) = calcul_courbe_remous($oParam,$oSection,$oLog,$iPrec);
    104       }
    105       else {
    106          $oLog->Add(_T('hydraulic:pas_calcul_depuis_amont'));
    107       }
    108 
    109       //Production du journal de calcul
    110       $sLog = $oLog->Result();
    111       //Enregistrement des données dans fichier cache
    112       WriteCacheFile($CacheFileName,array($tr,$sLog));
    113    }
    114    //Construction d'un tableau des indices x combinant les abscisses des 2 lignes d'eau
    115    $trX = array();
    116    if(isset($tr['X1'])) $trX = array_merge($trX, $tr['X1']);
    117    if(isset($tr['X2'])) $trX = array_merge($trX, $tr['X2']);
    118    $trX = array_unique($trX, SORT_NUMERIC);
    119    sort($trX, SORT_NUMERIC);
    120    spip_log($tr,'hydraulic');
    121 
    122    //Affichage du résultat
    123 
    124    $echo .= '<div id="jqplot_courbe_remous" style="height:400px;width:600px; "></div>';
    125    $echo .= '<script language="javascript" type="text/javascript">';
    126    if(isset($tr['Y1'])) $echo .= 'var y1Points=[];';
    127    if(isset($tr['Y2'])) $echo .= 'var y2Points=[];';
    128    $echo .= 'var fPoints=[];
    129             var cPoints=[];
    130             var nPoints=[];';
    131    $rYmax = 0; // TODO : pour une échelle des ordonnées intelligente
    132    foreach($trX as $rX) {
    133       $rCoteFond = $rIf*($rLong-$rX);
    134       $echo .= 'fPoints.push(['.$rX.', '.$rCoteFond.']);
    135                cPoints.push(['.$rX.', '.($rCoteFond+$oSection->rHautCritique).']);
    136                nPoints.push(['.$rX.', '.($rCoteFond+$oSection->rHautNormale).']);';
    137    }
    138    if(isset($tr['X1']))
    139       foreach($tr['X1'] as $cle=>$rX)
    140          $echo .= ' y1Points.push(['.$rX.', '.($tr['Y1'][$cle]+$rIf*($rLong-$rX)).']);';
    141    if(isset($tr['X2']))
    142       foreach($tr['X2'] as $cle=>$rX)
    143          $echo .= ' y2Points.push(['.$rX.', '.($tr['Y2'][$cle]+$rIf*($rLong-$rX)).']);';
    144    $echo .= 'chart=$.jqplot(\'jqplot_courbe_remous\',  [';
    145    if(isset($tr['X1'])) $echo .= 'y1Points,';
    146    if(isset($tr['X2'])) $echo .= 'y2Points,';
    147    $echo .= 'fPoints,cPoints,nPoints], {
    148                seriesDefaults: {showMarker:false},
    149                seriesColors: [';
    150    if(isset($tr['X1'])) $echo .= '"#00a3cd",';
    151    if(isset($tr['X2'])) $echo .= '"#77a3cd",';
    152    $echo .= '"#753f00", "#ff0000", "#a4c537"],
    153                series:[';
    154    if(isset($tr['X1'])) $echo .= '{label:\''.addslashes(_T('hydraulic:ligne_eau_fluviale')).'\', lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}},';
    155    if(isset($tr['X2'])) $echo .= '{label:\''.addslashes(_T('hydraulic:ligne_eau_torrentielle')).'\', lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}},';
    156    $echo .= '     {label:\''.addslashes(_T('hydraulic:fond')).'\', lineWidth:1, fill:true},
    157                   {label:\''.addslashes(_T('hydraulic:h_critique')).'\', lineWidth:1},
    158                   {label:\''.addslashes(_T('hydraulic:h_normale')).'\', lineWidth:1}
    159                ],
    160                legend: {show: true, location:\'ne\', fontSize:\'1em\'},
    161                cursor: {
    162                     show:true,
    163                     showVerticalLine: true,
    164                     showHorizontalLine: true,
    165                     showCursorLegend: true,
    166                     showTooltip: false,
    167                     zoom: true,
    168                     dblClickReset: false,
    169                     intersectionThreshold: 6
    170                },
    171                axes:{
    172                   xaxis:{min:0, max:'.$rLong.'},
    173                   yaxis:{min:0,
    174                      max:null,
    175                      tickOptions:{formatString:\'%.3f\'}
    176                   }
    177                }
    178             });
    179       </script>';
    180    $echo .= $sLog;
    181 
    182    $echo.='<table class="spip"><thead><tr class="row_first"><th scope="col">'._T('hydraulic:abscisse').' (m)</th>';
    183    if(isset($tr['Y1'])) $echo .= '<th scope="col">'._T('hydraulic:ligne_eau_fluviale').'</th><th scope="col">Froude</th>';
    184    if(isset($tr['Y2'])) $echo .= '<th scope="col">'._T('hydraulic:ligne_eau_torrentielle').'</th><th scope="col">Froude</th>';
    185    $echo.='</thead>
    186       <tbody>
    187       ';
    188    $i=0;
    189    foreach($trX as $rX) {
    190       $i+=1;
    191       $echo.='<tr class="';
    192       $echo.=($i%2==0)?'row_even':'row_odd';
    193       $echo.='"><td>'.format_nombre($rX,$iPrec).'</td>';
    194       if(isset($tr['X1']) && !(($cle = array_search($rX,$tr['X1'])) === false)) {
    195          $echo .= '<td>'.format_nombre($tr['Y1'][$cle],$iPrec).'</td>';
    196          $echo .= '<td>'.format_nombre($oSection->ReCalcFr($oParam, $tr['Y1'][$cle]),$iPrec).'</td>';
    197       }
    198       else {
    199          $echo .= '<td></td><td></td>';
    200       }
    201 /*
    202       fwrite($fdbg,"cle1=$cle\n");
    203 */
    204       if(isset($tr['X2']) && !(($cle = array_search($rX,$tr['X2'])) === false)) {
    205          $echo .= '<td>'.format_nombre($tr['Y2'][$cle],$iPrec).'</td>';
    206          $echo .= '<td>'.format_nombre($oSection->ReCalcFr($oParam, $tr['Y2'][$cle]),$iPrec).'</td>';
    207       }
    208       else {
    209          $echo .= '<td></td><td></td>';
    210       }
    211 /*
    212       fwrite($fdbg,"cle2=$cle\n");
    213 */
    214       $echo .= '</tr>';
    215    }
    216    $echo.='</tbody>
    217       </table>';
    218 
    219    $res['message_ok'] = $echo;
    220 
    221 
    222    return $res;
     84    include_spip('hyd_inc/section.class');
     85    include_spip('hyd_inc/cache');
     86    include_spip('hyd_inc/log.class');
     87    include_spip('hyd_inc/calcul');
     88    include_spip('hyd_inc/graph.class');
     89
     90    $datas = array();
     91    $echo = '';
     92    // On récupère les données
     93    foreach(array('rLarg','rFruit','rYaval','rYamont','rKs','rQ','rLong','rIf','rDx','rPrec') as $champ) {
     94        if (_request($champ)) $datas[$champ] = _request($champ);
     95        $datas[$champ] = str_replace(',','.',$datas[$champ]); // Bug #574
     96    }
     97
     98    // On ajoute la langue en cours pour différencier le fichier de cache par langue
     99    $datas['sLang'] = $spip_lang;
     100
     101    // Nom du fichier en cache pour calcul déjà fait
     102    $CacheFileName=md5(serialize($datas));
     103
     104    // Initialisation de la classe chargée d'afficher le journal de calcul
     105    $oLog = new cLog();
     106
     107    //Transformation des variables contenues dans $datas
     108    foreach($datas as $champ=>$data) {
     109        ${$champ}=$data;
     110    }
     111
     112    // Initialisation du format d'affichage des réels
     113    $iPrec=(int)-log10($rPrec);
     114
     115    // Contrôle du nombre de pas d'espace maximum
     116    $iPasMax = 1000;
     117    if($rLong / $rDx > $iPasMax) {
     118        $rDx = $rLong / $iPasMax;
     119        $oLog->Add(_T('hydraulic:pas_nombre').' > '.$iPasMax.' => '._T('hydraulic:pas_ajustement').$rDx.' m');
     120    }
     121
     122    // Enregistrement des paramètres dans les classes qui vont bien
     123    $oParam= new cParam($rYaval,$rKs,$rQ,$rLong,$rIf,$rDx,$rPrec);
     124    $oSection=new cSnTrapeze($oParam,$rLarg,$rFruit);
     125
     126
     127    /***************************************************************************
     128    *                        Calcul de la ligne d'eau
     129    ****************************************************************************/
     130    if(is_file(HYD_CACHE_DIRECTORY.$CacheFileName)) {
     131        // On récupère toutes les données dans un cache déjà créé
     132        list($tr,$sLog) = ReadCacheFile($CacheFileName);
     133    }
     134    else {
     135        // On calcule les données pour créer un cache et afficher le résultat
     136        $oLog->Add(_T('hydraulic:h_critique').' = '.format_nombre($oSection->rHautCritique,$iPrec).' m');
     137        $oLog->Add(_T('hydraulic:h_normale').' = '.format_nombre($oSection->rHautNormale,$iPrec).' m');
     138
     139        // Calcul depuis l'aval
     140        if($oSection->rHautCritique <= $rYaval) {
     141            $oLog->Add(_T('hydraulic:calcul_fluvial'));
     142            list($tr['X1'],$tr['Y1']) = calcul_courbe_remous($oParam,$oSection,$oLog,$iPrec);
     143        }
     144        else {
     145            $oLog->Add(_T('hydraulic:pas_calcul_depuis_aval'));
     146        }
     147
     148        // Calcul depuis l'amont
     149        if($oSection->rHautCritique >= $rYamont) {
     150            $oLog->Add(_T('hydraulic:calcul_torrentiel'));
     151            $oParam->rYCL = $rYamont; // Condition limite amont
     152            $oParam->rDx = -$oParam->rDx; // un pas négatif force le calcul à partir de l'amont
     153            list($tr['X2'],$tr['Y2']) = calcul_courbe_remous($oParam,$oSection,$oLog,$iPrec);
     154        }
     155        else {
     156            $oLog->Add(_T('hydraulic:pas_calcul_depuis_amont'));
     157        }
     158
     159        //Production du journal de calcul
     160        $sLog = $oLog->Result();
     161        //Enregistrement des données dans fichier cache
     162        WriteCacheFile($CacheFileName,array($tr,$sLog));
     163    }
     164    //Construction d'un tableau des indices x combinant les abscisses des 2 lignes d'eau
     165    $trX = array();
     166    if(isset($tr['X1'])) $trX = array_merge($trX, $tr['X1']);
     167    if(isset($tr['X2'])) $trX = array_merge($trX, $tr['X2']);
     168    $trX = array_unique($trX, SORT_NUMERIC);
     169    sort($trX, SORT_NUMERIC);
     170    //~ spip_log($tr,'hydraulic'); // Debug
     171
     172
     173    /***************************************************************************
     174    *                        Affichage du graphique
     175    ****************************************************************************/
     176    $oGraph = new cGraph();
     177    // Ligne d'eau fluviale
     178    if(isset($tr['Y1'])) {
     179        $oGraph->AddSerie(
     180            'ligne_eau_fluviale',
     181            $tr['X1'],
     182            $tr['Y1'],
     183            '#00a3cd',
     184            'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}');
     185    }
     186    // Ligne d'eau torrentielle
     187    if(isset($tr['Y2'])) {
     188        $oGraph->AddSerie(
     189            'ligne_eau_torrentielle',
     190            $tr['X2'],
     191            $tr['Y2'],
     192            '#77a3cd',
     193            'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}');
     194    }
     195    // Cote du fond
     196    $oGraph->AddSerie(
     197        'fond',
     198        $trX,
     199        0,  // La cote du fond sera calculée à partir de la pente fournie dans GetGraph
     200        '#753f00',
     201        'lineWidth:1, fill:true');
     202    // Hauteur critique
     203    $oGraph->AddSerie(
     204        'h_critique',
     205        $trX,
     206        $oSection->rHautCritique,  // La cote du fond sera calculée à partir de la pente fournie dans GetGraph
     207        '#ff0000',
     208        'lineWidth:1');
     209    // Hauteur normale
     210    $oGraph->AddSerie(
     211        'h_normale',
     212        $trX,
     213        $oSection->rHautNormale,  // La cote du fond sera calculée à partir de la pente fournie dans GetGraph
     214        '#a4c537',
     215        'lineWidth:1');
     216
     217    // Décalage des données par rapport au fond
     218    $oGraph->Decal(0, $rIf, $rLong);
     219
     220    // Récupération du graphique
     221    $echo .= $oGraph->GetGraph('courbe_remous',400,600);
     222
     223    $echo .= $sLog;
     224
     225    /***************************************************************************
     226    *                   Affichage du tableau de données
     227    ****************************************************************************/
     228    $echo.='<table class="spip">
     229        <thead>
     230            <tr class="row_first">
     231                <th scope="col" colspan="1" rowspan="2">'._T('hydraulic:abscisse').' (m)</th>
     232                <th scope="col" colspan="2" rowspan="1">'._T('hydraulic:ligne_eau_fluviale').'</th>
     233                <th scope="col" colspan="2" rowspan="1">'._T('hydraulic:ligne_eau_torrentielle').'</th>
     234            </tr>
     235            <tr class="row_first">
     236                <th scope="col">'._T('hydraulic:tirant_eau').'</th>
     237                <th scope="col">Froude</th>
     238                <th scope="col">'._T('hydraulic:tirant_eau').'</th>
     239                <th scope="col">Froude</th>
     240            </tr>
     241                <th></th>
     242        </thead>
     243        <tbody>';
     244    $i=0;
     245    foreach($trX as $rX) {
     246        $i+=1;
     247        $echo.='<tr class="';
     248        $echo.=($i%2==0)?'row_even':'row_odd';
     249        $echo.='"><td>'.format_nombre($rX,$iPrec).'</td>';
     250        if(isset($tr['X1']) && !(($cle = array_search($rX,$tr['X1'])) === false)) {
     251            $echo .= '<td>'.format_nombre($tr['Y1'][$cle],$iPrec).'</td>';
     252            $echo .= '<td>'.format_nombre($oSection->ReCalcFr($oParam, $tr['Y1'][$cle]),$iPrec).'</td>';
     253        }
     254        else {
     255            $echo .= '<td></td><td></td>';
     256        }
     257        if(isset($tr['X2']) && !(($cle = array_search($rX,$tr['X2'])) === false)) {
     258            $echo .= '<td>'.format_nombre($tr['Y2'][$cle],$iPrec).'</td>';
     259            $echo .= '<td>'.format_nombre($oSection->ReCalcFr($oParam, $tr['Y2'][$cle]),$iPrec).'</td>';
     260        }
     261        else {
     262            $echo .= '<td></td><td></td>';
     263        }
     264        $echo .= '</tr>';
     265    }
     266    $echo.='</tbody>
     267        </table>';
     268
     269    $res['message_ok'] = $echo;
     270
     271    return $res;
    223272}
    224273?>
  • _plugins_/hydraulic/hyd_inc/calcul.php

    r56649 r56971  
    2626      $trY[] = (real)$oSection->CalcPasX($oParam, $oSection->rY);
    2727      if($oParam->rDx > 0 xor !($oSection->rY < $oSection->rHautCritique)) {
    28          $oLog->Add('(x='.$x.') '._T('hydraulic:arret_calcul'));
     28         $oLog->Add(_T('hydraulic:arret_calcul').' '.$x. ' m');
    2929         break;
    3030      }
  • _plugins_/hydraulic/hydraulic_pipelines.php

    r56649 r56971  
    55   $flux .= "\n<!-- Plugin jQuery jqPlot pour les graphiques de ligne d'eau ! -->\n";
    66   $flux .= '  <!--[if IE]><script language="javascript" type="text/javascript" src="'.url_absolue(find_in_path('lib/dist/excanvas.js')).'"></script><![endif]-->
    7             <link rel="stylesheet" type="text/css" href="'.url_absolue(find_in_path('css/hydraulic.css')).'" />
     7            <link rel="stylesheet" type="text/css" href="'.generer_url_public('hydraulic.css').'" />
    88            <link rel="stylesheet" type="text/css" href="'.url_absolue(find_in_path('lib/dist/jquery.jqplot.css')).'" />
    99            <script language="javascript" type="text/javascript" src="'.url_absolue(find_in_path('lib/dist/jquery.min.js')).'"></script>
  • _plugins_/hydraulic/lang/hydraulic_en.php

    r56649 r56971  
    22// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
    33$GLOBALS[$GLOBALS['idx_lang']] = array(
    4    // A
    5    'abscisse'        => "Abscissa",
    6    'arret_calcul'    => "Critical elevation reached : calculation stopped",
    7    // C
    8    'calcul_caract'   => "The calculation has the following characteristics:",
    9    'calcul_remous'   => "Calculation of backwater curve",
    10    'calculer_remous' => "Calculate the backwater curve",
    11    'caract_bief'     => "Features reach",
    12    'coef_strickler'  => "Strickler coefficient (SI)",
    13    'condition_limite'=> "Boundary conditions",
    14    'calcul_fluvial'  => "Downstream boundary condition >= Critical elevation : calculation of subcritical part from downstream",
    15    'calcul_torrentiel'=> "Uptream boundary condition <= Critical elevation : calculation of supercritical part from upstream",
    16    // D
    17    'debit_amont'     => "Upstream flow (m3/s)",
    18    'def_section_trap'=> "Definition of trapezoidal section",
    19    // F
    20    'fond'            => "Bottom",
    21    'fruit'           => "Slope (m/m)",
    22    // H
    23    'h_amont_imposee' => "Water level imposed at the upstream (m)",
    24    'h_aval_imposee'  => "Downstream water level imposed (m)",
    25    'h_critique'      => "Critical elevation",
    26    'h_normale'       => "Normal elevation",
    27    // L
    28    'largeur_fond'    => "Width at bottom (m)",
    29    'ligne_eau_fluviale'  => "Subcritical water profile",
    30    'ligne_eau_torrentielle'  => "Supercritical water profile",
    31    'log_titre'       => "Calculation's log",
    32    'longueur_bief'   => "Length of reach (m)",
    33    // P
    34    'param_calcul'    => "Calculation parameters",
    35    'pas_ajustement'  => "adjustement of space step to ",
    36    'pas_discret'     => "Discretization step (m)",
    37    'pas_nombre'      => "Number of space step",
    38    'pente_fond'      => "Bottom slope (m/m)",
    39    'perte_charge'    => "Pressure drop: Manning-Strickler formula",
    40    'precision_calc'  => "Accuracy of calculation and display of dimensions (m)",
    41    'pas_calcul_depuis_aval' => 'Downstream boundary condition < Critical elevation : no possible calculation from downstream',
    42    'pas_calcul_depuis_amont' => 'Upstream boundary condition < Critical elevation : no possible calculation from upstream',
    43    //S
    44    'schema_numerique'=> "Numerical scheme for integrating the differential equation: Euler explicit"
     4    // A
     5    'abscisse'        => "Abscissa",
     6    'arret_calcul'    => "Calculation stopped: Critical elevation reached at abscissa",
     7    // C
     8    'calcul_caract'   => "The calculation has the following characteristics:",
     9    'calcul_remous'   => "Calculation of backwater curve",
     10    'calculer_remous' => "Calculate the backwater curve",
     11    'caract_bief'     => "Features reach",
     12    'coef_strickler'  => "Strickler coefficient (SI)",
     13    'condition_limite'=> "Boundary conditions",
     14    'calcul_fluvial'  => "Downstream boundary condition >= Critical elevation : calculation of subcritical part from downstream",
     15    'calcul_torrentiel'=> "Uptream boundary condition <= Critical elevation : calculation of supercritical part from upstream",
     16    'champ_obligatoire'=> 'This field is required',
     17    // D
     18    'debit_amont'     => "Upstream flow (m3/s)",
     19    'def_section_trap'=> "Definition of trapezoidal section",
     20    // F
     21    'fond'            => "Bottom",
     22    'fruit'           => "Slope (m/m)",
     23    // H
     24    'h_amont_imposee' => "Water level imposed at the upstream (m)",
     25    'h_aval_imposee'  => "Downstream water level imposed (m)",
     26    'h_critique'      => "Critical elevation",
     27    'h_normale'       => "Normal elevation",
     28    // L
     29    'largeur_fond'    => "Width at bottom (m)",
     30    'ligne_eau_fluviale'  => "Subcritical water profile",
     31    'ligne_eau_torrentielle'  => "Supercritical water profile",
     32    'log_titre'       => "Calculation's log",
     33    'longueur_bief'   => "Length of reach (m)",
     34    // P
     35    'param_calcul'    => "Calculation parameters",
     36    'pas_ajustement'  => "adjustement of space step to ",
     37    'pas_discret'     => "Discretization step (m)",
     38    'pas_nombre'      => "Number of space step",
     39    'pente_fond'      => "Bottom slope (m/m)",
     40    'precision_calc'  => "Accuracy of calculation and display of dimensions (m)",
     41    'pas_calcul_depuis_aval' => 'Downstream boundary condition < Critical elevation : no possible calculation from downstream',
     42    'pas_calcul_depuis_amont' => 'Upstream boundary condition < Critical elevation : no possible calculation from upstream',
     43    //S
     44    'saisie_erreur'   => 'Your entry contains errors!',
     45    //T
     46    'tirant_eau'         => 'Draft (m)',
     47    //V
     48    'valeur_positive' => 'This value must be strictly positive'
    4549);
    4650
  • _plugins_/hydraulic/lang/hydraulic_fr.php

    r56649 r56971  
    22// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
    33$GLOBALS[$GLOBALS['idx_lang']] = array(
    4    // A
    5    'abscisse'        => "Abscisse",
    6    'arret_calcul'    => "Hauteur critique atteinte : arrêt du calcul",
    7    // C
    8    'calcul_caract'   => "Le calcul a les caractéristiques suivantes :",
    9    'calcul_remous'   => "Calcul d'une courbe de remous",
    10    'calculer_remous' => "Calculer la courbe de remous",
    11    'caract_bief'     => "Caractéristiques du bief",
    12    'coef_strickler'  => "Coefficient de Strickler (SI)",
    13    'condition_limite'=> "Conditions aux limites",
    14    'calcul_fluvial'  => "Condition limite aval >= Hauteur critique : calcul de la partie fluviale à partir de l'aval",
    15    'calcul_torrentiel'=> "Condition limite amont <= Hauteur critique : calcul de la partie torrentielle à partir de l'amont",
    16    // D
    17    'debit_amont'     => "Débit amont (m3/s)",
    18    'def_section_trap'=> "Définition de la section trapézoïdale",
    19    // F
    20    'fond'            => "Fond",
    21    'fruit'           => "Fruit (m/m)",
    22    // H
    23    'h_amont_imposee' => "Hauteur d'eau imposée à l'amont (m)",
    24    'h_aval_imposee'  => "Hauteur d'eau aval imposée (m)",
    25    'h_critique'      => "Hauteur critique",
    26    'h_normale'       => "Hauteur normale",
    27    // L
    28    'largeur_fond'    => "Largeur au fond (m)",
    29    'ligne_eau_fluviale'  => "Ligne d'eau fluviale",
    30    'ligne_eau_torrentielle'  => "Ligne d'eau torrentielle",
    31    'log_titre'       => "Journal des calculs",
    32    'longueur_bief'   => "Longueur du bief (m)",
    33    // P
    34    'param_calcul'    => "Paramètres de calcul",
    35    'pas_ajustement'  => "ajustement du pas d\'espace à ",
    36    'pas_discret'     => "Pas de discrétisation (m)",
    37    'pas_nombre'      => "Nombre de pas d\'espace",
    38    'pente_fond'      => "Pente du fond (m/m)",
    39    'perte_charge'    => "Pertes de charge : formule de Manning-Strickler",
    40    'precision_calc'  => "Précision de calcul et d'affichage des cotes (m)",
    41    'pas_calcul_depuis_aval' => 'Condition limite aval < Hauteur critique : pas de calcul possible depuis l\'aval',
    42    'pas_calcul_depuis_amont' => 'Condition limite amont > Hauteur critique : pas de calcul possible depuis l\'amont',
    43    //S
    44    'schema_numerique'=> "Schéma numérique pour l'intégration de l'équation différentielle : Euler explicite"
     4    // A
     5    'abscisse'        => "Abscisse",
     6    'arret_calcul'    => "Arrêt du calcul : Hauteur critique atteinte à l'abscisse",
     7    // C
     8    'calcul_caract'   => "Le calcul a les caractéristiques suivantes :",
     9    'calcul_remous'   => "Calcul d'une courbe de remous",
     10    'calculer_remous' => "Calculer la courbe de remous",
     11    'caract_bief'     => "Caractéristiques du bief",
     12    'coef_strickler'  => "Coefficient de Strickler (SI)",
     13    'condition_limite'=> "Conditions aux limites",
     14    'calcul_fluvial'  => "Condition limite aval >= Hauteur critique : calcul de la partie fluviale à partir de l'aval",
     15    'calcul_torrentiel'=> "Condition limite amont <= Hauteur critique : calcul de la partie torrentielle à partir de l'amont",
     16    'champ_obligatoire'=> 'Ce champ est obligatoire',
     17    // D
     18    'debit_amont'     => "Débit amont (m3/s)",
     19    'def_section_trap'=> "Définition de la section trapézoïdale",
     20    // F
     21    'fond'            => "Fond",
     22    'fruit'           => "Fruit (m/m)",
     23    // H
     24    'h_amont_imposee' => "Hauteur d'eau imposée à l'amont (m)",
     25    'h_aval_imposee'  => "Hauteur d'eau aval imposée (m)",
     26    'h_critique'      => "Hauteur critique",
     27    'h_normale'       => "Hauteur normale",
     28    // L
     29    'largeur_fond'    => "Largeur au fond (m)",
     30    'ligne_eau_fluviale'  => "Ligne d'eau fluviale",
     31    'ligne_eau_torrentielle'  => "Ligne d'eau torrentielle",
     32    'log_titre'       => "Journal des calculs",
     33    'longueur_bief'   => "Longueur du bief (m)",
     34    // P
     35    'param_calcul'    => "Paramètres de calcul",
     36    'pas_ajustement'  => "ajustement du pas d'espace à ",
     37    'pas_discret'     => "Pas de discrétisation (m)",
     38    'pas_nombre'      => "Nombre de pas d'espace",
     39    'pente_fond'      => "Pente du fond (m/m)",
     40    'precision_calc'  => "Précision de calcul et d'affichage des cotes (m)",
     41    'pas_calcul_depuis_aval' => 'Condition limite aval < Hauteur critique : pas de calcul possible depuis l\'aval',
     42    'pas_calcul_depuis_amont' => 'Condition limite amont > Hauteur critique : pas de calcul possible depuis l\'amont',
     43    //S
     44    'saisie_erreur'   => 'Votre saisie contient des erreurs !',
     45    //T
     46    'tirant_eau'      => 'Tirant d\'eau (m)',
     47    //V
     48    'valeur_positive' => 'Cette valeur doit être strictement positive'
    4549);
    4650
  • _plugins_/hydraulic/plugin.xml

    r56649 r56971  
    11<plugin>
    2    <nom>Calculette d'hydraulique à surface libre</nom>
     2   <nom><multi>
     3   [fr]Calculette d'hydraulique
     4   [en]Calculator for hydraulic</multi></nom>
    35   <auteur>David Dorchies</auteur>
    46   <licence>GNU/GLP</licence>
    57   <version>0.3 alpha</version>
    68   <necessite id="lib:dist" src="https://bitbucket.org/cleonello/jqplot/downloads/jquery.jqplot.1.0.0b2_r1012.zip" />
    7         <slogan>
    8                 <multi>[fr]Des calculs d'hydraulique sous SPIP !
    9                 [en]Hydraulic calculations on SPIP !</multi>
    10         </slogan>
     9    <slogan>
     10        <multi>[fr]Des calculs d'hydraulique sous SPIP !
     11        [en]Hydraulic calculations on SPIP !</multi>
     12    </slogan>
    1113   <description>
    1214   <multi>
     
    1820      <li>&lt;hyd|courberemous&gt; : Calcul d'une courbe de remous dans un canal trapézoïdal à surface libre</li>
    1921   </ul>
    20    Voir le site du plugin pour plus d'informations : <a href="http://sic.g-eau.net/spip.php?rubrique80">http://sic.g-eau.net</a>
    2122   [en]Calculator for performing calculations in hydraulic
    2223adapted to canals and rivers. The plugin comes
     
    2728      <li>&lt;hyd|courberemous&gt; : Calculation of a backwater curve in a trapezoidal channel with free surface</li>
    2829   </ul>
    29    See the plugin website for more information : <a href="http://sic.g-eau.net/spip.php?rubrique80">http://sic.g-eau.net</a>
    3030   </multi>
    3131   </description>
Note: See TracChangeset for help on using the changeset viewer.