From ca26a07bb6db0f5fa6bae9c39b90d616ab354aca Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Mon, 14 Oct 2019 14:11:38 +0200 Subject: [PATCH] Solveur: add variating Ytarget ability --- spec/solveur/solveur.spec.ts | 29 +++++++++++++++++++++++++++++ src/solveur/solveur.ts | 4 ++-- src/solveur/solveur_params.ts | 2 +- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/spec/solveur/solveur.spec.ts b/spec/solveur/solveur.spec.ts index ac2e0744..978dab0b 100644 --- a/spec/solveur/solveur.spec.ts +++ b/spec/solveur/solveur.spec.ts @@ -111,4 +111,33 @@ describe("solveur multi-modules", () => { expect(res.vCalc).toBeCloseTo(2.156, 3); }); + it("test 5: PAB Chute <= PAB Nombre <= PAB Puissance, variating Y", () => { + // contexte + const pc = new PabChute(new PabChuteParams(2, 0.5, 666)); + pc.calculatedParam = pc.prms.DH; + const pn = new PabNombre(new PabNombreParams(666, 10, 666)); + pn.calculatedParam = pn.prms.DH; + const pp = new PabPuissance(new PabPuissanceParams(666, 0.1, 0.5, 666)); + pp.calculatedParam = pp.prms.PV; + Session.getInstance().clear(); + Session.getInstance().registerNub(pc); + Session.getInstance().registerNub(pn); + Session.getInstance().registerNub(pp); + pn.prms.DHT.defineReference(pc, "DH"); + pp.prms.DH.defineReference(pn, "DH"); + // solveur + const s = new Solveur( + new SolveurParams(pc.prms.Z1), + false + ); + s.properties.setPropValue("nubToCalculate", pp.uid); + s.prms.Ytarget.setValues(100, 500, 50); + const res = s.CalcSerie(); + const expectedValues = [ 1.01, 1.264, 1.519, 1.774, 2.029, 2.284, 2.539, 2.794, 3.048 ]; + expect(res.resultElements.length).toBe(9); + for (let i = 0; i < res.resultElements.length; i++) { + expect(res.resultElements[i].vCalc).toBeCloseTo(expectedValues[i], 3); + } + }); + }); diff --git a/src/solveur/solveur.ts b/src/solveur/solveur.ts index 6e4ed789..d60237c7 100644 --- a/src/solveur/solveur.ts +++ b/src/solveur/solveur.ts @@ -57,7 +57,7 @@ export class Solveur extends Nub implements Observer { throw new Error(`Solveur: calculated param should always be Y (found ${sVarCalc})`); } // set the Y value we have to obtain - this.prms.Y.v = this.prms.Ytarget.singleValue; + this.prms.Y.v = this.prms.Ytarget.v; // set the current value of X, determined by Dichotomie, on the upstream Nub this.prms.Xsource.singleValue = this.prms.X.v; // calculate Nubs chain @@ -71,7 +71,7 @@ export class Solveur extends Nub implements Observer { public getFirstAnalyticalParameter() { // always use pseudo-parameter Y for Dichotomie iterations; // always update target value from input parameter - this.prms.Y.v = this.prms.Ytarget.singleValue; + this.prms.Y.v = this.prms.Ytarget.v; return this.prms.Y; } diff --git a/src/solveur/solveur_params.ts b/src/solveur/solveur_params.ts index c8be32f5..0e6dad70 100644 --- a/src/solveur/solveur_params.ts +++ b/src/solveur/solveur_params.ts @@ -27,7 +27,7 @@ export class SolveurParams extends ParamsEquation implements IObservable { /** implémentation de IObservable par délégation */ private _observable: Observable; - constructor(X: ParamDefinition, rYtarget: number, rXinit?: number) { + constructor(X: ParamDefinition, rYtarget?: number, rXinit?: number) { super(); this._observable = new Observable(); this.X = X; -- GitLab