From f1ee23b049e72b2c988cadc0671a35e56da18081 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Wed, 4 Apr 2018 10:15:49 +0200
Subject: [PATCH] =?UTF-8?q?=20#46=20:=20surcharge=20de=20Nub.CalcSerie()?=
 =?UTF-8?q?=20dans=20SectionParametree=20pour=20traiter=20le=20cas=20o?=
 =?UTF-8?q?=C3=B9=20aucun=20param=C3=A8tre=20n'est=20=C3=A0=20varier=20et?=
 =?UTF-8?q?=20stocker=20les=20variables=20calcul=C3=A9es=20dans=20des=20r?=
 =?UTF-8?q?=C3=A9sultats=20compl=C3=A9mentaires?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/section/section_nub.ts | 89 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)

diff --git a/src/section/section_nub.ts b/src/section/section_nub.ts
index af47cd5d..a9c09389 100644
--- a/src/section/section_nub.ts
+++ b/src/section/section_nub.ts
@@ -3,6 +3,8 @@ import { acSection } from "./section_type";
 import { Result } from "../util/result";
 import { ParamDefinition, ParamCalculability } from "../param/param-definition";
 import { ParamDomain, ParamDomainValue } from "../param/param-domain";
+import { ParamValueMode } from "../param/param-values";
+import { ResultElement } from "../util/resultelement";
 
 /**
  * Nub sur les sections paramétrées
@@ -140,4 +142,91 @@ export class SectionParametree extends Nub {
                 throw new Error(`SectionParam.Equation() : calcul sur ${sVarCalc} non implémenté`);
         }
     }
+
+    private hasVariatedParameter(): boolean {
+        for (const k in this._prms.map) {
+            const p: ParamDefinition = this._prms.map[k];
+            switch (p.valueMode) {
+                case ParamValueMode.LISTE:
+                case ParamValueMode.MINMAX:
+                    return true;
+            }
+        }
+        return false;
+    }
+
+    private addExtraResultFromVar(varCalc: string, Y: number, re: ResultElement) {
+        const r: Result = this._section.Calc(varCalc, Y);
+        if (r.ok)
+            re.addExtraResult(varCalc, r.vCalc);
+        else
+            re.log.addLog(r.log);
+    }
+
+    public CalcSerie(rPrec: number = 0.001, rInit?: number, sDonnee?: string): Result {
+        //paramètre à varier ?
+
+        if (this.hasVariatedParameter())
+            return super.CalcSerie(rPrec, rInit, sDonnee);
+
+        // sinon, on stocke toutes les valeurs des variables à calcul dans les résultats supplémentaires
+
+        const Y = this.getParameter("Y").v; // tirant d'eau original (doit être fourni à acSection.Calc() sous peine d'être modifié par les appels successifs car c'est en même temps un paramètre et une variable temporaire)
+        const result = new Result();
+        const re = new ResultElement();
+        result.addResultElement(re);
+
+        // charge spécifique
+        this.addExtraResultFromVar("Hs", Y, re);
+
+        // charge critique
+        this.addExtraResultFromVar("Hsc", Y, re);
+
+        // largeur au miroir
+        this.addExtraResultFromVar("B", Y, re);
+
+        // périmètre hydraulique
+        this.addExtraResultFromVar("P", Y, re);
+
+        // surface hydraulique
+        this.addExtraResultFromVar("S", Y, re);
+
+        // rayon hydraulique
+        this.addExtraResultFromVar("R", Y, re);
+
+        // vitesse moyenne
+        this.addExtraResultFromVar("V", Y, re);
+
+        // nombre de Froude
+        this.addExtraResultFromVar("Fr", Y, re);
+
+        // tirant d'eau critique
+        this.addExtraResultFromVar("Yc", Y, re);
+
+        // tirant d'eau normal
+        this.addExtraResultFromVar("Yn", Y, re);
+
+        // tirant d'eau fluvial
+        this.addExtraResultFromVar("Yf", Y, re);
+
+        // tirant d'eau torrentiel
+        this.addExtraResultFromVar("Yt", Y, re);
+
+        // tirant d'eau conjugué
+        this.addExtraResultFromVar("Yco", Y, re);
+
+        // perte de charge
+        this.addExtraResultFromVar("J", Y, re);
+
+        // Variation linéaire de l'énergie spécifique
+        this.addExtraResultFromVar("I-J", Y, re);
+
+        // impulsion hydraulique
+        this.addExtraResultFromVar("Imp", Y, re);
+
+        // contrainte de cisaillement
+        this.addExtraResultFromVar("Tau0", Y, re);
+
+        return result;
+    }
 }
-- 
GitLab