diff --git a/src/structure/parallel_structure.ts b/src/structure/parallel_structure.ts
index addfaac739f62ec15a6721555da7c2fe5a441be0..ce283b19bc873f693a2d4a1d4c2a8eb21f285c15 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 e90938f0d0fa63b84fcbb5db4a71c6f54840ab59..4b9dff89a89785b4ee46a9b03bc87d7ea616088f 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 e5ef98b93eda645e7088d5c7c0a3602df3bc2c58..f462873096fb7d6ee68bf68094525ad90c65d984 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 ca3843d0aad17b0befdef820deefd557640a8ff3..9e7890f1a2631d8b31f4400c17a2ebd69e561d19 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 2a8746ff93dd1bd21f3e8d83a0a1ace72d1e3974..8b3c60b249ead501f546cfc9419507f872f1824d 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 f9f054cdf8d395dd856df885c76000ef995d34be..72b4c02d12e7a54f18966f2fa8e3ad84b511cc02 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
      */