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