An error occurred while loading the file. Please try again.
-
Grand Francois authored
remous : correction d'un bug de calcul du paramètre supplémentaire lorsqu'un la ligne fluviale ou torrentiel était vide
a993808e
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 { Message, MessageCode } from "../src/util/message";
/*
Le code de modification des lignes fluviale et torrentielle a été modifié, on enlève un point de plus
ligne d'eau complète : if (iSens * (rXCC - rX) < 0) remplacé par if (iSens * (rXCC - rX) <= 0)
lign d'eau partielle : if (iSens * (rXCN - xRst) > 0) remplacé par if (iSens * (rXCN - xRst) >= 0)
Les données de validation ont été modifiées en conséquence
*/
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
);
let sect = new cSnRectang(prms);
let prem = new CourbeRemousParams(sect, 0.3, // Yamont = tirant amont
0.403, // Yaval = tirant aval
100, // Long= Longueur du bief
5, // Dx=Pas d'espace
MethodeResolution.Trapezes
);
let rem = new CourbeRemous(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 };
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 Message(MessageCode.ERROR_REMOUS_LARGEUR_BERGE);
m.extraVar["B"] = 2.5;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_CRITIQUE);
m.extraVar["Yc"] = 0.403;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_NORMALE);
m.extraVar["Yn"] = 0.953;
expLog.add(m);
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_FLUVIAL));
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
m = new Message(MessageCode.ERROR_REMOUS_ARRET_CRITIQUE)
m.extraVar["x"] = 5;
expLog.add(m);
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
m = new Message(MessageCode.ERROR_REMOUS_RESSAUT_DEHORS);
m.extraVar["sens"] = "amont";
m.extraVar["x"] = 0;
expLog.add(m);
compareLog(rem.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
);
let sect = new cSnRectang(prms);
let prem = new CourbeRemousParams(sect, 0.15, // Yamont = tirant amont
0.403, // Yaval = tirant aval
100, // Long= Longueur du bief
5, // Dx=Pas d'espace
MethodeResolution.Trapezes
);
let rem = new CourbeRemous(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 };
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 }; // dernière valeur supprimée pour la raison en tête de fichier
compareObject("Yfluvial", res["flu"], f, 0.03);
// let t = { 0.000: 0.15, 5.000: 0.75 };
let t = { 0.000: 0.15 }; // dernière valeur supprimée pour la raison en tête de fichier
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 Message(MessageCode.ERROR_REMOUS_LARGEUR_BERGE);
m.extraVar["B"] = 2.5;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_CRITIQUE);
m.extraVar["Yc"] = 0.403;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_NORMALE);
m.extraVar["Yn"] = 0.953;
expLog.add(m);
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_FLUVIAL));
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
m = new Message(MessageCode.ERROR_REMOUS_ARRET_CRITIQUE)
m.extraVar["x"] = 15;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_RESSAUT_HYDRO);
m.extraVar["xmin"] = 0;
m.extraVar["xmax"] = 5;
expLog.add(m);
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
compareLog(rem.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
);
let sect = new cSnRectang(prms);
let prem = new CourbeRemousParams(sect, 0.01, // Yamont = tirant amont
0.403, // Yaval = tirant aval
5, // Long= Longueur du bief
0.25, // Dx=Pas d'espace
MethodeResolution.Trapezes
);
let rem = new CourbeRemous(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 };
// 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 Message(MessageCode.ERROR_REMOUS_LARGEUR_BERGE);
m.extraVar["B"] = 2.5;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_CRITIQUE);
m.extraVar["Yc"] = 0.403;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_NORMALE);
m.extraVar["Yn"] = 0.953;
expLog.add(m);
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_FLUVIAL));
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
m = new Message(MessageCode.ERROR_REMOUS_RESSAUT_HYDRO);
m.extraVar["xmin"] = 0;
m.extraVar["xmax"] = 1;
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
expLog.add(m);
compareLog(rem.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
);
let sect = new cSnRectang(prms);
let prem = new CourbeRemousParams(sect, 0.01, // Yamont = tirant amont
0.403, // Yaval = tirant aval
5, // Long= Longueur du bief
0.05, // Dx=Pas d'espace
MethodeResolution.Trapezes
);
let rem = new CourbeRemous(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 };
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 Message(MessageCode.ERROR_REMOUS_LARGEUR_BERGE);
m.extraVar["B"] = 2.5;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_CRITIQUE);
m.extraVar["Yc"] = 0.403;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_NORMALE);
m.extraVar["Yn"] = 0.953;
expLog.add(m);
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_FLUVIAL));
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
m = new Message(MessageCode.ERROR_REMOUS_RESSAUT_HYDRO);
m.extraVar["xmin"] = 0;
m.extraVar["xmax"] = 0.9;
expLog.add(m);
compareLog(rem.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
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
0.001, // If=pente du fond
precDist, // précision
1 // YB=hauteur de berge
);
let sect = new cSnRectang(prms);
let prem = new CourbeRemousParams(sect, 0.5, // Yamont = tirant amont
1, // Yaval = tirant aval
100, // Long= Longueur du bief
5, // Dx=Pas d'espace
MethodeResolution.Trapezes
);
let rem = new CourbeRemous(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.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(Object.keys(res["tor"]).length == 0).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 Message(MessageCode.ERROR_REMOUS_LARGEUR_BERGE);
m.extraVar["B"] = 2.5;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_CRITIQUE);
m.extraVar["Yc"] = 0.403;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_NORMALE);
m.extraVar["Yn"] = 0.953;
expLog.add(m);
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_FLUVIAL));
expLog.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT));
compareLog(rem.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
);
let sect = new cSnRectang(prms);
let prem = new CourbeRemousParams(sect, 0.5, // Yamont = tirant amont
0.7, // Yaval = tirant aval
100, // Long= Longueur du bief
5, // Dx=Pas d'espace
MethodeResolution.Trapezes
);
let rem = new CourbeRemous(prem);
let res = rem.calculRemous(undefined);
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
// 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(Object.keys(res["tor"]).length == 0).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 Message(MessageCode.ERROR_REMOUS_LARGEUR_BERGE);
m.extraVar["B"] = 2.5;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_CRITIQUE);
m.extraVar["Yc"] = 0.403;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_NORMALE);
m.extraVar["Yn"] = 0.953;
expLog.add(m);
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_FLUVIAL));
expLog.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT));
compareLog(rem.log, expLog);
});
it("faible pente, pas de fluvial, torrentiel tronqué, calcul Hs", () => {
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
);
let sect = new cSnRectang(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 rem = new CourbeRemous(prem);
let res = rem.calculRemous("Hs");
// données de validation : version PHP (Oct 2017) méthode trapèzes
expect(Object.keys(res["flu"]).length == 0).toBeTruthy("la ligne d'eau fluviale ne devrait comporter aucune valeur");
let t = { 0.000: 0.15, 5.000: 0.239, 10.000: 0.34 };
compareObject("Ytorrentiel", res["tor"], t, 0.008);
let x = [0.000, 5.000, 10.000];
compareArray("abscisses", res["trX"], x);
let extraHS = { 0.000: 1.6, 5.000: 0.808, 10.000: 0.618 };
compareObject("extra (Hs)", res["tRes"], extraHS, 0.001);
let expLog = new cLog();
let m = new Message(MessageCode.ERROR_REMOUS_LARGEUR_BERGE);
m.extraVar["B"] = 2.5;
421422423424425426427428429430431432433434435436437438439440441442
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_CRITIQUE);
m.extraVar["Yc"] = 0.403;
expLog.add(m);
m = new Message(MessageCode.ERROR_REMOUS_H_NORMALE);
m.extraVar["Yn"] = 0.953;
expLog.add(m);
expLog.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AVAL));
expLog.add(new Message(MessageCode.ERROR_REMOUS_CALCUL_TORRENTIEL));
m = new Message(MessageCode.ERROR_REMOUS_ARRET_CRITIQUE);
m.extraVar["x"] = 15;
expLog.add(m);
compareLog(rem.log, expLog);
});
});