diff --git a/spec/base.spec.ts b/spec/base.spec.ts index fe3bd67909d9ad672306541832204f633fd0407d..0bb55fbd6efcc8a0aed291e0ee594ae7cd1420a3 100644 --- a/spec/base.spec.ts +++ b/spec/base.spec.ts @@ -1,7 +1,7 @@ /// <reference path="../node_modules/@types/jasmine/index.d.ts" /> -import { nub, precDigits } from "./nubtest"; import { Result } from "../src/base"; +import { nub, precDigits } from "./nubtest"; describe('Class Nub: ', () => { diff --git a/spec/nubtest.ts b/spec/nubtest.ts index cc19b41a8b04c2c76de6a2768808c08c37d734a5..64a2f4f87438dc9ccaecc8aa39099e0fdbbb434f 100644 --- a/spec/nubtest.ts +++ b/spec/nubtest.ts @@ -1,4 +1,5 @@ -import { Nub, Result, IParamsEquation } from "../src/base"; +import { Result, IParamsEquation } from "../src/base"; +import { Nub } from "../src/nub"; export class NubTest extends Nub { constructor(v: IParamsEquation) { diff --git a/spec/regime_uniforme_rect.spec.ts b/spec/regime_uniforme_rect.spec.ts index 46ea5e328ddcdc43ee60b1f4cc02770101dea526..6cec1391b9ea04d073e3735618ba7d973fcec006 100644 --- a/spec/regime_uniforme_rect.spec.ts +++ b/spec/regime_uniforme_rect.spec.ts @@ -11,8 +11,40 @@ describe('Class RegimeUniforme / section rectangulaire : ', () => { // }); describe('Calc(): ', () => { - it('fail', () => { - expect(false); + it('Q should be 1.568', () => { + let sect: cSnRectang; + let prmsCanal: cParamsCanal; + + // Ks=Strickler, Q=Débit, If=pente du font, précision, YB=hauteur de berge, YCL=Condition limite en cote à l'amont ou à l'aval + prmsCanal = new cParamsCanal(40, 0, 0.001, precDist, 1) + + // largeur de fond + sect = new cSnRectang(false, prmsCanal, 2.5); + // tirant d'eau + sect.Y = 0.8; + + var ru = new RegimeUniforme(sect); + + // nom variable à calculer, valeur de Q + expect(ru.Calc("Q").vCalc).toBeCloseTo(1.568, precDigits); + }); + + it('Q should be 0.731', () => { + let sect: cSnRectang; + let prmsCanal: cParamsCanal; + + // Ks=Strickler, Q=Débit, If=pente du font, précision, YB=hauteur de berge, YCL=Condition limite en cote à l'amont ou à l'aval + prmsCanal = new cParamsCanal(30, 0, 0.0001, precDist, 1.2) + + // largeur de fond + sect = new cSnRectang(false, prmsCanal, 3); + // tirant d'eau + sect.Y = 1.1; + + var ru = new RegimeUniforme(sect); + + // nom variable à calculer, valeur de Q + expect(ru.Calc("Q").vCalc).toBeCloseTo(0.731, precDigits); }); it('Strickler should be 30.619', () => { @@ -24,14 +56,12 @@ describe('Class RegimeUniforme / section rectangulaire : ', () => { // largeur de fond sect = new cSnRectang(false, prmsCanal, 2.5); + // tirant d'eau sect.Y = 0.8; var ru = new RegimeUniforme(sect); - //let res = new Result(30.619); - - // nom variable à calculer, caleur de Y - // expect(ru.Calc("Ks").vCalc).toEqual(res.vCalc); + // nom variable à calculer, valeur de Ks expect(ru.Calc("Ks").vCalc).toBeCloseTo(30.619, precDigits); }); }); diff --git a/spec/regime_uniforme_trapeze.spec.ts b/spec/regime_uniforme_trapeze.spec.ts index 23c483460e991aba0c00a878bb26adc6b3acdc0e..688e231298a0b58de35b81c1b6c65cf957d9c028 100644 --- a/spec/regime_uniforme_trapeze.spec.ts +++ b/spec/regime_uniforme_trapeze.spec.ts @@ -4,13 +4,30 @@ import { Result } from "../src/base"; import { RegimeUniforme } from "../src/regime_uniforme"; import { cSnTrapez } from "../src/section/section_trapez"; import { cParamsCanal } from "../src/section/section_type"; -import { precDigits } from "./nubtest"; +import { precDigits, precDist } from "./nubtest"; describe('Class RegimeUniforme / section trapèze: ', () => { beforeAll(() => { }); describe('Calc(): ', () => { + it('Q should be 9.393', () => { + let sect: cSnTrapez; + let paramCnl: cParamsCanal; + // Ks=Strickler, Q=Débit, If=pente du font, précision, YB=hauteur de berge, YCL=Condition limite en cote à l'amont ou à l'aval + paramCnl = new cParamsCanal(40, 0, 0.001, precDist, 1) + // largeur de fond, fruit + sect = new cSnTrapez(false, paramCnl, 2.5, 0.56); + // tirant d'eau + sect.Y = 0.8; + + var ru: RegimeUniforme; + ru = new RegimeUniforme(sect); + + expect(ru.Calc("Q").vCalc).toBeCloseTo(1.988, precDigits); + }); + + it('LargeurAuFond should be 9.393', () => { let sect: cSnTrapez; let paramCnl: cParamsCanal; diff --git a/src/base.ts b/src/base.ts index f0e658b99ad210c45e819bc39b5a36bdd4735e01..be69087500c424fbe703aaeb7cd5ff36c3d8b2ff 100644 --- a/src/base.ts +++ b/src/base.ts @@ -1,5 +1,3 @@ -import { Dichotomie } from "./dichotomie" - /** * Résultat de calcul comprenant la valeur du résultat et des calculs annexes (flag, calculs intermédiaires...) */ @@ -60,76 +58,3 @@ export abstract class Debug { if (this.DBG) console.log(s); } } - - -/** - * Classe abstraite de Noeud de calcul : classe de base pour tous les calculs - */ -export abstract class Nub extends Debug { - /// Nom des variables calculées par la méthode Equation - private _varsEq: string[] = []; - - public v: IParamsEquation; - - constructor(paramsEq: IParamsEquation) { - super(false); - this.v = paramsEq; - } - - - /** - * Formule utilisée pour le calcul analytique (solution directe ou méthode de résolution spécifique) - */ - abstract Equation(sVarCalc: string): Result; - - - /** - * Calcul d'une équation quelque soit l'inconnue à calculer - * @param sVarCalc nom de la variable à calculer - * @param rInit valeur initiale de la variable à calculer dans le cas de la dichotomie - * @param rPrec précision de calcul - */ - Calc(sVarCalc: string, rInit: number = 0, rPrec: number = 0.001): Result { - for (let sVarEq of this._varsEq) { - if (sVarCalc == sVarEq) { - return this.Equation(sVarCalc); - } - } - return this.Solve(sVarCalc, rInit, rPrec); - } - - - CalcSerie(svarCalc: string, serie: Serie): Result[] { - /** @todo faire une boucle pour appeler this.Calc avec chaque valeur de serie.values - * - */ - // let results = [new (Result)]; - let results = [new Result(0)]; - return results; - } - - get sVarsEq(): string[] { - return this._varsEq; - } - - set sVarsEq(sVarsEq: string[]) { - this._varsEq = sVarsEq; - } - - AddVarEq(sVarEq: string) { - this._varsEq.push(sVarEq); - } - - - /** - * Résoud l'équation par une méthode numérique - * @param sVarCalc nom de la variable à calculer - * @param rInit valeur initiale de la variable à calculer dans le cas de la dichotomie - * @param rPrec précision de calcul - */ - Solve(sVarCalc: string, rInit: number, rPrec: number): Result { - let dicho: Dichotomie = new Dichotomie(this, sVarCalc); - var target = this.v[this._varsEq[0]]; - return dicho.Dichotomie(target, rPrec, rInit); - } -} diff --git a/src/dichotomie.ts b/src/dichotomie.ts index 76c14528519e1fecff78e2c93f84ed10221f5a39..a9a554d3a427531ca5d1f0eca424408681136bcd 100644 --- a/src/dichotomie.ts +++ b/src/dichotomie.ts @@ -1,7 +1,7 @@ -import { Debug, Nub, Result } from "./base"; +import { Debug, Result } from "./base"; +import { Nub } from "./nub"; -//export class Dichotomie extends Debug { -export class Dichotomie { +export class Dichotomie extends Debug { /** Pas de parcours de l'intervalle pour initialisation dichotomie */ readonly IDEFINT = 100; /** Nombre d'itérations maximum de la dichotomie */ @@ -14,7 +14,7 @@ export class Dichotomie { * @param sVarCalc Nom de la variable à calculer */ constructor(private nub: Nub, private sVarCalc: string) { - // super(false); + super(false); } /** Valeur inconnue à rechercher */ @@ -35,7 +35,6 @@ export class Dichotomie { return (a || b) && !(a && b); } - /** * Calcul de l'équation analytique. * @note Wrapper vers this.nub.Equation pour simplifier le code. @@ -49,8 +48,6 @@ export class Dichotomie { return this.nub.Equation(this.nub.sVarsEq[0]); } - private debug(s) { } - /** * Calcul à l'ouvrage * @param sVarCalc Nom de la variable à calculer diff --git a/src/lechaptcalmon.ts b/src/lechaptcalmon.ts index d6a40bc12f026b9c40026bf53eca922db22e4b2a..0a349a7a46a2ad13ab145d252ff66c475902514c 100644 --- a/src/lechaptcalmon.ts +++ b/src/lechaptcalmon.ts @@ -1,4 +1,5 @@ -import { Nub, Result, IParamsEquation } from "./base"; +import { Result, IParamsEquation } from "./base"; +import { Nub } from "./nub"; interface IParamLechaptCalmon extends IParamsEquation { /** Débit */ diff --git a/src/regime_uniforme.ts b/src/regime_uniforme.ts index 971314ee0f1f026b256280b9c295eb1128cf63d8..70c8c2c870780e78febe9680031b26918e0a284d 100644 --- a/src/regime_uniforme.ts +++ b/src/regime_uniforme.ts @@ -1,4 +1,5 @@ -import { Nub, Result, IParamsEquation } from "./base"; +import { Result, IParamsEquation } from "./base"; +import { Nub } from "./nub"; import { acSection, cParamsCanal } from "./section/section_type";