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 ] };