diff --git a/spec/nubtest.ts b/spec/nubtest.ts
index bb097e4a1f06d8c6496d8f397ee418eab38ff5e8..a66ab943daeab33810c4261c361128223e0ec8b1 100644
--- a/spec/nubtest.ts
+++ b/spec/nubtest.ts
@@ -69,11 +69,57 @@ export function equalEpsilon(val1: number, val2: number, epsilon: number = precD
     return Math.abs(val1 - val2) < epsilon;
 }
 
+/**
+ * compare 2 objets
+ * @param s message
+ * @param objTest objet à tester
+ * @param objValid objet de référence
+ * @param epsilon tolérance pour les comparaisons de nombres
+ */
+export function compareObject(s: string, objTest: { [key: number]: number }, objValid: { [key: number]: number }, epsilon: number) {
+    let n1 = Object.keys(objTest).length;
+    let n2 = Object.keys(objValid).length;
+    let b: boolean = n1 == n2;
+    expect(b).toBeTruthy(s + ": longueur incorrecte " + n1 + ", devrait etre " + n2);
+    if (!b) return;
+
+    for (let i = 0; i < n1; i++) {
+        let v1: number = objTest[+Object.keys(objTest)[i]];
+        let v2: number = objValid[+Object.keys(objValid)[i]];
+        b = equalEpsilon(v1, v2, epsilon);
+        expect(b).toBeTruthy(s + " : " + i + "ieme valeur incorrecte " + v1 + ", devrait etre " + v2);
+        if (!b) return;
+    }
+}
+
+/**
+ * compare 2 tableaux
+ * @param s message
+ * @param arrTest tableau à tester
+ * @param arrValid tableau de référence
+ */
+export function compareArray(s: string, arrTest: string[], arrValid: number[]) {
+    let n1 = arrTest.length;
+    let n2 = arrValid.length;
+    let b: boolean = n1 == n2;
+    expect(b).toBeTruthy(s + ": longueur incorrecte " + n1 + ", devrait etre " + n2);
+    if (!b) return;
+
+    for (let i = 0; i < arrTest.length; i++) {
+        let v1: number = +arrTest[i];
+        let v2: number = arrValid[i];
+        b = equalEpsilon(v1, v2);
+        expect(b).toBeTruthy(s + " : " + i + "ieme valeur incorrecte " + v1 + ", devrait etre " + v2);
+        if (!b) return;
+    }
+}
+
 /**
  * compare 2 journaux
  */
 export function compareLog(logTest: cLog, logValid: cLog) {
     //console.log(JSON.stringify(logTest));
+    // console.log("journal :\n" + logTest.toString());
 
     // taille
 
diff --git a/spec/remous_rect.spec.ts b/spec/remous_rect.spec.ts
deleted file mode 100644
index 3a616e8c80db0a40fccd7191e398bd6147c6a5fc..0000000000000000000000000000000000000000
--- a/spec/remous_rect.spec.ts
+++ /dev/null
@@ -1,1187 +0,0 @@
-import { ParamsSectionRectang, cSnRectang } from "../src/section/section_rectang";
-import { CourbeRemousParams, MethodeResolution, CourbeRemous } from "../src/remous";
-import { precDigits, precDist, equalEpsilon, compareLog } from "./nubtest";
-import { round } from "../src/base";
-import { cLog } from "../src/util/log";
-import { ErrorMessage, ErrorCode } from "../src/util/error";
-
-/**
- * compare 2 objets
- * @param s message
- * @param objTest objet à tester
- * @param objValid objet de référence
- * @param epsilon tolérance pour les comparaisons de nombres
- */
-function compObject(s: string, objTest: { [key: number]: number }, objValid: { [key: number]: number }, epsilon: number) {
-    let n1 = Object.keys(objTest).length;
-    let n2 = Object.keys(objValid).length;
-    let b: boolean = n1 == n2;
-    expect(b).toBeTruthy(s + ": longueur incorrecte " + n1 + ", devrait etre " + n2);
-    if (!b) return;
-
-    for (let i = 0; i < n1; i++) {
-        let v1: number = objTest[+Object.keys(objTest)[i]];
-        let v2: number = objValid[+Object.keys(objValid)[i]];
-        b = equalEpsilon(v1, v2, epsilon);
-        expect(b).toBeTruthy(s + " : " + i + "ieme valeur incorrecte " + v1 + ", devrait etre " + v2);
-        if (!b) return;
-    }
-}
-
-/**
- * compare 2 tableaux
- * @param s message
- * @param arrTest tableau à tester
- * @param arrValid tableau de référence
- */
-function compArray(s: string, arrTest: string[], arrValid: number[]) {
-    let n1 = arrTest.length;
-    let n2 = arrValid.length;
-    let b: boolean = n1 == n2;
-    expect(b).toBeTruthy(s + ": longueur incorrecte " + n1 + ", devrait etre " + n2);
-    if (!b) return;
-
-    for (let i = 0; i < arrTest.length; i++) {
-        let v1: number = +arrTest[i];
-        let v2: number = arrValid[i];
-        b = equalEpsilon(v1, v2);
-        expect(b).toBeTruthy(s + " : " + i + "ieme valeur incorrecte " + v1 + ", devrait etre " + v2);
-        if (!b) return;
-    }
-}
-
-describe('Class Remous / section rectangulaire :', () => {
-    describe('méthode trapèzes :', () => {
-        it("forte pente, ressaut avant l'amont", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.05, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                6, // Yaval = tirant aval
-                MethodeResolution.Trapezes
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode trapèzes
-
-            let f = { 100.000: 6, 95.000: 5.75, 90.000: 5.5, 85.000: 5.25, 80.000: 4.999, 75.000: 4.749, 70.000: 4.499, 65.000: 4.249, 60.000: 3.998, 55.000: 3.748, 50.000: 3.498, 45.000: 3.248, 40.000: 2.997, 35.000: 2.747, 30.000: 2.497, 25.000: 2.246, 20.000: 1.995, 15.000: 1.744, 10.000: 1.491, 5.000: 1.237, 0.000: 0.977 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = {};
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.253;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
-            m.extraVar["sens"] = "amont";
-            m.extraVar["x"] = 0;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("forte pente, ressaut après l'aval", () => {
-            // TODO algo à reprendre
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.05, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                0.45, // Yaval = tirant aval
-                MethodeResolution.Trapezes
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode trapèzes
-
-            let f = {};
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            // let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.235, 15.000: 0.246, 20.000: 0.25, 25.000: 0.252, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.253, 95.000: 0.253, 100.000: 0.253 };
-            let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.235, 15.000: 0.246, 20.000: 0.25, 25.000: 0.252, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.253, 95.000: 0.253, 100.000: 0.45 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.253;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
-            m.extraVar["x"] = 95;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
-            m.extraVar["sens"] = "aval";
-            m.extraVar["x"] = 100;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("forte pente, ressaut (1 point) à l'intérieur du bief", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.05, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                1, // Yaval = tirant aval
-                MethodeResolution.Trapezes
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode trapèzes
-
-            let f = { 100.000: 1, 95.000: 0.729 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.235, 15.000: 0.246, 20.000: 0.25, 25.000: 0.252, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.253, 95.000: 0.729 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.253;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
-            m.extraVar["x"] = 90;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
-            m.extraVar["xmin"] = 90;
-            m.extraVar["xmax"] = 95;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("forte pente, ressaut (plusieurs points) à l'intérieur du bief", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.05, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                0.25,  // Dx=Pas d'espace
-                5.5  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                1, // Yaval = tirant aval
-                MethodeResolution.Trapezes
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode trapèzes
-
-            let f = { 5.500: 1, 5.250: 0.987, 5.000: 0.974, 4.750: 0.96, 4.500: 0.947, 4.250: 0.933, 4.000: 0.92, 3.750: 0.906, 3.500: 0.893, 3.250: 0.88, 3.000: 0.866, 2.750: 0.853, 2.500: 0.839, 2.250: 0.826, 2.000: 0.812, 1.750: 0.798, 1.500: 0.784, 1.250: 0.77, 1.000: 0.756, 0.750: 0.742, 0.500: 0.727, 0.250: 0.712, 0.000: 0.15 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = { 0.000: 0.15, 0.250: 0.153, 0.500: 0.156, 0.750: 0.158, 1.000: 0.161, 1.250: 0.163, 1.500: 0.166, 1.750: 0.168, 2.000: 0.17, 2.250: 0.173, 2.500: 0.175, 2.750: 0.177, 3.000: 0.18, 3.250: 0.182, 3.500: 0.184, 3.750: 0.906 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 0.250, 0.500, 0.750, 1.000, 1.250, 1.500, 1.750, 2.000, 2.250, 2.500, 2.750, 3.000, 3.250, 3.500, 3.750, 4.000, 4.250, 4.500, 4.750, 5.000, 5.250, 5.500];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.253;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
-            m.extraVar["xmin"] = 0;
-            m.extraVar["xmax"] = 3.75;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("faible pente, ressaut avant l'amont", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.001, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.3, // Yamont = tirant amont
-                0.403, // Yaval = tirant aval
-                MethodeResolution.Trapezes
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode trapèzes
-
-            let f = { 100.000: 0.403, 95.000: 0.524, 90.000: 0.558, 85.000: 0.584, 80.000: 0.604, 75.000: 0.621, 70.000: 0.637, 65.000: 0.65, 60.000: 0.662, 55.000: 0.673, 50.000: 0.684, 45.000: 0.693, 40.000: 0.701, 35.000: 0.709, 30.000: 0.717, 25.000: 0.725, 20.000: 0.731, 15.000: 0.738, 10.000: 0.744, 5.000: 0.75, 0.000: 0.755 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = {};
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.953;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
-            m.extraVar["x"] = 5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
-            m.extraVar["sens"] = "amont";
-            m.extraVar["x"] = 0;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("faible pente, ressaut (1 point) à l'intérieur du bief", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.001, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                0.403, // Yaval = tirant aval
-                MethodeResolution.Trapezes
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode trapèzes
-
-            let f = { 100.000: 0.403, 95.000: 0.524, 90.000: 0.558, 85.000: 0.584, 80.000: 0.604, 75.000: 0.621, 70.000: 0.637, 65.000: 0.65, 60.000: 0.662, 55.000: 0.673, 50.000: 0.684, 45.000: 0.693, 40.000: 0.701, 35.000: 0.709, 30.000: 0.717, 25.000: 0.725, 20.000: 0.731, 15.000: 0.738, 10.000: 0.744, 5.000: 0.75, 0.000: 0.15 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = { 0.000: 0.15, 5.000: 0.75 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.953;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
-            m.extraVar["x"] = 15;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
-            m.extraVar["xmin"] = 0;
-            m.extraVar["xmax"] = 5;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("faible pente, ressaut (plusieurs points) à l'intérieur du bief (1)", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.001, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                // 0.05,  // Dx=Pas d'espace
-                0.25,  // Dx=Pas d'espace
-                5  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.01, // Yamont = tirant amont
-                0.403, // Yaval = tirant aval
-                MethodeResolution.Trapezes
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode trapèzes
-
-            // //dx = 0.05
-            // let f = { 5.000: 0.403, 4.950: 0.414, 4.900: 0.419, 4.850: 0.423, 4.800: 0.426, 4.750: 0.429, 4.700: 0.432, 4.650: 0.434, 4.600: 0.436, 4.550: 0.438, 4.500: 0.439, 4.450: 0.441, 4.400: 0.443, 4.350: 0.445, 4.300: 0.446, 4.250: 0.447, 4.200: 0.449, 4.150: 0.45, 4.100: 0.451, 4.050: 0.452, 4.000: 0.454, 3.950: 0.455, 3.900: 0.456, 3.850: 0.457, 3.800: 0.458, 3.750: 0.46, 3.700: 0.461, 3.650: 0.462, 3.600: 0.463, 3.550: 0.465, 3.500: 0.466, 3.450: 0.467, 3.400: 0.468, 3.350: 0.469, 3.300: 0.469, 3.250: 0.47, 3.200: 0.471, 3.150: 0.471, 3.100: 0.472, 3.050: 0.472, 3.000: 0.473, 2.950: 0.474, 2.900: 0.474, 2.850: 0.475, 2.800: 0.476, 2.750: 0.476, 2.700: 0.477, 2.650: 0.477, 2.600: 0.478, 2.550: 0.479, 2.500: 0.479, 2.450: 0.48, 2.400: 0.48, 2.350: 0.481, 2.300: 0.482, 2.250: 0.482, 2.200: 0.483, 2.150: 0.483, 2.100: 0.484, 2.050: 0.485, 2.000: 0.485, 1.950: 0.486, 1.900: 0.486, 1.850: 0.487, 1.800: 0.488, 1.750: 0.488, 1.700: 0.489, 1.650: 0.49, 1.600: 0.49, 1.550: 0.491, 1.500: 0.491, 1.450: 0.492, 1.400: 0.493, 1.350: 0.493, 1.300: 0.494, 1.250: 0.494, 1.200: 0.495, 1.150: 0.496, 1.100: 0.496, 1.050: 0.497, 1.000: 0.497, 0.950: 0.498, 0.900: 0.499, 0.850: 0.499, 0.800: 0.5, 0.750: 0.501, 0.700: 0.501, 0.650: 0.502, 0.600: 0.502, 0.550: 0.503, 0.500: 0.504, 0.450: 0.504, 0.400: 0.505, 0.350: 0.505, 0.300: 0.506, 0.250: 0.507, 0.200: 0.507, 0.150: 0.508, 0.100: 0.508, 0.050: 0.509, 0.000: 0.01 };
-            // compObject("Yfluvial", res["flu"], f, 0.03);
-
-            // //let t = { 0.000: 0.01, 0.050: 0.011, 0.100: 0.013, 0.150: 0.015, 0.200: 0.016, 0.250: 0.018, 0.300: 0.019, 0.350: 0.02, 0.400: 0.021, 0.450: 0.022, 0.500: 0.022, 0.550: 0.023, 0.600: 0.024, 0.650: 0.025, 0.700: 0.026, 0.750: 0.026, 0.800: 0.027, 0.850: 0.028, 0.900: 0.031750000000000014, 0.95: 0.5042500000000006 }; // ok
-            // let t = { 0.000: 0.01, 0.050: 0.011, 0.100: 0.013, 0.150: 0.015, 0.200: 0.016, 0.250: 0.018, 0.300: 0.019, 0.350: 0.02, 0.400: 0.021, 0.450: 0.022, 0.500: 0.022, 0.550: 0.023, 0.600: 0.024, 0.650: 0.025, 0.700: 0.026, 0.750: 0.026, 0.800: 0.027, 0.850: 0.028, 0.900: 0.499 };
-            // compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            // let x = [0.000, 0.050, 0.100, 0.150, 0.200, 0.250, 0.300, 0.350, 0.400, 0.450, 0.500, 0.550, 0.600, 0.650, 0.700, 0.750, 0.800, 0.850, 0.900, 0.950, 1.000, 1.050, 1.100, 1.150, 1.200, 1.250, 1.300, 1.350, 1.400, 1.450, 1.500, 1.550, 1.600, 1.650, 1.700, 1.750, 1.800, 1.850, 1.900, 1.950, 2.000, 2.050, 2.100, 2.150, 2.200, 2.250, 2.300, 2.350, 2.400, 2.450, 2.500, 2.550, 2.600, 2.650, 2.700, 2.750, 2.800, 2.850, 2.900, 2.950, 3.000, 3.050, 3.100, 3.150, 3.200, 3.250, 3.300, 3.350, 3.400, 3.450, 3.500, 3.550, 3.600, 3.650, 3.700, 3.750, 3.800, 3.850, 3.900, 3.950, 4.000, 4.050, 4.100, 4.150, 4.200, 4.250, 4.300, 4.350, 4.400, 4.450, 4.500, 4.550, 4.600, 4.650, 4.700, 4.750, 4.800, 4.850, 4.900, 4.950, 5.000];
-            // compArray("abscisses", res["trX"], x);
-
-            //dx = 0.25
-            let f = { 5.000: 0.403, 4.750: 0.43, 4.500: 0.44, 4.250: 0.448, 4.000: 0.455, 3.750: 0.46, 3.500: 0.465, 3.250: 0.47, 3.000: 0.474, 2.750: 0.479, 2.500: 0.482, 2.250: 0.486, 2.000: 0.489, 1.750: 0.492, 1.500: 0.495, 1.250: 0.498, 1.000: 0.501, 0.750: 0.504, 0.500: 0.506, 0.250: 0.508, 0.000: 0.01 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = { 0.000: 0.01, 0.250: 0.022, 0.500: 0.027, 0.750: 0.033, 1.000: 0.501 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 0.250, 0.500, 0.750, 1.000, 1.250, 1.500, 1.750, 2.000, 2.250, 2.500, 2.750, 3.000, 3.250, 3.500, 3.750, 4.000, 4.250, 4.500, 4.750, 5.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.953;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
-            m.extraVar["xmin"] = 0;
-            m.extraVar["xmax"] = 1;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("faible pente, ressaut (plusieurs points) à l'intérieur du bief (2)", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.001, // If=pente du fond
-                0.0001, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                0.05,  // Dx=Pas d'espace
-                5  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.01, // Yamont = tirant amont
-                0.403, // Yaval = tirant aval
-                MethodeResolution.Trapezes
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode trapèzes
-
-            let f = { 5.0000: 0.403, 4.9500: 0.415, 4.9000: 0.42, 4.8500: 0.423, 4.8000: 0.426, 4.7500: 0.429, 4.7000: 0.432, 4.6500: 0.434, 4.6000: 0.436, 4.5500: 0.438, 4.5000: 0.44, 4.4500: 0.441, 4.4000: 0.443, 4.3500: 0.445, 4.3000: 0.446, 4.2500: 0.448, 4.2000: 0.449, 4.1500: 0.45, 4.1000: 0.452, 4.0500: 0.453, 4.0000: 0.454, 3.9500: 0.455, 3.9000: 0.457, 3.8500: 0.458, 3.8000: 0.459, 3.7500: 0.46, 3.7000: 0.461, 3.6500: 0.462, 3.6000: 0.463, 3.5500: 0.464, 3.5000: 0.465, 3.4500: 0.466, 3.4000: 0.467, 3.3500: 0.468, 3.3000: 0.469, 3.2500: 0.47, 3.2000: 0.471, 3.1500: 0.471, 3.1000: 0.472, 3.0500: 0.473, 3.0000: 0.474, 2.9500: 0.475, 2.9000: 0.476, 2.8500: 0.476, 2.8000: 0.477, 2.7500: 0.478, 2.7000: 0.479, 2.6500: 0.479, 2.6000: 0.48, 2.5500: 0.481, 2.5000: 0.482, 2.4500: 0.482, 2.4000: 0.483, 2.3500: 0.484, 2.3000: 0.484, 2.2500: 0.485, 2.2000: 0.486, 2.1500: 0.487, 2.1000: 0.487, 2.0500: 0.488, 2.0000: 0.489, 1.9500: 0.489, 1.9000: 0.49, 1.8500: 0.49, 1.8000: 0.491, 1.7500: 0.492, 1.7000: 0.492, 1.6500: 0.493, 1.6000: 0.494, 1.5500: 0.494, 1.5000: 0.495, 1.4500: 0.495, 1.4000: 0.496, 1.3500: 0.497, 1.3000: 0.497, 1.2500: 0.498, 1.2000: 0.498, 1.1500: 0.499, 1.1000: 0.499, 1.0500: 0.5, 1.0000: 0.5, 0.9500: 0.501, 0.9000: 0.502, 0.8500: 0.502, 0.8000: 0.503, 0.7500: 0.503, 0.7000: 0.504, 0.6500: 0.504, 0.6000: 0.505, 0.5500: 0.505, 0.5000: 0.506, 0.4500: 0.506, 0.4000: 0.507, 0.3500: 0.507, 0.3000: 0.508, 0.2500: 0.508, 0.2000: 0.509, 0.1500: 0.509, 0.1000: 0.51, 0.0500: 0.51, 0.0000: 0.01 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = { 0.0000: 0.01, 0.0500: 0.011, 0.1000: 0.013, 0.1500: 0.014, 0.2000: 0.015, 0.2500: 0.017, 0.3000: 0.018, 0.3500: 0.019, 0.4000: 0.02, 0.4500: 0.021, 0.5000: 0.022, 0.5500: 0.024, 0.6000: 0.025, 0.6500: 0.026, 0.7000: 0.027, 0.7500: 0.028, 0.8000: 0.029, 0.8500: 0.03, 0.9000: 0.502 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.0000, 0.0500, 0.1000, 0.1500, 0.2000, 0.2500, 0.3000, 0.3500, 0.4000, 0.4500, 0.5000, 0.5500, 0.6000, 0.6500, 0.7000, 0.7500, 0.8000, 0.8500, 0.9000, 0.9500, 1.0000, 1.0500, 1.1000, 1.1500, 1.2000, 1.2500, 1.3000, 1.3500, 1.4000, 1.4500, 1.5000, 1.5500, 1.6000, 1.6500, 1.7000, 1.7500, 1.8000, 1.8500, 1.9000, 1.9500, 2.0000, 2.0500, 2.1000, 2.1500, 2.2000, 2.2500, 2.3000, 2.3500, 2.4000, 2.4500, 2.5000, 2.5500, 2.6000, 2.6500, 2.7000, 2.7500, 2.8000, 2.8500, 2.9000, 2.9500, 3.0000, 3.0500, 3.1000, 3.1500, 3.2000, 3.2500, 3.3000, 3.3500, 3.4000, 3.4500, 3.5000, 3.5500, 3.6000, 3.6500, 3.7000, 3.7500, 3.8000, 3.8500, 3.9000, 3.9500, 4.0000, 4.0500, 4.1000, 4.1500, 4.2000, 4.2500, 4.3000, 4.3500, 4.4000, 4.4500, 4.5000, 4.5500, 4.6000, 4.6500, 4.7000, 4.7500, 4.8000, 4.8500, 4.9000, 4.9500, 5.0000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.953;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
-            m.extraVar["xmin"] = 0;
-            m.extraVar["xmax"] = 0.9;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-    });
-
-    xdescribe('méthode Euler explicite :', () => {
-        it("forte pente, ressaut avant l'amont", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.05, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                6, // Yaval = tirant aval
-                MethodeResolution.EulerExplicite
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode Euler
-
-            let f = { 100.000: 6, 95.000: 5.75, 90.000: 5.5, 85.000: 5.25, 80.000: 5, 75.000: 4.75, 70.000: 4.5, 65.000: 4.25, 60.000: 4, 55.000: 3.749, 50.000: 3.499, 45.000: 3.249, 40.000: 2.999, 35.000: 2.749, 30.000: 2.498, 25.000: 2.247, 20.000: 1.996, 15.000: 1.745, 10.000: 1.493, 5.000: 1.24, 0.000: 0.983 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = {};
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.253;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
-            m.extraVar["x"] = 20;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
-            m.extraVar["x"] = 25;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
-            m.extraVar["sens"] = "amont";
-            m.extraVar["x"] = 0;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("forte pente, ressaut après l'aval", () => {
-            // TODO algo à reprendre
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.05, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                0.45, // Yaval = tirant aval
-                MethodeResolution.EulerExplicite
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode Euler
-
-            let f = {};
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.241, 15.000: 0.252, 20.000: 0.253, 25.000: 0.253, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.253, 95.000: 0.253, 100.000: 0.45 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.253;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
-            m.extraVar["x"] = 95;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
-            m.extraVar["x"] = 20;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
-            m.extraVar["x"] = 25;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
-            m.extraVar["sens"] = "aval";
-            m.extraVar["x"] = 100;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("forte pente, ressaut (1 point) à l'intérieur du bief", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.05, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                1, // Yaval = tirant aval
-                MethodeResolution.EulerExplicite
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode Euler
-
-            let f = { 100.000: 1, 95.000: 0.737, 90.000: 0.451 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.241, 15.000: 0.252, 20.000: 0.253, 25.000: 0.253, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.451 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.253;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
-            m.extraVar["x"] = 85;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
-            m.extraVar["x"] = 20;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
-            m.extraVar["x"] = 25;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
-            m.extraVar["xmin"] = 90;
-            m.extraVar["xmax"] = 90;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("forte pente, ressaut (plusieurs points) à l'intérieur du bief", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.05, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                0.25,  // Dx=Pas d'espace
-                5.5  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                1, // Yaval = tirant aval
-                MethodeResolution.EulerExplicite
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode Euler
-
-            let f = { 5.500: 1, 5.250: 0.987, 5.000: 0.974, 4.750: 0.96, 4.500: 0.947, 4.250: 0.934, 4.000: 0.921, 3.750: 0.907, 3.500: 0.894, 3.250: 0.881, 3.000: 0.867, 2.750: 0.854, 2.500: 0.84, 2.250: 0.826, 2.000: 0.813, 1.750: 0.799, 1.500: 0.785, 1.250: 0.771, 1.000: 0.757, 0.750: 0.743, 0.500: 0.729, 0.250: 0.714, 0.000: 0.15 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = { 0.000: 0.15, 0.250: 0.153, 0.500: 0.156, 0.750: 0.158, 1.000: 0.161, 1.250: 0.164, 1.500: 0.166, 1.750: 0.169, 2.000: 0.172, 2.250: 0.174, 2.500: 0.177, 2.750: 0.179, 3.000: 0.181, 3.250: 0.184, 3.500: 0.186, 3.750: 0.907 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 0.250, 0.500, 0.750, 1.000, 1.250, 1.500, 1.750, 2.000, 2.250, 2.500, 2.750, 3.000, 3.250, 3.500, 3.750, 4.000, 4.250, 4.500, 4.750, 5.000, 5.250, 5.500];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.253;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
-            m.extraVar["xmin"] = 0;
-            m.extraVar["xmax"] = 3.75;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("faible pente, ressaut avant l'amont (1)", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.001, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.3, // Yamont = tirant amont
-                0.403, // Yaval = tirant aval
-                MethodeResolution.EulerExplicite
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode Euler
-
-            let f = { 100.000: 0.403, 95.000: 17.456, 90.000: 17.451, 85.000: 17.446, 80.000: 17.441, 75.000: 17.436, 70.000: 17.431, 65.000: 17.426, 60.000: 17.421, 55.000: 17.416, 50.000: 17.411, 45.000: 17.406, 40.000: 17.401, 35.000: 17.396, 30.000: 17.391, 25.000: 17.386, 20.000: 17.381, 15.000: 17.376, 10.000: 17.371, 5.000: 17.366, 0.000: 17.361 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = {};
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.953;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
-            m.extraVar["x"] = 95;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
-            m.extraVar["x"] = 10;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
-            m.extraVar["sens"] = "amont";
-            m.extraVar["x"] = 0;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("faible pente, ressaut (1 point) à l'intérieur du bief", () => {
-            // résultat incorrect (ressaut détecté à l'amont), vraisemblablement à cause du pas de discrétisation
-
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.001, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                5,  // Dx=Pas d'espace
-                100  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
-                0.403, // Yaval = tirant aval
-                MethodeResolution.EulerExplicite
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode Euler
-
-            let f = { 100.000: 0.403, 95.000: 17.456, 90.000: 17.451, 85.000: 17.446, 80.000: 17.441, 75.000: 17.436, 70.000: 17.431, 65.000: 17.426, 60.000: 17.421, 55.000: 17.416, 50.000: 17.411, 45.000: 17.406, 40.000: 17.401, 35.000: 17.396, 30.000: 17.391, 25.000: 17.386, 20.000: 17.381, 15.000: 17.376, 10.000: 17.371, 5.000: 17.366, 0.000: 17.361 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = {};
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.953;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
-            m.extraVar["x"] = 95;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
-            m.extraVar["x"] = 20;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
-            m.extraVar["sens"] = "amont";
-            m.extraVar["x"] = 0;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-        it("faible pente, ressaut (plusieurs points) à l'intérieur du bief (1)", () => {
-            // résultat incorrect (ressaut détecté à l'amont), vraisemblablement à cause du pas de discrétisation
-
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.001, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                // 0.05,  // Dx=Pas d'espace
-                0.25,  // Dx=Pas d'espace
-                5  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.01, // Yamont = tirant amont
-                0.403, // Yaval = tirant aval
-                MethodeResolution.EulerExplicite
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode Euler
-
-            let f = { 5.000: 0.403, 4.750: 1.256, 4.500: 1.256, 4.250: 1.255, 4.000: 1.255, 3.750: 1.255, 3.500: 1.255, 3.250: 1.255, 3.000: 1.255, 2.750: 1.255, 2.500: 1.254, 2.250: 1.254, 2.000: 1.254, 1.750: 1.254, 1.500: 1.254, 1.250: 1.254, 1.000: 1.254, 0.750: 1.253, 0.500: 1.253, 0.250: 1.253, 0.000: 1.253 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = {};
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 0.250, 0.500, 0.750, 1.000, 1.250, 1.500, 1.750, 2.000, 2.250, 2.500, 2.750, 3.000, 3.250, 3.500, 3.750, 4.000, 4.250, 4.500, 4.750, 5.000];
-            compArray("abscisses", res["trX"], x);
-
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.953;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
-            m.extraVar["x"] = 4.75;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
-            m.extraVar["sens"] = "amont";
-            m.extraVar["x"] = 0;
-            expLog.add(m);
-        });
-
-        /*
-           it("faible pente, ressaut avant l'amont (2)", () => {
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.001, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                0.15,  // Dx=Pas d'espace
-                5  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.3, // Yamont = tirant amont
-                0.403, // Yaval = tirant aval
-                MethodeResolution.EulerExplicite
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode Euler
-
-            let f = { 5.000: 0.403, 4.850: 0.915, 4.700: 0.915, 4.550: 0.915, 4.400: 0.915, 4.250: 0.915, 4.100: 0.915, 3.950: 0.915, 3.800: 0.915, 3.650: 0.915, 3.500: 0.915, 3.350: 0.915, 3.200: 0.915, 3.050: 0.915, 2.900: 0.915, 2.750: 0.915, 2.600: 0.915, 2.450: 0.915, 2.300: 0.915, 2.150: 0.915, 2.000: 0.915, 1.850: 0.915, 1.700: 0.915, 1.550: 0.915, 1.400: 0.915, 1.250: 0.915, 1.100: 0.915, 0.950: 0.915, 0.800: 0.915, 0.650: 0.915, 0.500: 0.915, 0.350: 0.915, 0.200: 0.915, 0.050: 0.915 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = {};
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.050, 0.200, 0.350, 0.500, 0.650, 0.800, 0.950, 1.100, 1.250, 1.400, 1.550, 1.700, 1.850, 2.000, 2.150, 2.300, 2.450, 2.600, 2.750, 2.900, 3.050, 3.200, 3.350, 3.500, 3.650, 3.800, 3.950, 4.100, 4.250, 4.400, 4.550, 4.700, 4.850, 5.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.953;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
-            m.extraVar["x"] = 3.15;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
-            m.extraVar["sens"] = "amont";
-            m.extraVar["x"] = 0;
-            expLog.add(m);
-
-            compareLog(log, expLog);
-        });
-
-
-        it("faible pente, ressaut (plusieurs points) à l'intérieur du bief (2)", () => {
-            // résultat incorrect (ressaut détecté à l'amont), vraisemblablement à cause du pas de discrétisation
-
-            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
-                2.5, // largeur de fond
-                40, //  Ks=Strickler
-                2, // Q=Débit
-                0.001, // If=pente du fond
-                precDist, // précision
-                1, // YB=hauteur de berge
-                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
-                // 0.05,  // Dx=Pas d'espace
-                0.1,  // Dx=Pas d'espace
-                5  // Long= Longueur du bief
-            );
-
-            let sect = new cSnRectang(undefined, prms);
-
-            let prem = new CourbeRemousParams(0.01, // Yamont = tirant amont
-                0.403, // Yaval = tirant aval
-                MethodeResolution.EulerExplicite
-            );
-
-            let log = new cLog();
-            let rem = new CourbeRemous(sect, prem, log);
-
-            let res = rem.calculRemous(undefined);
-
-            // données de validation : version PHP (Oct 2017) méthode Euler
-
-            let f = { 5.000: 0.403, 4.900: 0.744, 4.800: 0.744, 4.700: 0.744, 4.600: 0.744, 4.500: 0.745, 4.400: 0.745, 4.300: 0.745, 4.200: 0.745, 4.100: 0.745, 4.000: 0.745, 3.900: 0.745, 3.800: 0.745, 3.700: 0.745, 3.600: 0.746, 3.500: 0.746, 3.400: 0.746, 3.300: 0.746, 3.200: 0.746, 3.100: 0.746, 3.000: 0.746, 2.900: 0.746, 2.800: 0.747, 2.700: 0.747, 2.600: 0.747, 2.500: 0.747, 2.400: 0.747, 2.300: 0.747, 2.200: 0.747, 2.100: 0.747, 2.000: 0.747, 1.900: 0.748, 1.800: 0.748, 1.700: 0.748, 1.600: 0.748, 1.500: 0.748, 1.400: 0.748, 1.300: 0.748, 1.200: 0.748, 1.100: 0.748, 1.000: 0.749, 0.900: 0.749, 0.800: 0.749, 0.700: 0.749, 0.600: 0.749, 0.500: 0.749, 0.400: 0.749, 0.300: 0.749, 0.200: 0.75, 0.100: 0.013 };
-            compObject("Yfluvial", res["flu"], f, 0.03);
-
-            let t = { 0.000: 0.01, 0.100: 0.013, 0.200: 0.016, 0.300: 0.018, 0.400: 0.02, 0.500: 0.023, 0.600: 0.025, 0.700: 0.027, 0.800: 0.029, 0.900: 0.031, 1.000: 0.033, 1.100: 0.035, 1.200: 0.037, 1.300: 0.039, 1.400: 0.041, 1.500: 0.043, 1.600: 0.045, 1.700: 0.046, 1.800: 0.048, 1.900: 0.05, 2.000: 0.052, 2.100: 0.054, 2.200: 0.055, 2.300: 0.057, 2.400: 0.059, 2.500: 0.06, 2.600: 0.062, 2.700: 0.064, 2.800: 0.065, 2.900: 0.746 };
-            compObject("Ytorrentiel", res["tor"], t, 0.03);
-
-            let x = [0.000, 0.100, 0.200, 0.300, 0.400, 0.500, 0.600, 0.700, 0.800, 0.900, 1.000, 1.100, 1.200, 1.300, 1.400, 1.500, 1.600, 1.700, 1.800, 1.900, 2.000, 2.100, 2.200, 2.300, 2.400, 2.500, 2.600, 2.700, 2.800, 2.900, 3.000, 3.100, 3.200, 3.300, 3.400, 3.500, 3.600, 3.700, 3.800, 3.900, 4.000, 4.100, 4.200, 4.300, 4.400, 4.500, 4.600, 4.700, 4.800, 4.900, 5.000];
-            compArray("abscisses", res["trX"], x);
-
-            let expLog = new cLog();
-            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
-            m.extraVar["B"] = 2.5;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
-            m.extraVar["Yc"] = 0.403;
-            expLog.add(m);
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
-            m.extraVar["Yn"] = 0.953;
-            expLog.add(m);
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
-
-            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
-
-            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
-            m.extraVar["xmin"] = 0.1;
-            m.extraVar["xmax"] = 2.9;
-            expLog.add(m);
-        });        */
-    });
-});
diff --git a/spec/remous_rect_euler_pentefaible.spec.ts b/spec/remous_rect_euler_pentefaible.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..95cd2763b49efdc551e065b2a885e2dbfe68bf21
--- /dev/null
+++ b/spec/remous_rect_euler_pentefaible.spec.ts
@@ -0,0 +1,325 @@
+import { ParamsSectionRectang, cSnRectang } from "../src/section/section_rectang";
+import { CourbeRemousParams, MethodeResolution, CourbeRemous } from "../src/remous";
+import { precDigits, precDist, equalEpsilon, compareArray, compareObject, compareLog } from "./nubtest";
+import { round } from "../src/base";
+import { cLog } from "../src/util/log";
+import { ErrorMessage, ErrorCode } from "../src/util/error";
+
+describe('Class Remous / section rectangulaire :', () => {
+    describe('méthode Euler explicite :', () => {
+        // it("faible pente, ressaut avant l'amont (1)", () => {
+        //     // cas non reproductible (fluvial =~ 17 sur toute la longueur du canal)
+        //     let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+        //         2.5, // largeur de fond
+        //         40, //  Ks=Strickler
+        //         2, // Q=Débit
+        //         0.001, // If=pente du fond
+        //         precDist, // précision
+        //         1, // YB=hauteur de berge
+        //         undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+        //         5,  // Dx=Pas d'espace
+        //         100  // Long= Longueur du bief
+        //     );
+
+        //     let sect = new cSnRectang(undefined, prms);
+
+        //     let prem = new CourbeRemousParams(0.3, // Yamont = tirant amont
+        //         0.403, // Yaval = tirant aval
+        //         MethodeResolution.EulerExplicite
+        //     );
+
+        //     let log = new cLog();
+        //     let rem = new CourbeRemous(sect, prem, log);
+
+        //     let res = rem.calculRemous(undefined);
+
+        //     // données de validation : version Typescript (Oct 2017) méthode des trapèzes
+
+        //     let f = { "0": 0.7554999999999994, "5": 0.7497499999999995, "10": 0.7439999999999996, "15": 0.7377499999999996, "20": 0.7314999999999996, "25": 0.7247499999999997, "30": 0.7174999999999997, "35": 0.7097499999999998, "40": 0.7014999999999998, "45": 0.6927499999999999, "50": 0.6834999999999999, "55": 0.6732499999999999, "60": 0.6619999999999999, "65": 0.6497499999999999, "70": 0.6365, "75": 0.62125, "80": 0.604, "85": 0.58325, "90": 0.558, "95": 0.52375, "100": 0.403 };
+        //     compareObject("Yfluvial", res["flu"], f, 0.03);
+
+        //     let t = {};
+        //     compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+        //     let x = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100];
+        //     compareArray("abscisses", res["trX"], x);
+
+        //     let expLog = new cLog();
+        //     let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+        //     m.extraVar["B"] = 2.5;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+        //     m.extraVar["Yc"] = 0.403;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+        //     m.extraVar["Yn"] = 0.953;
+        //     expLog.add(m);
+
+        //     expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
+        //     m.extraVar["x"] = 95;
+        //     expLog.add(m);
+
+        //     expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
+        //     m.extraVar["x"] = 10;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
+        //     m.extraVar["sens"] = "amont";
+        //     m.extraVar["x"] = 0;
+        //     expLog.add(m);
+
+        //     compareLog(log, expLog);
+        // });
+
+        // it("faible pente, ressaut (1 point) à l'intérieur du bief", () => {
+        //     // cas non reproductible (fluvial =~ 17 sur toute la longueur du canal)
+
+        //     let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+        //         2.5, // largeur de fond
+        //         40, //  Ks=Strickler
+        //         2, // Q=Débit
+        //         0.001, // If=pente du fond
+        //         precDist, // précision
+        //         1, // YB=hauteur de berge
+        //         undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+        //         5,  // Dx=Pas d'espace
+        //         100  // Long= Longueur du bief
+        //     );
+
+        //     let sect = new cSnRectang(undefined, prms);
+
+        //     let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+        //         0.403, // Yaval = tirant aval
+        //         MethodeResolution.EulerExplicite
+        //     );
+
+        //     let log = new cLog();
+        //     let rem = new CourbeRemous(sect, prem, log);
+
+        //     let res = rem.calculRemous(undefined);
+
+        //     // données de validation : version Typescript (Oct 2017) méthode des trapèzes
+
+        //     let f = { "0": 0.15, "5": 0.7497499999999995, "10": 0.7439999999999996, "15": 0.7377499999999996, "20": 0.7314999999999996, "25": 0.7247499999999997, "30": 0.7174999999999997, "35": 0.7097499999999998, "40": 0.7014999999999998, "45": 0.6927499999999999, "50": 0.6834999999999999, "55": 0.6732499999999999, "60": 0.6619999999999999, "65": 0.6497499999999999, "70": 0.6365, "75": 0.62125, "80": 0.604, "85": 0.58325, "90": 0.558, "95": 0.52375, "100": 0.403 };
+        //     compareObject("Yfluvial", res["flu"], f, 0.03);
+
+        //     let t = { "0": 0.15, "5": 0.7497499999999995 };
+        //     compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+        //     let x = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100];
+        //     compareArray("abscisses", res["trX"], x);
+
+        //     let expLog = new cLog();
+        //     let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+        //     m.extraVar["B"] = 2.5;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+        //     m.extraVar["Yc"] = 0.403;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+        //     m.extraVar["Yn"] = 0.953;
+        //     expLog.add(m);
+
+        //     expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
+        //     m.extraVar["x"] = 95;
+        //     expLog.add(m);
+
+        //     expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
+        //     m.extraVar["x"] = 20;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
+        //     m.extraVar["sens"] = "amont";
+        //     m.extraVar["x"] = 0;
+        //     expLog.add(m);
+
+        //     compareLog(log, expLog);
+        // });
+
+        // it("faible pente, ressaut (plusieurs points) à l'intérieur du bief (1)", () => {
+        //     let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+        //         2.5, // largeur de fond
+        //         40, //  Ks=Strickler
+        //         2, // Q=Débit
+        //         0.001, // If=pente du fond
+        //         precDist, // précision
+        //         1, // YB=hauteur de berge
+        //         undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+        //         // 0.05,  // Dx=Pas d'espace
+        //         0.05,  // Dx=Pas d'espace
+        //         5  // Long= Longueur du bief
+        //     );
+
+        //     let sect = new cSnRectang(undefined, prms);
+
+        //     let prem = new CourbeRemousParams(0.01, // Yamont = tirant amont
+        //         0.403, // Yaval = tirant aval
+        //         MethodeResolution.EulerExplicite
+        //     );
+
+        //     let log = new cLog();
+        //     let rem = new CourbeRemous(sect, prem, log);
+
+        //     let res = rem.calculRemous(undefined);
+
+        //     // données de validation : version Typescript (Oct 2017) méthode des trapèzes
+
+        //     let f = { "0": 0.01, "1": 0.5005000000000004, "2": 0.4885000000000004, "3": 0.47393750000000023, "4": 0.45418750000000013, "5": 0.403, "4.95": 0.41471875, "4.9": 0.41956250000000006, "4.85": 0.42328125000000005, "4.8": 0.42637500000000006, "4.75": 0.42909375000000005, "4.7": 0.43156250000000007, "4.65": 0.43378125000000006, "4.6": 0.43587500000000007, "4.55": 0.4378437500000001, "4.5": 0.4396875000000001, "4.45": 0.4414062500000001, "4.4": 0.44306250000000014, "4.35": 0.44465625000000014, "4.3": 0.4461875000000001, "4.25": 0.44765625000000014, "4.2": 0.44906250000000014, "4.15": 0.4504062500000001, "4.1": 0.45168750000000013, "4.05": 0.45296875000000014, "3.95": 0.4554062500000001, "3.9": 0.4565625000000001, "3.85": 0.45771875000000006, "3.8": 0.45881250000000007, "3.75": 0.45990625000000007, "3.7": 0.4610000000000001, "3.65": 0.46203125000000006, "3.6": 0.46306250000000004, "3.55": 0.46403125000000006, "3.5": 0.4650000000000001, "3.45": 0.4659687500000001, "3.4": 0.4669375000000001, "3.35": 0.4678437500000001, "3.3": 0.4687500000000001, "3.25": 0.4696562500000001, "3.2": 0.4705625000000001, "3.15": 0.47140625000000014, "3.1": 0.47225000000000017, "3.05": 0.4730937500000002, "2.95": 0.47478125000000027, "2.9": 0.4755625000000003, "2.85": 0.4763437500000003, "2.8": 0.4771250000000003, "2.75": 0.4779062500000003, "2.7": 0.4786875000000003, "2.65": 0.47946875000000033, "2.6": 0.4801875000000003, "2.55": 0.4809062500000003, "2.5": 0.4816250000000003, "2.45": 0.4823437500000003, "2.4": 0.4830625000000003, "2.35": 0.4837812500000003, "2.3": 0.48450000000000026, "2.25": 0.48521875000000025, "2.2": 0.4858750000000003, "2.15": 0.4865312500000003, "2.1": 0.48718750000000033, "2.05": 0.48784375000000035, "1.95": 0.4891562500000004, "1.9": 0.48981250000000043, "1.85": 0.49046875000000045, "1.8": 0.4911250000000005, "1.75": 0.4917812500000005, "1.7": 0.4923750000000005, "1.65": 0.4929687500000005, "1.6": 0.4935625000000005, "1.55": 0.4941562500000005, "1.5": 0.4947500000000005, "1.45": 0.4953437500000005, "1.4": 0.49593750000000053, "1.35": 0.49653125000000053, "1.3": 0.49712500000000054, "1.25": 0.49771875000000054, "1.2": 0.49831250000000055, "1.15": 0.49890625000000055, "1.1": 0.49943750000000053, "1.05": 0.4999687500000005, "0.95": 0.5010312500000003, "0.9": 0.5015625000000001, "0.85": 0.50209375, "0.8": 0.5026249999999999, "0.75": 0.5031562499999997, "0.7": 0.5036874999999996, "0.65": 0.5042187499999995, "0.6": 0.5047499999999994, "0.55": 0.5052812499999992, "0.5": 0.5058124999999991, "0.45": 0.506343749999999, "0.4": 0.5068749999999989, "0.35": 0.5074062499999987, "0.3": 0.5079374999999986, "0.25": 0.5084062499999986, "0.2": 0.5088749999999986, "0.15": 0.5093437499999987, "0.1": 0.5098124999999987, "0.05": 0.5102812499999987 };
+        //     compareObject("Yfluvial", res["flu"], f, 0.03);
+
+        //     let t = { "0": 0.01, "0.05": 0.01146875, "0.1": 0.012812500000000001, "0.15": 0.014156250000000002, "0.2": 0.015437500000000003, "0.25": 0.01665625, "0.3": 0.017875, "0.35": 0.019093749999999996, "0.4": 0.020249999999999994, "0.45": 0.02140624999999999, "0.5": 0.02249999999999999, "0.55": 0.023593749999999986, "0.6": 0.024687499999999984, "0.65": 0.02578124999999998, "0.7": 0.02681249999999998, "0.75": 0.027843749999999976, "0.8": 0.028874999999999974, "0.85": 0.02990624999999997, "0.9": 0.5015625000000001 };
+        //     compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+        //     let x = [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1, 1.05, 1.1, 1.15, 1.2, 1.25, 1.3, 1.35, 1.4, 1.45, 1.5, 1.55, 1.6, 1.65, 1.7, 1.75, 1.8, 1.85, 1.9, 1.95, 2, 2.05, 2.1, 2.15, 2.2, 2.25, 2.3, 2.35, 2.4, 2.45, 2.5, 2.55, 2.6, 2.65, 2.7, 2.75, 2.8, 2.85, 2.9, 2.95, 3, 3.05, 3.1, 3.15, 3.2, 3.25, 3.3, 3.35, 3.4, 3.45, 3.5, 3.55, 3.6, 3.65, 3.7, 3.75, 3.8, 3.85, 3.9, 3.95, 4, 4.05, 4.1, 4.15, 4.2, 4.25, 4.3, 4.35, 4.4, 4.45, 4.5, 4.55, 4.6, 4.65, 4.7, 4.75, 4.8, 4.85, 4.9, 4.95, 5];
+        //     compareArray("abscisses", res["trX"], x);
+
+        //     let expLog = new cLog();
+        //     let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+        //     m.extraVar["B"] = 2.5;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+        //     m.extraVar["Yc"] = 0.403;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+        //     m.extraVar["Yn"] = 0.953;
+        //     expLog.add(m);
+
+        //     expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_PENTE_FORTE);
+        //     m.extraVar["x"] = 4.75;
+        //     expLog.add(m);
+
+        //     expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
+        //     m.extraVar["sens"] = "amont";
+        //     m.extraVar["x"] = 0;
+        //     expLog.add(m);
+        // });
+
+        it("faible pente, pas de ressaut, Yamont > Yc, Yaval > Yn", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.001, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.5, // Yamont = tirant amont
+                1, // Yaval = tirant aval
+                MethodeResolution.EulerExplicite
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version Typescript (Oct 2017) méthode des trapèzes
+
+            let f = { "0": 0.9872500000000014, "5": 0.9872500000000014, "10": 0.9872500000000014, "15": 0.9872500000000014, "20": 0.9880000000000013, "25": 0.9887500000000012, "30": 0.9895000000000012, "35": 0.9902500000000011, "40": 0.991000000000001, "45": 0.9917500000000009, "50": 0.9925000000000008, "55": 0.9932500000000007, "60": 0.9940000000000007, "65": 0.9947500000000006, "70": 0.9955000000000005, "75": 0.9962500000000004, "80": 0.9970000000000003, "85": 0.9977500000000002, "90": 0.9985000000000002, "95": 0.9992500000000001, "100": 1 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            expect(res["tor"] == undefined).toBeTruthy("la ligne d'eau torrentielle ne devrait comporter aucune valeur");
+
+            let x = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.953;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT));
+
+            compareLog(log, expLog);
+        });
+
+        it("faible pente, pas de ressaut, Yamont > Yc, Yc < Yaval < Yn", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.001, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.5, // Yamont = tirant amont
+                0.7, // Yaval = tirant aval
+                MethodeResolution.EulerExplicite
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version Typescript (Oct 2017) méthode trapèzes
+
+            let f = { "0": 0.805499999999999, "5": 0.802249999999999, "10": 0.7984999999999991, "15": 0.7947499999999992, "20": 0.7909999999999993, "25": 0.7867499999999993, "30": 0.7824999999999993, "35": 0.7782499999999993, "40": 0.7739999999999994, "45": 0.7692499999999994, "50": 0.7644999999999995, "55": 0.7592499999999995, "60": 0.7539999999999996, "65": 0.7482499999999996, "70": 0.7424999999999997, "75": 0.7362499999999997, "80": 0.7299999999999998, "85": 0.7232499999999998, "90": 0.7159999999999999, "95": 0.7082499999999999, "100": 0.7 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            expect(res["tor"] == undefined).toBeTruthy("la ligne d'eau torrentielle ne devrait comporter aucune valeur");
+
+            let x = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.953;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT));
+
+            compareLog(log, expLog);
+        });
+    });
+});
diff --git a/spec/remous_rect_euler_penteforte.spec.ts b/spec/remous_rect_euler_penteforte.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b86fb6ac67b033c7a7c1e2c0bc8227d124f1925f
--- /dev/null
+++ b/spec/remous_rect_euler_penteforte.spec.ts
@@ -0,0 +1,376 @@
+import { ParamsSectionRectang, cSnRectang } from "../src/section/section_rectang";
+import { CourbeRemousParams, MethodeResolution, CourbeRemous } from "../src/remous";
+import { precDigits, precDist, equalEpsilon, compareArray, compareObject, compareLog } from "./nubtest";
+import { round } from "../src/base";
+import { cLog } from "../src/util/log";
+import { ErrorMessage, ErrorCode } from "../src/util/error";
+
+describe('Class Remous / section rectangulaire :', () => {
+    describe('méthode Euler explicite :', () => {
+        it("forte pente, ressaut avant l'amont", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+                6, // Yaval = tirant aval
+                MethodeResolution.EulerExplicite
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version Typescript (Oct 2017) méthode des trapèzes
+
+            let f = { "0": 0.9767500000000044, "5": 1.2360000000000044, "10": 1.4910000000000045, "15": 1.7437500000000046, "20": 1.9955000000000045, "25": 2.2465000000000046, "30": 2.497500000000005, "35": 2.7485000000000053, "40": 2.9985000000000053, "45": 3.2485000000000053, "50": 3.4985000000000053, "55": 3.7485000000000053, "60": 3.9985000000000053, "65": 4.248500000000004, "70": 4.498750000000004, "75": 4.749000000000003, "80": 4.999250000000003, "85": 5.249500000000002, "90": 5.4997500000000015, "95": 5.750000000000001, "100": 6 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            let t = {};
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
+            m.extraVar["sens"] = "amont";
+            m.extraVar["x"] = 0;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        it("forte pente, ressaut après l'aval", () => {
+            // TODO algo à reprendre
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+                0.45, // Yaval = tirant aval
+                MethodeResolution.EulerExplicite
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version Typescript (Oct 2017) méthode des trapèzes
+
+            let f = {};
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            // let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.241, 15.000: 0.252, 20.000: 0.253, 25.000: 0.253, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.253, 95.000: 0.253, 100.000: 0.45 };
+            let t = { "0": 0.15, "5": 0.20725000000000002, "10": 0.23500000000000001, "15": 0.24675000000000002, "20": 0.251, "25": 0.25225, "30": 0.25249999999999995, "35": 0.2527499999999999, "40": 0.2529999999999999, "45": 0.2527499999999999, "50": 0.2529999999999999, "55": 0.2527499999999999, "60": 0.2529999999999999, "65": 0.2527499999999999, "70": 0.2529999999999999, "75": 0.2527499999999999, "80": 0.2529999999999999, "85": 0.2527499999999999, "90": 0.2529999999999999, "95": 0.2527499999999999, "100": 0.45 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
+            m.extraVar["x"] = 95;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
+            m.extraVar["sens"] = "aval";
+            m.extraVar["x"] = 100;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        // it("forte pente, ressaut (1 point) à l'intérieur du bief", () => {
+        //     // cas non complètement reproductible car la méthode des trapèzes ne donne pas le même nombre de points
+        //     let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+        //         2.5, // largeur de fond
+        //         40, //  Ks=Strickler
+        //         2, // Q=Débit
+        //         0.05, // If=pente du fond
+        //         precDist, // précision
+        //         1, // YB=hauteur de berge
+        //         undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+        //         5,  // Dx=Pas d'espace
+        //         100  // Long= Longueur du bief
+        //     );
+
+        //     let sect = new cSnRectang(undefined, prms);
+
+        //     let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+        //         1, // Yaval = tirant aval
+        //         MethodeResolution.EulerExplicite
+        //     );
+
+        //     let log = new cLog();
+        //     let rem = new CourbeRemous(sect, prem, log);
+
+        //     let res = rem.calculRemous(undefined);
+
+        //     // données de validation : version Typescript (Oct 2017) méthode des trapèzes
+
+        //     // let f = { 100.000: 1, 95.000: 0.737, 90.000: 0.451 };
+        //     let f = { "95": 0.72875, "100": 1 };
+        //     compareObject("Yfluvial", res["flu"], f, 0.03);
+
+        //     // let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.241, 15.000: 0.252, 20.000: 0.253, 25.000: 0.253, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.451 };
+        //     let t = { "0": 0.15, "5": 0.20725000000000002, "10": 0.23500000000000001, "15": 0.24675000000000002, "20": 0.251, "25": 0.25225, "30": 0.25249999999999995, "35": 0.2527499999999999, "40": 0.2529999999999999, "45": 0.2527499999999999, "50": 0.2529999999999999, "55": 0.2527499999999999, "60": 0.2529999999999999, "65": 0.2527499999999999, "70": 0.2529999999999999, "75": 0.2527499999999999, "80": 0.2529999999999999, "85": 0.2527499999999999, "90": 0.2529999999999999, "95": 0.72875 };
+        //     compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+        //     let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
+        //     compareArray("abscisses", res["trX"], x);
+
+        //     let expLog = new cLog();
+        //     let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+        //     m.extraVar["B"] = 2.5;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+        //     m.extraVar["Yc"] = 0.403;
+        //     expLog.add(m);
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+        //     m.extraVar["Yn"] = 0.253;
+        //     expLog.add(m);
+
+        //     expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
+        //     m.extraVar["x"] = 85;
+        //     expLog.add(m);
+
+        //     expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+        //     m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
+        //     m.extraVar["xmin"] = 90;
+        //     m.extraVar["xmax"] = 90;
+        //     expLog.add(m);
+
+        //     compareLog(log, expLog);
+        // });
+
+        it("forte pente, ressaut (plusieurs points) à l'intérieur du bief", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                0.25,  // Dx=Pas d'espace
+                5.5  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+                1, // Yaval = tirant aval
+                MethodeResolution.EulerExplicite
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version Typescript (Oct 2017) méthode des trapèzes
+
+            let f = { "0": 0.15, "1": 0.7560000000000007, "2": 0.8120000000000005, "3": 0.8670000000000002, "4": 0.9205000000000001, "5": 0.9735, "5.5": 1, "5.25": 0.98675, "4.75": 0.96025, "4.5": 0.9470000000000001, "4.25": 0.9337500000000001, "3.75": 0.9072500000000001, "3.5": 0.8940000000000001, "3.25": 0.8807500000000001, "2.75": 0.8532500000000003, "2.5": 0.8395000000000004, "2.25": 0.8257500000000004, "1.75": 0.7982500000000006, "1.5": 0.7845000000000006, "1.25": 0.7702500000000007, "0.75": 0.7417500000000007, "0.5": 0.7275000000000007, "0.25": 0.7132500000000007 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            let t = { "0": 0.15, "1": 0.161, "2": 0.17200000000000001, "3": 0.18100000000000002, "0.25": 0.15275, "0.5": 0.1555, "0.75": 0.15825, "1.25": 0.16375, "1.5": 0.1665, "1.75": 0.16925, "2.25": 0.17425000000000002, "2.5": 0.17650000000000002, "2.75": 0.17875000000000002, "3.25": 0.18325000000000002, "3.5": 0.18550000000000003, "3.75": 0.9072500000000001 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4, 4.25, 4.5, 4.75, 5, 5.25, 5.5];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
+            m.extraVar["xmin"] = 0;
+            m.extraVar["xmax"] = 3.75;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        it("forte pente, pas de ressaut, Yaval < Yc, Yamont < Yn", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                1,  // Dx=Pas d'espace
+                30  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.1, // Yamont = tirant amont
+                0.3, // Yaval = tirant aval
+                MethodeResolution.EulerExplicite
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version Typescript (Oct 2017) méthode trapèzes
+
+            expect(res["flu"] == undefined).toBeTruthy("la ligne d'eau fluviale ne devrait comporter aucune valeur");
+
+            let t = { "0": 0.1, "1": 0.11425000000000002, "2": 0.12750000000000003, "3": 0.14025000000000004, "4": 0.15200000000000005, "5": 0.16325000000000006, "6": 0.17350000000000007, "7": 0.18325000000000008, "8": 0.1920000000000001, "9": 0.1997500000000001, "10": 0.2070000000000001, "11": 0.2137500000000001, "12": 0.2195000000000001, "13": 0.22475000000000012, "14": 0.22900000000000012, "15": 0.23275000000000012, "16": 0.23600000000000013, "17": 0.23875000000000013, "18": 0.24100000000000013, "19": 0.24325000000000013, "20": 0.24500000000000013, "21": 0.24625000000000014, "22": 0.24750000000000014, "23": 0.2485000000000001, "24": 0.2492500000000001, "25": 0.2502500000000001, "26": 0.25050000000000006, "27": 0.25075000000000003, "28": 0.251, "29": 0.25125, "30": 0.25149999999999995 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.01);
+
+            let x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AVAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            compareLog(log, expLog);
+        });
+
+        it("forte pente, pas de ressaut, Yaval < Yc, Yn < Yamont < Yc", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                1,  // Dx=Pas d'espace
+                30  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.35, // Yamont = tirant amont
+                0.3, // Yaval = tirant aval
+                MethodeResolution.EulerExplicite
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            expect(res["flu"] == undefined).toBeTruthy("la ligne d'eau fluviale ne devrait comporter aucune valeur");
+
+            let t = { "0": 0.35, "1": 0.31425000000000003, "2": 0.29700000000000004, "3": 0.28625, "4": 0.27849999999999997, "5": 0.27274999999999994, "6": 0.26849999999999996, "7": 0.26525, "8": 0.263, "9": 0.26125, "10": 0.25949999999999995, "11": 0.25825, "12": 0.257, "13": 0.25625, "14": 0.25549999999999995, "15": 0.25525, "16": 0.255, "17": 0.25475000000000003, "18": 0.25450000000000006, "19": 0.2542500000000001, "20": 0.2540000000000001, "21": 0.25375000000000014, "22": 0.25350000000000017, "23": 0.2532500000000002, "24": 0.2530000000000002, "25": 0.25275000000000025, "26": 0.2530000000000002, "27": 0.25275000000000025, "28": 0.2530000000000002, "29": 0.25275000000000025, "30": 0.2530000000000002 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AVAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            compareLog(log, expLog);
+        });
+    });
+});
diff --git a/spec/remous_rect_trapezes_pentefaible.spec.ts b/spec/remous_rect_trapezes_pentefaible.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e3357b76d07631754978f264613a65a902b43786
--- /dev/null
+++ b/spec/remous_rect_trapezes_pentefaible.spec.ts
@@ -0,0 +1,386 @@
+import { ParamsSectionRectang, cSnRectang } from "../src/section/section_rectang";
+import { CourbeRemousParams, MethodeResolution, CourbeRemous } from "../src/remous";
+import { precDigits, precDist, equalEpsilon, compareArray, compareObject, compareLog } from "./nubtest";
+import { round } from "../src/base";
+import { cLog } from "../src/util/log";
+import { ErrorMessage, ErrorCode } from "../src/util/error";
+
+
+describe('Class Remous / section rectangulaire :', () => {
+    describe('méthode trapèzes :', () => {
+        it("faible pente, ressaut avant l'amont", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.001, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.3, // Yamont = tirant amont
+                0.403, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            let f = { 100.000: 0.403, 95.000: 0.524, 90.000: 0.558, 85.000: 0.584, 80.000: 0.604, 75.000: 0.621, 70.000: 0.637, 65.000: 0.65, 60.000: 0.662, 55.000: 0.673, 50.000: 0.684, 45.000: 0.693, 40.000: 0.701, 35.000: 0.709, 30.000: 0.717, 25.000: 0.725, 20.000: 0.731, 15.000: 0.738, 10.000: 0.744, 5.000: 0.75, 0.000: 0.755 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            let t = {};
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.953;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
+            m.extraVar["x"] = 5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
+            m.extraVar["sens"] = "amont";
+            m.extraVar["x"] = 0;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        it("faible pente, ressaut (1 point) à l'intérieur du bief", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.001, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+                0.403, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            let f = { 100.000: 0.403, 95.000: 0.524, 90.000: 0.558, 85.000: 0.584, 80.000: 0.604, 75.000: 0.621, 70.000: 0.637, 65.000: 0.65, 60.000: 0.662, 55.000: 0.673, 50.000: 0.684, 45.000: 0.693, 40.000: 0.701, 35.000: 0.709, 30.000: 0.717, 25.000: 0.725, 20.000: 0.731, 15.000: 0.738, 10.000: 0.744, 5.000: 0.75, 0.000: 0.15 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            let t = { 0.000: 0.15, 5.000: 0.75 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.953;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
+            m.extraVar["x"] = 15;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
+            m.extraVar["xmin"] = 0;
+            m.extraVar["xmax"] = 5;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        it("faible pente, ressaut (plusieurs points) à l'intérieur du bief (1)", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.001, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                // 0.05,  // Dx=Pas d'espace
+                0.25,  // Dx=Pas d'espace
+                5  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.01, // Yamont = tirant amont
+                0.403, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            // //dx = 0.05
+            // let f = { 5.000: 0.403, 4.950: 0.414, 4.900: 0.419, 4.850: 0.423, 4.800: 0.426, 4.750: 0.429, 4.700: 0.432, 4.650: 0.434, 4.600: 0.436, 4.550: 0.438, 4.500: 0.439, 4.450: 0.441, 4.400: 0.443, 4.350: 0.445, 4.300: 0.446, 4.250: 0.447, 4.200: 0.449, 4.150: 0.45, 4.100: 0.451, 4.050: 0.452, 4.000: 0.454, 3.950: 0.455, 3.900: 0.456, 3.850: 0.457, 3.800: 0.458, 3.750: 0.46, 3.700: 0.461, 3.650: 0.462, 3.600: 0.463, 3.550: 0.465, 3.500: 0.466, 3.450: 0.467, 3.400: 0.468, 3.350: 0.469, 3.300: 0.469, 3.250: 0.47, 3.200: 0.471, 3.150: 0.471, 3.100: 0.472, 3.050: 0.472, 3.000: 0.473, 2.950: 0.474, 2.900: 0.474, 2.850: 0.475, 2.800: 0.476, 2.750: 0.476, 2.700: 0.477, 2.650: 0.477, 2.600: 0.478, 2.550: 0.479, 2.500: 0.479, 2.450: 0.48, 2.400: 0.48, 2.350: 0.481, 2.300: 0.482, 2.250: 0.482, 2.200: 0.483, 2.150: 0.483, 2.100: 0.484, 2.050: 0.485, 2.000: 0.485, 1.950: 0.486, 1.900: 0.486, 1.850: 0.487, 1.800: 0.488, 1.750: 0.488, 1.700: 0.489, 1.650: 0.49, 1.600: 0.49, 1.550: 0.491, 1.500: 0.491, 1.450: 0.492, 1.400: 0.493, 1.350: 0.493, 1.300: 0.494, 1.250: 0.494, 1.200: 0.495, 1.150: 0.496, 1.100: 0.496, 1.050: 0.497, 1.000: 0.497, 0.950: 0.498, 0.900: 0.499, 0.850: 0.499, 0.800: 0.5, 0.750: 0.501, 0.700: 0.501, 0.650: 0.502, 0.600: 0.502, 0.550: 0.503, 0.500: 0.504, 0.450: 0.504, 0.400: 0.505, 0.350: 0.505, 0.300: 0.506, 0.250: 0.507, 0.200: 0.507, 0.150: 0.508, 0.100: 0.508, 0.050: 0.509, 0.000: 0.01 };
+            // compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            // //let t = { 0.000: 0.01, 0.050: 0.011, 0.100: 0.013, 0.150: 0.015, 0.200: 0.016, 0.250: 0.018, 0.300: 0.019, 0.350: 0.02, 0.400: 0.021, 0.450: 0.022, 0.500: 0.022, 0.550: 0.023, 0.600: 0.024, 0.650: 0.025, 0.700: 0.026, 0.750: 0.026, 0.800: 0.027, 0.850: 0.028, 0.900: 0.031750000000000014, 0.95: 0.5042500000000006 }; // ok
+            // let t = { 0.000: 0.01, 0.050: 0.011, 0.100: 0.013, 0.150: 0.015, 0.200: 0.016, 0.250: 0.018, 0.300: 0.019, 0.350: 0.02, 0.400: 0.021, 0.450: 0.022, 0.500: 0.022, 0.550: 0.023, 0.600: 0.024, 0.650: 0.025, 0.700: 0.026, 0.750: 0.026, 0.800: 0.027, 0.850: 0.028, 0.900: 0.499 };
+            // compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            // let x = [0.000, 0.050, 0.100, 0.150, 0.200, 0.250, 0.300, 0.350, 0.400, 0.450, 0.500, 0.550, 0.600, 0.650, 0.700, 0.750, 0.800, 0.850, 0.900, 0.950, 1.000, 1.050, 1.100, 1.150, 1.200, 1.250, 1.300, 1.350, 1.400, 1.450, 1.500, 1.550, 1.600, 1.650, 1.700, 1.750, 1.800, 1.850, 1.900, 1.950, 2.000, 2.050, 2.100, 2.150, 2.200, 2.250, 2.300, 2.350, 2.400, 2.450, 2.500, 2.550, 2.600, 2.650, 2.700, 2.750, 2.800, 2.850, 2.900, 2.950, 3.000, 3.050, 3.100, 3.150, 3.200, 3.250, 3.300, 3.350, 3.400, 3.450, 3.500, 3.550, 3.600, 3.650, 3.700, 3.750, 3.800, 3.850, 3.900, 3.950, 4.000, 4.050, 4.100, 4.150, 4.200, 4.250, 4.300, 4.350, 4.400, 4.450, 4.500, 4.550, 4.600, 4.650, 4.700, 4.750, 4.800, 4.850, 4.900, 4.950, 5.000];
+            // compareArray("abscisses", res["trX"], x);
+
+            //dx = 0.25
+            let f = { 5.000: 0.403, 4.750: 0.43, 4.500: 0.44, 4.250: 0.448, 4.000: 0.455, 3.750: 0.46, 3.500: 0.465, 3.250: 0.47, 3.000: 0.474, 2.750: 0.479, 2.500: 0.482, 2.250: 0.486, 2.000: 0.489, 1.750: 0.492, 1.500: 0.495, 1.250: 0.498, 1.000: 0.501, 0.750: 0.504, 0.500: 0.506, 0.250: 0.508, 0.000: 0.01 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            let t = { 0.000: 0.01, 0.250: 0.022, 0.500: 0.027, 0.750: 0.033, 1.000: 0.501 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0.000, 0.250, 0.500, 0.750, 1.000, 1.250, 1.500, 1.750, 2.000, 2.250, 2.500, 2.750, 3.000, 3.250, 3.500, 3.750, 4.000, 4.250, 4.500, 4.750, 5.000];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.953;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
+            m.extraVar["xmin"] = 0;
+            m.extraVar["xmax"] = 1;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        it("faible pente, ressaut (plusieurs points) à l'intérieur du bief (2)", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.001, // If=pente du fond
+                0.0001, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                0.05,  // Dx=Pas d'espace
+                5  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.01, // Yamont = tirant amont
+                0.403, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            let f = { 5.0000: 0.403, 4.9500: 0.415, 4.9000: 0.42, 4.8500: 0.423, 4.8000: 0.426, 4.7500: 0.429, 4.7000: 0.432, 4.6500: 0.434, 4.6000: 0.436, 4.5500: 0.438, 4.5000: 0.44, 4.4500: 0.441, 4.4000: 0.443, 4.3500: 0.445, 4.3000: 0.446, 4.2500: 0.448, 4.2000: 0.449, 4.1500: 0.45, 4.1000: 0.452, 4.0500: 0.453, 4.0000: 0.454, 3.9500: 0.455, 3.9000: 0.457, 3.8500: 0.458, 3.8000: 0.459, 3.7500: 0.46, 3.7000: 0.461, 3.6500: 0.462, 3.6000: 0.463, 3.5500: 0.464, 3.5000: 0.465, 3.4500: 0.466, 3.4000: 0.467, 3.3500: 0.468, 3.3000: 0.469, 3.2500: 0.47, 3.2000: 0.471, 3.1500: 0.471, 3.1000: 0.472, 3.0500: 0.473, 3.0000: 0.474, 2.9500: 0.475, 2.9000: 0.476, 2.8500: 0.476, 2.8000: 0.477, 2.7500: 0.478, 2.7000: 0.479, 2.6500: 0.479, 2.6000: 0.48, 2.5500: 0.481, 2.5000: 0.482, 2.4500: 0.482, 2.4000: 0.483, 2.3500: 0.484, 2.3000: 0.484, 2.2500: 0.485, 2.2000: 0.486, 2.1500: 0.487, 2.1000: 0.487, 2.0500: 0.488, 2.0000: 0.489, 1.9500: 0.489, 1.9000: 0.49, 1.8500: 0.49, 1.8000: 0.491, 1.7500: 0.492, 1.7000: 0.492, 1.6500: 0.493, 1.6000: 0.494, 1.5500: 0.494, 1.5000: 0.495, 1.4500: 0.495, 1.4000: 0.496, 1.3500: 0.497, 1.3000: 0.497, 1.2500: 0.498, 1.2000: 0.498, 1.1500: 0.499, 1.1000: 0.499, 1.0500: 0.5, 1.0000: 0.5, 0.9500: 0.501, 0.9000: 0.502, 0.8500: 0.502, 0.8000: 0.503, 0.7500: 0.503, 0.7000: 0.504, 0.6500: 0.504, 0.6000: 0.505, 0.5500: 0.505, 0.5000: 0.506, 0.4500: 0.506, 0.4000: 0.507, 0.3500: 0.507, 0.3000: 0.508, 0.2500: 0.508, 0.2000: 0.509, 0.1500: 0.509, 0.1000: 0.51, 0.0500: 0.51, 0.0000: 0.01 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            let t = { 0.0000: 0.01, 0.0500: 0.011, 0.1000: 0.013, 0.1500: 0.014, 0.2000: 0.015, 0.2500: 0.017, 0.3000: 0.018, 0.3500: 0.019, 0.4000: 0.02, 0.4500: 0.021, 0.5000: 0.022, 0.5500: 0.024, 0.6000: 0.025, 0.6500: 0.026, 0.7000: 0.027, 0.7500: 0.028, 0.8000: 0.029, 0.8500: 0.03, 0.9000: 0.502 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0.0000, 0.0500, 0.1000, 0.1500, 0.2000, 0.2500, 0.3000, 0.3500, 0.4000, 0.4500, 0.5000, 0.5500, 0.6000, 0.6500, 0.7000, 0.7500, 0.8000, 0.8500, 0.9000, 0.9500, 1.0000, 1.0500, 1.1000, 1.1500, 1.2000, 1.2500, 1.3000, 1.3500, 1.4000, 1.4500, 1.5000, 1.5500, 1.6000, 1.6500, 1.7000, 1.7500, 1.8000, 1.8500, 1.9000, 1.9500, 2.0000, 2.0500, 2.1000, 2.1500, 2.2000, 2.2500, 2.3000, 2.3500, 2.4000, 2.4500, 2.5000, 2.5500, 2.6000, 2.6500, 2.7000, 2.7500, 2.8000, 2.8500, 2.9000, 2.9500, 3.0000, 3.0500, 3.1000, 3.1500, 3.2000, 3.2500, 3.3000, 3.3500, 3.4000, 3.4500, 3.5000, 3.5500, 3.6000, 3.6500, 3.7000, 3.7500, 3.8000, 3.8500, 3.9000, 3.9500, 4.0000, 4.0500, 4.1000, 4.1500, 4.2000, 4.2500, 4.3000, 4.3500, 4.4000, 4.4500, 4.5000, 4.5500, 4.6000, 4.6500, 4.7000, 4.7500, 4.8000, 4.8500, 4.9000, 4.9500, 5.0000];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.953;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
+            m.extraVar["xmin"] = 0;
+            m.extraVar["xmax"] = 0.9;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+    });
+
+    it("faible pente, pas de ressaut, Yamont > Yc, Yaval > Yn", () => {
+        let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+            2.5, // largeur de fond
+            40, //  Ks=Strickler
+            2, // Q=Débit
+            0.001, // If=pente du fond
+            precDist, // précision
+            1, // YB=hauteur de berge
+            undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+            5,  // Dx=Pas d'espace
+            100  // Long= Longueur du bief
+        );
+
+        let sect = new cSnRectang(undefined, prms);
+
+        let prem = new CourbeRemousParams(0.5, // Yamont = tirant amont
+            1, // Yaval = tirant aval
+            MethodeResolution.Trapezes
+        );
+
+        let log = new cLog();
+        let rem = new CourbeRemous(sect, prem, log);
+
+        let res = rem.calculRemous(undefined);
+
+        // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+        let f = { 100.000: 1, 95.000: 0.999, 90.000: 0.999, 85.000: 0.998, 80.000: 0.997, 75.000: 0.997, 70.000: 0.996, 65.000: 0.996, 60.000: 0.995, 55.000: 0.994, 50.000: 0.994, 45.000: 0.993, 40.000: 0.992, 35.000: 0.992, 30.000: 0.991, 25.000: 0.991, 20.000: 0.99, 15.000: 0.989, 10.000: 0.989, 5.000: 0.988, 0.000: 0.988 };
+        compareObject("Yfluvial", res["flu"], f, 0.03);
+
+        expect(res["tor"] == undefined).toBeTruthy("la ligne d'eau torrentielle ne devrait comporter aucune valeur");
+
+        let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
+        compareArray("abscisses", res["trX"], x);
+
+        let expLog = new cLog();
+        let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+        m.extraVar["B"] = 2.5;
+        expLog.add(m);
+
+        m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+        m.extraVar["Yc"] = 0.403;
+        expLog.add(m);
+
+        m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+        m.extraVar["Yn"] = 0.953;
+        expLog.add(m);
+
+        expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+        expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT));
+
+        compareLog(log, expLog);
+    });
+
+    it("faible pente, pas de ressaut, Yamont > Yc, Yc < Yaval < Yn", () => {
+        let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+            2.5, // largeur de fond
+            40, //  Ks=Strickler
+            2, // Q=Débit
+            0.001, // If=pente du fond
+            precDist, // précision
+            1, // YB=hauteur de berge
+            undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+            5,  // Dx=Pas d'espace
+            100  // Long= Longueur du bief
+        );
+
+        let sect = new cSnRectang(undefined, prms);
+
+        let prem = new CourbeRemousParams(0.5, // Yamont = tirant amont
+            0.7, // Yaval = tirant aval
+            MethodeResolution.Trapezes
+        );
+
+        let log = new cLog();
+        let rem = new CourbeRemous(sect, prem, log);
+
+        let res = rem.calculRemous(undefined);
+
+        // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+        let f = { 100.000: 0.7, 95.000: 0.708, 90.000: 0.716, 85.000: 0.723, 80.000: 0.73, 75.000: 0.737, 70.000: 0.743, 65.000: 0.749, 60.000: 0.754, 55.000: 0.76, 50.000: 0.765, 45.000: 0.77, 40.000: 0.775, 35.000: 0.779, 30.000: 0.783, 25.000: 0.787, 20.000: 0.792, 15.000: 0.795, 10.000: 0.799, 5.000: 0.803, 0.000: 0.806 };
+        compareObject("Yfluvial", res["flu"], f, 0.03);
+
+        expect(res["tor"] == undefined).toBeTruthy("la ligne d'eau torrentielle ne devrait comporter aucune valeur");
+
+        let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
+        compareArray("abscisses", res["trX"], x);
+
+        let expLog = new cLog();
+        let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+        m.extraVar["B"] = 2.5;
+        expLog.add(m);
+
+        m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+        m.extraVar["Yc"] = 0.403;
+        expLog.add(m);
+
+        m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+        m.extraVar["Yn"] = 0.953;
+        expLog.add(m);
+
+        expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+        expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT));
+
+        compareLog(log, expLog);
+    });
+});
diff --git a/spec/remous_rect_trapezes_penteforte.spec.ts b/spec/remous_rect_trapezes_penteforte.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b9d5f69d91d8eec295c21f12a4f200364e1b1f38
--- /dev/null
+++ b/spec/remous_rect_trapezes_penteforte.spec.ts
@@ -0,0 +1,373 @@
+import { ParamsSectionRectang, cSnRectang } from "../src/section/section_rectang";
+import { CourbeRemousParams, MethodeResolution, CourbeRemous } from "../src/remous";
+import { precDigits, precDist, equalEpsilon, compareArray, compareObject, compareLog } from "./nubtest";
+import { round } from "../src/base";
+import { cLog } from "../src/util/log";
+import { ErrorMessage, ErrorCode } from "../src/util/error";
+
+describe('Class Remous / section rectangulaire :', () => {
+    describe('méthode trapèzes :', () => {
+        it("forte pente, ressaut avant l'amont", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+                6, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            let f = { 100.000: 6, 95.000: 5.75, 90.000: 5.5, 85.000: 5.25, 80.000: 4.999, 75.000: 4.749, 70.000: 4.499, 65.000: 4.249, 60.000: 3.998, 55.000: 3.748, 50.000: 3.498, 45.000: 3.248, 40.000: 2.997, 35.000: 2.747, 30.000: 2.497, 25.000: 2.246, 20.000: 1.995, 15.000: 1.744, 10.000: 1.491, 5.000: 1.237, 0.000: 0.977 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            let t = {};
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
+            m.extraVar["sens"] = "amont";
+            m.extraVar["x"] = 0;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        it("forte pente, ressaut après l'aval", () => {
+            // TODO algo à reprendre
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+                0.45, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            let f = {};
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            // let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.235, 15.000: 0.246, 20.000: 0.25, 25.000: 0.252, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.253, 95.000: 0.253, 100.000: 0.253 };
+            let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.235, 15.000: 0.246, 20.000: 0.25, 25.000: 0.252, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.253, 95.000: 0.253, 100.000: 0.45 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
+            m.extraVar["x"] = 95;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_DEHORS);
+            m.extraVar["sens"] = "aval";
+            m.extraVar["x"] = 100;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        it("forte pente, ressaut (1 point) à l'intérieur du bief", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+                1, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            let f = { 100.000: 1, 95.000: 0.729 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            let t = { 0.000: 0.15, 5.000: 0.207, 10.000: 0.235, 15.000: 0.246, 20.000: 0.25, 25.000: 0.252, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.253, 95.000: 0.729 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_ARRET_CRITIQUE)
+            m.extraVar["x"] = 90;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
+            m.extraVar["xmin"] = 90;
+            m.extraVar["xmax"] = 95;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        it("forte pente, ressaut (plusieurs points) à l'intérieur du bief", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                0.25,  // Dx=Pas d'espace
+                5.5  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
+                1, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            let f = { 5.500: 1, 5.250: 0.987, 5.000: 0.974, 4.750: 0.96, 4.500: 0.947, 4.250: 0.933, 4.000: 0.92, 3.750: 0.906, 3.500: 0.893, 3.250: 0.88, 3.000: 0.866, 2.750: 0.853, 2.500: 0.839, 2.250: 0.826, 2.000: 0.812, 1.750: 0.798, 1.500: 0.784, 1.250: 0.77, 1.000: 0.756, 0.750: 0.742, 0.500: 0.727, 0.250: 0.712, 0.000: 0.15 };
+            compareObject("Yfluvial", res["flu"], f, 0.03);
+
+            let t = { 0.000: 0.15, 0.250: 0.153, 0.500: 0.156, 0.750: 0.158, 1.000: 0.161, 1.250: 0.163, 1.500: 0.166, 1.750: 0.168, 2.000: 0.17, 2.250: 0.173, 2.500: 0.175, 2.750: 0.177, 3.000: 0.18, 3.250: 0.182, 3.500: 0.184, 3.750: 0.906 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.03);
+
+            let x = [0.000, 0.250, 0.500, 0.750, 1.000, 1.250, 1.500, 1.750, 2.000, 2.250, 2.500, 2.750, 3.000, 3.250, 3.500, 3.750, 4.000, 4.250, 4.500, 4.750, 5.000, 5.250, 5.500];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_FLUVIAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_RESSAUT_HYDRO);
+            m.extraVar["xmin"] = 0;
+            m.extraVar["xmax"] = 3.75;
+            expLog.add(m);
+
+            compareLog(log, expLog);
+        });
+
+        it("forte pente, pas de ressaut, Yaval < Yc, Yamont < Yn", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                5,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.1, // Yamont = tirant amont
+                0.3, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            expect(res["flu"] == undefined).toBeTruthy("la ligne d'eau fluviale ne devrait comporter aucune valeur");
+
+            let t = { 0.000: 0.1, 5.000: 0.205, 10.000: 0.234, 15.000: 0.246, 20.000: 0.25, 25.000: 0.252, 30.000: 0.253, 35.000: 0.253, 40.000: 0.253, 45.000: 0.253, 50.000: 0.253, 55.000: 0.253, 60.000: 0.253, 65.000: 0.253, 70.000: 0.253, 75.000: 0.253, 80.000: 0.253, 85.000: 0.253, 90.000: 0.253, 95.000: 0.253, 100.000: 0.253 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.01);
+
+            let x = [0.000, 5.000, 10.000, 15.000, 20.000, 25.000, 30.000, 35.000, 40.000, 45.000, 50.000, 55.000, 60.000, 65.000, 70.000, 75.000, 80.000, 85.000, 90.000, 95.000, 100.000];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AVAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            compareLog(log, expLog);
+        });
+
+        it("forte pente, pas de ressaut, Yaval < Yc, Yn < Yamont < Yc", () => {
+            let prms = new ParamsSectionRectang(undefined, // tirant d'eau
+                2.5, // largeur de fond
+                40, //  Ks=Strickler
+                2, // Q=Débit
+                0.05, // If=pente du fond
+                precDist, // précision
+                1, // YB=hauteur de berge
+                undefined,// YCL=Condition limite en cote à l'amont ou à l'aval
+                4,  // Dx=Pas d'espace
+                100  // Long= Longueur du bief
+            );
+
+            let sect = new cSnRectang(undefined, prms);
+
+            let prem = new CourbeRemousParams(0.35, // Yamont = tirant amont
+                0.3, // Yaval = tirant aval
+                MethodeResolution.Trapezes
+            );
+
+            let log = new cLog();
+            let rem = new CourbeRemous(sect, prem, log);
+
+            let res = rem.calculRemous(undefined);
+
+            // données de validation : version PHP (Oct 2017) méthode trapèzes
+
+            expect(res["flu"] == undefined).toBeTruthy("la ligne d'eau fluviale ne devrait comporter aucune valeur");
+
+            let t = { 0.000: 0.35, 4.000: 0.276, 8.000: 0.261, 12.000: 0.257, 16.000: 0.254, 20.000: 0.254, 24.000: 0.254, 28.000: 0.254, 32.000: 0.254, 36.000: 0.254, 40.000: 0.254, 44.000: 0.254, 48.000: 0.254, 52.000: 0.254, 56.000: 0.254, 60.000: 0.254, 64.000: 0.254, 68.000: 0.254, 72.000: 0.254, 76.000: 0.254, 80.000: 0.254, 84.000: 0.254, 88.000: 0.254, 92.000: 0.254, 96.000: 0.254, 100.000: 0.254 };
+            compareObject("Ytorrentiel", res["tor"], t, 0.01);
+
+            let x = [0.000, 4.000, 8.000, 12.000, 16.000, 20.000, 24.000, 28.000, 32.000, 36.000, 40.000, 44.000, 48.000, 52.000, 56.000, 60.000, 64.000, 68.000, 72.000, 76.000, 80.000, 84.000, 88.000, 92.000, 96.000, 100.000];
+            compareArray("abscisses", res["trX"], x);
+
+            let expLog = new cLog();
+            let m = new ErrorMessage(ErrorCode.ERROR_REMOUS_LARGEUR_BERGE);
+            m.extraVar["B"] = 2.5;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_CRITIQUE);
+            m.extraVar["Yc"] = 0.403;
+            expLog.add(m);
+
+            m = new ErrorMessage(ErrorCode.ERROR_REMOUS_H_NORMALE);
+            m.extraVar["Yn"] = 0.253;
+            expLog.add(m);
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AVAL));
+
+            expLog.add(new ErrorMessage(ErrorCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
+
+            compareLog(log, expLog);
+        });
+    });
+});
diff --git a/src/remous.ts b/src/remous.ts
index 904edd0e41d4bcc159a9bcaf344325b23ae431c2..2f4baa144d35ccac6e14b7a3af977cb764582f44 100644
--- a/src/remous.ts
+++ b/src/remous.ts
@@ -294,13 +294,13 @@ export class CourbeRemous extends Nub {
 
 		// Boucle de calcul de la courbe de remous
 		for (let x = Deb + dx; (dx > 0 && x <= Fin) || (dx < 0 && x >= Fin); x += dx) {
-			this.debug("lastY " + lastY);
+			// this.debug("lastY " + lastY);
 			let rY: Result = this.Calc_Y(lastY);
-			this.debug("calcul : x " + x + " y " + rY.vCalc);
+			// this.debug("calcul : x " + x + " y " + rY.vCalc);
 			// this.debug("trY ");
 			// this.logObject(trY);
 			// this.debug("end trY " + this.last(trY));
-			this.debug("Yn " + this.Sn.HautNormale);
+			// this.debug("Yn " + this.Sn.HautNormale);
 
 			if (rY.code == ErrorCode.ERROR_OK) {
 				// on vérifie qu'on ne traverse pas la hauteur normale (à la précision de calcul près)
@@ -328,15 +328,32 @@ export class CourbeRemous extends Nub {
 		return trY;
 	}
 
+	private logArray(a: string[]) {
+		let s = "[";
+		let first = true;
+		for (let e of a) {
+			if (!first)
+				s += ",";
+			s += +e;
+			first = false;
+		}
+		s += "]";
+		this.debug(s);
+	}
+
 	private logObject(o: { [key: number]: number }) {
-		let ks: string[] = Object.keys(o);
-		ks.sort((a, b) => {
-			if (+a > +b) return 1;
-			if (+a < +b) return -1;
-			return 0;
-		});
-		for (let k of ks)
-			this.debug("[" + (+k).toFixed(3) + "]=" + o[+k]);
+		if (o == undefined)
+			this.debug("<undefined>");
+		else {
+			let ks: string[] = Object.keys(o);
+			ks.sort((a, b) => {
+				if (+a > +b) return 1;
+				if (+a < +b) return -1;
+				return 0;
+			});
+			for (let k of ks)
+				this.debug("[" + (+k).toFixed(3) + "]=" + o[+k]);
+		}
 	}
 
 	/**
@@ -387,7 +404,8 @@ export class CourbeRemous extends Nub {
 		}
 
 		this.debug("flu ");
-		this.logObject(crbFlu);
+		// this.logObject(crbFlu);
+		this.debug(JSON.stringify(crbFlu));
 
 		// Calcul depuis l'amont
 		if (this.Sn.HautCritique >= this.prmCR.Yamont.v) {
@@ -403,7 +421,8 @@ export class CourbeRemous extends Nub {
 		}
 
 		this.debug("tor");
-		this.logObject(crbTor);
+		// this.logObject(crbTor);
+		this.debug(JSON.stringify(crbTor));
 
 		// Détection du ressaut hydraulique
 		let nFlu: number = this.size(crbFlu);
@@ -473,25 +492,25 @@ export class CourbeRemous extends Nub {
 
 				// Calcul de l'abscisse de la section dans l'autre régime
 				let Yco = this.Sn.Calc('Yco', crbPartielle[rX]); // Y conjugué
-				this.debug("rX=" + rX + " Yco(Ypartiel=" + crbPartielle[rX] + ")=" + Yco);
+				// this.debug("rX=" + rX + " Yco(Ypartiel=" + crbPartielle[rX] + ")=" + Yco);
 
 				let rLongRst = 5 * Math.abs(crbPartielle[rX] - Yco); // Longueur du ressaut
-				this.debug("longueur ressaut=" + rLongRst);
+				// this.debug("longueur ressaut=" + rLongRst);
 
 				let xRst = rX + Math.round(iSens * rLongRst / Dx) * Dx; // Abscisse où comparer Yconj et Y
-				this.debug("xRst=" + xRst);
+				// this.debug("xRst=" + xRst);
 				//let rxRst = rX + iSens * rLongRst; // Abscisse réelle du ressaut
 				//this.debug("xRst reel=" + (rX + iSens * rLongRst));
 
 				xRst = round(xRst, this.prmSect.iPrec.v);
-				this.debug("xRst (arr)=" + xRst);
+				// this.debug("xRst (arr)=" + xRst);
 
 				if (crbComplete[xRst] != undefined) {
 					// Hauteur décalée de la longueur du ressaut (il faut gérer la pente du fond)
 					let Ydec: number = crbComplete[xRst] + rLongRst * this.prmSect.If.v * iSens;
-					this.debug("Ydec=" + Ydec);
-					this.debug("imp(Ycomplet[xRst=" + xRst + "]=" + crbComplete[xRst] + ")=" + this.Sn.Calc('Imp', crbComplete[xRst]));
-					this.debug("imp(Ypartiel[rX=" + rX + "]=" + crbPartielle[rX] + ")=" + this.Sn.Calc('Imp', crbPartielle[rX]));
+					// this.debug("Ydec=" + Ydec);
+					// this.debug("imp(Ycomplet[xRst=" + xRst + "]=" + crbComplete[xRst] + ")=" + this.Sn.Calc('Imp', crbComplete[xRst]));
+					// this.debug("imp(Ypartiel[rX=" + rX + "]=" + crbPartielle[rX] + ")=" + this.Sn.Calc('Imp', crbPartielle[rX]));
 
 					// if (iSens == 1 ? Yco > Ydec : Yco < Ydec) {
 					if (Yco > Ydec) {
@@ -548,14 +567,16 @@ export class CourbeRemous extends Nub {
 					crbTor = {};
 				else
 					crbFlu = {};
-				//crbPartielle = {};  // pour le log uniquement, à virer
+				crbPartielle = {};  // pour le log uniquement, à virer
 			}
 		}
 
 		this.debug("complete (" + (iSens == 1 ? "flu" : "tor") + ") modifiée");
-		this.logObject(crbComplete);
+		// this.logObject(crbComplete);
+		this.debug(JSON.stringify(crbComplete));
 		this.debug("partielle (" + (iSens == 1 ? "tor" : "flu") + ") modifiée");
-		this.logObject(crbPartielle);
+		// this.logObject(crbPartielle);
+		this.debug(JSON.stringify(crbPartielle));
 
 		// Définition des abscisses
 		let trX: string[] = [];
@@ -580,6 +601,9 @@ export class CourbeRemous extends Nub {
 		});
 		// this.debug("trX unique=" + trX);
 
+		this.debug("abscisses ");
+		this.logArray(trX);
+
 		// Calcul de la variable à calculer
 
 		let tRes: number[] = [];
diff --git a/src/util/error.ts b/src/util/error.ts
index 04dc132a35821b7bcfbcdb36af269ca95be3a023..79d568bda4b88a829f7982fc697b1b08afc3a671 100644
--- a/src/util/error.ts
+++ b/src/util/error.ts
@@ -178,4 +178,8 @@ export class ErrorMessage {
     };
 
     get code() { return this._code; }
+
+    public toString(): string {
+        return ErrorCode[this._code] + " " + JSON.stringify(this.extraVar);
+    }
 }
diff --git a/src/util/log.ts b/src/util/log.ts
index c6b22b6b358e1440255a751e53ef3732342cdb63..25001043d6c2385eab6f92659144679882cdb0f4 100644
--- a/src/util/log.ts
+++ b/src/util/log.ts
@@ -10,4 +10,14 @@ export class cLog {
     public get messages() {
         return this._messages;
     }
+
+    public toString(): string {
+        let res = "";
+        for (let m of this._messages) {
+            if (res != "")
+                res += "\n";
+            res += m.toString();
+        }
+        return res;
+    }
 }
\ No newline at end of file