From 813c7ae05596c8970d87df3f8aa4a00b67394e2b Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Fri, 2 Aug 2019 15:00:03 +0200 Subject: [PATCH] Fix #135 Convergence PAB --- spec/pab/pab_jalhyd135.spec.ts | 889 +++++++++++++++++++++++++++++++++ src/dichotomie.ts | 2 +- 2 files changed, 890 insertions(+), 1 deletion(-) create mode 100644 spec/pab/pab_jalhyd135.spec.ts diff --git a/spec/pab/pab_jalhyd135.spec.ts b/spec/pab/pab_jalhyd135.spec.ts new file mode 100644 index 00000000..8c290fc5 --- /dev/null +++ b/spec/pab/pab_jalhyd135.spec.ts @@ -0,0 +1,889 @@ +import { Pab } from "../../src/pab/pab"; +import { Session } from "../../src/session"; + +describe("Pab", () => { + describe("jalhyd#135", () => { + it("CalcSerie() should return a correct result", () => { + const sessionJson = `{ + "header": { + "source": "jalhyd", + "format_version": "1.1", + "created": "2019-08-02T12:14:57.316Z" + }, + "session": [ + { + "uid": "cnBhOW", + "props": { + "calcType": "Pab" + }, + "meta": { + "title": "PAB" + }, + "children": [ + { + "uid": "bGFvOW", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "dm9qc2", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 27.935 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 27.823 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 27.936 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "OXJtZz", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "NXF3cz", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 27.708 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 27.596 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 27.709 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "bTdqZj", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "cHpnY2", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 27.481 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 27.369 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 27.482 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "dXptdn", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "bHJoeX", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 27.254 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 27.141 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 27.255 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "YXFhMG", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "ZHpiY2", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 27.027 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 26.914 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 27.028 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "c3U3Mz", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "Yzk5ej", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 26.8 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 26.687 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 26.801 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "a2Jhem", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "anFvOD", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 26.573 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 26.46 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 26.574 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "eHN3bG", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "ajU5N3", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 26.345 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 26.233 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 26.346 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "bjNsaj", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "cGF5M3", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 26.118 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 26.006 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 26.119 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "a20wZH", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "cTk1YT", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 25.891 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 25.779 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 25.892 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "YTlkdj", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "ZjRzND", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 25.664 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 25.551 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 25.665 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "NzI1aG", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "dGJtdH", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 25.437 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 25.324 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 25.438 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + }, + { + "uid": "cmttZj", + "props": { + "calcType": "Cloisons", + "nodeType": "None" + }, + "children": [ + { + "uid": "bTBtcm", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 25.21 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [ + { + "symbol": "LB", + "mode": "SINGLE", + "value": 4.5 + }, + { + "symbol": "BB", + "mode": "SINGLE", + "value": 3.6 + }, + { + "symbol": "ZRMB", + "mode": "SINGLE", + "value": 25.097 + }, + { + "symbol": "ZRAM", + "mode": "SINGLE", + "value": 25.211 + }, + { + "symbol": "QA", + "mode": "SINGLE", + "value": 0 + } + ] + } + ], + "parameters": [ + { + "symbol": "Q", + "mode": "SINGLE", + "value": 1.53 + }, + { + "symbol": "Z1", + "mode": "CALCUL" + }, + { + "symbol": "Z2", + "mode": "SINGLE", + "value": 26.81 + } + ], + "downWall": { + "uid": "OXhtam", + "props": { + "calcType": "CloisonAval" + }, + "children": [ + { + "uid": "cDEyaW", + "props": { + "calcType": "Structure", + "structureType": "SeuilRectangulaire", + "loiDebit": "WeirSubmergedLarinier" + }, + "children": [], + "parameters": [ + { + "symbol": "ZDV", + "mode": "SINGLE", + "value": 24.983 + }, + { + "symbol": "L", + "mode": "SINGLE", + "value": 0.5 + }, + { + "symbol": "CdWSL", + "mode": "SINGLE", + "value": 0.83 + } + ] + } + ], + "parameters": [] + } + } + ] +}`; + Session.getInstance().unserialise(sessionJson); + const nub = Session.getInstance().findNubByUid("cnBhOW") as Pab; + expect(nub.CalcSerie().ok).toBe(true); + }); + }); +}); diff --git a/src/dichotomie.ts b/src/dichotomie.ts index 0233446f..9c5ccc1f 100644 --- a/src/dichotomie.ts +++ b/src/dichotomie.ts @@ -521,7 +521,7 @@ export class Dichotomie extends Debug { Math.abs(newStep) <= tolAct && ( Math.abs(fb) < errorTol - || Math.abs(fb / (Math.abs(fb) - Math.abs(fc))) < 1 + || Math.abs(fb / fc) < 1 ) ) { return b; // Acceptable approx. is found -- GitLab