From 8d756aac4a17f898e8a07cec4b2593cdf8078cb4 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Thu, 11 Jan 2018 08:59:27 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20des=20calculs=20pour=20le=20noeud=20"pa?= =?UTF-8?q?sse=20=C3=A0=20bassins=20:=20puissance=20dissip=C3=A9e"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/pab/pab_puissance.spec.ts | 7 ++- src/index.ts | 1 + src/pab/pab_puissance.ts | 88 ++++++++++++++++++++++++++++++++++ src/param.ts | 1 + src/parameters.ts | 8 ++++ 5 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 src/pab/pab_puissance.ts diff --git a/spec/pab/pab_puissance.spec.ts b/spec/pab/pab_puissance.spec.ts index 88516754..5da5561a 100644 --- a/spec/pab/pab_puissance.spec.ts +++ b/spec/pab/pab_puissance.spec.ts @@ -2,7 +2,7 @@ /// <reference path="../../node_modules/@types/jasmine/index.d.ts" /> import { Result } from "../../src/util/result"; -import { PabPuissance, PabPuissanceParams } from "pab_puissance"; +import { PabPuissance, PabPuissanceParams } from "../../src/pab/pab_puissance"; import { check } from "../nubtest"; function PabPuissanceTest(varTest: string) { @@ -16,11 +16,11 @@ function PabPuissanceTest(varTest: string) { ); let res: number = prms[varTest].v; - prms[varTest].v = undefined; const nub = new PabPuissance(prms); + prms[varTest].v = undefined; - check(nub.Calc(), res); + check(nub.Calc(varTest, 1e-9), res); }); }); } @@ -34,5 +34,4 @@ describe("Class PabPuissance: ", () => { PabPuissanceTest("Q"); PabPuissanceTest("V"); PabPuissanceTest("Pv"); - }); diff --git a/src/index.ts b/src/index.ts index 79ad03ea..a7f8a2e1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,3 +19,4 @@ export * from './util/log'; export * from './util/result'; export * from './util/interval'; export * from './pab/pab_dimension'; +export * from './pab/pab_puissance'; diff --git a/src/pab/pab_puissance.ts b/src/pab/pab_puissance.ts new file mode 100644 index 00000000..4ee44dad --- /dev/null +++ b/src/pab/pab_puissance.ts @@ -0,0 +1,88 @@ +import { Result } from "../util/result"; +import { ComputeNodeType, ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability, ParamsEquation } from "../param"; +import { NumericalString } from "../index"; +import { Nub } from "../nub"; + +export class PabPuissanceParams extends ParamsEquation { + [key: string]: any; // pour pouvoir faire this['methode](); + + /** Chute entre bassins DH */ + private _DH: ParamDefinition; + + /** Débit Q */ + private _Q: ParamDefinition; + + /** Volume V */ + private _V: ParamDefinition; + + /** Puissance dissipée PV */ + private _Pv: ParamDefinition; + + constructor(rDH: number, rQ: number, rV: number, rPV: number = undefined) { + super(); + this._DH = new ParamDefinition(ComputeNodeType.PabPuissance, 'DH', ParamDomainValue.POS, rDH); + this._Q = new ParamDefinition(ComputeNodeType.PabPuissance, 'Q', ParamDomainValue.POS, rQ); + this._V = new ParamDefinition(ComputeNodeType.PabPuissance, 'V', ParamDomainValue.POS, rV); + this._Pv = new ParamDefinition(ComputeNodeType.PabPuissance, 'Pv', ParamDomainValue.POS, rPV); + + this.addParamDefinition(this._DH); + this.addParamDefinition(this._Q); + this.addParamDefinition(this._V); + this.addParamDefinition(this._Pv); + } + + get DH() { + return this._DH; + } + + get Q() { + return this._Q; + } + + get V() { + return this._V; + } + + get Pv() { + return this._Pv; + } +} +export class PabPuissance extends Nub { + constructor(prms: PabPuissanceParams, dbg: boolean = false) { + super(prms, dbg); + } + + /** + * paramètres castés au bon type + */ + get prms(): PabPuissanceParams { + return <PabPuissanceParams>this._prms; + } + + /** + * paramétrage de la calculabilité des paramètres + */ + protected setParametersCalculability() { + this.prms.DH.calculability = ParamCalculability.DICHO; + this.prms.Q.calculability = ParamCalculability.DICHO; + this.prms.V.calculability = ParamCalculability.DICHO; + this.prms.Pv.calculability = ParamCalculability.EQUATION; + } + + Equation(sVarCalc: string): Result { + let v: number; + + switch (sVarCalc) { + case "Pv": + const ro: number = 1000; // masse volumique de l'eau en kg/m3 + const g: number = 9.81; // accélération de la gravité terrestre en m/s2. + v = ro * g * this.prms.Q.v * this.prms.DH.v / this.prms.V.v; + break; + + default: + throw "PabPuissance.Equation() : invalid variable name " + sVarCalc; + } + + return new Result(v); + } +} diff --git a/src/param.ts b/src/param.ts index 534c2cf0..78e7cd77 100644 --- a/src/param.ts +++ b/src/param.ts @@ -422,6 +422,7 @@ export enum ComputeNodeType { CourbeRemous, // paramètres communs à toutes les courbes de remous CourbeRemousTrapeze, CourbeRemousRectangle, CourbeRemousCercle, CourbeRemousPuissance, PabDimensions, // passe à bassin rectangulaire + PabPuissance, // passe à bassin : énergie dissipée Test } diff --git a/src/parameters.ts b/src/parameters.ts index 3133f27b..d9db8212 100644 --- a/src/parameters.ts +++ b/src/parameters.ts @@ -9,6 +9,7 @@ import { ParamsSectionPuiss, cSnPuiss } from "./section/section_puissance"; import { RegimeUniforme } from "./regime_uniforme"; import { CourbeRemous, CourbeRemousParams } from "./remous"; import { PabDimensionParams, PabDimension } from "./pab/pab_dimension"; +import { PabPuissanceParams, PabPuissance } from "./pab/pab_puissance"; export class ComputeNodeParameters { private static _instance: ComputeNodeParameters; @@ -166,6 +167,13 @@ export class ComputeNodeParameters { return cn; } + case ComputeNodeType.PabPuissance: + { + let cn = new PabPuissanceParams(undefined, undefined, undefined); + let n = new PabPuissance(cn); // pour initialiser la calculabilité des paramètres + return cn; + } + default: throw "ComputeNodeParameters.getComputeNodeParameters() : noeud de calcul '" + ComputeNodeType[type] + "' non pris en charge"; } -- GitLab