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