diff --git a/spec/regime_uniforme_rect.spec.ts b/spec/regime_uniforme_rect.spec.ts
index a6dd6ab07d4e7897e7f3fcf378e6dc6301319a04..43793fa4a636349be48bcc35e469e064936c67b2 100644
--- a/spec/regime_uniforme_rect.spec.ts
+++ b/spec/regime_uniforme_rect.spec.ts
@@ -11,58 +11,110 @@ describe('Class RegimeUniforme / section rectangulaire : ', () => {
     // });
 
     describe('Calc(): ', () => {
-        it('Q should be 1.568', () => {
-            let sect: cSnRectang;
-            let prmsCanal: cParamsCanal;
+        it('LargeurFond should be 2.5', () => {
+            let paramCnl = new cParamsCanal(40, //  Ks=Strickler
+                1.568, // Q=Débit
+                0.001, // If=pente du fond
+                precDist, // précision
+                1 // YB=hauteur de berge
+                // YCL=Condition limite en cote à l'amont ou à l'aval
+            );
+
+
+            let sect = new cSnRectang(undefined, paramCnl,
+                0, // largeur de fond
+                false);
+            // tirant d'eau
+            sect.v.Y = 0.8;
+
+            let ru = new RegimeUniforme(sect);
 
-            //  Ks=Strickler, Q=Débit, If=pente du font, précision, YB=hauteur de berge, YCL=Condition limite en cote à l'amont ou à l'aval
-            prmsCanal = new cParamsCanal(40, 0, 0.001, precDist, 1)
+            expect(ru.Calc("LargeurFond").vCalc).toBeCloseTo(2.5, precDigits);
+        });
 
-            // largeur de fond
-            sect = new cSnRectang(false, prmsCanal, 2.5);
+        it('Q should be 1.568', () => {
+            let prmsCanal = new cParamsCanal(40, //  Ks=Strickler
+                0, // Q=Débit
+                0.001, // If=pente du fond
+                precDist, // précision
+                1 // YB=hauteur de berge
+                // YCL=Condition limite en cote à l'amont ou à l'aval
+            );
+
+
+            let sect = new cSnRectang(undefined, prmsCanal,
+                2.5 // largeur de fond
+            );
             // tirant d'eau
             sect.v.Y = 0.8;
 
-            var ru = new RegimeUniforme(sect);
+            let ru = new RegimeUniforme(sect);
 
             // nom variable à calculer, valeur de Q
             expect(ru.Calc("Q").vCalc).toBeCloseTo(1.568, precDigits);
         });
 
         it('Q should be 0.731', () => {
-            let sect: cSnRectang;
-            let prmsCanal: cParamsCanal;
-
-            //  Ks=Strickler, Q=Débit, If=pente du font, précision, YB=hauteur de berge, YCL=Condition limite en cote à l'amont ou à l'aval
-            prmsCanal = new cParamsCanal(30, 0, 0.0001, precDist, 1.2)
-
-            // largeur de fond
-            sect = new cSnRectang(false, prmsCanal, 3);
+            let prmsCanal = new cParamsCanal(30, //  Ks=Strickler
+                0, // Q=Débit
+                0.0001, // If=pente du fond
+                precDist, // précision
+                1.2 // YB=hauteur de berge
+                // YCL=Condition limite en cote à l'amont ou à l'aval
+            );
+
+            let sect = new cSnRectang(undefined, prmsCanal,
+                3 // largeur de fond
+            );
             // tirant d'eau
             sect.v.Y = 1.1;
 
-            var ru = new RegimeUniforme(sect);
+            let ru = new RegimeUniforme(sect);
 
             // nom variable à calculer, valeur de Q
             expect(ru.Calc("Q").vCalc).toBeCloseTo(0.731, precDigits);
         });
 
         it('Strickler should be 30.618', () => {
-            let sect: cSnRectang;
-            let prmsCanal: cParamsCanal;
-
-            //  Ks=Strickler, Q=Débit, If=pente du font, précision, YB=hauteur de berge, YCL=Condition limite en cote à l'amont ou à l'aval
-            prmsCanal = new cParamsCanal(40, 1.2, 0.001, precDist, 1)
-
-            // largeur de fond
-            sect = new cSnRectang(false, prmsCanal, 2.5);
+            let prmsCanal = new cParamsCanal(40, //  Ks=Strickler
+                1.2, // Q=Débit
+                0.001, // If=pente du fond
+                precDist, // précision
+                1 // YB=hauteur de berge
+                // YCL=Condition limite en cote à l'amont ou à l'aval
+            );
+
+            let sect = new cSnRectang(undefined, prmsCanal,
+                2.5 // largeur de fond
+            );
             // tirant d'eau
             sect.v.Y = 0.8;
 
-            var ru = new RegimeUniforme(sect);
+            let ru = new RegimeUniforme(sect);
 
             // nom variable à calculer, valeur de Ks
             expect(ru.Calc("Ks").vCalc).toBeCloseTo(30.618, precDigits);
         });
+
+        it('Y should be 0.663', () => {
+            let prmsCanal = new cParamsCanal(40, //  Ks=Strickler
+                1.2, // Q=Débit
+                0.001, // If=pente du fond
+                precDist, // précision
+                1 // YB=hauteur de berge
+                // YCL=Condition limite en cote à l'amont ou à l'aval
+            );
+
+            let sect = new cSnRectang(undefined, prmsCanal,
+                2.5 // largeur de fond
+            );
+            // tirant d'eau
+            sect.v.Y = 0;
+
+            let ru = new RegimeUniforme(sect);
+
+            // nom variable à calculer, valeur de Ks
+            expect(ru.Calc("Y").vCalc).toBeCloseTo(0.663, precDigits);
+        });
     });
 });
diff --git a/spec/regime_uniforme_trapeze.spec.ts b/spec/regime_uniforme_trapeze.spec.ts
index 51acbad5f8a50478f272848581e6120a3652b916..f4f94204103f67c5a33d396181840f4f04cb82d3 100644
--- a/spec/regime_uniforme_trapeze.spec.ts
+++ b/spec/regime_uniforme_trapeze.spec.ts
@@ -12,34 +12,43 @@ describe('Class RegimeUniforme / section trapèze: ', () => {
 
     describe('Calc(): ', () => {
         it('Q should be 1.988', () => {
-            let sect: cSnTrapez;
-            let paramCnl: cParamsCanal;
-            //  Ks=Strickler, Q=Débit, If=pente du font, précision, YB=hauteur de berge, YCL=Condition limite en cote à l'amont ou à l'aval
-            paramCnl = new cParamsCanal(40, 0, 0.001, precDist, 1)
-            // largeur de fond, fruit
-            sect = new cSnTrapez(false, paramCnl, 2.5, 0.56);
+            let paramCnl = new cParamsCanal(40, //  Ks=Strickler
+                0,  //  Q=Débit
+                0.001, //  If=pente du fond
+                precDist, // précision
+                1 // YB= hauteur de berge
+                // YCL=Condition limite en cote à l'amont ou à l'aval
+            );
+
+            let sect = new cSnTrapez(undefined, paramCnl,
+                2.5, // largeur de fond
+                0.56 //  fruit
+            );
             // tirant d'eau
             sect.v.Y = 0.8;
 
-            var ru: RegimeUniforme;
-            ru = new RegimeUniforme(sect);
+            let ru = new RegimeUniforme(sect);
 
             expect(ru.Calc("Q").vCalc).toBeCloseTo(1.988, precDigits);
         });
 
-
         it('LargeurFond should be 1.516', () => {
-            let sect: cSnTrapez;
-            let paramCnl: cParamsCanal;
-            //  Ks=Strickler, Q=Débit, If=pente du font, précision, YB=hauteur de berge, YCL=Condition limite en cote à l'amont ou à l'aval
-            paramCnl = new cParamsCanal(40, 1.2, 0.001, 0.001, 1)
-            // largeur de fond, fruit
-            sect = new cSnTrapez(false, paramCnl, 0, 0.56);
+            let paramCnl = new cParamsCanal(40, //  Ks=Strickler
+                1.2,  //  Q=Débit
+                0.001, //  If=pente du fond
+                precDist, // précision
+                1 // YB= hauteur de berge
+                // YCL=Condition limite en cote à l'amont ou à l'aval
+            );
+
+            let sect = new cSnTrapez(undefined, paramCnl,
+                0, // largeur de fond
+                0.56 // fruit
+            );
             // tirant d'eau
             sect.v.Y = 0.8;
 
-            var ru: RegimeUniforme;
-            ru = new RegimeUniforme(sect);
+            let ru = new RegimeUniforme(sect);
 
             expect(ru.Calc("LargeurFond").vCalc).toBeCloseTo(1.516, precDigits);
         });
diff --git a/src/base.ts b/src/base.ts
index be69087500c424fbe703aaeb7cd5ff36c3d8b2ff..7a51fe820b6b4ed167ca75f35555baa88e9e3d58 100644
--- a/src/base.ts
+++ b/src/base.ts
@@ -46,15 +46,17 @@ export interface IParamsEquation {
  */
 export abstract class Debug {
     /**
-     * @param DBG Flag de débuggage
+     * @param _DBG Flag de débuggage
      */
-    constructor(private DBG: boolean) { }
+    constructor(private _DBG: boolean) { }
 
     /** 
      * Affiche un message dans la console si le flag this.DBG est à true
      * @param s Message à afficher dans la console
      */
     protected debug(s: any) {
-        if (this.DBG) console.log(s);
+        if (this._DBG) console.log(s);
     }
+
+    get DBG() { return this._DBG; }
 }
diff --git a/src/cond_distri.ts b/src/cond_distri.ts
index cc365c4c2d426dd3bcfb44b68873a02071142529..e654973265a53819744dd3e72b54617d1ea973d3 100644
--- a/src/cond_distri.ts
+++ b/src/cond_distri.ts
@@ -67,7 +67,6 @@ export class ConduiteDistrib extends Nub {
                 break;
         }
 
-
         return new Result(v);
     }
 }
\ No newline at end of file
diff --git a/src/dichotomie.ts b/src/dichotomie.ts
index 21a5b729bce461843bd3c597af78ed750860d6aa..35bfe296005287f54ace7ec3eeb33a7a677d113a 100644
--- a/src/dichotomie.ts
+++ b/src/dichotomie.ts
@@ -13,8 +13,8 @@ export class Dichotomie extends Debug {
     * @param nub Noeud de calcul contenant la méthode de calcul Equation
     * @param sVarCalc Nom de la variable à calculer
     */
-    constructor(private nub: Nub, private sVarCalc: string) {
-        super(false);
+    constructor(private nub: Nub, private sVarCalc: string, dbg: boolean = false) {
+        super(dbg);
     }
 
     /** Valeur inconnue à rechercher */
@@ -31,7 +31,7 @@ export class Dichotomie extends Debug {
      * Méthode simulant l'opérateur booléen xor
      * @see http://www.howtocreate.co.uk/xor.html
      */
-    XOR(a, b) {
+    XOR(a: boolean, b: boolean) {
         return (a || b) && !(a && b);
     }
 
@@ -57,13 +57,13 @@ export class Dichotomie extends Debug {
     Dichotomie(rTarget: number, rTol: number, rInit: number): Result {
         let res: Result;
 
-        let XminInit = 1E-8;
+        let XminInit: number = 1E-8;
         this.vX = XminInit;
         let v1: number = this.Calcul().vCalc;
 
         let XmaxInit: number = Math.max(1, rInit) * 100;
         this.vX = XmaxInit;
-        let v2 = this.Calcul().vCalc;
+        let v2: number = this.Calcul().vCalc;
 
         let DX = (XmaxInit - XminInit) / this.IDEFINT;
         let nIterMax = Math.floor(Math.max(XmaxInit - rInit, rInit - XminInit) / DX + 1);
diff --git a/src/nub.ts b/src/nub.ts
index ff654c2caee6b226da6555ccb48f8cc4be7cf781..0b8be8df7236e8ae7810676c2979eb9d1783fff5 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -67,7 +67,7 @@ export abstract class Nub extends Debug {
      * @param rPrec précision de calcul
      */
     Solve(sVarCalc: string, rInit: number, rPrec: number): Result {
-        let dicho: Dichotomie = new Dichotomie(this, sVarCalc);
+        let dicho: Dichotomie = new Dichotomie(this, sVarCalc, this.DBG);
         var target = this.v[this._varsEq[0]];
         return dicho.Dichotomie(target, rPrec, rInit);
     }
diff --git a/src/regime_uniforme.ts b/src/regime_uniforme.ts
index ac6130dbcad186e456ba53333e3d7eb8340c839f..fa8cf789f9eaee554765a4fe8f5fb889752534f6 100644
--- a/src/regime_uniforme.ts
+++ b/src/regime_uniforme.ts
@@ -7,9 +7,8 @@ import { acSection, cParamsCanal } from "./section/section_type";
 export class RegimeUniforme extends Nub {
     private Sn: acSection; ///< Objet section
 
-    constructor(s: acSection) {
-        // let paramsEq: { [key: string]: number } = {};
-        super(s.v, false);
+    constructor(s: acSection, dbg: boolean = false) {
+        super(s.v, dbg);
 
         this.debug('constructeur RU');
 
@@ -23,10 +22,10 @@ export class RegimeUniforme extends Nub {
    * Calcul du débit en régime uniforme.
    * @return Débit en régime uniforme
    */
-    Calc_Qn() {
+    Calc_Qn(): number {
         this.Sn.Reset(true);
         if (this.Sn.oP.v.If <= 0) {
-            var Qn = 0; // ? false bool
+            var Qn: number = 0; // ? false bool
             //this.oLog.Add('h_normale_pente_neg_nul',true);
         } else {
             Qn = this.Sn.oP.v.Ks * Math.pow(this.Sn.Calc('R', this.Sn.v.Y), 2 / 3) * this.Sn.Calc('S', this.Sn.v.Y) * Math.sqrt(this.Sn.oP.v.If);
diff --git a/src/section/newton.ts b/src/section/newton.ts
index d237ddab55dacb5c6c20a7c8ed3a0dd81a0fce20..f09889d0af00cba670251f22da9aebeeabae41d9 100644
--- a/src/section/newton.ts
+++ b/src/section/newton.ts
@@ -1,49 +1,54 @@
 import { cParamsCanal } from "./section_type"
+import { cLog } from "./log";
 
 export abstract class acNewton {
-        protected rTol;
-        protected Dx;
+        protected rTol: number;
+        protected Dx: number;
         private iCpt = 0;
         private iCptMax = 50;
         private rRelax = 1; /// Coefficient de relaxation
         private rFnPrec = 0; /// Mémorisation du Fn précédent pour détecter le changement de signe
         private iOscil = 0; /// Nombre de changement de signe de Delta
-        private oLog;
+        private oLog: cLog;
+
         /**
          * Constructeur de la classe
-         * @param $oSn Section sur laquelle on fait le calcul
-         * @param $oP Paramètres supplémentaires (Débit, précision...)
+         * @param oP Paramètres supplémentaires (Débit, précision...)
          */
         constructor(oP: cParamsCanal) {
                 this.rTol = oP.v.Prec;
                 this.Dx = oP.v.Prec / 10;
         }
+
         /**
          * Calcul de la fonction f(x) dont on cherche le zéro.
-         * @param $rX x
+         * @param rX x
          * @return Calcul de la fonction
          */
         abstract CalcFn(rX);
+
         /**
          * Calcul de la dérivée f'(x) (peut être redéfini pour calcul analytique)
-         * @param $rX x
+         * @param rX x
          * @return Calcul de la fonction
          */
-        protected CalcDer($x) {
-                //~ spip_log('Newton:CalcDer $rX='.$x,'hydraulic.'._LOG_DEBUG);
-                return (this.CalcFn($x + this.Dx) - this.CalcFn($x - this.Dx)) / (2 * this.Dx);
+        protected CalcDer(x) {
+                //~ spip_log('Newton:CalcDer rX='.x,'hydraulic.'._LOG_DEBUG);
+                return (this.CalcFn(x + this.Dx) - this.CalcFn(x - this.Dx)) / (2 * this.Dx);
         }
+
         /**
          * Test d'égalité à une tolérance près
-         * @param $rFn x
+         * @param rFn x
          * @return True si égal, False sinon
          */
-        private FuzzyEqual($rFn) {
-                return (Math.abs($rFn) < this.rTol);
+        private FuzzyEqual(rFn) {
+                return (Math.abs(rFn) < this.rTol);
         }
+
         /**
          * Fonction récursive de calcul de la suite du Newton
-         * @param $rX x
+         * @param rX x
          * @return Solution du zéro de la fonction
          */
         XOR(a, b) {
@@ -58,7 +63,7 @@ export abstract class acNewton {
                 }
                 else {
                         var rDer = this.CalcDer(rX);
-                        //~ echo(' - f\' = '.$rDer);
+                        //~ echo(' - f\' = '.rDer);
                         if (rDer != 0) {
                                 if (this.XOR(rFn < 0, this.rFnPrec < 0)) {
                                         this.iOscil++;
@@ -95,6 +100,7 @@ export abstract class acNewton {
                         }
                 }
         }
+
         /**
          * Pour savoir si le Newton a convergé
          * @return true si oui, false sinon
diff --git a/src/section/section_circulaire.ts b/src/section/section_circulaire.ts
index 56bb10999ae80b1c3acf8970f9bcf2f91c1467c1..8740c7bdc638a4d7158d4581ba0f3b25cdc4318f 100644
--- a/src/section/section_circulaire.ts
+++ b/src/section/section_circulaire.ts
@@ -1,4 +1,5 @@
-import { acSection } from "./section_type";
+import { acSection, cParamsCanal } from "./section_type";
+import { cLog } from "./log";
 
 /**
  * Calculs de la section circulaire
@@ -6,13 +7,13 @@ import { acSection } from "./section_type";
 export class cSnCirc extends acSection {
 
         //public D;      /// Diamètre du cercle
-        private Alpha;    /// Angle de la surface libre par rapport au fond
+        private Alpha: number;    /// Angle de la surface libre par rapport au fond
         protected nbDessinPoints = 50;
 
-        constructor(oLog, oP, D) {
-                super(oLog, oP);
+        constructor(oLog: cLog, oP: cParamsCanal, D: number, dbg: boolean = false) {
+                super(oLog, oP, dbg);
                 this.v.D = D;
-                if (oP.YB > D) { oP.YB = D; } // On place la berge au sommet du cercle
+                if (oP.v.YB > D) { oP.v.YB = D; } // On place la berge au sommet du cercle
         }
         /**
          * Calcul de l'angle Alpha de la surface libre par rapport au fond.
@@ -70,10 +71,10 @@ export class cSnCirc extends acSection {
 
         /**
          * Calcul du périmètre mouillé.
-         * @param $rY Uniquement présent car la méthode parent a cet argument
+         * @param rY Uniquement présent car la méthode parent a cet argument
          * @return B
          */
-        Calc_P($rY = 0) {
+        Calc_P(rY = 0) {
                 if (this.v.Y > this.oP.v.YB && !this.bSnFermee) {
                         // On n'ajoute pas le périmètre dans le cas d'une fente de Preissmann
                         return this.CalcGeo('P') + super.Calc_P_Debordement(this.v.Y - this.oP.v.YB);
@@ -85,10 +86,10 @@ export class cSnCirc extends acSection {
 
         /**
          * Calcul de la surface mouillée.
-         * @param $rY Uniquement présent car la méthode parent a cet argument
+         * @param rY Uniquement présent car la méthode parent a cet argument
          * @return S
          */
-        Calc_S($rY = 0) {
+        Calc_S(rY = 0) {
                 if (this.v.Y > this.oP.v.YB) {
                         return this.CalcGeo('S') + super.Calc_S_Debordement(this.v.Y - this.oP.v.YB);
                 }
@@ -125,10 +126,10 @@ export class cSnCirc extends acSection {
         /**
          * Calcul de la distance du centre de gravité de la section à la surface libre
          * multiplié par la surface hydraulique
-         * @param $rY Uniquement présent car la méthode parent a cet argument
+         * @param rY Uniquement présent car la méthode parent a cet argument
          * @return S x Yg
          */
-        Calc_SYg($rY = 0) {
+        Calc_SYg(rY = 0) {
                 var SYg = Math.sin(this.Calc('Alpha')) - Math.pow(Math.sin(this.Calc('Alpha')), 3) / 3 - this.Calc('Alpha') * Math.cos(this.Calc('Alpha'));
                 SYg = Math.pow(this.v.D, 3) / 8 * SYg;
                 return SYg;
@@ -136,10 +137,10 @@ export class cSnCirc extends acSection {
         /**
          * Calcul de la dérivée de la distance du centre de gravité de la section à la surface libre
          * multiplié par la surface hydraulique
-         * @param $rY Uniquement présent car la méthode parent a cet argument
+         * @param rY Uniquement présent car la méthode parent a cet argument
          * @return S x Yg
          */
-        Calc_dSYg($rY = 0) {
+        Calc_dSYg(rY = 0) {
                 var cos = Math.cos(this.Calc('Alpha'));
                 var sin = Math.sin(this.Calc('Alpha'));
                 var SYg = this.Calc('dAlpha') * cos;
diff --git a/src/section/section_puissance.ts b/src/section/section_puissance.ts
index 1afb789b01788281ecd32a3fc421694dfc939bad..2c56ef62c33618127b76a1a14e6daa5659e26183 100644
--- a/src/section/section_puissance.ts
+++ b/src/section/section_puissance.ts
@@ -1,15 +1,16 @@
-import { acSection } from "./section_type";
+import { acSection, cParamsCanal } from "./section_type";
+import { cLog } from "./log";
 
 /**
  * Calculs de la section parabolique ou "puissance"
  */
 export class cSnPuiss extends acSection {
         //public k;      /// Coefficient de forme compris entre 0 et 1
-        //$LargeurBerge => La largeur des berges est déjà présente dans acSection
+        //LargeurBerge => La largeur des berges est déjà présente dans acSection
         protected nbDessinPoints = 50;
 
-        constructor(oLog, oP, rk, LargeurBerge) {
-                super(oLog, oP);
+        constructor(oLog: cLog, oP: cParamsCanal, rk: number, LargeurBerge: number, dbg: boolean = false) {
+                super(oLog, oP, dbg);
                 this.v.k = rk;
                 this.v.LargeurBerge = LargeurBerge;
         }
@@ -34,10 +35,10 @@ export class cSnPuiss extends acSection {
         }
         /**
          * Calcul du périmètre mouillé.
-         * @param $rY Uniquement présent car la méthode parent a cet argument
+         * @param rY Uniquement présent car la méthode parent a cet argument
          * @return B
          */
-        Calc_P($rY = 0) {
+        Calc_P(rY = 0) {
                 var n = 100; /// Le nombre de partie pour le calcul de l'intégrale
                 var Lambda2 = Math.pow(this.Calc('Alpha'), 2);
                 var P = 0; /// Le périmètre à calculer
@@ -53,10 +54,10 @@ export class cSnPuiss extends acSection {
 
         /**
          * Calcul de la surface mouillée.
-         * @param $rY Uniquement présent car la méthode parent a cet argument
+         * @param rY Uniquement présent car la méthode parent a cet argument
          * @return S
          */
-        Calc_S($rY = 0) {
+        Calc_S(rY = 0) {
                 return this.Calc('Alpha') * Math.pow(this.v.Y, this.v.k + 1) / (this.v.k + 1);
         }
 
@@ -78,19 +79,19 @@ export class cSnPuiss extends acSection {
         /**
          * Calcul de la distance du centre de gravité de la section à la surface libre
          * multiplié par la surface hydraulique
-         * @param $rY Uniquement présent car la méthode parent a cet argument
+         * @param rY Uniquement présent car la méthode parent a cet argument
          * @return S x Yg
          */
-        Calc_SYg($rY = 0) {
+        Calc_SYg(rY = 0) {
                 return this.Calc('Alpha') * Math.pow(this.v.Y, this.v.k + 2) / ((this.v.k + 1) * (this.v.k + 2));
         }
         /**
          * Calcul de la dérivée distance du centre de gravité de la section à la surface libre
          * multiplié par la surface hydraulique
-         * @param $rY Uniquement présent car la méthode parent a cet argument
+         * @param rY Uniquement présent car la méthode parent a cet argument
          * @return S x Yg
          */
-        Calc_dSYg($rY = 0) {
+        Calc_dSYg(rY = 0) {
                 var SYg = this.Calc('dAlpha') * Math.pow(this.v.Y, this.v.k + 2) + this.Calc('Alpha') * Math.pow(this.v.Y, this.v.k + 1) * (this.v.k + 2);
                 return SYg / ((this.v.k + 1) * (this.v.k + 2));
         }
diff --git a/src/section/section_rectang.ts b/src/section/section_rectang.ts
index 1a7b0b739c280b59c8ef927a0ae9bba056e719a2..255046e0fd3e0403265b1e30847e1ee4986181e9 100644
--- a/src/section/section_rectang.ts
+++ b/src/section/section_rectang.ts
@@ -1,19 +1,21 @@
-import { acSection } from "./section_type";
+import { acSection, cParamsCanal } from "./section_type";
+import { cLog } from "./log";
 
 /**
  * Calculs de la section rectangulaire
  */
 export class cSnRectang extends acSection {
-        constructor(oLog, oP, LargeurFond) {
-                super(oLog, oP);
+        constructor(oLog: cLog, oP: cParamsCanal, LargeurFond: number, dbg: boolean = false) {
+                super(oLog, oP, dbg);
                 this.v.LargeurBerge = LargeurFond;
         }
+
         /**
          * Calcul du périmètre mouillé
-         * @param $rY Uniquement présent car la méthode parent à cet argument
+         * @param rY Uniquement présent car la méthode parent à cet argument
          * @return Périmètre mouillé (m)
          */
-        Calc_P($rY = 0) {
+        Calc_P(rY = 0) {
                 return this.v.LargeurBerge + super.Calc_P_Debordement(this.v.Y);
         }
 
diff --git a/src/section/section_trapez.ts b/src/section/section_trapez.ts
index e1a67989fa1a61d3824320b54f440fe178da6548..e51313485a5899ef0fd3a5a3df6427caa502da47 100644
--- a/src/section/section_trapez.ts
+++ b/src/section/section_trapez.ts
@@ -1,4 +1,5 @@
-import { acSection } from "./section_type";
+import { acSection, cParamsCanal } from "./section_type";
+import { cLog } from "./log";
 
 /**
  * Calculs de la section trapézoïdale
@@ -6,8 +7,8 @@ import { acSection } from "./section_type";
 export class cSnTrapez extends acSection {
         // public LargeurFond;    /// Largeur au fond
         // public Fruit;          /// Fruit des berges
-        constructor(oLog, oP, LargeurFond, Fruit) {
-                super(oLog, oP);
+        constructor(oLog: cLog, oP: cParamsCanal, LargeurFond: number, Fruit: number, dbg: boolean = false) {
+                super(oLog, oP, dbg);
                 this.v.LargeurFond = LargeurFond;
                 this.v.Fruit = Fruit;
         }
@@ -23,33 +24,33 @@ export class cSnTrapez extends acSection {
 
         /**
          * Calcul du périmètre mouillé
-         * @param $rY Uniquement présent car la méthode parent à cet argument
+         * @param rY Uniquement présent car la méthode parent à cet argument
          * @return Périmètre mouillé (m)
          */
-        Calc_P($rY = 0) {
+        Calc_P(rY = 0) {
                 if (this.v.Y > this.oP.v.YB) {
                         var P = this.CalcGeo('P') + super.Calc_P_Debordement(this.v.Y - this.oP.v.YB);
                 }
                 else {
                         P = this.v.LargeurFond + 2 * Math.sqrt(1 + Math.pow(this.v.Fruit, 2)) * this.v.Y;
                 }
-                //~ spip_log('Trapez->CalcP(rY='.$this->rY.')='.$P,'hydraulic.'._LOG_DEBUG);
+                //~ spip_log('Trapez->CalcP(rY='.this->rY.')='.P,'hydraulic.'._LOG_DEBUG);
                 return P;
         }
 
         /**
          * Calcul de la surface mouillée
-         * @param $rY Uniquement présent car la méthode parent à cet argument
+         * @param rY Uniquement présent car la méthode parent à cet argument
          * @return Surface mouillée (m2)
          */
-        Calc_S($rY = 0) {
+        Calc_S(rY = 0) {
                 if (this.v.Y > this.oP.v.YB) {
                         var S = this.CalcGeo('S') + super.Calc_S_Debordement(this.v.Y - this.oP.v.YB);
                 }
                 else {
                         S = this.v.Y * (this.v.LargeurFond + this.v.Fruit * this.v.Y);
                 }
-                //~ spip_log('Trapez->CalcS(rY='.$this->rY.')='.$S,'hydraulic.'._LOG_DEBUG);
+                //~ spip_log('Trapez->CalcS(rY='.this->rY.')='.S,'hydraulic.'._LOG_DEBUG);
                 return S;
         }
 
@@ -94,19 +95,19 @@ export class cSnTrapez extends acSection {
         /**
          * Calcul de la distance du centre de gravité de la section à la surface libre
          * multiplié par la surface hydraulique
-         * @param $rY Uniquement présent car la méthode parent à cet argument
+         * @param rY Uniquement présent car la méthode parent à cet argument
          * @return S x Yg
          */
-        Calc_SYg($rY = 0) {
+        Calc_SYg(rY = 0) {
                 return (this.v.LargeurFond / 2 + this.v.Fruit * this.v.Y / 3) * Math.pow(this.v.Y, 2);
         }
         /**
          * Calcul de la dérivée de la distance du centre de gravité de la section à la surface libre
          * multiplié par la surface hydraulique
-         * @param $rY Uniquement présent car la méthode parent à cet argument
+         * @param rY Uniquement présent car la méthode parent à cet argument
          * @return S x Yg
          */
-        Calc_dSYg($rY = 0) {
+        Calc_dSYg(rY = 0) {
                 var SYg = this.v.Fruit / 3 * Math.pow(this.v.Y, 2);
                 SYg += (this.v.LargeurFond / 2 + this.v.Fruit * this.v.Y / 3) * 2 * this.v.Y;
                 return SYg;
diff --git a/src/section/section_type.ts b/src/section/section_type.ts
index 8a75981ae56904345e7c824a946eaeadb5ef91c1..94256007bf3a5dbf6f704853b7618fa18e29e950 100644
--- a/src/section/section_type.ts
+++ b/src/section/section_type.ts
@@ -1,14 +1,13 @@
-import { Debug } from "../base"
+import { IParamsEquation, Debug } from "../base"
 import { acNewton } from "./newton";
 import { cLog } from "./log";
-import { IParamsEquation } from "../base";
 
 /**
  * Calcul de la hauteur critique
  */
 export class cHautCritique extends acNewton {
-        private Sn;
-        private oP;
+        private Sn: acSection;
+        private oP: cParamsCanal;
         /**
          * Constructeur de la classe
          * @param oSn Section sur laquelle on fait le calcul
@@ -27,7 +26,7 @@ export class cHautCritique extends acNewton {
         CalcFn(rX) {
                 // Calcul de la fonction
                 if (this.Sn.Calc('S', rX) != 0) {
-                        var Fn = (Math.pow(this.oP.Q, 2) * this.Sn.Calc('B', rX) / Math.pow(this.Sn.Calc('S', rX), 3) / this.oP.G - 1);
+                        var Fn = (Math.pow(this.oP.v.Q, 2) * this.Sn.Calc('B', rX) / Math.pow(this.Sn.Calc('S', rX), 3) / cParamsCanal.G - 1);
                 }
                 else {
                         Fn = Infinity;
@@ -42,7 +41,7 @@ export class cHautCritique extends acNewton {
                 if (this.Sn.Calc('S') != 0) {
                         // L'initialisation à partir de rX a été faite lors de l'appel à CalcFn
                         var Der = (this.Sn.Calc('dB') * this.Sn.Calc('S') - 3 * this.Sn.Calc('B') * this.Sn.Calc('B'));
-                        Der = Math.pow(this.oP.Q, 2) / this.oP.G * Der / Math.pow(this.Sn.Calc('S'), 4);
+                        Der = Math.pow(this.oP.v.Q, 2) / cParamsCanal.G * Der / Math.pow(this.Sn.Calc('S'), 4);
                 }
                 else {
                         Der = Infinity;
@@ -55,11 +54,10 @@ export class cHautCritique extends acNewton {
  * Calcul de la hauteur normale
  */
 export class cHautNormale extends acNewton {
-        private Sn;
-        private Q;
-        private Ks;
-        private If;
-        private G;
+        private Sn: acSection;
+        private Q: number;
+        private Ks: number;
+        private If: number;
         /**
          * Constructeur de la classe
          * @param oSn Section sur laquelle on fait le calcul
@@ -71,7 +69,6 @@ export class cHautNormale extends acNewton {
                 this.Q = oP.v.Q;
                 this.Ks = oP.v.Ks;
                 this.If = oP.v.If;
-                this.G = oP.v.G;
         }
         /**
          * Calcul de la fonction dont on cherche le zéro
@@ -99,10 +96,10 @@ export class cHautNormale extends acNewton {
  * Calcul de la hauteur correspondante (charge égale)
  */
 export class cHautCorrespondante extends acNewton {
-        private Y; // Tirant d'eau connu
-        private rS2; // 1/S^2 associé au tirant d'eau connu
-        private Sn; // Section contenant les données de la section avec la hauteur à calculer
-        private rQ2G; // Constante de gravité
+        private Y: number; // Tirant d'eau connu
+        private rS2: number; // 1/S^2 associé au tirant d'eau connu
+        private Sn: acSection; // Section contenant les données de la section avec la hauteur à calculer
+        private rQ2G: number; // Constante de gravité
         /**
          * Constructeur de la classe
          * @param oSn Section sur laquelle on fait le calcul
@@ -113,7 +110,7 @@ export class cHautCorrespondante extends acNewton {
                 this.Y = Sn.v.Y;
                 this.rS2 = Math.pow(Sn.Calc('S'), -2);
                 this.Sn = Sn;
-                this.rQ2G = Math.pow(oP.v.Q, 2) / (2 * oP.v.G);
+                this.rQ2G = Math.pow(oP.v.Q, 2) / (2 * cParamsCanal.G);
         }
         /**
          * Calcul de la fonction dont on cherche le zéro
@@ -146,19 +143,17 @@ export class cHautCorrespondante extends acNewton {
  */
 export class cHautConjuguee extends acNewton {
         /** Tirant d'eau connu */
-        private Y;
+        private Y: number;
         /** 1/S^2 associé au tirant d'eau connu */
-        private rS2;
+        private rS2: number;
         /** Section contenant les données de la section avec la hauteur à calculer */
-        private Sn;
-        /** Constante de gravité */
-        private G;
+        private Sn: acSection;
         /** Carré du débit */
-        private rQ2;
+        private rQ2: number;
         /** Surface hydraulique associée au tirant d'eau connu */
-        private rS;
+        private rS: number;
         /** SYg associée au tirant d'eau connu */
-        private rSYg;
+        private rSYg: number;
         /**
          * Constructeur de la classe
          * @param oSn Section sur laquelle on fait le calcul
@@ -169,7 +164,6 @@ export class cHautConjuguee extends acNewton {
                 this.Y = oSn.v.Y;
                 this.rQ2 = Math.pow(oP.v.Q, 2);
                 this.Sn = oSn;
-                this.G = oP.v.G;
                 this.rS = oSn.Calc('S');
                 this.rSYg = oSn.Calc('SYg');
         }
@@ -181,7 +175,7 @@ export class cHautConjuguee extends acNewton {
                 // Réinitialisation des paramètres hydrauliques de oSn avec l'appel this->oSn->Calc('S',rX)
                 if (this.rS > 0 && this.Sn.Calc('S', rX) > 0) {
                         var Fn = this.rQ2 * (1 / this.rS - 1 / this.Sn.Calc('S'));
-                        Fn = Fn + this.G * (this.rSYg - this.Sn.Calc('SYg'));
+                        Fn = Fn + cParamsCanal.G * (this.rSYg - this.Sn.Calc('SYg'));
                 }
                 else {
                         Fn = -Infinity;
@@ -197,7 +191,7 @@ export class cHautConjuguee extends acNewton {
                 // L'initialisation a été faite lors de l'appel à CalcFn
                 if (this.rS > 0 && this.Sn.Calc('S') > 0) {
                         var Der = this.rQ2 * this.Sn.Calc('dS') * Math.pow(this.Sn.Calc('S'), -2);
-                        Der = Der - this.G * this.Sn.Calc('dSYg', rX);
+                        Der = Der - cParamsCanal.G * this.Sn.Calc('dSYg', rX);
                 }
                 else {
                         Der = -Infinity;
@@ -220,7 +214,7 @@ export class cParamsCanal {
         // public If;    /// Pente du fond
         // public Dx;    /// Pas d'espace (positif en partant de l'aval, négatif en partant de l'amont)
         // public Prec;  /// Précision de calcul et d'affichage
-        // public G = 9.81;/// Constante de gravité
+        public static readonly G: number = 9.81;/// Constante de gravité
         // public iPrec;  /// Précision en nombre de décimales
         // public YB;    /// Hauteur de berge
         // public Resolution; /// Méthode de résolution "Euler" ou "RK4"
@@ -248,14 +242,14 @@ export class cParamsCanal {
 export abstract class acSection extends Debug {
         private _v: IParamsEquation;
 
-
         //public Y;          /// Tirant d'eau
-        public HautCritique;  /// Tirant d'eau critique
+        public HautCritique: number;  /// Tirant d'eau critique
         public HautNormale;   /// Tirant d'eau normal
         public oP: cParamsCanal;   /// Paramètres du système canal (classe oParam)
         protected oLog: cLog; /// Pour l'affichage du journal de calcul
         //public LargeurBerge; /// largeur au débordement
-        protected bSnFermee = false; /// true si la section est fermée (fente de Preissmann)
+        protected bSnFermee: boolean = false; /// true si la section est fermée (fente de Preissmann)
+
         /**
          * Tableau contenant les données dépendantes du tirant d'eau this->rY.
          *
@@ -274,16 +268,18 @@ export abstract class acSection extends Debug {
         protected calcGeo = {}; /// Données ne dépendant pas de la cote de l'eau
         private Y_old; /// Mémorisation du tirant d'eau pour calcul intermédiaire
         private Calc_old = {}; /// Mémorisation des données hydrauliques pour calcul intermédiaire
+
         /**
          * Nombre de points nécessaires pour le dessin de la section (hors point de berge)
          * Valeur de 1 par défaut pour les sections rectangulaires et trapézoïdales
          */
         protected nbDessinPoints = 1;
+
         /**
          * Construction de la classe.
          * Calcul des hauteurs normale et critique
          */
-        constructor(oLog, oP, dbg = false) {
+        constructor(oLog: cLog, oP: cParamsCanal, dbg: boolean = false) {
                 super(dbg);
                 this.oP = oP;
                 this.oLog = oLog;
@@ -307,6 +303,7 @@ export abstract class acSection extends Debug {
                         this.calcGeo = {};
                 }
         }
+
         /**
          * Mémorise les données hydraulique en cours ou les restitue
          * @param bMem true pour mémorisation, false pour restitution
@@ -530,7 +527,7 @@ export abstract class acSection extends Debug {
          */
         Calc_Fr() {
                 if (this.Calc('S') != 0) {
-                        return this.oP.v.Q / this.Calc('S') * Math.sqrt(this.Calc('B') / this.Calc('S') / this.oP.v.G);
+                        return this.oP.v.Q / this.Calc('S') * Math.sqrt(this.Calc('B') / this.Calc('S') / cParamsCanal.G);
                 }
                 else {
                         return Infinity;
@@ -614,7 +611,7 @@ export abstract class acSection extends Debug {
          * @return Charge spécifique
          */
         Calc_Hs() {
-                return this.v.Y + Math.pow(this.Calc('V'), 2) / (2 * this.oP.v.G);
+                return this.v.Y + Math.pow(this.Calc('V'), 2) / (2 * cParamsCanal.G);
         }
         /**
          * Calcul de la charge spécifique critique.
@@ -712,7 +709,7 @@ export abstract class acSection extends Debug {
          * @return contrainte de cisaillement
          */
         Calc_Tau0() {
-                return 1000 * this.oP.v.G * this.Calc('R') * this.Calc('J');
+                return 1000 * cParamsCanal.G * this.Calc('R') * this.Calc('J');
         }
         /**
          * Calcul de la distance du centre de gravité de la section à la surface libre
@@ -735,7 +732,7 @@ export abstract class acSection extends Debug {
          * @return Impulsion hydraulique
          */
         Calc_Imp() {
-                return 1000 * (this.oP.v.Q * this.Calc('V') + this.oP.v.G * this.Calc('SYg'));
+                return 1000 * (this.oP.v.Q * this.Calc('V') + cParamsCanal.G * this.Calc('SYg'));
         }
         /**
          * Calcul de l'angle Alpha entre la surface libre et le fond pour les sections circulaires.
@@ -770,4 +767,3 @@ export abstract class acSection extends Debug {
         }*/
 
 }
-