From bf090c778a7105001d03d82cb54e82fc2b1efef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 17:11:55 +0200 Subject: [PATCH] refactor: check submergence error only in Structure.Calc/CalcSerie refs #302 --- src/structure/parallel_structure.ts | 21 +------------------ src/structure/structure.ts | 21 ++++++++++++------- src/structure/structure_weir_submerged.ts | 4 ++-- .../structure_weir_submerged_larinier.ts | 4 ++-- src/util/result.ts | 9 -------- src/util/resultelement.ts | 11 +++++++++- 6 files changed, 29 insertions(+), 41 deletions(-) diff --git a/src/structure/parallel_structure.ts b/src/structure/parallel_structure.ts index addfaac7..ce283b19 100644 --- a/src/structure/parallel_structure.ts +++ b/src/structure/parallel_structure.ts @@ -86,21 +86,7 @@ export class ParallelStructure extends Nub { this._result.globalLog.insert(new Message(MessageCode.ERROR_STRUCTURE_AU_MOINS_UNE)); return this._result; } - const res = super.CalcSerie(rInit); - - // si des erreurs/warnings sont survenus dans les structures, on les propage - - for (const st of this.structures) { - this.result.globalLog.addLog(st.result.log); - } - - // si une erreur d'ennoiement est survenue dans les structures, on annule les résultats - - if (res.hasMessage(MessageCode.ERROR_STRUCTURE_SUBMERGENCE_LOWER_THAN, true)) { - res.removeValues(); - } - - return res; + return super.CalcSerie(rInit); } /** @@ -177,11 +163,6 @@ export class ParallelStructure extends Nub { this.result.globalLog.addLog(r.globalLog); } - // check structures submergence for some discharge laws - for (const st of this.structures) { - st.checkSubmergence(); - } - return this.result; } diff --git a/src/structure/structure.ts b/src/structure/structure.ts index e90938f0..4b9dff89 100644 --- a/src/structure/structure.ts +++ b/src/structure/structure.ts @@ -103,7 +103,17 @@ export abstract class Structure extends ChildNub { /** * fonction appelée dans Calc() pour vérifier l'ennoiement (cf. classes dérivées) */ - public checkSubmergence() { + public checkSubmergence(res: Result) { + } + + + // si une erreur d'ennoiement est survenue, on annule les résultats + public static filterResultsOnSubmergenceError(res: Result): boolean { + if (res.resultElement.hasMessage(MessageCode.ERROR_STRUCTURE_SUBMERGENCE_LOWER_THAN)) { + res.resultElement.removeValues(); + return true; + } + return false; } /** Constante utile : Racine de 2g */ @@ -295,12 +305,9 @@ export abstract class Structure extends ChildNub { } // Calcul normal hors débit nul - return super.Calc(sVarCalc, rInit); - } - - public CalcSerie(rInit?: number, resetDepending: boolean = true): Result { - const res = super.CalcSerie(rInit, resetDepending); - this.checkSubmergence(); + const res = super.Calc(sVarCalc, rInit); + this.checkSubmergence(res); + Structure.filterResultsOnSubmergenceError(res); return res; } diff --git a/src/structure/structure_weir_submerged.ts b/src/structure/structure_weir_submerged.ts index e5ef98b9..f4628730 100644 --- a/src/structure/structure_weir_submerged.ts +++ b/src/structure/structure_weir_submerged.ts @@ -22,8 +22,8 @@ export class StructureWeirSubmerged extends RectangularStructure { /** * vérification que l'ennoiement est supérieur à une valeur donnée */ - public checkSubmergence() { - this.checkSubmergenceMin(0.6); + public checkSubmergence(res: Result) { + this.checkSubmergenceMin(res, 0.6); } public Calc(sVarCalc: string, rInit?: number): Result { diff --git a/src/structure/structure_weir_submerged_larinier.ts b/src/structure/structure_weir_submerged_larinier.ts index ca3843d0..9e7890f1 100644 --- a/src/structure/structure_weir_submerged_larinier.ts +++ b/src/structure/structure_weir_submerged_larinier.ts @@ -28,8 +28,8 @@ export class StructureWeirSubmergedLarinier extends RectangularStructure { /** * vérification que l'ennoiement est supérieur à une valeur donnée */ - public checkSubmergence() { - this.checkSubmergenceMin(0.5); + public checkSubmergence(res: Result) { + this.checkSubmergenceMin(res, 0.5); } public Calc(sVarCalc: string, rInit?: number): Result { diff --git a/src/util/result.ts b/src/util/result.ts index 2a8746ff..8b3c60b2 100644 --- a/src/util/result.ts +++ b/src/util/result.ts @@ -357,13 +357,4 @@ export class Result extends JalhydObject { re.removeExtraResults(); } } - - /** - * Removes all values in result elements - */ - public removeValues() { - for (const re of this._resultElements) { - re.removeValues(); - } - } } diff --git a/src/util/resultelement.ts b/src/util/resultelement.ts index f9f054cd..72b4c02d 100644 --- a/src/util/resultelement.ts +++ b/src/util/resultelement.ts @@ -1,4 +1,4 @@ -import { cLog } from "../internal_modules"; +import { MessageCode, cLog } from "../internal_modules"; import { Message, MessageSeverity } from "../internal_modules"; import { Result } from "../internal_modules"; @@ -241,6 +241,15 @@ export class ResultElement { return false; } + public hasMessage(code: MessageCode): boolean { + for (const m of this.log.messages) { + if (m.code === code) { + return true; + } + } + return false; + } + /** * compute error, warning, info count on all log messages */ -- GitLab