From a65598f10817f3acf6f30cd9a36516b04874bf5c Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Wed, 7 Jun 2017 09:40:50 +0200 Subject: [PATCH] =?UTF-8?q?-=20classe=20acSection=20:=20=20=20.=20correcti?= =?UTF-8?q?on=20bug=20Calc=5FdR=20(parenth=C3=A8se=20manquante=20avant=20/?= =?UTF-8?q?)=20=20=20.=20suppression=20du=20param=C3=A8tre=20rY=20de=20Cal?= =?UTF-8?q?c=5FSYg()=20-=20d=C3=A9but=20des=20tests=20de=20la=20section=20?= =?UTF-8?q?param=C3=A9tr=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/section_param_rect_fluvial.spec.ts | 116 ++++++++++++++++++ spec/section_param_rect_torrentiel.spec.ts | 116 ++++++++++++++++++ ...s => section_param_trapez_fluvial.spec.ts} | 0 spec/section_param_trapez_torrentiel.spec.ts | 116 ++++++++++++++++++ src/section/section_type.ts | 32 +++-- 5 files changed, 368 insertions(+), 12 deletions(-) create mode 100644 spec/section_param_rect_fluvial.spec.ts create mode 100644 spec/section_param_rect_torrentiel.spec.ts rename spec/{section_param_trapez.spec_fluvial.spec.ts => section_param_trapez_fluvial.spec.ts} (100%) create mode 100644 spec/section_param_trapez_torrentiel.spec.ts diff --git a/spec/section_param_rect_fluvial.spec.ts b/spec/section_param_rect_fluvial.spec.ts new file mode 100644 index 00000000..7a8dd602 --- /dev/null +++ b/spec/section_param_rect_fluvial.spec.ts @@ -0,0 +1,116 @@ +/// <reference path="../node_modules/@types/jasmine/index.d.ts" /> + +import { Result } from "../src/base"; +import { nub, precDigits, precDist } from "./nubtest"; +import { cSnRectang } from "../src/section/section_rectang"; +import { cParamsCanal } from "../src/section/section_type"; + +let paramCnl: cParamsCanal; +let sect: cSnRectang; + +describe('Section paramétrée rectangulaire : ', () => { + beforeEach(() => { + paramCnl = new cParamsCanal(40, // Ks=Strickler + 1.2, // Q=Débit + 0.001, // If=pente du fond + precDist, // précision + 1 // YB= hauteur de berge + // YCL=Condition limite en cote à l'amont ou à l'aval + ); + + sect = new cSnRectang(undefined, paramCnl, + 2.5 // largeur de fond + ); + // tirant d'eau + sect.v.Y = 0.8; + }); + + describe('fluvial :', () => { + // charge spécifique + it('Hs should equal to 0.818', () => { + expect(sect.Calc_Hs()).toBeCloseTo(0.818, precDigits); + }); + + // charge critique + it('Hsc should equal to 0.43', () => { + expect(sect.Calc_Hsc()).toBeCloseTo(0.43, precDigits); + }); + + // largeur au miroir + it('B should equal to 2.5', () => { + expect(sect.Calc_B()).toBeCloseTo(2.5, precDigits); + }); + + // périmètre mouillé + it('P should equal to 4.1', () => { + expect(sect.Calc_P()).toBeCloseTo(4.1, precDigits); + }); + + // surface mouillée + it('S should equal to 2', () => { + expect(sect.Calc_S()).toBeCloseTo(2, precDigits); + }); + + // rayon hydraulique + it('R should equal to 0.488', () => { + expect(sect.Calc_R()).toBeCloseTo(0.488, precDigits); + }); + + // vitesse moyenne + it('V should equal to 0.6', () => { + expect(sect.Calc_V()).toBeCloseTo(0.6, precDigits); + }); + + // nombre de Froude + it('Fr should equal to 0.214', () => { + expect(sect.Calc_Fr()).toBeCloseTo(0.214, precDigits); + }); + + // tirant d'eau critique + it('Yc should equal to 0.286', () => { + expect(sect.Calc_Yc()).toBeCloseTo(0.286, precDigits); + }); + + // tirant d'eau normal + it('Yn should equal to 0.663', () => { + expect(sect.Calc_Yn()).toBeCloseTo(0.663, precDigits); + }); + + // tirant d'eau fluvial + it('Yf should equal to 0.8', () => { + expect(sect.Calc_Yf()).toBeCloseTo(0.8, precDigits); + }); + + // tirant d'eau torrentiel + it('Yt should equal to 0.131', () => { + expect(sect.Calc_Yt()).toBeCloseTo(0.131, precDigits); + }); + + // tirant d'eau conjugué + it('Yco should equal to 0.068', () => { + expect(sect.Calc_Yco()).toBeCloseTo(0.068, precDigits); + }); + + // perte de charge + it('J should equal to 0.00059', () => { + paramCnl.v.Prec = 0.00001; + expect(sect.Calc_J()).toBeCloseTo(0.00059, precDigits); + }); + + // Variation linéaire de l'énergie spécifique + it('I-J should equal to 0.00041', () => { + paramCnl.v.Prec = 0.00001; + expect(sect.Calc('I-J')).toBeCloseTo(0.00041, precDigits); + }); + + // impulsion hydraulique + it('Imp should equal to 8568', () => { + expect(sect.Calc_Imp()).toBeCloseTo(8568, precDigits); + }); + + // force tractrice (contrainte de cisaillement) + it('Tau0 should equal to 2.804', () => { + expect(sect.Calc_Tau0()).toBeCloseTo(2.804, precDigits); + }); + }); +}); diff --git a/spec/section_param_rect_torrentiel.spec.ts b/spec/section_param_rect_torrentiel.spec.ts new file mode 100644 index 00000000..d21cf8b1 --- /dev/null +++ b/spec/section_param_rect_torrentiel.spec.ts @@ -0,0 +1,116 @@ +/// <reference path="../node_modules/@types/jasmine/index.d.ts" /> + +import { Result } from "../src/base"; +import { nub, precDigits, precDist } from "./nubtest"; +import { cSnRectang } from "../src/section/section_rectang"; +import { cParamsCanal } from "../src/section/section_type"; + +let paramCnl: cParamsCanal; +let sect: cSnRectang; + +describe('Section paramétrée rectangulaire : ', () => { + beforeEach(() => { + paramCnl = new cParamsCanal(40, // Ks=Strickler + 10, // Q=Débit + 0.001, // If=pente du fond + precDist, // précision + 1 // YB= hauteur de berge + // YCL=Condition limite en cote à l'amont ou à l'aval + ); + + sect = new cSnRectang(undefined, paramCnl, + 2.5 // largeur de fond + ); + // tirant d'eau + sect.v.Y = 0.8; + }); + + describe('torrentiel :', () => { + // charge spécifique + it('Hs should equal to 2.074', () => { + expect(sect.Calc_Hs()).toBeCloseTo(2.074, precDigits); + }); + + // charge critique + it('Hsc should equal to 1.766', () => { + expect(sect.Calc_Hsc()).toBeCloseTo(1.766, precDigits); + }); + + // largeur au miroir + it('B should equal to 2.5', () => { + expect(sect.Calc_B()).toBeCloseTo(2.5, precDigits); + }); + + // périmètre mouillé + it('P should equal to 4.1', () => { + expect(sect.Calc_P()).toBeCloseTo(4.1, precDigits); + }); + + // surface mouillée + it('S should equal to 2', () => { + expect(sect.Calc_S()).toBeCloseTo(2, precDigits); + }); + + // rayon hydraulique + it('R should equal to 0.488', () => { + expect(sect.Calc_R()).toBeCloseTo(0.488, precDigits); + }); + + // vitesse moyenne + it('V should equal to 5', () => { + expect(sect.Calc_V()).toBeCloseTo(5, precDigits); + }); + + // nombre de Froude + it('Fr should equal to 1.785', () => { + expect(sect.Calc_Fr()).toBeCloseTo(1.785, precDigits); + }); + + // tirant d'eau critique + it('Yc should equal to 1.177', () => { + expect(sect.Calc_Yc()).toBeCloseTo(1.177, precDigits); + }); + + // tirant d'eau normal + it('Yn should equal to 3.364', () => { + expect(sect.Calc_Yn()).toBeCloseTo(3.364, precDigits); + }); + + // tirant d'eau fluvial + it('Yf should equal to 1.831', () => { + expect(sect.Calc_Yf()).toBeCloseTo(1.831, precDigits); + }); + + // tirant d'eau torrentiel + it('Yt should equal to 0.8', () => { + expect(sect.Calc_Yt()).toBeCloseTo(0.8, precDigits); + }); + + // tirant d'eau conjugué + it('Yco should equal to 1.659', () => { + expect(sect.Calc_Yco()).toBeCloseTo(1.659, precDigits); + }); + + // perte de charge + it('J should equal to 0.041', () => { + //paramCnl.v.Prec = 0.00001; + expect(sect.Calc_J()).toBeCloseTo(0.041, precDigits); + }); + + // Variation linéaire de l'énergie spécifique + it('I-J should equal to -0.04', () => { + //paramCnl.v.Prec = 0.00001; + expect(sect.Calc('I-J')).toBeCloseTo(-0.04, precDigits); + }); + + // impulsion hydraulique + it('Imp should equal to 57848', () => { + expect(sect.Calc_Imp()).toBeCloseTo(57848, precDigits); + }); + + // force tractrice (contrainte de cisaillement) + it('Tau0 should equal to 194.718', () => { + expect(sect.Calc_Tau0()).toBeCloseTo(194.718, precDigits); + }); + }); +}); diff --git a/spec/section_param_trapez.spec_fluvial.spec.ts b/spec/section_param_trapez_fluvial.spec.ts similarity index 100% rename from spec/section_param_trapez.spec_fluvial.spec.ts rename to spec/section_param_trapez_fluvial.spec.ts diff --git a/spec/section_param_trapez_torrentiel.spec.ts b/spec/section_param_trapez_torrentiel.spec.ts new file mode 100644 index 00000000..45ca6638 --- /dev/null +++ b/spec/section_param_trapez_torrentiel.spec.ts @@ -0,0 +1,116 @@ +/// <reference path="../node_modules/@types/jasmine/index.d.ts" /> + +import { Result } from "../src/base"; +import { nub, precDigits, precDist } from "./nubtest"; +import { cSnTrapez } from "../src/section/section_trapez"; +import { cParamsCanal } from "../src/section/section_type"; + +let paramCnl: cParamsCanal; +let sect: cSnTrapez; + +describe('Section paramétrée trapèze :', () => { + beforeEach(() => { + paramCnl = new cParamsCanal(40, // Ks=Strickler + 10, // Q=Débit + 0.001, // If=pente du fond + precDist, // précision + 1 // YB= hauteur de berge + // YCL=Condition limite en cote à l'amont ou à l'aval + ); + + sect = new cSnTrapez(undefined, paramCnl, + 2.5, // largeur de fond + 0.56 // fruit + ); + // tirant d'eau + sect.v.Y = 0.8; + }); + + describe('torrentiel :', () => { + // charge spécifique + it('Hs should equal to 1.716', () => { + expect(sect.Calc_Hs()).toBeCloseTo(1.716, precDigits); + }); + + // charge critique + it('Hsc should equal to 1.534', () => { + expect(sect.Calc_Hsc()).toBeCloseTo(1.534, precDigits); + }); + + // largeur au miroir + it('B should equal to 3.396', () => { + expect(sect.Calc_B()).toBeCloseTo(3.396, precDigits); + }); + + // périmètre mouillé + it('P should equal to 4.334', () => { + expect(sect.Calc_P()).toBeCloseTo(4.334, precDigits); + }); + + // surface mouillée + it('S should equal to 2.358', () => { + expect(sect.Calc_S()).toBeCloseTo(2.358, precDigits); + }); + + // rayon hydraulique + it('R should equal to 0.544', () => { + expect(sect.Calc_R()).toBeCloseTo(0.544, precDigits); + }); + + // vitesse moyenne + it('V should equal to 4.24', () => { + expect(sect.Calc_V()).toBeCloseTo(4.24, precDigits); + }); + + // nombre de Froude + it('Fr should equal to 1.625', () => { + expect(sect.Calc_Fr()).toBeCloseTo(1.625, precDigits); + }); + + // tirant d'eau critique + it('Yc should equal to 1.074', () => { + expect(sect.Calc_Yc()).toBeCloseTo(1.074, precDigits); + }); + + // tirant d'eau normal + it('Yn should equal to 2.275', () => { + expect(sect.Calc_Yn()).toBeCloseTo(2.275, precDigits); + }); + + // tirant d'eau fluvial + it('Yf should equal to 1.502', () => { + expect(sect.Calc_Yf()).toBeCloseTo(1.502, precDigits); + }); + + // tirant d'eau torrentiel + it('Yt should equal to 0.8', () => { + expect(sect.Calc_Yt()).toBeCloseTo(0.8, precDigits); + }); + + // tirant d'eau conjugué + it('Yco should equal to 1.398', () => { + expect(sect.Calc_Yco()).toBeCloseTo(1.398, precDigits); + }); + + // perte de charge + it('J should equal to 0.025', () => { + //paramCnl.v.Prec = 0.00001; + expect(sect.Calc_J()).toBeCloseTo(0.025, precDigits); + }); + + // Variation linéaire de l'énergie spécifique + it('I-J should equal to -0.024', () => { + expect(sect.Calc('I-J')).toBeCloseTo(-0.024, precDigits); + }); + + // impulsion hydraulique + it('Imp should equal to 51187.203', () => { + expect(sect.Calc_Imp()).toBeCloseTo(51187.203, precDigits); + }); + + // force tractrice (contrainte de cisaillement) + it('Tau0 should equal to 135.020', () => { + expect(sect.Calc_Tau0()).toBeCloseTo(135.020, precDigits); + }); + }); +}); diff --git a/src/section/section_type.ts b/src/section/section_type.ts index c80356b0..1c073760 100644 --- a/src/section/section_type.ts +++ b/src/section/section_type.ts @@ -1,5 +1,5 @@ import { IParamsEquation, Debug } from "../base" -import { acNewton } from "./newton"; +//import { acNewton } from "./newton"; import { cHautCritique, cHautNormale, cHautCorrespondante, cHautConjuguee } from "./hauteur"; import { cLog } from "./log"; @@ -158,7 +158,7 @@ export abstract class acSection extends Debug { return this.Calc_Yn(); default: - var methode = 'Calc_' + sDonnee; + let methode = 'Calc_' + sDonnee; /* !!!!! si on réunit les 2 lignes suivantes ( this.arCalc[sDonnee] = this[methode](); ), @@ -205,12 +205,14 @@ export abstract class acSection extends Debug { } this.v.LargeurBerge = this.arCalcGeo[sDonnee]; break; + default: /*var methode = 'Calc_'+sDonnee + '()'; this.CalcGeo[sDonnee] = eval(methode);*/ var methode = 'Calc_' + sDonnee; this.arCalcGeo[sDonnee] = this[methode](); - // this.debug("methodecalcgeo " + this[methode]()); + // this.debug("methodecalcgeo " + this[methode]()); + break; } //~ spip_log('CalcGeo('.sDCalcGeonnee.',rY='.this->oP->rYB.')='.this->arCalcGeo[sDonnee],'hydraulic.'._LOG_DEBUG); this.Swap(false); // On restitue les données hydrauliques en cours @@ -304,7 +306,7 @@ export abstract class acSection extends Debug { */ Calc_dR() { if (this.Calc('P') != 0) { - return (this.Calc('B') * this.Calc('P') - this.Calc('S') * this.Calc('dP') / Math.pow(this.Calc('P'), 2)); + return ((this.Calc('B') * this.Calc('P') - this.Calc('S') * this.Calc('dP')) / Math.pow(this.Calc('P'), 2)); } else { return 0; @@ -409,10 +411,10 @@ export abstract class acSection extends Debug { if (this.XOR(Dx > 0, !(Y + Dx / 6 * (k1 + 2 * (k2 + k3) + k4) < this.HautCritique))) { return false; } return Y + Dx / 6 * (k1 + 2 * (k2 + k3) + k4); } - /** - * Calcul du point suivant d'une courbe de remous - * @return Tirant d'eau - */ + // /** + // * Calcul du point suivant d'une courbe de remous + // * @return Tirant d'eau + // */ // Calc_Y(rY) { // var funcCalcY = 'Calc_Y_' + this.oP.Resolution; // var methods = Object.getOwnPropertyNames(this).filter(function (p) { @@ -559,8 +561,11 @@ export abstract class acSection extends Debug { * multiplié par la surface hydraulique * @return S x Yg */ - Calc_SYg(rY) { - return Math.pow(rY, 2) * this.v.LargeurBerge / 2; + // Calc_SYg(rY) { + // return Math.pow(rY, 2) * this.v.LargeurBerge / 2; + // } + Calc_SYg() { + return Math.pow(this.v.Y, 2) * this.v.LargeurBerge / 2; } /** @@ -568,8 +573,11 @@ export abstract class acSection extends Debug { * multiplié par la surface hydraulique * @return S x Yg */ - Calc_dSYg(rY) { - return rY * this.v.LargeurBerge; + // Calc_dSYg(rY) { + // return rY * this.v.LargeurBerge; + // } + Calc_dSYg() { + return this.v.Y * this.v.LargeurBerge; } /** -- GitLab