diff --git a/spec/remous_trapez.spec.ts b/spec/remous_trapez.spec.ts index 9010db27e1399a1a82e285fad12fc50f5ce70ba5..975dc72683e82432bbf8ca24090f45db828a2e8c 100644 --- a/spec/remous_trapez.spec.ts +++ b/spec/remous_trapez.spec.ts @@ -3,31 +3,10 @@ import { CourbeRemousParams, MethodeResolution, CourbeRemous } from "../src/remo import { precDigits, precDist, equalEpsilon } from "./nubtest"; import { round } from "../src/base"; import { cLog } from "../src/util/log"; +import { compareObject, compareArray } from "./nubtest"; -function compObject(s: string, arr1: { [key: number]: number }, arr2: { [key: number]: number }) { - expect(Object.keys(arr1).length).toEqual(Object.keys(arr2).length, s + ": longueur incorrecte"); - - let arrVals: number[] = []; - for (let i in arr1) { - let v1: number = arr1[i]; - let v2: number = arr2[i]; - expect(equalEpsilon(v1, v2)).toBeTruthy(s + " : " + i + "ieme valeur incorrecte " + v1 + " " + v2); - } -} - -function compArray(s: string, arr1: string[], arr2: number[]) { - expect(arr1.length).toEqual(arr2.length); - - let arrVals: number[] = []; - for (let i = 0; i < arr1.length; i++) { - let v1: number = +arr1[i]; - let v2: number = arr2[i]; - expect(equalEpsilon(v1, v2)).toBeTruthy(s + " : " + i + "ieme valeur incorrecte " + v1 + " " + v2); - } -} - -xdescribe('Class Remous / section trapèze :', () => { - describe('méthode trapèzes :', () => { +describe('Class Remous / section trapèze :', () => { + xdescribe('méthode trapèzes :', () => { it('test 1', () => { let prms = new ParamsSectionTrapez(2.5, // largeur de fond 0.56, // fruit @@ -54,13 +33,78 @@ xdescribe('Class Remous / section trapèze :', () => { let res = rem.calculRemous(undefined); let f = { 9: 0.278, 10: 0.4 }; - compObject("Yfluvial", res["flu"], f); + compareObject("Yfluvial", res["flu"], f, precDist); let t = { 0.000: 0.15, 1.000: 0.16369914454109, 2.000: 0.17743613485223, 3.000: 0.19117312516337, 4.000: 0.20491011547451, 5.000: 0.21864710578565, 6.000: 0.23238409609679, 7.000: 0.24688425253633, 8.000: 0.26214757510426, 9.000: 0.27817406380059, 10.000: 0.4 }; - compObject("Ytorrentiel", res["tor"], t); + compareObject("Ytorrentiel", res["tor"], t, precDist); let x = [0.000, 1.000, 2.000, 3.000, 4.000, 5.000, 6.000, 7.000, 8.000, 9.000, 10.000]; - compArray("abcisses", res["trX"], x); + compareArray("abcisses", res["trX"], x); + }); + }); + + describe('paramètre à calculer :', () => { + it('Hs (test 1)', () => { + let prms = new ParamsSectionTrapez( + 2.5, // largeur de fond + 0.56, // fruit + 1, // tirant d'eau + 40, // Ks=Strickler + 2, // Q=Débit + 0.001, // If=pente du fond + 0.001, // précision + 1 // YB=hauteur de berge + ); + + let sect = new cSnTrapez(undefined, prms); + + let prem = new CourbeRemousParams(sect, 0.15, // Yamont = tirant amont + 0.4, // Yaval = tirant aval + 100, // Long= Longueur du bief + 5, // Dx=Pas d'espace + MethodeResolution.Trapezes + ); + + let log = new cLog(); + let rem = new CourbeRemous(prem, log); + + let res = rem.calculRemous("Hs"); + + // données de validation : version PHP (oct 2017) + let hs = { 0.000: 1.507, 5.000: 0.735, 10.000: 0.731, 15.000: 0.727, 20.000: 0.723, 25.000: 0.719, 30.000: 0.715, 35.000: 0.71, 40.000: 0.704, 45.000: 0.699, 50.000: 0.693, 55.000: 0.687, 60.000: 0.68, 65.000: 0.673, 70.000: 0.665, 75.000: 0.656, 80.000: 0.646, 85.000: 0.634, 90.000: 0.62, 95.000: 0.603, 100.000: 0.572 }; + compareObject("Hs", res["tRes"], hs, 0.002); + }); + + it('Hs (test 2)', () => { + let prms = new ParamsSectionTrapez( + 2.5, // largeur de fond + 0.56, // fruit + 1, // tirant d'eau + 40, // Ks=Strickler + 2, // Q=Débit + 0.05, // If=pente du fond + 0.001, // précision + 1 // YB=hauteur de berge + ); + + let sect = new cSnTrapez(undefined, prms); + + let prem = new CourbeRemousParams(sect, 0.15, // Yamont = tirant amont + 1, // Yaval = tirant aval + 8, // Long= Longueur du bief + 0.1, // Dx=Pas d'espace + MethodeResolution.Trapezes + ); + + let log = new cLog(); + let rem = new CourbeRemous(prem, log); + + let res = rem.calculRemous("Hs"); + + // données de validation : version PHP (oct 2017) + // ici j'ai supprimé un point (x=2.5) + let hs = { 0.000: 1.507, 2.600: 0.753, 2.700: 0.757, 2.800: 0.762, 2.900: 0.767, 3.000: 0.771, 3.100: 0.776, 3.200: 0.781, 3.300: 0.786, 3.400: 0.79, 3.500: 0.795, 3.600: 0.8, 3.700: 0.805, 3.800: 0.81, 3.900: 0.814, 4.000: 0.819, 4.100: 0.824, 4.200: 0.829, 4.300: 0.834, 4.400: 0.839, 4.500: 0.844, 4.600: 0.849, 4.700: 0.854, 4.800: 0.859, 4.900: 0.864, 5.000: 0.869, 5.100: 0.874, 5.200: 0.879, 5.300: 0.884, 5.400: 0.889, 5.500: 0.894, 5.600: 0.899, 5.700: 0.904, 5.800: 0.909, 5.900: 0.914, 6.000: 0.919, 6.100: 0.924, 6.200: 0.929, 6.300: 0.934, 6.400: 0.939, 6.500: 0.944, 6.600: 0.95, 6.700: 0.955, 6.800: 0.96, 6.900: 0.965, 7.000: 0.97, 7.100: 0.975, 7.200: 0.98, 7.300: 0.986, 7.400: 0.991, 7.500: 0.996, 7.600: 1.001, 7.700: 1.006, 7.800: 1.012, 7.900: 1.017, 8.000: 1.022 }; + compareObject("Hs", res["tRes"], hs, 0.009); }); }); }); diff --git a/src/remous.ts b/src/remous.ts index e023d29d0920c3377e3f56ca012f9e643b739c24..4eff52f5e6ea276da02dc67f04520feb2ebdd9c8 100644 --- a/src/remous.ts +++ b/src/remous.ts @@ -644,19 +644,24 @@ export class CourbeRemous extends Nub { if (val_a_cal != undefined && nFlu != 0 && nTor != 0) { for (let rX of trX) { let rY = undefined; + let hasFlu: boolean = crbFlu[+rX] != undefined; + let hasTor: boolean = crbTor[+rX] != undefined; - if (crbFlu[+rX] != undefined && crbTor[+rX] == undefined) { + if (hasFlu && !hasTor) rY = crbFlu[+rX]; - } - if (crbTor[+rX] != undefined) { - if (crbFlu[+rX] == undefined || (crbFlu[+rX] != undefined && crbFlu[+rX] == crbTor[+rX])) { + + if (hasTor) + if (!hasFlu || (hasFlu && crbFlu[+rX] == crbTor[+rX])) rY = crbTor[+rX]; - } - if (rY != undefined) - tRes[+rX] = this.Sn.Calc(val_a_cal, rY); + if (rY != undefined) { + tRes[+rX] = this.Sn.Calc(val_a_cal, rY); + this.debug('X=' + rX + ' Calc(' + val_a_cal + ', Y=' + rY + ')=' + tRes[+rX]); } } + + this.debug("extra param " + val_a_cal); + this.logObject(tRes); } return { "flu": crbFlu, "tor": crbTor, "trX": trX, "tRes": tRes };