From 8b63c86231887428793be552a01e912bf5cf235a Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Mon, 18 Jun 2018 14:26:02 +0200 Subject: [PATCH] =?UTF-8?q?=20#45=20Result=20:=20ajout=20de=20l'it=C3=A9ra?= =?UTF-8?q?teur=20sur=20les=20valeurs=20d'un=20r=C3=A9sultat=20compl=C3=A9?= =?UTF-8?q?mentaire=20(d'apr=C3=A8s=20son=20nom)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../value_ref_variable_extraresult.spec.ts | 53 +++++++++++++++++++ src/util/result.ts | 13 +++++ 2 files changed, 66 insertions(+) create mode 100644 spec/value_ref/value_ref_variable_extraresult.spec.ts diff --git a/spec/value_ref/value_ref_variable_extraresult.spec.ts b/spec/value_ref/value_ref_variable_extraresult.spec.ts new file mode 100644 index 00000000..a5c7f5ee --- /dev/null +++ b/spec/value_ref/value_ref_variable_extraresult.spec.ts @@ -0,0 +1,53 @@ +import { ParamsSectionRectang, cSnRectang, CourbeRemousParams, MethodeResolution, CourbeRemous, Result } from "../../src"; + +/** + * IMPORTANT ! + * Décommenter temporairement la ligne suivante (import { } from "./mock_jasmine") + * Pour exécuter ce code dans le débugger. + * Faire de même avec le fichier test_func.ts + */ +// import { describe, expect, it, xdescribe, xit } from "../mock_jasmine"; + +describe("référence d'un paramètre à un résultat complémentaire multivalué : ", () => { + it("test 1", () => { + // cas de figure : + // courbe de remous / section rectangulaire, méthode Euler explicite, faible pente, pas de ressaut, Yamont > Yc, Yaval > Yn + // on itère sur la courbe fluviale + + const prms = new ParamsSectionRectang(undefined, // tirant d'eau + 2.5, // largeur de fond + 40, // Ks=Strickler + 2, // Q=Débit + 0.001, // If=pente du fond + 0.001, // précision + 1 // YB=hauteur de berge + ); + + const sect = new cSnRectang(prms); + + const prem = new CourbeRemousParams(sect, 0.5, // Yamont = tirant amont + 1, // Yaval = tirant aval + 100, // Long= Longueur du bief + 5, // Dx=Pas d'espace + MethodeResolution.EulerExplicite + ); + + const rem = new CourbeRemous(prem); + + const res: Result = rem.calculRemous(undefined); + + // données de validation : version Typescript (Oct 2017) méthode des trapèzes + + const f = [0.9872500000000014, 0.9872500000000014, 0.9872500000000014, + 0.9872500000000014, 0.9880000000000013, 0.9887500000000012, + 0.9895000000000012, 0.9902500000000011, 0.991000000000001, + 0.9917500000000009, 0.9925000000000008, 0.9932500000000007, + 0.9940000000000007, 0.9947500000000006, 0.9955000000000005, + 0.9962500000000004, 0.9970000000000003, 0.9977500000000002, + 0.9985000000000002, 0.9992500000000001, 1]; + + let i = 0; + for (const v of res.getExtraResultValuesIterator("flu")) + expect(Math.abs(v - f[i++]) < 0.01).toBeTruthy(); + }); +}); diff --git a/src/util/result.ts b/src/util/result.ts index 729c60e4..fcff8d87 100644 --- a/src/util/result.ts +++ b/src/util/result.ts @@ -270,4 +270,17 @@ export class Result implements IterableValues { tmp.push(re.vCalc); return tmp[Symbol.iterator](); } + + // interface IterableValues pour les résultats complémentaires + + public getExtraResultValuesIterator(name: string): IterableIterator<number> { + const tmp = []; + for (const r of this._resultElements) { + const er = r.getExtraResult(name); + if (er !== undefined) + tmp.push(er); + } + + return tmp[Symbol.iterator](); + } } -- GitLab