diff --git a/spec/param/param_modes.spec.ts b/spec/param/param_modes.spec.ts
index d4a88934386251f717fb950120c25e55beb7f322..7d3ae052867e726cbda88b30079bb8dd45c810d2 100644
--- a/spec/param/param_modes.spec.ts
+++ b/spec/param/param_modes.spec.ts
@@ -50,7 +50,7 @@ function createEnv() {
     nub2 = new ParallelStructure(prm2);
     nub2.addChild(
         CreateStructure(
-            LoiDebit.Cunge80,
+            LoiDebit.GateCunge80,
             nub2
         )
     );
diff --git a/spec/param/param_multivar.spec.ts b/spec/param/param_multivar.spec.ts
index 938a78586836fe7ff0fb64d411e66b5b46a68e2b..a41b0caf026637c4ea47af33d503e5616a86a796 100644
--- a/spec/param/param_multivar.spec.ts
+++ b/spec/param/param_multivar.spec.ts
@@ -15,7 +15,7 @@ let prmsStruct2: RectangularStructureParams;
 function createSingleNubEnv() {
     prms1 = new ParallelStructureParams(0.5, 102, 101.5);
     nub1 = new ParallelStructure(prms1);
-    struct1 = CreateStructure(LoiDebit.Cunge80, nub1);
+    struct1 = CreateStructure(LoiDebit.GateCunge80, nub1);
     prmsStruct1 = struct1.prms as RectangularStructureParams;
     nub1.addChild(struct1);
 }
@@ -23,13 +23,13 @@ function createSingleNubEnv() {
 function createLinkedNubEnv() {
     prms1 = new ParallelStructureParams(0.5, 102, 101.5);
     nub1 = new ParallelStructure(prms1);
-    struct1 = CreateStructure(LoiDebit.Cunge80, nub1);
+    struct1 = CreateStructure(LoiDebit.GateCunge80, nub1);
     prmsStruct1 = struct1.prms as RectangularStructureParams;
     nub1.addChild(struct1);
 
     prms2 = new ParallelStructureParams(0.5, 102, 101.5);
     nub2 = new ParallelStructure(prms2);
-    struct2 = CreateStructure(LoiDebit.Cunge80, nub2);
+    struct2 = CreateStructure(LoiDebit.GateCunge80, nub2);
     prmsStruct2 = struct2.prms as RectangularStructureParams;
     nub2.addChild(struct2);
 
diff --git a/spec/structure/structure_cem88d.spec.ts b/spec/structure/structure_cem88d.spec.ts
index 97cf6489e5427c61b3ef94739a4517f2a43b4476..4ec98e616a94dc3ca6fa4861bcb796bb8869bb37 100644
--- a/spec/structure/structure_cem88d.spec.ts
+++ b/spec/structure/structure_cem88d.spec.ts
@@ -8,13 +8,16 @@
 
 import { RectangularStructureParams } from "../../src/structure/rectangular_structure_params";
 import { StructureFlowMode, StructureFlowRegime } from "../../src/structure/structure";
-import { StructureWeirCem88d } from "../../src/structure/structure_cem88d";
+import { StructureGateCem88d, StructureWeirCem88d } from "../../src/structure/structure_cem88d";
 import { itCalcQ } from "./functions";
 
 const structPrm: RectangularStructureParams = new RectangularStructureParams(1, 0, 1, 1, 2, 0.6, 0);
-const structTest: StructureWeirCem88d = new StructureWeirCem88d(structPrm, false);
 
-describe("Class StructureWeirCem88d: ", () => {
+function getStructureGateCem88d(): StructureGateCem88d {
+    return new StructureGateCem88d(structPrm, false);
+}
+
+describe("Class StructureGateCem88d: ", () => {
     describe("Calcul Q avec W croissant: ", () => {
         const W: number[] = [
             0.000000, 0.100000, 0.200000, 0.300000, 0.400000, 0.500000, 0.600000,
@@ -24,7 +27,7 @@ describe("Class StructureWeirCem88d: ", () => {
             3.705518, 4.296608, 4.831177, 5.302464, 5.700445, 6.007777, 6.175863, 6.175863];
 
         for (let i = 0; i < Q.length; i++) {
-            itCalcQ(structTest, h1, W[i], Q[i]);
+            itCalcQ(getStructureGateCem88d(), h1, W[i], Q[i]);
         }
     });
     describe("Calcul Q en charge avec h1 croissant: ", () => {
@@ -37,7 +40,7 @@ describe("Class StructureWeirCem88d: ", () => {
             StructureFlowRegime.SUBMERGED, StructureFlowRegime.PARTIAL, StructureFlowRegime.FREE];
 
         for (let i = 0; i < Q.length; i++) {
-            itCalcQ(structTest, h1[i], W, Q[i], mode[i], regime[i]);
+            itCalcQ(getStructureGateCem88d(), h1[i], W, Q[i], mode[i], regime[i]);
         }
     });
     describe("Calcul Q a surface libre avec h1 croissant: ", () => {
@@ -50,7 +53,7 @@ describe("Class StructureWeirCem88d: ", () => {
             StructureFlowRegime.SUBMERGED, StructureFlowRegime.FREE];
 
         for (let i = 0; i < Q.length; i++) {
-            itCalcQ(structTest, h1[i], W, Q[i], mode[i], regime[i]);
+            itCalcQ(getStructureGateCem88d(), h1[i], W, Q[i], mode[i], regime[i]);
         }
     });
 });
diff --git a/spec/structure/structure_cem88v.spec.ts b/spec/structure/structure_cem88v.spec.ts
index b0cc8d453192106d265906de8fcd1bc1ef5e9d41..6dfd2411389b41d928e253c70290c8f4b2ccc778 100644
--- a/spec/structure/structure_cem88v.spec.ts
+++ b/spec/structure/structure_cem88v.spec.ts
@@ -9,16 +9,16 @@
 import { CreateStructure, LoiDebit, MessageCode, Result } from "../../src/index";
 import { RectangularStructureParams } from "../../src/structure/rectangular_structure_params";
 import { StructureFlowMode, StructureFlowRegime } from "../../src/structure/structure";
-import { StructureWeirCem88v } from "../../src/structure/structure_cem88v";
+import { StructureGateCem88v } from "../../src/structure/structure_cem88v";
 import { itCalcQ } from "./functions";
 
 let structPrm: RectangularStructureParams = new RectangularStructureParams(1, 0, 1, 1, 2, 0.6, 0);
-let  structTest: StructureWeirCem88v = new StructureWeirCem88v(structPrm, false);
+let  structTest: StructureGateCem88v = new StructureGateCem88v(structPrm, false);
 
-describe("Class StructureWeirCem88v: ", () => {
+describe("Class StructureGateCem88v: ", () => {
     beforeEach( () => {
         structPrm = new RectangularStructureParams(1, 0, 1, 1, 2, 0.6, 0);
-        structTest = new StructureWeirCem88v(structPrm, false);
+        structTest = new StructureGateCem88v(structPrm, false);
     });
     describe("Calcul Q avec W croissant: ", () => {
         const W: number[] = [0.000000, 0.100000, 0.200000, 0.300000, 0.400000, 0.500000,
diff --git a/spec/structure/structure_cunge80.spec.ts b/spec/structure/structure_cunge80.spec.ts
index 45ee33c62ba4531f2d79b44a6abfd3cd7ff5fed8..c3384679770dc8e25d203acddaa5d484d3625b60 100644
--- a/spec/structure/structure_cunge80.spec.ts
+++ b/spec/structure/structure_cunge80.spec.ts
@@ -8,12 +8,12 @@
 
 import { RectangularStructureParams } from "../../src/structure/rectangular_structure_params";
 import { StructureFlowMode, StructureFlowRegime } from "../../src/structure/structure";
-import { StructureCunge80 } from "../../src/structure/structure_cunge80";
+import { StructureGateCunge80 } from "../../src/structure/structure_cunge80";
 import { Result } from "../../src/util/result";
 import { itCalcQ } from "./functions";
 
 const structPrm: RectangularStructureParams = new RectangularStructureParams(1, 0, 1, 1, 2, 0.6, 0);
-const structTest: StructureCunge80 = new StructureCunge80(structPrm, false);
+const structTest: StructureGateCunge80 = new StructureGateCunge80(structPrm, false);
 
 describe("Class StructureCunge80: ", () => {
     describe("Calcul Q avec W croissant: ", () => {
diff --git a/spec/structure/structure_test.ts b/spec/structure/structure_test.ts
index 9cff08f179b8b5c31406377a867935a9e13b0d5f..d235fcb40b7eb4537188d8a4fc44b4ebd00f1362 100644
--- a/spec/structure/structure_test.ts
+++ b/spec/structure/structure_test.ts
@@ -55,5 +55,7 @@ export class StructureTest extends Structure {
  */
 export function CreateStructTest() {
     const structTestPrm: StructureParams = new StructureParams(1, 0, 30, 15);
-    return new StructureTest(structTestPrm, false);
+    const st = new StructureTest(structTestPrm, false);
+    st.prms.W.visible = true;
+    return st;
 }
diff --git a/spec/structure/structure_weir_free.spec.ts b/spec/structure/structure_weir_free.spec.ts
index 7484c8f9ce3326ab6da96060928ac1bd4fd38cbc..004cf2891d90d6f60e077b6db6f0d5cfa348238b 100644
--- a/spec/structure/structure_weir_free.spec.ts
+++ b/spec/structure/structure_weir_free.spec.ts
@@ -19,11 +19,9 @@ function getStructTest(): StructureWeirFree {
 describe("Class StructureWeirFree: ", () => {
     describe("Calcul Q avec W croissant: ", () => {
         const W: number[] = [
-            0.000000, 0.100000, 0.200000, 0.300000, 0.400000, 0.500000, 0.600000,
-            0.700000, 0.800000, 0.900000, 1.000000, 1.100000, 1.200000, 1.300000];
+            0.000000, 1.300000];
         const h1: number = 1.200000;
-        const Q: number[] = [0.000000, 6.987191, 6.987191, 6.987191, 6.987191, 6.987191,
-            6.987191, 6.987191, 6.987191, 6.987191, 6.987191, 6.987191, 6.987191, 6.987191];
+        const Q: number[] = [6.987191, 6.987191];
 
         for (let i = 0; i < Q.length; i++) {
             itCalcQ(getStructTest(), h1, W[i], Q[i]);
diff --git a/spec/value_ref/value_ref_type_section.spec.ts b/spec/value_ref/value_ref_type_section.spec.ts
index aacf137bdb786abf34c35929b880a33963bbfb82..e38d265b7ea333c82c8de53d76e7abb881627e83 100644
--- a/spec/value_ref/value_ref_type_section.spec.ts
+++ b/spec/value_ref/value_ref_type_section.spec.ts
@@ -34,7 +34,7 @@ function createEnv() {
     nub2 = new ParallelStructure(prm2);
     nub2.addChild(
         CreateStructure(
-            LoiDebit.Cunge80,
+            LoiDebit.GateCunge80,
             nub2
         )
     );
diff --git a/src/structure/factory_structure.ts b/src/structure/factory_structure.ts
index 8ee6dfe466106e112a05d4194a7b19e884971862..c5f27f406347d594a5c00d6204bfefe4fa08b9bf 100755
--- a/src/structure/factory_structure.ts
+++ b/src/structure/factory_structure.ts
@@ -8,7 +8,7 @@ import { LoiDebit } from "./structure_props";
 // Equations de débit
 import { StructureGateCem88d, StructureWeirCem88d } from "./structure_cem88d";
 import { StructureGateCem88v, StructureWeirCem88v } from "./structure_cem88v";
-import { StructureCunge80 } from "./structure_cunge80";
+import { StructureGateCunge80, StructureWeirCunge80 } from "./structure_cunge80";
 import { StructureKivi, StructureKiviParams } from "./structure_kivi";
 import { StructureOrificeSubmerged, StructureOrificeSubmergedParams } from "./structure_orifice_submerged";
 import { StructureRectangularOrificeFree } from "./structure_rectangular_orifice_free";
@@ -51,7 +51,7 @@ export function CreateStructure(loiDebit: LoiDebit, parentNub?: ParallelStructur
     switch (loiDebit) {
         case LoiDebit.GateCem88d:
         case LoiDebit.GateCem88v:
-        case LoiDebit.Cunge80:
+        case LoiDebit.GateCunge80:
         case LoiDebit.RectangularOrificeFree:
         case LoiDebit.RectangularOrificeSubmerged:
             rectStructPrms.W.singleValue = 0.5;
@@ -80,9 +80,14 @@ export function CreateStructure(loiDebit: LoiDebit, parentNub?: ParallelStructur
             ret = new StructureGateCem88v(rectStructPrms, dbg);
             break;
 
-        case LoiDebit.Cunge80:
+        case LoiDebit.GateCunge80:
             rectStructPrms.Cd.v = oCd.VanneR; // Cd Cunge80 qu'on soit en seuil ou vanne
-            ret = new StructureCunge80(rectStructPrms, dbg);
+            ret = new StructureGateCunge80(rectStructPrms, dbg);
+            break;
+
+        case LoiDebit.WeirCunge80:
+            rectStructPrms.Cd.v = oCd.VanneR; // Cd Cunge80 qu'on soit en seuil ou vanne
+            ret = new StructureWeirCunge80(rectStructPrms, dbg);
             break;
 
         case LoiDebit.RectangularOrificeFree:
diff --git a/src/structure/rectangular_structure.ts b/src/structure/rectangular_structure.ts
index d127725e6d4a0643ce1ee87ad18c2ad886483b6c..d0b1650f0c41610b2b096c43e5218069f1d28433 100644
--- a/src/structure/rectangular_structure.ts
+++ b/src/structure/rectangular_structure.ts
@@ -24,7 +24,7 @@ export abstract class RectangularStructure extends Structure {
      * Calcul de l'aire d'écoulement sur le seuil ou dans l'orifice
      */
     public calcA(): number {
-            return Math.min(Math.max(this.prms.h1.v, this.prms.h2.v), this.prms.W.v) * this.prms.L.v;
+            return Math.min(Math.max(this.prms.h1.v, this.prms.h2.v), this.W) * this.prms.L.v;
     }
 
     /**
diff --git a/src/structure/structure.ts b/src/structure/structure.ts
index a8f8fa7e05ac40c475ecc5c2b05445366de4e0a5..01980793bd25b7caecb98d4437e8971bf6631551 100644
--- a/src/structure/structure.ts
+++ b/src/structure/structure.ts
@@ -104,6 +104,14 @@ export abstract class Structure extends Nub {
         return this._prms as StructureParams;
     }
 
+    get W(): number {
+        if (this.prms.W.visible) {
+            return this.prms.W.v;
+        } else {
+            return Infinity;
+        }
+    }
+
     /**
      * Returns the nth visible parameter (used in nghyd/PabTable)
      */
@@ -208,7 +216,7 @@ export abstract class Structure extends Nub {
         const flagsNull = { ENUM_StructureFlowMode: StructureFlowMode.NULL,
                             ENUM_StructureFlowRegime: StructureFlowRegime.NULL };
         if (sVarCalc === "Q") {
-            if (this.prms.h1.v <= 0 || Math.abs(this.prms.h1.v - this.prms.h2.v) < 1E-20 || this.prms.W.v <= 1E-20) {
+            if (this.prms.h1.v <= 0 || Math.abs(this.prms.h1.v - this.prms.h2.v) < 1E-20 || this.W <= 1E-20) {
                 return new Result(0, this, flagsNull);
             }
         } else if (this.prms.Q.v === 0) {
@@ -222,7 +230,7 @@ export abstract class Structure extends Nub {
                     // Est-ce toujours vrai ? Nécessitera peut-être d'étendre la méthode
                     return new Result(0, this, flagsNull);
             }
-        } else if (this.prms.W.v === 0 && sVarCalc === "Z1") {
+        } else if (this.W === 0 && sVarCalc === "Z1") {
             return new Result(Infinity, this, flagsNull); // Si la vanne est fermée la cote amont est infinie
         }
 
@@ -319,11 +327,11 @@ export abstract class Structure extends Nub {
      * Give the flow mode : weir or orifice flow
      */
     protected getFlowMode(): StructureFlowMode {
-        if (this.prms.h1.v > this.prms.W.v) {
-            this.debug("Structure.getFlowMode(h1=" + this.prms.h1.v + ",W=" + this.prms.W.v + ")=ORIFICE");
+        if (this.prms.h1.v > this.W) {
+            this.debug("Structure.getFlowMode(h1=" + this.prms.h1.v + ",W=" + this.W + ")=ORIFICE");
             return StructureFlowMode.ORIFICE;
         } else {
-            this.debug("Structure.getFlowMode(h1=" + this.prms.h1.v + ",W=" + this.prms.W.v + ")=WEIR");
+            this.debug("Structure.getFlowMode(h1=" + this.prms.h1.v + ",W=" + this.W + ")=WEIR");
             return StructureFlowMode.WEIR;
         }
 
@@ -340,20 +348,20 @@ export abstract class Structure extends Nub {
             this.debug(
                 "Structure.getFlowRegime(h1="
                 + this.prms.h1.v + ",h2=" + this.prms.h2.v
-                + ",W=" + this.prms.W.v + ")=FREE");
+                + ",W=" + this.W + ")=FREE");
             return StructureFlowRegime.FREE;
-        } else if (this.prms.h1.v > this.prms.W.v && this.prms.h2.v < (2 * this.prms.h1.v + this.prms.W.v) / 3) {
+        } else if (this.prms.h1.v > this.W && this.prms.h2.v < (2 * this.prms.h1.v + this.W) / 3) {
             // Partially submerged only for orifices
             this.debug(
                 "Structure.getFlowRegime(h1="
                 + this.prms.h1.v + ",h2=" + this.prms.h2.v
-                + ",W=" + this.prms.W.v + ")=PARTIAL");
+                + ",W=" + this.W + ")=PARTIAL");
             return StructureFlowRegime.PARTIAL;
         } else {
             // (Totally) submerged for both weirs and orifices
             this.debug(
                 "Structure.getFlowRegime(h1=" + this.prms.h1.v
-                + ",h2=" + this.prms.h2.v + ",W=" + this.prms.W.v + ")=SUBMERGED");
+                + ",h2=" + this.prms.h2.v + ",W=" + this.W + ")=SUBMERGED");
             return StructureFlowRegime.SUBMERGED;
         }
     }
diff --git a/src/structure/structure_cem88d.ts b/src/structure/structure_cem88d.ts
index 9b973e98dbac8f5021870bf97c4d82ff434a5086..7859dd480c5bf11c529d8bbf05ea0cc95fd7173a 100644
--- a/src/structure/structure_cem88d.ts
+++ b/src/structure/structure_cem88d.ts
@@ -9,14 +9,14 @@ export { RectangularStructureParams };
 /**
  * Equation CEM88D : déversoir / orifice (pelle importante) Cemagref 1988
  */
-export class StructureWeirCem88d extends RectangularStructure {
+export class StructureGateCem88d extends RectangularStructure {
 
     constructor(prms: RectangularStructureParams, dbg: boolean = false) {
         super(prms, dbg);
-        this._loiDebit = LoiDebit.WeirCem88d;
-        if (prms.W.v !== Infinity) {
-            this._isZDVcalculable = false;
-        }
+        this._loiDebit = LoiDebit.GateCem88d;
+        this._isZDVcalculable = false;
+        // Gestion de l'affichage l'ouverture de vanne
+        this.prms.W.visible = true;
     }
 
     /**
@@ -45,7 +45,7 @@ export class StructureWeirCem88d extends RectangularStructure {
                 }
                 break;
             case StructureFlowMode.ORIFICE:
-                const b3: number = Math.pow(this.prms.h1.v - this.prms.W.v, 1.5);
+                const b3: number = Math.pow(this.prms.h1.v - this.W, 1.5);
                 switch (data.ENUM_StructureFlowRegime) {
                     case StructureFlowRegime.FREE:
                         v = cd * (this.prms.h1.v * b1 - b3);
@@ -54,26 +54,31 @@ export class StructureWeirCem88d extends RectangularStructure {
                         v = cd1 * b2 * this.prms.h2.v - cd * b3;
                         break;
                     case StructureFlowRegime.SUBMERGED:
-                        v = cd1 * b2 * this.prms.W.v;
+                        v = cd1 * b2 * this.W;
                         this.debug("StructureWeirCem88d.Equation ORIFICE SUBMERGED Q=" + v);
                         break;
                 }
         }
         this.debug(
             "StructureWeirCem88d.Equation(h1=" + this.prms.h1.v + ",h2="
-            + this.prms.h2.v + ",W=" + this.prms.W.v + ") => Q=" + v);
+            + this.prms.h2.v + ",W=" + this.W + ") => Q=" + v);
 
         return new Result(v, this, data);
     }
 }
 
 // tslint:disable-next-line:max-classes-per-file
-export class StructureGateCem88d extends StructureWeirCem88d {
+export class StructureWeirCem88d extends StructureGateCem88d {
 
     constructor(prms: RectangularStructureParams, dbg: boolean = false) {
         super(prms, dbg);
-        this._loiDebit = LoiDebit.GateCem88d;
-        // afficher l'ouverture de vanne
-        this.prms.W.visible = true;
+        this._loiDebit = LoiDebit.WeirCem88d;
+        this._isZDVcalculable = true;
+        // Gestion de l'affichage l'ouverture de vanne
+        this.prms.W.visible = false;
+    }
+
+    protected getFlowMode(): StructureFlowMode {
+        return StructureFlowMode.WEIR;
     }
 }
diff --git a/src/structure/structure_cem88v.ts b/src/structure/structure_cem88v.ts
index e416201c256638bd992ac69dfd5b4c2d2acadcd7..2c9699b2c82cad00f0d3b4fb207d2e5a3886c15d 100644
--- a/src/structure/structure_cem88v.ts
+++ b/src/structure/structure_cem88v.ts
@@ -9,11 +9,12 @@ export { RectangularStructureParams };
 /**
  * Equation CEM88V : déversoir / vanne de fond (pelle faible) Cemagref 1988
  */
-export class StructureWeirCem88v extends RectangularStructure {
+export class StructureGateCem88v extends RectangularStructure {
 
     constructor(prms: RectangularStructureParams, dbg: boolean = false) {
         super(prms, dbg);
-        this._loiDebit = LoiDebit.WeirCem88v;
+        this._loiDebit = LoiDebit.GateCem88v;
+        this.prms.W.visible = true;
     }
 
     /**
@@ -43,33 +44,33 @@ export class StructureWeirCem88v extends RectangularStructure {
                 }
                 break;
             case StructureFlowMode.ORIFICE:
-                const mu: number = mu0 - 0.08 / (this.prms.h1.v / this.prms.W.v);
-                const mu1: number = mu0 - 0.08 / (this.prms.h1.v / this.prms.W.v - 1);
+                const mu: number = mu0 - 0.08 / (this.prms.h1.v / this.W);
+                const mu1: number = mu0 - 0.08 / (this.prms.h1.v / this.W - 1);
                 if (data.ENUM_StructureFlowRegime === StructureFlowRegime.FREE) {
                     v = this.prms.L.v * Structure.R2G
                         * (mu * Math.pow(this.prms.h1.v, 1.5)
-                            - mu1 * Math.pow(this.prms.h1.v - this.prms.W.v, 1.5));
+                            - mu1 * Math.pow(this.prms.h1.v - this.W, 1.5));
                 } else {
                     if (data.ENUM_StructureFlowRegime === StructureFlowRegime.PARTIAL) {
                         v = this.prms.L.v * Structure.R2G * (
                             KF * mu * Math.pow(this.prms.h1.v, 1.5)
-                            - mu1 * Math.pow(this.prms.h1.v - this.prms.W.v, 1.5)
+                            - mu1 * Math.pow(this.prms.h1.v - this.W, 1.5)
                         );
                     } else {
                         const KF1 = this.getKF(
-                            Math.sqrt(1 - (this.prms.h2.v - this.prms.W.v) / (this.prms.h1.v - this.prms.W.v)),
-                            this.getAlfa(this.prms.h2.v - this.prms.W.v),
+                            Math.sqrt(1 - (this.prms.h2.v - this.W) / (this.prms.h1.v - this.W)),
+                            this.getAlfa(this.prms.h2.v - this.W),
                         );
                         v = this.prms.L.v * Structure.R2G * (
                             KF * mu * Math.pow(this.prms.h1.v, 1.5)
-                            - KF1 * mu1 * Math.pow(this.prms.h1.v - this.prms.W.v, 1.5)
+                            - KF1 * mu1 * Math.pow(this.prms.h1.v - this.W, 1.5)
                         );
                     }
                 }
         }
         this.debug(
             "StructureWeirCem88v.Equation(h1=" + this.prms.h1.v
-            + ",h2=" + this.prms.h2.v + ",W=" + this.prms.W.v + ") => Q=" + v);
+            + ",h2=" + this.prms.h2.v + ",W=" + this.W + ") => Q=" + v);
 
         return new Result(v, this, data);
     }
@@ -92,29 +93,29 @@ export class StructureWeirCem88v extends RectangularStructure {
         if (this.prms.h2.v <= alfa * this.prms.h1.v) {
             this.debug(
                 "StructureWeirCem88v.getFlowRegime(h1=" + this.prms.h1.v
-                + ",h2=" + this.prms.h2.v + ",W=" + this.prms.W.v + ")=FREE");
+                + ",h2=" + this.prms.h2.v + ",W=" + this.W + ")=FREE");
             return StructureFlowRegime.FREE;
         } else {
-            alfa = this.getAlfa(this.prms.h2.v - this.prms.W.v);
+            alfa = this.getAlfa(this.prms.h2.v - this.W);
             if (
                 mode === StructureFlowMode.ORIFICE
-                && this.prms.h2.v <= alfa * this.prms.h1.v + (1 - alfa) * this.prms.W.v
+                && this.prms.h2.v <= alfa * this.prms.h1.v + (1 - alfa) * this.W
             ) {
                 this.debug(
                     "StructureWeirCem88v.getFlowRegime(h1="  + this.prms.h1.v
-                    + ",h2=" + this.prms.h2.v + ",W=" + this.prms.W.v + ")=PARTIAL");
+                    + ",h2=" + this.prms.h2.v + ",W=" + this.W + ")=PARTIAL");
                 return StructureFlowRegime.PARTIAL;
             } else {
                 this.debug(
                     "StructureWeirCem88v.getFlowRegime(h1=" + this.prms.h1.v
-                    + ",h2=" + this.prms.h2.v + ",W=" + this.prms.W.v + ")=SUBMERGED");
+                    + ",h2=" + this.prms.h2.v + ",W=" + this.W + ")=SUBMERGED");
                 return StructureFlowRegime.SUBMERGED;
             }
         }
     }
 
     private getAlfa(h2: number): number {
-        let alfa: number = 1 - 0.14 * (h2) / this.prms.W.v;
+        let alfa: number = 1 - 0.14 * (h2) / this.W;
         alfa = Math.min(Math.max(alfa, 0.4), 0.75);
         // console.log("alfa=" + alfa);
         return alfa;
@@ -134,12 +135,15 @@ export class StructureWeirCem88v extends RectangularStructure {
 }
 
 // tslint:disable-next-line:max-classes-per-file
-export class StructureGateCem88v extends StructureWeirCem88v {
+export class StructureWeirCem88v extends StructureGateCem88v {
 
     constructor(prms: RectangularStructureParams, dbg: boolean = false) {
         super(prms, dbg);
-        this._loiDebit = LoiDebit.GateCem88v;
-        // afficher l'ouverture de vanne
-        this.prms.W.visible = true;
+        this._loiDebit = LoiDebit.WeirCem88v;
+        this.prms.W.visible = false;
+    }
+
+    protected getFlowMode(): StructureFlowMode {
+        return StructureFlowMode.WEIR;
     }
 }
diff --git a/src/structure/structure_cunge80.ts b/src/structure/structure_cunge80.ts
index 2df43729d906b503cb579f1b9044231ecbbc1d82..fba8ee9e29cabdba644f711e0d31c1c44e29f4c9 100644
--- a/src/structure/structure_cunge80.ts
+++ b/src/structure/structure_cunge80.ts
@@ -9,11 +9,11 @@ export { RectangularStructureParams };
 /**
  * Equation Cunge80
  */
-export class StructureCunge80 extends RectangularStructure {
+export class StructureGateCunge80 extends RectangularStructure {
 
     constructor(prms: RectangularStructureParams, dbg: boolean = false) {
         super(prms, dbg);
-        this._loiDebit = LoiDebit.Cunge80;
+        this._loiDebit = LoiDebit.GateCunge80;
         if (prms.W.v !== Infinity) {
             this._isZDVcalculable = false;
         }
@@ -37,7 +37,7 @@ export class StructureCunge80 extends RectangularStructure {
                     this.debug("StructureCunge80.Equation WEIR FREE Q=" + v);
                 } else {
                     v = this.prms.Cd.v * this.prms.L.v * Structure.R2G
-                        * this.prms.W.v * Math.pow(this.prms.h1.v - this.prms.W.v, 0.5);
+                        * this.W * Math.pow(this.prms.h1.v - this.W, 0.5);
                     this.debug("StructureCunge80.Equation ORIFICE FREE Q=" + v);
                 }
                 break;
@@ -48,7 +48,7 @@ export class StructureCunge80 extends RectangularStructure {
                     this.debug("StructureCunge80.Equation WEIR SUBMERGED Q=" + v);
                 } else {
                     v = this.prms.Cd.v * this.prms.L.v * Structure.R2G
-                        * this.prms.W.v * Math.sqrt(this.prms.h1.v - this.prms.h2.v);
+                        * this.W * Math.sqrt(this.prms.h1.v - this.prms.h2.v);
                     this.debug("StructureCunge80.Equation ORIFICE SUBMERGED Q=" + v);
                 }
         }
@@ -56,7 +56,7 @@ export class StructureCunge80 extends RectangularStructure {
         return new Result(v, this, data);
     }
 
-    protected getFlowRegime() {
+    protected getFlowRegime(): StructureFlowRegime {
         if (this.prms.h1.v >= 1.5 * this.prms.h2.v) {
             return StructureFlowRegime.FREE;
         } else {
@@ -64,21 +64,34 @@ export class StructureCunge80 extends RectangularStructure {
         }
     }
 
-    protected getFlowMode() {
+    protected getFlowMode(): StructureFlowMode {
         const regime: StructureFlowRegime = this.getFlowRegime();
-        switch (regime) {
-            case StructureFlowRegime.FREE:
-                if (this.prms.W.v <= 2 / 3 * this.prms.h1.v) {
-                    return StructureFlowMode.ORIFICE;
-                } else {
-                    return StructureFlowMode.WEIR;
-                }
-            case StructureFlowRegime.SUBMERGED:
-                if (this.prms.W.v <= this.prms.h2.v) {
-                    return StructureFlowMode.ORIFICE;
-                } else {
-                    return StructureFlowMode.WEIR;
-                }
+        if (regime === StructureFlowRegime.FREE) {
+            if (this.W <= 2 / 3 * this.prms.h1.v) {
+                return StructureFlowMode.ORIFICE;
+            } else {
+                return StructureFlowMode.WEIR;
+            }
+        } else {
+            if (this.W <= this.prms.h2.v) {
+                return StructureFlowMode.ORIFICE;
+            } else {
+                return StructureFlowMode.WEIR;
+            }
         }
     }
 }
+
+// tslint:disable-next-line:max-classes-per-file
+export class StructureWeirCunge80 extends StructureGateCunge80 {
+
+    constructor(prms: RectangularStructureParams, dbg: boolean = false) {
+        super(prms, dbg);
+        this._loiDebit = LoiDebit.WeirCunge80;
+        this.prms.W.visible = false;
+    }
+
+    protected getFlowMode(): StructureFlowMode {
+        return StructureFlowMode.WEIR;
+    }
+}
diff --git a/src/structure/structure_kivi.ts b/src/structure/structure_kivi.ts
index 55acfd95debee908badc0ee4cffaf2d45f03ac98..01dc093c1926de24657971e6576aeef2099f1b27 100644
--- a/src/structure/structure_kivi.ts
+++ b/src/structure/structure_kivi.ts
@@ -59,7 +59,7 @@ export class StructureKivi extends Structure {
      * Calcul de l'aire d'écoulement sur le seuil ou dans l'orifice
      */
     public calcA(): number {
-        return Math.min(Math.max(this.prms.h1.v, this.prms.h2.v), this.prms.W.v) * this.prms.L.v;
+        return Math.max(this.prms.h1.v, this.prms.h2.v) * this.prms.L.v;
     }
 
     protected getFlowRegime(): StructureFlowRegime {
diff --git a/src/structure/structure_props.ts b/src/structure/structure_props.ts
index 2937988664b08656832271b3bbd348099f13a473..fcbcd1e66c45e350f84e48f43d1a51b4b051fc02 100644
--- a/src/structure/structure_props.ts
+++ b/src/structure/structure_props.ts
@@ -19,8 +19,8 @@ export enum LoiDebit {
     WeirCem88d,
     // loi de débit Déversoir / Vanne de fond Cemagref 1988 (pour Seuil Rectangulaire)
     WeirCem88v,
-    // loi de débit Cunge 1980
-    Cunge80,
+    // loi de débit Vanne Cunge 1980
+    GateCunge80,
     // loi de débit pour vanne dénoyée
     RectangularOrificeFree,
     // loi de débit pour vanne noyée
@@ -42,7 +42,9 @@ export enum LoiDebit {
     // Vanne levante Larinier
     VanLevLarinier,
     // Vanne levante Villemonte
-    VanLevVillemonte
+    VanLevVillemonte,
+    // loi de débit Seuil Cunge 1980
+    WeirCunge80,
 }
 
 export const loiAdmissiblesOuvrages: { [key: string]: LoiDebit[] } = {
@@ -51,7 +53,7 @@ export const loiAdmissiblesOuvrages: { [key: string]: LoiDebit[] } = {
     ],
     SeuilRectangulaire: [
         LoiDebit.WeirCem88d, LoiDebit.WeirCem88v, LoiDebit.WeirSubmergedLarinier,
-        LoiDebit.WeirVillemonte, LoiDebit.WeirFree, LoiDebit.KIVI, LoiDebit.Cunge80
+        LoiDebit.WeirVillemonte, LoiDebit.WeirFree, LoiDebit.KIVI, LoiDebit.WeirCunge80
     ],
     SeuilTriangulaire: [
         LoiDebit.TriangularWeirFree
@@ -60,7 +62,7 @@ export const loiAdmissiblesOuvrages: { [key: string]: LoiDebit[] } = {
         LoiDebit.TriangularTruncWeirFree
     ],
     VanneRectangulaire: [
-        LoiDebit.GateCem88d, LoiDebit.GateCem88v, LoiDebit.Cunge80, LoiDebit.RectangularOrificeFree,
+        LoiDebit.GateCem88d, LoiDebit.GateCem88v, LoiDebit.GateCunge80, LoiDebit.RectangularOrificeFree,
         LoiDebit.RectangularOrificeSubmerged
     ]
 };