From d00434c73f5c76b126e529377bba907bd016ce8e Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Mon, 29 May 2017 16:29:32 +0200 Subject: [PATCH] =?UTF-8?q?sortie=20de=20la=20classe=20Nub=20de=20base.ts?= =?UTF-8?q?=20dans=20nub.ts=20pour=20r=C3=A9soudre=20un=20pb=20de=20d?= =?UTF-8?q?=C3=A9pendance=20circulaire=20base<->dichotomie=20(par=20l'inte?= =?UTF-8?q?rm=C3=A9diaire=20de=20Debug)=20et=20provoquant=20un=20message?= =?UTF-8?q?=20du=20chargeur=20de=20module=20"Object=20prototype=20may=20on?= =?UTF-8?q?ly=20be=20an=20Object=20or=20null:=20undefined"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/base.spec.ts | 2 +- spec/nubtest.ts | 3 +- spec/regime_uniforme_rect.spec.ts | 42 +++++++++++++--- spec/regime_uniforme_trapeze.spec.ts | 19 ++++++- src/base.ts | 75 ---------------------------- src/dichotomie.ts | 11 ++-- src/lechaptcalmon.ts | 3 +- src/regime_uniforme.ts | 3 +- 8 files changed, 65 insertions(+), 93 deletions(-) diff --git a/spec/base.spec.ts b/spec/base.spec.ts index fe3bd679..0bb55fbd 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 cc19b41a..64a2f4f8 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 46ea5e32..6cec1391 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 23c48346..688e2312 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 f0e658b9..be690875 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 76c14528..a9a554d3 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 d6a40bc1..0a349a7a 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 971314ee..70c8c2c8 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"; -- GitLab