diff --git a/src/nub.ts b/src/nub.ts
index 783a199fcab8ecdc3833d8849fc6f5981da631b8..64e31c46d91211303adee731364c877dcbe67499 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -1660,6 +1660,29 @@ export abstract class Nub extends ComputeNode implements IProperties {
         return true;
     }
 
+    /**
+     * @returns true if all messages in nub hierarchy have the same code
+     */
+    public hasOnlyMessage(code: MessageCode): boolean {
+        for (const n of this.allChildNubIterator) {
+            if (!n.result.hasOnlyMessage(code)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public get uniqueMessageCodes(): MessageCode[] {
+        let res: MessageCode[] = [];
+        for (const n of this.allChildNubIterator) {
+            if (n.uid === "MDZ3aH") {
+                debugger
+            }
+            res = res.concat(n.result.uniqueMessageCodes);
+        }
+        return res;
+    }
+
     // interface IObservable
 
     /**
diff --git a/src/prebarrage/pre_barrage.ts b/src/prebarrage/pre_barrage.ts
index 5ae7adecc78d79baed041ff50a6134231629ad84..82c9e16431f67fd3e442df3abb262796822c393b 100644
--- a/src/prebarrage/pre_barrage.ts
+++ b/src/prebarrage/pre_barrage.ts
@@ -381,7 +381,9 @@ export class PreBarrage extends Nub {
         }
 
         // if an error occurred in any nub, remove all results
-        if (!this.allResultsOk) {
+        // except if it's a dichotomy convergence error (and only this error)
+
+        if (!this.allResultsOk && !this.hasOnlyMessage(MessageCode.ERROR_DICHO_CONVERGE)) {
             for (const c of this.allChildNubIterator) {
                 c.result.resultElement.removeValues();
             }
diff --git a/src/util/log.ts b/src/util/log.ts
index 3ef3719689dd4e4f9610ecfd2d0d491665763118..d78c7d924738979c84b433498859f1370e382f35 100644
--- a/src/util/log.ts
+++ b/src/util/log.ts
@@ -103,6 +103,28 @@ export class cLog {
         return undefined;
     }
 
+    /**
+     * @returns true if all messages have the same code
+     */
+    public hasOnlyMessage(code: MessageCode): boolean {
+        for (const m of this.messages) {
+            if (m.code !== code) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public get uniqueMessageCodes(): MessageCode[] {
+        const res: MessageCode[] = [];
+        for (const m of this.messages) {
+            if (res.indexOf(m.code) === -1) {
+                res.push(m.code);
+            }
+        }
+        return res;
+    }
+
     /**
      * compute error, warning, info count in a message list
      */
diff --git a/src/util/result.ts b/src/util/result.ts
index a396c11a35685dbdabb43f8c0644a637fb1d9364..cba512d9e577696839624e314d4317fd690cbf7d 100644
--- a/src/util/result.ts
+++ b/src/util/result.ts
@@ -299,6 +299,29 @@ export class Result extends JalhydObject {
         return false;
     }
 
+    /**
+     * determine if all messages have the same code
+     * @param code message code to find
+     */
+    public hasOnlyMessage(code: MessageCode): boolean {
+        if (!this._globalLog.hasOnlyMessage(code)) {
+            return false;
+        }
+
+        if (!this.resultElement.log.hasOnlyMessage(code)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    public get uniqueMessageCodes(): MessageCode[] {
+        let res: MessageCode[] = [];
+        res = res.concat(this._globalLog.uniqueMessageCodes);
+        res = res.concat(this.resultElement.log.uniqueMessageCodes);
+        return res;
+    }
+
     /**
      * compute log stats (# of error, warning, info) on all result element
      */