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