remous_rect.spec.ts 33.16 KiB
import { ParamsSectionRectang, cSnRectang } from "../src/section/section_rectang";
import { CourbeRemousParams, MethodeResolution, CourbeRemous } from "../src/remous";
import { precDigits, precDist, equalEpsilon } from "./nubtest";
import { round } from "../src/base";
/**
 * 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
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
); let rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); 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 rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); 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);
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
let prem = new CourbeRemousParams(0.15, // Yamont = tirant amont 1, // Yaval = tirant aval MethodeResolution.Trapezes ); let rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); 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 rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); 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 );
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
let sect = new cSnRectang(undefined, prms); let prem = new CourbeRemousParams(0.3, // Yamont = tirant amont 0.403, // Yaval = tirant aval MethodeResolution.Trapezes ); let rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); 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 rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); 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
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
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 rem = new CourbeRemous(sect, prem); 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("abcisses", 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("abcisses", res["trX"], x); }); 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 rem = new CourbeRemous(sect, prem); 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);
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
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("abcisses", res["trX"], x); }); }); 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 rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); 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 rem = new CourbeRemous(sect, prem); let res = rem.calculRemous(undefined); // données de validation : version PHP (Oct 2017) méthode Euler
421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
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("abcisses", res["trX"], x); }); 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 rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); 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 rem = new CourbeRemous(sect, prem); let res = rem.calculRemous(undefined);
491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
// 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("abcisses", res["trX"], x); }); 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.EulerExplicite ); let rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); 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.EulerExplicite ); let rem = new CourbeRemous(sect, prem);
561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
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("abcisses", res["trX"], x); }); it("faible 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.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 rem = new CourbeRemous(sect, prem); 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("abcisses", res["trX"], x); }); }); });