source: spip-zone/_plugins_/hydraulic/branches/v0.3/hyd_inc/sectionPuiss.class.php @ 60927

Last change on this file since 60927 was 60927, checked in by dorch@…, 7 years ago
  • 0000583: [Section] Dessiner le profil de la section (mederic) - fermé.
  • 0000693: [Section] Dessin du profil de la section > Dessiner la forme de la section (dorch) - fermé.
File size: 3.7 KB
Line 
1<?php
2/**
3 *      @file inc_hyd/sectionPuiss.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
26include_spip('hyd_inc/section.class');
27
28/**
29 * Calculs de la section parabolique ou "puissance"
30 */
31class cSnPuiss extends acSection {
32    protected $rk;      /// Coefficient de forme compris entre 0 et 1
33    //$LargeurBerge => La largeur des berges est déjà présente dans acSection
34    protected $nbDessinPoints=50;
35
36    function __construct(&$oLog,&$oP,$rk,$rLargeurBerge) {
37        $this->rk = (real) $rk;
38        $this->rLargeurBerge = (real) $rLargeurBerge;
39        parent::__construct($oLog,$oP);
40    }
41
42    /**
43     * Calcul de Lambda (mais on garde la routine Alpha commune avec la section circulaire)
44     * @return Lambda
45     */
46    protected function CalcAlpha() {
47        return $this->rLargeurBerge/pow($this->oP->rYB,$this->rk);
48    }
49
50    /**
51     * Calcul de la largeur au miroir.
52     * @return B
53     */
54    protected function CalcB() {
55        if($this->rY >= $this->oP->rYB) {
56            return $this->rLargeurBerge;
57        }
58        else {
59            return $this->Calc('Alpha')*pow($this->rY,$this->rk);
60        }
61    }
62
63    /**
64     * Calcul du périmètre mouillé.
65     * @return B
66     */
67     protected function CalcP() {
68        $n=100; /// Le nombre de partie pour le calcul de l'intégrale
69        $rLambda2 = pow($this->Calc('Alpha'),2);
70        $rP = 0; /// Le périmètre à calculer
71        $rPrevious = 0;
72        for($i=1;$i<=$n;$i++) {
73            $rCurrent = pow($this->rY*$i/$n,$this->rk)/2;
74            $rP += sqrt(pow($n,-2)+$rLambda2*pow($rCurrent-$rPrevious,2));
75            $rPrevious = $rCurrent;
76        }
77        $rP *= 2 ;
78        return $rP;
79    }
80
81    /**
82     * Calcul de la surface mouillée.
83     * @return S
84     */
85    protected function CalcS() {
86        return $this->Calc('Alpha')*pow($this->rY, $this->rk+1)/($this->rk+1);
87    }
88
89
90    /**
91     * Calcul de dérivée du périmètre hydraulique par rapport au tirant d'eau.
92     * @return dP
93     */
94    protected function CalcPder() {
95        return 2 * sqrt(1+pow($this->rk*$this->Calc('Alpha')/2,2)*pow($this->rY,2*($this->rk-1)));
96    }
97
98    /**
99     * Calcul de dérivée de la largeur au miroir par rapport au tirant d'eau.
100     * @return dB
101     */
102    protected function CalcBder() {
103        return $this->Calc('Alpha')*$this->rk*pow($this->rY,$this->rk-1);
104    }
105
106    /**
107     * Calcul de la distance du centre de gravité de la section à la surface libre.
108     * @return Distance du centre de gravité de la section à la surface libre
109     */
110    protected function CalcSYg() {
111        return $this->Calc('Alpha')*pow($this->rY, $this->rk+2)/(($this->rk+1)*($this->rk+2));
112    }
113
114}
115?>
Note: See TracBrowser for help on using the repository browser.