From f200f49b050acd02f302a04c0f4953dd904ce014 Mon Sep 17 00:00:00 2001
From: David Dorchies <david.dorchies@irstea.fr>
Date: Wed, 20 Jun 2018 21:59:06 +0200
Subject: [PATCH] =?UTF-8?q?#28=20Ajout=20de=20la=20loi=20de=20la=20fente?=
 =?UTF-8?q?=20noy=C3=A9e=20(Larinier=201992)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/structure/factory_structure.ts            |  5 ++-
 src/structure/structure_props.ts              |  6 ++--
 .../structure_weir_submerged_larinier.ts      | 35 +++++++++++++++++++
 3 files changed, 43 insertions(+), 3 deletions(-)
 create mode 100644 src/structure/structure_weir_submerged_larinier.ts

diff --git a/src/structure/factory_structure.ts b/src/structure/factory_structure.ts
index 91200313..5d356b6a 100644
--- a/src/structure/factory_structure.ts
+++ b/src/structure/factory_structure.ts
@@ -12,7 +12,7 @@ import { LoiDebit, StructureProperties, StructureType } from "./structure_props"
 import { StructureTriangularTruncWeirFree, TriangularTruncStructureParams } from "./structure_triangular_trunc_weir_free";
 import { StructureTriangularWeirFree, TriangularStructureParams } from "./structure_triangular_weir_free";
 import { StructureWeirFree } from "./structure_weir_free";
-
+import { StructureWeirSubmergedLarinier } from "./structure_weir_submerged_larinier";
 
 export function CreateStructure(structureType: StructureType, loiDebit: LoiDebit, dbg: boolean = false): Structure {
     const oCd: {[s: string]: number} = {SeuilR: 0.4, VanneR: 0.6, SeuilT: 1.36};
@@ -71,6 +71,9 @@ export function CreateStructure(structureType: StructureType, loiDebit: LoiDebit
         case LoiDebit.WeirFree:
             return new StructureWeirFree(rectStructPrms, dbg);
 
+        case LoiDebit.WeirSubmergedLarinier:
+            return new StructureWeirSubmergedLarinier(rectStructPrms, dbg);
+
         case LoiDebit.KIVI:
             const structKiviPrm: StructureKiviParams = new StructureKiviParams(
                 8.516,      // Q
diff --git a/src/structure/structure_props.ts b/src/structure/structure_props.ts
index d7835ef4..ed63b6b5 100644
--- a/src/structure/structure_props.ts
+++ b/src/structure/structure_props.ts
@@ -22,13 +22,15 @@ export enum LoiDebit {
     // Loi de débit seuil triangulaire dénoyé
     TriangularWeirFree,
     // Loi de débit seuil triangulaire tronqué
-    TriangularTruncWeirFree
+    TriangularTruncWeirFree,
+    // Loi de débit seuil noyé (Larinier 1992)
+    WeirSubmergedLarinier
 }
 
 export const loiAdmissibles: { [key: string]: LoiDebit[] } = {
     SeuilRectangulaire: [
         LoiDebit.Cem88d, LoiDebit.Cem88v, LoiDebit.Cunge80, LoiDebit.WeirFree,
-        LoiDebit.KIVI
+        LoiDebit.KIVI, LoiDebit.WeirSubmergedLarinier
     ],
     SeuilTriangulaire: [
         LoiDebit.TriangularWeirFree
diff --git a/src/structure/structure_weir_submerged_larinier.ts b/src/structure/structure_weir_submerged_larinier.ts
new file mode 100644
index 00000000..f3468ac4
--- /dev/null
+++ b/src/structure/structure_weir_submerged_larinier.ts
@@ -0,0 +1,35 @@
+import { Result } from "../util/result";
+import { RectangularStructure } from "./rectangular_structure";
+import { RectangularStructureParams } from "./rectangular_structure_params";
+import { Structure, StructureFlowMode, StructureFlowRegime } from "./structure";
+
+export { RectangularStructureParams };
+
+/**
+ * Equation de la fente noyé
+ * d'après Larinier, M., Travade, F., Porcher, J.-P., Gosset, C., 1992.
+ * Passes à poissons : expertise et conception des ouvrages de franchissement
+ */
+export class StructureWeirSubmergedLarinier extends RectangularStructure {
+    /**
+     * Calcul analytique Q = f(Cd, L, h1, h2, W) seuil dénoyé
+     * @param sVarCalc Variable à calculer (doit être "Q")
+     */
+    public Equation(sVarCalc: string): Result {
+        Structure.CheckEquation(sVarCalc);
+        const data = this.getResultData();
+
+        const v = this.prms.Cd.v * this.prms.L.v * Structure.R2G
+            * this.prms.h1.v * Math.sqrt(this.prms.h1.v - this.prms.h2.v);
+
+        return new Result(v, data);
+    }
+
+    protected getFlowRegime() {
+        return StructureFlowRegime.SUBMERGED;
+    }
+
+    protected getFlowMode() {
+        return StructureFlowMode.WEIR;
+    }
+}
-- 
GitLab