diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts
index 232f0c436caa9e177defbe862dbdb940a4f7fd39..a17be949b0d7e2e7643f71eb7523b9c0612092fb 100644
--- a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts
+++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts
@@ -10,6 +10,7 @@ import { ApplicationSetupService } from "../../services/app-setup.service";
 import { I18nService } from "../../services/internationalisation.service";
 import { MacrorugoCompoundResults } from "../../results/macrorugo-compound-results";
 import { ResultsComponentDirective } from "../fixedvar-results/results.component";
+import { LogHelper } from "app/results/log-helper";
 
 @Component({
     selector: "macrorugo-compound-results",
@@ -23,6 +24,8 @@ export class MacrorugoCompoundResultsComponent extends ResultsComponentDirective
     /** résultats non mis en forme */
     private _mrcResults: MacrorugoCompoundResults;
 
+    private _logHelper: LogHelper;
+
     constructor(
         private appSetupService: ApplicationSetupService,
         private i18nService: I18nService,
@@ -33,143 +36,19 @@ export class MacrorugoCompoundResultsComponent extends ResultsComponentDirective
     @Input()
     public set results(rs: CalculatorResults[]) {
         this._mrcResults = undefined;
+        this._logHelper = undefined;
         if (rs.length > 0 && rs[0] instanceof MacrorugoCompoundResults) {
             this._mrcResults = rs[0] as MacrorugoCompoundResults;
+            this._logHelper = new LogHelper(this._mrcResults, this._mrcResults.childrenResults);
         }
     }
 
-    private mergeGlobalLog(result: Result, log: cLog) {
-        if (result) {
-            if (result.hasGlobalLog()) {
-                log.addLog(result.globalLog);
-            }
-            // if no parameter is varying, 1st element log is considered "global"
-            if (this.mrcResults.variatedParameters.length === 0) {
-                if (result.hasResultElements() && result.resultElement.hasLog()) {
-                    log.addLog(result.log);
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns the number of errors, warnings, infos among children logs
-     */
-    private logStats(): any {
-        const ret = {
-            info: 0,
-            warning: 0,
-            error: 0
-        };
-        if (this._mrcResults.result && this._mrcResults.result.hasLog()) {
-            for (const re of this._mrcResults.result.resultElements) {
-                if (re.hasLog()) {
-                    for (const m of re.log.messages) {
-                        const s = m.getSeverity();
-                        switch (s) {
-                            case MessageSeverity.INFO:
-                                ret.info ++;
-                                break;
-                            case MessageSeverity.WARNING:
-                                ret.warning ++;
-                                break;
-                            case MessageSeverity.ERROR:
-                                ret.error ++;
-                                break;
-                        }
-                    }
-                }
-            }
-        }
-        for (const cr of this._mrcResults.childrenResults) {
-            if (cr && cr.hasLog()) {
-                for (const re of cr.resultElements) {
-                    if (re.hasLog()) {
-                        for (const m of re.log.messages) {
-                            const s = m.getSeverity();
-                            switch (s) {
-                                case MessageSeverity.INFO:
-                                    ret.info ++;
-                                    break;
-                                case MessageSeverity.WARNING:
-                                    ret.warning ++;
-                                    break;
-                                case MessageSeverity.ERROR:
-                                    ret.error ++;
-                                    break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return ret;
-    }
-
-    /*
-     * Retourne les logs à afficher dans le composant de log global, au dessus
-     * du sélecteur d'itération : messages globaux et / ou résumé des messages
-     * spécifiques à chaque ResultElement
-     */
     public get globalLog(): cLog {
-        const l = new cLog();
-        if (this._mrcResults && this.mrcResults.variatedParameters.length > 0) {
-            this.mergeGlobalLog(this._mrcResults.result, l);
-            // un problème avec la MRC en général / les cloisons, à une étape quelconque ?
-            if (
-                (this.mrcResults.hasLog)
-                && l.messages.length === 0 // existing global messages make generic message below useless
-            ) {
-                const logStats = this.logStats();
-                const m = new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED);
-                m.extraVar.info = "" + logStats.info; // to avoid displaying fixed number of digits
-                m.extraVar.warning = "" + logStats.warning;
-                m.extraVar.error = "" + logStats.error;
-                l.add(m);
-                // l.add(new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED));
-            }
-        } // sinon pas de log global (aucun paramètre ne varie)
-        return l;
+        return this._logHelper.globalLog;
     }
 
-    /**
-     * Retourne les logs à afficher dans le composant de log local, en dessous
-     * du sélecteur d'itération : messages concernant l'itération (le ResultElement)
-     * en cours
-     */
     public get iterationLog(): cLog {
-        const l = new cLog();
-        if (this._mrcResults) {
-            if (this.mrcResults.variatedParameters.length > 0) {
-                // A. si un paramètre varie
-                const vi = this._mrcResults.variableIndex;
-                // log de la MRC pour l'itération en cours
-                if (
-                    this._mrcResults.result
-                    && this._mrcResults.result.hasResultElements()
-                    && this._mrcResults.result.resultElements[vi]
-                    && this._mrcResults.result.resultElements[vi].hasLog()
-                ) {
-                    l.addLog(this._mrcResults.result.resultElements[vi].log);
-                }
-                // logs des enfants pour l'itération en cours
-                for (const cr of this._mrcResults.childrenResults) {
-                    if (cr && cr.hasResultElements() && cr.resultElements[vi].hasLog()) {
-                        l.addLog(cr.resultElements[vi].log);
-                    }
-                }
-            } else {
-                // B. si aucun paramètre ne varie
-                this.mergeGlobalLog(this._mrcResults.result, l); // faut bien mettre le log global quelque part
-                // logs des enfants
-                for (const cr of this._mrcResults.childrenResults) {
-                    if (cr && cr.hasResultElements() && cr.resultElement.hasLog()) {
-                        l.addLog(cr.resultElement.log);
-                    }
-                }
-            }
-        }
-        return l;
+        return this._logHelper.iterationLog;
     }
 
     public get mrcResults() {
diff --git a/src/app/components/pab-results/pab-results.component.ts b/src/app/components/pab-results/pab-results.component.ts
index bb190be6a1e861fcf81ffa3a2079ef2efd85ad72..0a07770454e0052412f1931d1014df807dccfde0 100644
--- a/src/app/components/pab-results/pab-results.component.ts
+++ b/src/app/components/pab-results/pab-results.component.ts
@@ -1,4 +1,5 @@
 import { Component, Input } from "@angular/core";
+import { LogHelper } from "app/results/log-helper";
 
 import { Result, cLog, Message, MessageCode, MessageSeverity } from "jalhyd";
 
@@ -19,6 +20,8 @@ export class PabResultsComponent extends ResultsComponentDirective {
     /** résultats non mis en forme */
     private _pabResults: PabResults;
 
+    private _logHelper: LogHelper;
+
     constructor(
         private i18nService: I18nService,
     ) {
@@ -30,167 +33,18 @@ export class PabResultsComponent extends ResultsComponentDirective {
         this._pabResults = undefined;
         if (rs.length > 0 && rs[0] instanceof PabResults) {
             this._pabResults = rs[0] as PabResults;
-        }
-    }
-
-    private mergeGlobalLog(result: Result, log: cLog) {
-        if (result) {
-            if (result.hasGlobalLog()) {
-                log.addLog(result.globalLog);
-            }
-            // if no parameter is varying, 1st element log is considered "global"
-            if (this.pabResults.variatedParameters.length === 0) {
-                if (result.hasResultElements() && result.resultElement.hasLog()) {
-                    log.addLog(result.log);
-                }
-            }
-        }
-    }
 
-    /**
-     * Returns the number of errors, warnings, infos among children logs
-     */
-    private logStats(): any {
-        const ret = {
-            info: 0,
-            warning: 0,
-            error: 0
-        };
-        if (this._pabResults.result && this._pabResults.result.hasLog()) {
-            for (const re of this._pabResults.result.resultElements) {
-                if (re.hasLog()) {
-                    for (const m of re.log.messages) {
-                        const s = m.getSeverity();
-                        switch (s) {
-                            case MessageSeverity.INFO:
-                                ret.info ++;
-                                break;
-                            case MessageSeverity.WARNING:
-                                ret.warning ++;
-                                break;
-                            case MessageSeverity.ERROR:
-                                ret.error ++;
-                                break;
-                        }
-                    }
-                }
-            }
-        }
-        for (const cr of this._pabResults.cloisonsResults) {
-            if (cr && cr.hasLog()) {
-                for (const re of cr.resultElements) {
-                    if (re.hasLog()) {
-                        for (const m of re.log.messages) {
-                            const s = m.getSeverity();
-                            switch (s) {
-                                case MessageSeverity.INFO:
-                                    ret.info ++;
-                                    break;
-                                case MessageSeverity.WARNING:
-                                    ret.warning ++;
-                                    break;
-                                case MessageSeverity.ERROR:
-                                    ret.error ++;
-                                    break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        if (this._pabResults.cloisonAvalResults && this._pabResults.cloisonAvalResults.hasLog()) {
-            for (const re of this._pabResults.cloisonAvalResults.resultElements) {
-                if (re.hasLog()) {
-                    for (const m of re.log.messages) {
-                        const s = m.getSeverity();
-                        switch (s) {
-                            case MessageSeverity.INFO:
-                                ret.info ++;
-                                break;
-                            case MessageSeverity.WARNING:
-                                ret.warning ++;
-                                break;
-                            case MessageSeverity.ERROR:
-                                ret.error ++;
-                                break;
-                        }
-                    }
-                }
-            }
+            // log helper
+            this._logHelper = new LogHelper(this._pabResults, this._pabResults.cloisonsResults, this._pabResults.cloisonAvalResults);
         }
-        return ret;
     }
 
-    /*
-     * Retourne les logs à afficher dans le composant de log global, au dessus
-     * du sélecteur d'itération : messages globaux et / ou résumé des messages
-     * spécifiques à chaque ResultElement
-     */
     public get globalLog(): cLog {
-        const l = new cLog();
-        if (this._pabResults && this.pabResults.variatedParameters.length > 0) {
-            this.mergeGlobalLog(this._pabResults.result, l);
-            // un problème avec la PAB en général / les cloisons, à une étape quelconque ?
-            if (
-                (this.pabResults.hasLog)
-                && l.messages.length === 0 // existing global messages make generic message below useless
-            ) {
-                const logStats = this.logStats();
-                const m = new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED);
-                m.extraVar.info = "" + logStats.info; // to avoid displaying fixed number of digits
-                m.extraVar.warning = "" + logStats.warning;
-                m.extraVar.error = "" + logStats.error;
-                l.add(m);
-                // l.add(new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED));
-            }
-        } // sinon pas de log global (aucun paramètre ne varie)
-        return l;
+        return this._logHelper.globalLog;
     }
 
-    /**
-     * Retourne les logs à afficher dans le composant de log local, en dessous
-     * du sélecteur d'itération : messages concernant l'itération (le ResultElement)
-     * en cours
-     */
     public get iterationLog(): cLog {
-        const l = new cLog();
-        if (this._pabResults) {
-            if (this.pabResults.variatedParameters.length > 0) {
-                // A. si un paramètre varie
-                const vi = this._pabResults.variableIndex;
-                // log de la PAB pour l'itération en cours
-                if (
-                    this._pabResults.result
-                    && this._pabResults.result.hasResultElements()
-                    && this._pabResults.result.resultElements[vi]
-                    && this._pabResults.result.resultElements[vi].hasLog()
-                ) {
-                    l.addLog(this._pabResults.result.resultElements[vi].log);
-                }
-                // logs des enfants pour l'itération en cours
-                for (const cr of this._pabResults.cloisonsResults) {
-                    if (cr && cr.hasResultElements() && cr.resultElements[vi].hasLog()) {
-                        l.addLog(cr.resultElements[vi].log);
-                    }
-                }
-                if (this._pabResults.cloisonAvalResults && this._pabResults.cloisonAvalResults.resultElements[vi].hasLog()) {
-                    l.addLog(this._pabResults.cloisonAvalResults.resultElements[vi].log);
-                }
-            } else {
-                // B. si aucun paramètre ne varie
-                this.mergeGlobalLog(this._pabResults.result, l); // faut bien mettre le log global quelque part
-                // logs des enfants
-                for (const cr of this._pabResults.cloisonsResults) {
-                    if (cr && cr.hasResultElements() && cr.resultElement.hasLog()) {
-                        l.addLog(cr.resultElement.log);
-                    }
-                }
-                if (this._pabResults.cloisonAvalResults && this._pabResults.cloisonAvalResults.resultElement.hasLog()) {
-                    l.addLog(this._pabResults.cloisonAvalResults.resultElement.log);
-                }
-            }
-        }
-        return l;
+        return this._logHelper.iterationLog;
     }
 
     public get pabResults() {
diff --git a/src/app/components/pb-results/pb-results.component.ts b/src/app/components/pb-results/pb-results.component.ts
index a5136f9e92a69a0480a7025c9b81495fe978a59c..4b0f2b77a6c5aca2cc9f98478d21cc394dd58714 100644
--- a/src/app/components/pb-results/pb-results.component.ts
+++ b/src/app/components/pb-results/pb-results.component.ts
@@ -5,6 +5,8 @@ import { PrebarrageResults } from "../../results/prebarrage-results";
 import { I18nService } from "../../services/internationalisation.service";
 
 import { cLog, Message, MessageCode, MessageSeverity, PreBarrage, Result } from "jalhyd";
+import { ServiceFactory } from "app/services/service-factory";
+import { LogHelper } from "app/results/log-helper";
 
 @Component({
     selector: "pb-results",
@@ -18,6 +20,8 @@ export class PbResultsComponent {
     /** résultats des bassins, non mis en forme */
     private _pbResults: PrebarrageResults;
 
+    private _logHelper: LogHelper;
+
     constructor(
         private i18nService: I18nService,
     ) { }
@@ -25,9 +29,23 @@ export class PbResultsComponent {
     @Input()
     public set results(rs: CalculatorResults[]) {
         this._pbResults = undefined;
+        this._logHelper = undefined;
         for (const r of rs) {
             if (r instanceof PrebarrageResults) {
                 this._pbResults = r as PrebarrageResults;
+
+                // log helper
+
+                const childResults: Result[] = [];
+                const sn = this._pbResults.result?.sourceNub as PreBarrage;
+                if (sn?.children) {
+                    for (const cr of sn.children) {
+                        if (cr.result) {
+                            childResults.push(cr.result);
+                        }
+                    }
+                }
+                this._logHelper = new LogHelper(this._pbResults, childResults);
             }
         }
     }
@@ -56,149 +74,12 @@ export class PbResultsComponent {
         return this._pbResults && this._pbResults.hasWallResults;
     }
 
-    private mergeGlobalLog(result: Result, log: cLog) {
-        if (result) {
-            if (result.hasGlobalLog()) {
-                log.addLog(result.globalLog);
-            }
-            // if no parameter is varying, 1st element log is considered "global"
-            if (this.pbResults.variatedParameters.length === 0) {
-                if (result.hasResultElements() && result.resultElement.hasLog()) {
-                    log.addLog(result.log);
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns the number of errors, warnings, infos among children logs
-     */
-    private logStats(): any {
-        const ret = {
-            info: 0,
-            warning: 0,
-            error: 0
-        };
-        if (this._pbResults.result?.hasLog()) {
-            for (const re of this._pbResults.result.resultElements) {
-                if (re.hasLog()) {
-                    for (const m of re.log.messages) {
-                        const s = m.getSeverity();
-                        switch (s) {
-                            case MessageSeverity.INFO:
-                                ret.info ++;
-                                break;
-                            case MessageSeverity.WARNING:
-                                ret.warning ++;
-                                break;
-                            case MessageSeverity.ERROR:
-                                ret.error ++;
-                                break;
-                        }
-                    }
-                }
-            }
-        }
-        const pb = this._pbResults.result.sourceNub as PreBarrage;
-        for (const pbc of pb.children) { // bassins et cloisons
-            if (pbc.result !== undefined) {
-                for (const re of pbc.result.resultElements) {
-                    if (re.hasLog()) {
-                        for (const m of re.log.messages) {
-                            const s = m.getSeverity();
-                            switch (s) {
-                                case MessageSeverity.INFO:
-                                    ret.info ++;
-                                    break;
-                                case MessageSeverity.WARNING:
-                                    ret.warning ++;
-                                    break;
-                                case MessageSeverity.ERROR:
-                                    ret.error ++;
-                                    break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return ret;
-    }
-
-    /*
-     * Retourne les logs à afficher dans le composant de log global, au dessus
-     * du sélecteur d'itération : messages globaux et / ou résumé des messages
-     * spécifiques à chaque ResultElement
-     */
     public get globalLog(): cLog {
-        const l = new cLog();
-        /* console.log(
-            `>> Global Log >> this._pbResults: ${this._pbResults !== undefined}`
-            + `, vpl: ${this?._pbResults?.variatedParameters?.length}`
-            + `, hasLog: ${this?._pbResults?.hasLog}`
-        ); */
-        if (this._pbResults && this.pbResults.variatedParameters.length > 0) {
-            this.mergeGlobalLog(this._pbResults.result, l);
-            // console.log(">>>> after merge, messages length=", l.messages.length);
-            // un problème avec le PB en général / les cloisons / les bassins, à une étape quelconque ?
-            if (
-                (this.pbResults.hasLog)
-                && l.messages.length === 0 // existing global messages make generic message below useless
-            ) {
-                const logStats = this.logStats();
-                const m = new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED);
-                m.extraVar.info = "" + logStats.info; // to avoid displaying fixed number of digits
-                m.extraVar.warning = "" + logStats.warning;
-                m.extraVar.error = "" + logStats.error;
-                l.add(m);
-            }
-        } // sinon pas de log global (aucun paramètre ne varie)
-        return l;
+        return this._logHelper.globalLog;
     }
 
-    /**
-     * Retourne les logs à afficher dans le composant de log local, en dessous
-     * du sélecteur d'itération : messages concernant l'itération (le ResultElement)
-     * en cours
-     */
     public get iterationLog(): cLog {
-        const l = new cLog();
-        if (this._pbResults?.result) {
-            const pb = this._pbResults.result.sourceNub as PreBarrage;
-            if (this._pbResults.variatedParameters.length > 0) {
-                // A. si un paramètre varie
-                const vi = this._pbResults.variableIndex;
-                // log du PB pour l'itération en cours
-                if (
-                    this._pbResults.result
-                    && this._pbResults.result.hasResultElements()
-                    && this._pbResults.result.resultElements[vi]
-                    && this._pbResults.result.resultElements[vi]?.hasLog()
-                ) {
-                    l.addLog(this._pbResults.result.resultElements[vi].log);
-                }
-                // logs des enfants pour l'itération en cours
-                if (pb !== undefined) {
-                    for (const pbc of pb.children) {
-                        if (pbc?.result?.hasResultElements() && pbc.result.resultElements[vi]?.hasLog()) {
-                            l.addLog(pbc.result.resultElements[vi].log);
-                        }
-                    }
-                }
-            } else {
-                // B. si aucun paramètre ne varie
-                this.mergeGlobalLog(this._pbResults.result, l); // faut bien mettre le log global quelque part
-                // logs des enfants
-                if (pb !== undefined) {
-                    for (const pbc of pb.children) {
-                        if (pbc?.result?.hasResultElements() && pbc.result.resultElement?.hasLog()) {
-                            l.addLog(pbc.result.resultElement.log);
-                        }
-                    }
-                }
-            }
-        }
-        return l;
+        return this._logHelper.iterationLog;
     }
 
     public get uitextGeneralLogTitle(): string {
diff --git a/src/app/results/log-helper.ts b/src/app/results/log-helper.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1f24f07acc43ead8f700525f49e66653d889ff1f
--- /dev/null
+++ b/src/app/results/log-helper.ts
@@ -0,0 +1,172 @@
+import { cLog, Message, MessageCode, MessageSeverity, Result } from "jalhyd";
+import { MultiDimensionResults } from "./multidimension-results";
+
+/**
+ * calculation log helpers
+ */
+export class LogHelper {
+    constructor(private _mdr: MultiDimensionResults, private _childrenResults: Result[], private _extraResult?: Result) {
+    }
+
+    private mergeGlobalLog(result: Result, log: cLog) {
+        if (result) {
+            if (result.hasGlobalLog()) {
+                log.addLog(result.globalLog);
+            }
+            // if no parameter is varying, 1st element log is considered "global"
+            if (this._mdr.variatedParameters.length === 0) {
+                if (result.hasResultElements() && result.resultElement.hasLog()) {
+                    log.addLog(result.log);
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns the number of errors, warnings, infos among children logs
+     */
+    private logStats(): any {
+        const ret = {
+            info: 0,
+            warning: 0,
+            error: 0
+        };
+        if (this._mdr.result?.hasLog()) {
+            for (const re of this._mdr.result.resultElements) {
+                if (re.hasLog()) {
+                    for (const m of re.log.messages) {
+                        const s = m.getSeverity();
+                        switch (s) {
+                            case MessageSeverity.INFO:
+                                ret.info++;
+                                break;
+                            case MessageSeverity.WARNING:
+                                ret.warning++;
+                                break;
+                            case MessageSeverity.ERROR:
+                                ret.error++;
+                                break;
+                        }
+                    }
+                }
+            }
+        }
+        for (const cr of this._childrenResults) { // bassins et cloisons
+            if (cr && cr.hasLog()) {
+                for (const re of cr.resultElements) {
+                    if (re.hasLog()) {
+                        for (const m of re.log.messages) {
+                            const s = m.getSeverity();
+                            switch (s) {
+                                case MessageSeverity.INFO:
+                                    ret.info++;
+                                    break;
+                                case MessageSeverity.WARNING:
+                                    ret.warning++;
+                                    break;
+                                case MessageSeverity.ERROR:
+                                    ret.error++;
+                                    break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if (this._extraResult?.hasLog()) {
+            for (const re of this._extraResult.resultElements) {
+                if (re.hasLog()) {
+                    for (const m of re.log.messages) {
+                        const s = m.getSeverity();
+                        switch (s) {
+                            case MessageSeverity.INFO:
+                                ret.info++;
+                                break;
+                            case MessageSeverity.WARNING:
+                                ret.warning++;
+                                break;
+                            case MessageSeverity.ERROR:
+                                ret.error++;
+                                break;
+                        }
+                    }
+                }
+            }
+        }
+        return ret;
+    }
+
+    /*
+     * Retourne les logs à afficher dans le composant de log global, au dessus
+     * du sélecteur d'itération : messages globaux et / ou résumé des messages
+     * spécifiques à chaque ResultElement
+     */
+    public get globalLog(): cLog {
+        const l = new cLog();
+        if (this._mdr && this._mdr.variatedParameters.length > 0) {
+            this.mergeGlobalLog(this._mdr.result, l);
+            // un problème avec le nub en général / les cloisons / les bassins, à une étape quelconque ?
+            if (
+                (this._mdr.hasLog)
+                && l.messages.length === 0 // existing global messages make generic message below useless
+            ) {
+                const logStats = this.logStats();
+                const m = new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED);
+                m.extraVar.info = "" + logStats.info; // to avoid displaying fixed number of digits
+                m.extraVar.warning = "" + logStats.warning;
+                m.extraVar.error = "" + logStats.error;
+                l.add(m);
+            }
+        } // sinon pas de log global (aucun paramètre ne varie)
+        return l;
+    }
+
+    /**
+     * Retourne les logs à afficher dans le composant de log local, en dessous
+     * du sélecteur d'itération : messages concernant l'itération (le ResultElement)
+     * en cours
+     */
+    public get iterationLog(): cLog {
+        const l = new cLog();
+        if (this._mdr?.result) {
+            if (this._mdr.variatedParameters.length > 0) {
+                // A. si un paramètre varie
+                const vi = this._mdr.variableIndex;
+                // log du PB pour l'itération en cours
+                if (
+                    this._mdr.result
+                    && this._mdr.result.hasResultElements()
+                    && this._mdr.result.resultElements[vi]
+                    && this._mdr.result.resultElements[vi]?.hasLog()
+                ) {
+                    l.addLog(this._mdr.result.resultElements[vi].log);
+                }
+                // logs des enfants pour l'itération en cours
+                for (const cr of this._childrenResults) {
+                    if (cr.hasResultElements() && cr.resultElements[vi]?.hasLog()) {
+                        l.addLog(cr.resultElements[vi].log);
+                    }
+                }
+                // extra results
+                if (this._extraResult?.resultElements[vi].hasLog()) {
+                    // l.addLog(this._pabResults.cloisonAvalResults.resultElements[vi].log);
+                    l.addLog(this._extraResult.resultElements[vi].log);
+                }
+            } else {
+                // B. si aucun paramètre ne varie
+                this.mergeGlobalLog(this._mdr.result, l); // faut bien mettre le log global quelque part
+                // logs des enfants
+                for (const cr of this._childrenResults) {
+                    if (cr.hasResultElements() && cr.resultElement?.hasLog()) {
+                        l.addLog(cr.resultElement.log);
+                    }
+                }
+                // extra result
+                if (this._extraResult?.resultElement.hasLog()) {
+                    l.addLog(this._extraResult.resultElement.log);
+                }
+            }
+        }
+        return l;
+    }
+}