diff --git a/spec/structure/structure_jalhyd219_debit_nul.spec.ts b/spec/structure/structure_jalhyd219_debit_nul.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..15d0a2f76b4e1204a82f60c34af3798d6b44c929
--- /dev/null
+++ b/spec/structure/structure_jalhyd219_debit_nul.spec.ts
@@ -0,0 +1,40 @@
+import { RectangularStructureParams, StructureWeirFree } from "../../src/internal_modules";
+
+describe("jalhyd#219 cote amont d'un ouvrage dénoyé à débit nul :", () => {
+    function createStruct(z1: number, zr: number): StructureWeirFree {
+        const s: StructureWeirFree = new StructureWeirFree(
+            new RectangularStructureParams(0, // Q
+                zr, // ZDV
+                z1, // Z1
+                92, // Z2
+                1, // L
+                0.6, // Cd
+                0.8 // W
+            ),
+            false
+        );
+        s.calculatedParam = s.prms.Z1;
+        return s;
+    }
+
+    it("cote amont initiale < Zr", () => {
+        const z1: number = 90;
+        const zr: number = 100;
+        const s: StructureWeirFree = createStruct(z1, zr);
+        expect(s.CalcSerie().vCalc).toBeCloseTo(zr, 3);
+    });
+
+    it("cote amont initiale = Zr", () => {
+        const z1: number = 100;
+        const zr: number = 100;
+        const s: StructureWeirFree = createStruct(z1, zr);
+        expect(s.CalcSerie().vCalc).toBeCloseTo(zr, 3);
+    });
+
+    it("cote amont initiale > Zr", () => {
+        const z1: number = 110;
+        const zr: number = 100;
+        const s: StructureWeirFree = createStruct(z1, zr);
+        expect(s.CalcSerie().vCalc).toBeCloseTo(zr, 3);
+    });
+});
diff --git a/src/structure/structure.ts b/src/structure/structure.ts
index 0363d5133eabb71e30e54a71ff16896f9cdb262c..09e64c33bf7a8e0008784f6f7c6064a6ab8285de 100644
--- a/src/structure/structure.ts
+++ b/src/structure/structure.ts
@@ -194,10 +194,13 @@ export abstract class Structure extends ChildNub {
             // Débit nul <=> tirant d'eau amont = tirant d'eau aval ou tout autre paramètre nul
             switch (sVarCalc) {
                 case "Z1":
-                    this.currentResultElement = new Result(this.prms.Z2.v, this, flagsNull);
+                    // max(Z2,ZDV) dans le cas dénoyé et noyé
+                    // on met Z1 à ZDV pour faciliter les calculs sur les prébarrages
+                    this.currentResultElement = new Result(Math.max(this.prms.Z2.v, this.prms.ZDV.v), this, flagsNull);
                     return this._result;
                 case "Z2":
-                    this.currentResultElement = new Result(this.prms.Z1.v, this, flagsNull);
+                    // max(Z1,ZDV) dans le cas dénoyé et noyé
+                    this.currentResultElement = new Result(Math.max(this.prms.Z1.v, this.prms.ZDV.v), this, flagsNull);
                     return this._result;
                 default:
                     // Est-ce toujours vrai ? Nécessitera peut-être d'étendre la méthode